<?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>Envestnet Conv Sr Unsecd Note</nameOfIssuer>
    <titleOfClass>CONV</titleOfClass>
    <cusip>29404KAA4</cusip>
    <value>3802</value>
    <shrsOrPrnAmt>
      <sshPrnamt>3760000</sshPrnamt>
      <sshPrnamtType>PRN</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>3760000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>ACI Worldwide</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>004498101</cusip>
    <value>11013</value>
    <shrsOrPrnAmt>
      <sshPrnamt>398000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>398000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>AeroVironment</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>008073108</cusip>
    <value>99422</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1463171</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1463171</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Alarm.Com Holdings</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>011642105</cusip>
    <value>8640</value>
    <shrsOrPrnAmt>
      <sshPrnamt>166565</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>166565</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>ANSYS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>03662Q105</cusip>
    <value>41238</value>
    <shrsOrPrnAmt>
      <sshPrnamt>288497</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>288497</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Aspen Technology</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>045327103</cusip>
    <value>2357</value>
    <shrsOrPrnAmt>
      <sshPrnamt>28679</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>28679</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Balchem</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>057665200</cusip>
    <value>8004</value>
    <shrsOrPrnAmt>
      <sshPrnamt>102155</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>102155</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Bio Techne</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>09073M104</cusip>
    <value>14626</value>
    <shrsOrPrnAmt>
      <sshPrnamt>101065</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>101065</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Blackbaud</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>09227Q100</cusip>
    <value>23068</value>
    <shrsOrPrnAmt>
      <sshPrnamt>366733</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>366733</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Boeing</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>097023105</cusip>
    <value>452</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1401</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1401</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Bottomline Technologies</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>101388106</cusip>
    <value>688</value>
    <shrsOrPrnAmt>
      <sshPrnamt>14325</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>14325</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Cambrex</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>132011107</cusip>
    <value>25254</value>
    <shrsOrPrnAmt>
      <sshPrnamt>668797</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>668797</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Charles River Labs</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>159864107</cusip>
    <value>19914</value>
    <shrsOrPrnAmt>
      <sshPrnamt>175950</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>175950</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Cognex</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>192422103</cusip>
    <value>62668</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1620596</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1620596</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>CommVault Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>204166102</cusip>
    <value>10045</value>
    <shrsOrPrnAmt>
      <sshPrnamt>170000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>170000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Costar Group</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>22160N109</cusip>
    <value>27877</value>
    <shrsOrPrnAmt>
      <sshPrnamt>82638</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>82638</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>CyberArk Software</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>M2682V108</cusip>
    <value>75148</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1013590</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1013590</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Dolby Laboratories</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>25659T107</cusip>
    <value>6917</value>
    <shrsOrPrnAmt>
      <sshPrnamt>111861</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>111861</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Dorman Products</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>258278100</cusip>
    <value>24447</value>
    <shrsOrPrnAmt>
      <sshPrnamt>271575</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>271575</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>F5 Networks</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>315616102</cusip>
    <value>3526</value>
    <shrsOrPrnAmt>
      <sshPrnamt>21760</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>21760</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>FactSet Research System</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>303075105</cusip>
    <value>54723</value>
    <shrsOrPrnAmt>
      <sshPrnamt>273439</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>273439</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Fastenal</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>311900104</cusip>
    <value>2921</value>
    <shrsOrPrnAmt>
      <sshPrnamt>55868</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>55868</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Forrester Research</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>346563109</cusip>
    <value>6607</value>
    <shrsOrPrnAmt>
      <sshPrnamt>147805</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>147805</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Fortinet</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>34959E109</cusip>
    <value>72476</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1029046</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1029046</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Forward Air</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>349853101</cusip>
    <value>3571</value>
    <shrsOrPrnAmt>
      <sshPrnamt>65105</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>65105</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Franklin Electric</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>353514102</cusip>
    <value>1230</value>
    <shrsOrPrnAmt>
      <sshPrnamt>28675</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>28675</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Gentex</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>371901109</cusip>
    <value>48155</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2382745</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2382745</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Globant S.A.</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>L44385109</cusip>
    <value>314</value>
    <shrsOrPrnAmt>
      <sshPrnamt>5571</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>5571</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Graham</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>384556106</cusip>
    <value>6708</value>
    <shrsOrPrnAmt>
      <sshPrnamt>293698</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>293698</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Haemonetics</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>405024100</cusip>
    <value>22811</value>
    <shrsOrPrnAmt>
      <sshPrnamt>228000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>228000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Healthcare Services Grp</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>421906108</cusip>
    <value>26083</value>
    <shrsOrPrnAmt>
      <sshPrnamt>649160</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>649160</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>HMS Holdings</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>40425J101</cusip>
    <value>62071</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2206565</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2206565</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Hologic</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>436440101</cusip>
    <value>11646</value>
    <shrsOrPrnAmt>
      <sshPrnamt>283360</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>283360</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Home Depot</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>437076102</cusip>
    <value>1740</value>
    <shrsOrPrnAmt>
      <sshPrnamt>10127</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>10127</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>ICON PLC</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G4705A100</cusip>
    <value>106638</value>
    <shrsOrPrnAmt>
      <sshPrnamt>825305</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>825305</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>IDEXX Laboratories</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>45168D104</cusip>
    <value>90303</value>
    <shrsOrPrnAmt>
      <sshPrnamt>485450</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>485450</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Illumina</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>452327109</cusip>
    <value>76609</value>
    <shrsOrPrnAmt>
      <sshPrnamt>255423</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>255423</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Inogen</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>45780L104</cusip>
    <value>1413</value>
    <shrsOrPrnAmt>
      <sshPrnamt>11380</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>11380</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>IPG Photonic</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>44980X109</cusip>
    <value>14862</value>
    <shrsOrPrnAmt>
      <sshPrnamt>131187</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>131187</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>iShares Russell 3000 ETF</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>464287689</cusip>
    <value>1318</value>
    <shrsOrPrnAmt>
      <sshPrnamt>8970</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>8970</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Jack Henry &amp; Associates</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>426281101</cusip>
    <value>49282</value>
    <shrsOrPrnAmt>
      <sshPrnamt>389517</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>389517</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Kornit Digital Ltd.</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>M6372Q113</cusip>
    <value>53305</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2847478</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2847478</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Lindsay Manufacturing</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>535555106</cusip>
    <value>2907</value>
    <shrsOrPrnAmt>
      <sshPrnamt>30205</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>30205</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>LiveRamp Holdings</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>53815P108</cusip>
    <value>41899</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1084615</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1084615</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>LOGMEIN</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>54142L109</cusip>
    <value>34012</value>
    <shrsOrPrnAmt>
      <sshPrnamt>416968</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>416968</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Manhattan Associates</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>562750109</cusip>
    <value>57368</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1353970</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1353970</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Medidata Solutions</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>58471A105</cusip>
    <value>46027</value>
    <shrsOrPrnAmt>
      <sshPrnamt>682695</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>682695</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Merit Medical Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>589889104</cusip>
    <value>15076</value>
    <shrsOrPrnAmt>
      <sshPrnamt>270125</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>270125</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Monolithic Power Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>609839105</cusip>
    <value>2058</value>
    <shrsOrPrnAmt>
      <sshPrnamt>17705</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>17705</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Morningstar</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>617700109</cusip>
    <value>23252</value>
    <shrsOrPrnAmt>
      <sshPrnamt>211690</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>211690</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>National Instruments</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>636518102</cusip>
    <value>12503</value>
    <shrsOrPrnAmt>
      <sshPrnamt>275515</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>275515</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>NeoGenomics</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>64049M209</cusip>
    <value>495</value>
    <shrsOrPrnAmt>
      <sshPrnamt>39250</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>39250</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>NIC</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>62914B100</cusip>
    <value>203</value>
    <shrsOrPrnAmt>
      <sshPrnamt>16305</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>16305</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>NICE</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>653656108</cusip>
    <value>62752</value>
    <shrsOrPrnAmt>
      <sshPrnamt>579905</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>579905</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>NuVasive</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>670704105</cusip>
    <value>3626</value>
    <shrsOrPrnAmt>
      <sshPrnamt>73154</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>73154</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>O'Reilly Automotive</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>67103H107</cusip>
    <value>413</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1200</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1200</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>OraSure Technologies</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>68554V108</cusip>
    <value>20090</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1720032</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1720032</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Paychex</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>704326107</cusip>
    <value>1808</value>
    <shrsOrPrnAmt>
      <sshPrnamt>27744</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>27744</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Proto Labs</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>743713109</cusip>
    <value>14990</value>
    <shrsOrPrnAmt>
      <sshPrnamt>132900</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>132900</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Quaker Chemical</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>747316107</cusip>
    <value>1244</value>
    <shrsOrPrnAmt>
      <sshPrnamt>7000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>7000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Qualys</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>74758T303</cusip>
    <value>34563</value>
    <shrsOrPrnAmt>
      <sshPrnamt>462437</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>462437</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>RBC Bearings Inc.</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>75524B104</cusip>
    <value>2206</value>
    <shrsOrPrnAmt>
      <sshPrnamt>16827</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>16827</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Real Page</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>75606N109</cusip>
    <value>39755</value>
    <shrsOrPrnAmt>
      <sshPrnamt>824961</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>824961</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Repligen</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>759916109</cusip>
    <value>3727</value>
    <shrsOrPrnAmt>
      <sshPrnamt>70675</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>70675</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>ResMed</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>761152107</cusip>
    <value>72267</value>
    <shrsOrPrnAmt>
      <sshPrnamt>634646</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>634646</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>SEI Investments</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>784117103</cusip>
    <value>33939</value>
    <shrsOrPrnAmt>
      <sshPrnamt>734618</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>734618</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Strategic Education</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>86272c103</cusip>
    <value>5900</value>
    <shrsOrPrnAmt>
      <sshPrnamt>52016</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>52016</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Tivity Health</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>88870R102</cusip>
    <value>27345</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1102179</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1102179</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Trimble</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>896239100</cusip>
    <value>27063</value>
    <shrsOrPrnAmt>
      <sshPrnamt>822338</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>822338</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Ultimate Software Group</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>90385D107</cusip>
    <value>595</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2430</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2430</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Veeva Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>922475108</cusip>
    <value>33437</value>
    <shrsOrPrnAmt>
      <sshPrnamt>374347</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>374347</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Verint Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>92343x100</cusip>
    <value>64004</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1512739</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1512739</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Wright Medical Group N.V.</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>N96617118</cusip>
    <value>3699</value>
    <shrsOrPrnAmt>
      <sshPrnamt>135904</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>135904</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Zebra Technologies</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>989207105</cusip>
    <value>454</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2850</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2850</None>
    </votingAuthority>
  </infoTable>
</informationTable>
