<?xml version="1.0" ?>
<informationTable xsi:schemaLocation="http://www.sec.gov/edgar/document/thirteenf/informationtable eis_13FDocument.xsd" xmlns="http://www.sec.gov/edgar/document/thirteenf/informationtable" xmlns:n1="http://www.sec.gov/edgar/document/thirteenf/informationtable" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <infoTable>
    <nameOfIssuer>ACI Worldwide</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>004498101</cusip>
    <value>1005843</value>
    <shrsOrPrnAmt>
      <sshPrnamt>18385</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>385</Sole>
      <Shared>0</Shared>
      <None>18000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>AeroVironment</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>008073108</cusip>
    <value>112986041</value>
    <shrsOrPrnAmt>
      <sshPrnamt>947949</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>451295</Sole>
      <Shared>0</Shared>
      <None>496654</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Alarm.Com Holdings</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>011642105</cusip>
    <value>6640826</value>
    <shrsOrPrnAmt>
      <sshPrnamt>119332</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>5734</Sole>
      <Shared>0</Shared>
      <None>113598</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>ANSYS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>03662Q105</cusip>
    <value>33379986</value>
    <shrsOrPrnAmt>
      <sshPrnamt>105446</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>16992</Sole>
      <Shared>0</Shared>
      <None>88454</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Apple</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>037833100</cusip>
    <value>292323</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1316</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1316</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Azenta</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>114340102</cusip>
    <value>26033553</value>
    <shrsOrPrnAmt>
      <sshPrnamt>751546</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>404065</Sole>
      <Shared>0</Shared>
      <None>347481</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Bio Techne</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>09073M104</cusip>
    <value>65996742</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1125648</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>542129</Sole>
      <Shared>0</Shared>
      <None>583519</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Blackbaud</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>09227Q100</cusip>
    <value>16766841</value>
    <shrsOrPrnAmt>
      <sshPrnamt>270215</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>136064</Sole>
      <Shared>0</Shared>
      <None>134151</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Cerence</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>156727109</cusip>
    <value>23559080</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2982162</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>1594634</Sole>
      <Shared>0</Shared>
      <None>1387528</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Charles River Labs</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>159864107</cusip>
    <value>4184456</value>
    <shrsOrPrnAmt>
      <sshPrnamt>27800</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>6600</Sole>
      <Shared>0</Shared>
      <None>21200</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Cognex</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>192422103</cusip>
    <value>35432492</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1187814</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>610030</Sole>
      <Shared>0</Shared>
      <None>577784</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Cognyte Software</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>M25133105</cusip>
    <value>51991602</value>
    <shrsOrPrnAmt>
      <sshPrnamt>6665590</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>3070681</Sole>
      <Shared>0</Shared>
      <None>3594909</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Commvault Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>204166102</cusip>
    <value>106518132</value>
    <shrsOrPrnAmt>
      <sshPrnamt>675191</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>354438</Sole>
      <Shared>0</Shared>
      <None>320753</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>CoStar Group</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>22160N109</cusip>
    <value>74328991</value>
    <shrsOrPrnAmt>
      <sshPrnamt>938142</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>431066</Sole>
      <Shared>0</Shared>
      <None>507076</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>CyberArk Software</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>M2682V108</cusip>
    <value>168584598</value>
    <shrsOrPrnAmt>
      <sshPrnamt>498771</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>209022</Sole>
      <Shared>0</Shared>
      <None>289749</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Descartes Systems Group</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>249906108</cusip>
    <value>1172955</value>
    <shrsOrPrnAmt>
      <sshPrnamt>11633</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>2473</Sole>
      <Shared>0</Shared>
      <None>9160</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>DexCom</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>252131107</cusip>
    <value>27370154</value>
    <shrsOrPrnAmt>
      <sshPrnamt>400793</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>162818</Sole>
      <Shared>0</Shared>
      <None>237975</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Dorman Products</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>258278100</cusip>
    <value>2452145</value>
    <shrsOrPrnAmt>
      <sshPrnamt>20343</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>2343</Sole>
      <Shared>0</Shared>
      <None>18000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>FactSet Research</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>303075105</cusip>
    <value>80758612</value>
    <shrsOrPrnAmt>
      <sshPrnamt>177632</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>67064</Sole>
      <Shared>0</Shared>
      <None>110568</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Fortinet</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>34959E109</cusip>
    <value>123859667</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1286720</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>420359</Sole>
      <Shared>0</Shared>
      <None>866361</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Franklin Electric</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>353514102</cusip>
    <value>2347000</value>
    <shrsOrPrnAmt>
      <sshPrnamt>25000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>25000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Gentex</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>371901109</cusip>
    <value>48593967</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2085578</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>1289609</Sole>
      <Shared>0</Shared>
      <None>795969</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Globus Med Cl A</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>379577208</cusip>
    <value>21582361</value>
    <shrsOrPrnAmt>
      <sshPrnamt>294841</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>147200</Sole>
      <Shared>0</Shared>
      <None>147641</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Graham</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>384556106</cusip>
    <value>688625</value>
    <shrsOrPrnAmt>
      <sshPrnamt>23894</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>644</Sole>
      <Shared>0</Shared>
      <None>23250</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Guidewire Software</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>40171V100</cusip>
    <value>75104942</value>
    <shrsOrPrnAmt>
      <sshPrnamt>400859</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>157277</Sole>
      <Shared>0</Shared>
      <None>243582</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Haemonetics</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>405024100</cusip>
    <value>6413148</value>
    <shrsOrPrnAmt>
      <sshPrnamt>100915</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>46920</Sole>
      <Shared>0</Shared>
      <None>53995</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Hologic</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>436440101</cusip>
    <value>1468891</value>
    <shrsOrPrnAmt>
      <sshPrnamt>23780</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>23400</Sole>
      <Shared>0</Shared>
      <None>380</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>ICON PLC</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G4705A100</cusip>
    <value>12893263</value>
    <shrsOrPrnAmt>
      <sshPrnamt>73680</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>3052</Sole>
      <Shared>0</Shared>
      <None>70628</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>IDEXX Labs</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>45168D104</cusip>
    <value>93063440</value>
    <shrsOrPrnAmt>
      <sshPrnamt>221606</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>100760</Sole>
      <Shared>0</Shared>
      <None>120846</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Insulet</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>45784p101</cusip>
    <value>4438109</value>
    <shrsOrPrnAmt>
      <sshPrnamt>16900</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>205</Sole>
      <Shared>0</Shared>
      <None>16695</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Jack Henry &amp; Associates</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>426281101</cusip>
    <value>69187505</value>
    <shrsOrPrnAmt>
      <sshPrnamt>378902</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>180463</Sole>
      <Shared>0</Shared>
      <None>198439</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>JFrog</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>M6191J100</cusip>
    <value>360480</value>
    <shrsOrPrnAmt>
      <sshPrnamt>11265</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>11265</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Kornit Digital</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>M6372Q113</cusip>
    <value>34608888</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1813883</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>956952</Sole>
      <Shared>0</Shared>
      <None>856931</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Kratos Defense</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>50077B207</cusip>
    <value>77130938</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2597876</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>1356705</Sole>
      <Shared>0</Shared>
      <None>1241171</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>LiveRamp Holdings</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>53815P108</cusip>
    <value>62035840</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2373215</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>1195479</Sole>
      <Shared>0</Shared>
      <None>1177736</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Manhattan Assocs</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>562750109</cusip>
    <value>74444058</value>
    <shrsOrPrnAmt>
      <sshPrnamt>430213</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>194647</Sole>
      <Shared>0</Shared>
      <None>235566</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Medpace Holdings</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>58506Q109</cusip>
    <value>98966664</value>
    <shrsOrPrnAmt>
      <sshPrnamt>324811</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>141023</Sole>
      <Shared>0</Shared>
      <None>183788</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Merit Medical Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>589889104</cusip>
    <value>8990530</value>
    <shrsOrPrnAmt>
      <sshPrnamt>85049</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>843</Sole>
      <Shared>0</Shared>
      <None>84206</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Monolithic Power Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>609839105</cusip>
    <value>4116698</value>
    <shrsOrPrnAmt>
      <sshPrnamt>7098</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>1140</Sole>
      <Shared>0</Shared>
      <None>5958</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Morningstar</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>617700109</cusip>
    <value>38405850</value>
    <shrsOrPrnAmt>
      <sshPrnamt>128075</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>82021</Sole>
      <Shared>0</Shared>
      <None>46054</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>nCino</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>63947X101</cusip>
    <value>37035219</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1348206</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>508152</Sole>
      <Shared>0</Shared>
      <None>840054</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Neogen</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>640491106</cusip>
    <value>39973087</value>
    <shrsOrPrnAmt>
      <sshPrnamt>4610506</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>2134838</Sole>
      <Shared>0</Shared>
      <None>2475668</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>NeoGenomics</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>64049M209</cusip>
    <value>769278</value>
    <shrsOrPrnAmt>
      <sshPrnamt>81062</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>32391</Sole>
      <Shared>0</Shared>
      <None>48671</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>NICE</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>653656108</cusip>
    <value>66771027</value>
    <shrsOrPrnAmt>
      <sshPrnamt>433100</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>195033</Sole>
      <Shared>0</Shared>
      <None>238067</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>O'Reilly Automotive</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>67103H107</cusip>
    <value>8235902</value>
    <shrsOrPrnAmt>
      <sshPrnamt>5749</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>5749</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Paycom Software</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>70432V102</cusip>
    <value>33594140</value>
    <shrsOrPrnAmt>
      <sshPrnamt>153763</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>99385</Sole>
      <Shared>0</Shared>
      <None>54378</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Proto Labs</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>743713109</cusip>
    <value>1755924</value>
    <shrsOrPrnAmt>
      <sshPrnamt>50112</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>565</Sole>
      <Shared>0</Shared>
      <None>49547</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Qualys</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>74758T303</cusip>
    <value>67459568</value>
    <shrsOrPrnAmt>
      <sshPrnamt>535691</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>241500</Sole>
      <Shared>0</Shared>
      <None>294191</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>RBC Bearings</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>75524B104</cusip>
    <value>74167341</value>
    <shrsOrPrnAmt>
      <sshPrnamt>230498</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>78681</Sole>
      <Shared>0</Shared>
      <None>151817</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Repligen</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>759916109</cusip>
    <value>48476150</value>
    <shrsOrPrnAmt>
      <sshPrnamt>380982</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>178679</Sole>
      <Shared>0</Shared>
      <None>202303</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>ResMed</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>761152107</cusip>
    <value>88316436</value>
    <shrsOrPrnAmt>
      <sshPrnamt>394534</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>170143</Sole>
      <Shared>0</Shared>
      <None>224391</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>SEI Investments</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>784117103</cusip>
    <value>40437933</value>
    <shrsOrPrnAmt>
      <sshPrnamt>520906</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>224049</Sole>
      <Shared>0</Shared>
      <None>296857</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Spdr S&amp;P 500 Series 1</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>78462F103</cusip>
    <value>1418054</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2535</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>440</Sole>
      <Shared>0</Shared>
      <None>2095</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>SPS Commerce</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>78463M107</cusip>
    <value>34965993</value>
    <shrsOrPrnAmt>
      <sshPrnamt>263437</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>93614</Sole>
      <Shared>0</Shared>
      <None>169823</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>STAAR Surgical</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>852312305</cusip>
    <value>17809191</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1010164</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>576125</Sole>
      <Shared>0</Shared>
      <None>434039</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Tradeweb Markets</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>892672106</cusip>
    <value>46634849</value>
    <shrsOrPrnAmt>
      <sshPrnamt>314124</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>90316</Sole>
      <Shared>0</Shared>
      <None>223808</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Trex</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>89531P105</cusip>
    <value>17278649</value>
    <shrsOrPrnAmt>
      <sshPrnamt>297395</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>190065</Sole>
      <Shared>0</Shared>
      <None>107330</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Trimble</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>896239100</cusip>
    <value>1444300</value>
    <shrsOrPrnAmt>
      <sshPrnamt>22000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>22000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Tyler Technologies</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>902252105</cusip>
    <value>15389975</value>
    <shrsOrPrnAmt>
      <sshPrnamt>26471</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>1860</Sole>
      <Shared>0</Shared>
      <None>24611</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Varonis Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>922280102</cusip>
    <value>50683890</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1253001</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>653360</Sole>
      <Shared>0</Shared>
      <None>599641</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Veeva Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>922475108</cusip>
    <value>65594142</value>
    <shrsOrPrnAmt>
      <sshPrnamt>283185</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>116718</Sole>
      <Shared>0</Shared>
      <None>166467</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Verint Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>92343X100</cusip>
    <value>233835</value>
    <shrsOrPrnAmt>
      <sshPrnamt>13100</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>12550</Sole>
      <Shared>0</Shared>
      <None>550</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Zebra Technologies</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>989207105</cusip>
    <value>932448</value>
    <shrsOrPrnAmt>
      <sshPrnamt>3300</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>3300</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
</informationTable>
