Document And Entity Information
Document And Entity Information - shares | 6 Months Ended | |
Jun. 30, 2020 | Jul. 28, 2020 | |
Document Information [Line Items] | ||
Entity Central Index Key | 0001443669 | |
Entity Registrant Name | Proto Labs Inc | |
Amendment Flag | false | |
Current Fiscal Year End Date | --12-31 | |
Document Fiscal Period Focus | Q2 | |
Document Fiscal Year Focus | 2020 | |
Document Type | 10-Q | |
Document Quarterly Report | true | |
Document Period End Date | Jun. 30, 2020 | |
Document Transition Report | false | |
Entity File Number | 001-35435 | |
Entity Incorporation, State or Country Code | MN | |
Entity Tax Identification Number | 41-1939628 | |
Entity Address, Address Line One | 5540 Pioneer Creek Drive | |
Entity Address, City or Town | Maple Plain | |
Entity Address, State or Province | MN | |
Entity Address, Postal Zip Code | 55359 | |
City Area Code | 763 | |
Local Phone Number | 479-3680 | |
Title of 12(b) Security | Common Stock, Par Value $0.001 Per Share | |
Trading Symbol | PRLB | |
Security Exchange Name | NYSE | |
Entity Current Reporting Status | Yes | |
Entity Interactive Data Current | Yes | |
Entity Filer Category | Large Accelerated Filer | |
Entity Small Business | false | |
Entity Emerging Growth Company | false | |
Entity Shell Company | false | |
Entity Common Stock, Shares Outstanding | 26,706,556 |
Consolidated Balance Sheets (Cu
Consolidated Balance Sheets (Current Period Unaudited) - USD ($) $ in Thousands | Jun. 30, 2020 | Dec. 31, 2019 |
Current assets | ||
Cash and cash equivalents | $ 98,003 | $ 125,225 |
Short-term marketable securities | 33,128 | 35,437 |
Accounts receivable, net of allowance for doubtful accounts of $1,836 and $952 as of June 30, 2020 and December 31, 2019, respectively | 61,297 | 57,450 |
Inventory | 10,774 | 10,075 |
Income taxes receivable | 95 | 0 |
Prepaid expenses and other current assets | 9,670 | 8,232 |
Total current assets | 212,967 | 236,419 |
Property and equipment, net | 281,129 | 263,712 |
Goodwill | 128,752 | 128,752 |
Other intangible assets, net | 15,861 | 17,369 |
Long-term marketable securities | 44,127 | 12,960 |
Operating lease assets | 11,049 | 11,425 |
Other long-term assets | 4,560 | 3,030 |
Total assets | 698,445 | 673,667 |
Current liabilities | ||
Accounts payable | 17,556 | 16,804 |
Accrued compensation | 15,138 | 15,058 |
Accrued liabilities and other | 15,041 | 11,057 |
Current operating lease liabilities | 3,368 | 3,340 |
Income taxes payable | 0 | 1,322 |
Total current liabilities | 51,103 | 47,581 |
Long-term operating lease liabilities | 8,379 | 8,565 |
Long-term deferred tax liabilities | 31,907 | 26,283 |
Other long-term liabilities | 5,807 | 5,448 |
Total liabilities | 97,196 | 87,877 |
Shareholders' equity | ||
Preferred stock, $0.001 par value, authorized 10,000,000 shares; issued and outstanding 0 shares as of each of June 30, 2020 and December 31, 2019 | 0 | 0 |
Common stock, $0.001 par value, authorized 150,000,000 shares; issued and outstanding 26,706,556 and 26,786,459 shares as of June 30, 2020 and December 31, 2019, respectively | 27 | 27 |
Additional paid-in capital | 272,231 | 268,059 |
Retained earnings | 338,625 | 324,722 |
Accumulated other comprehensive loss | (9,634) | (7,018) |
Total shareholders' equity | 601,249 | 585,790 |
Total liabilities and shareholders' equity | $ 698,445 | $ 673,667 |
Consolidated Balance Sheets (_2
Consolidated Balance Sheets (Current Period Unaudited) (Parentheticals) - USD ($) $ in Thousands | Jun. 30, 2020 | Dec. 31, 2019 |
Allowance for doubtful accounts | $ 1,836 | $ 952 |
Preferred stock, par value (in dollars per share) | $ 0.001 | $ 0.001 |
Preferred stock, shares authorized (in shares) | 10,000,000 | 10,000,000 |
Preferred stock, shares issued (in shares) | 0 | 0 |
Common stock, par value (in dollars per share) | $ 0.001 | $ 0.001 |
Common stock, shares authorized (in shares) | 150,000,000 | 150,000,000 |
Common stock, shares issued (in shares) | 26,706,556 | 26,786,459 |
Common stock, shares outstanding (in shares) | 26,706,556 | 26,786,459 |
Consolidated Statements of Comp
Consolidated Statements of Comprehensive Income (Unaudited) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2020 | Jun. 30, 2019 | Jun. 30, 2020 | Jun. 30, 2019 | |
Statements of Operations: | ||||
Revenue | $ 106,575 | $ 115,932 | $ 221,683 | $ 229,384 |
Cost of revenue | 54,119 | 55,696 | 111,127 | 110,288 |
Gross profit | 52,456 | 60,236 | 110,556 | 119,096 |
Operating expenses | ||||
Marketing and sales | 16,936 | 19,285 | 35,116 | 37,862 |
Research and development | 8,648 | 8,169 | 17,635 | 16,182 |
General and administrative | 12,521 | 13,209 | 26,629 | 26,031 |
Total operating expenses | 38,105 | 40,663 | 79,380 | 80,075 |
Income from operations | 14,351 | 19,573 | 31,176 | 39,021 |
Other income, net | 767 | 1,125 | 1,821 | 1,338 |
Income before income taxes | 15,118 | 20,698 | 32,997 | 40,359 |
Provision for income taxes | 2,511 | 4,532 | 6,406 | 8,682 |
Net income | $ 12,607 | $ 16,166 | $ 26,591 | $ 31,677 |
Net income per share: | ||||
Basic (in dollars per share) | $ 0.47 | $ 0.60 | $ 1 | $ 1.18 |
Diluted (in dollars per share) | $ 0.47 | $ 0.60 | $ 0.99 | $ 1.17 |
Shares used to compute net income per share: | ||||
Basic (in shares) | 26,660,498 | 26,875,153 | 26,718,652 | 26,919,016 |
Diluted (in shares) | 26,760,866 | 27,041,422 | 26,837,938 | 27,113,328 |
Comprehensive Income (net of tax) | ||||
Comprehensive income | $ 12,971 | $ 15,688 | $ 23,975 | $ 31,675 |
Consolidated Statements of Shar
Consolidated Statements of Shareholders' Equity (Unaudited) - USD ($) $ in Thousands | Common Stock [Member] | Additional Paid-in Capital [Member] | Retained Earnings [Member] | AOCI Attributable to Parent [Member] | Total |
Balance (in shares) at Dec. 31, 2018 | 26,984,747 | ||||
Balance at Dec. 31, 2018 | $ 27 | $ 258,502 | $ 291,460 | $ (8,492) | $ 541,497 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 19,950 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | (420) | 0 | 0 | (420) |
Stock-based compensation expense | $ 0 | 3,040 | 0 | 0 | 3,040 |
Repurchases of common stock (in shares) | (157,716) | ||||
Repurchases of common stock | $ 0 | (1,511) | (15,798) | 0 | (17,309) |
Net income | 0 | 0 | 15,511 | 0 | 15,511 |
Other comprehensive income | |||||
Foreign currency translation adjustment | $ 0 | 0 | 0 | 476 | 476 |
Comprehensive income | 15,987 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 19,950 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | (420) | 0 | 0 | (420) |
Stock-based compensation expense | $ 0 | 3,040 | 0 | 0 | 3,040 |
Repurchases of common stock (in shares) | (157,716) | ||||
Repurchases of common stock | $ 0 | (1,511) | (15,798) | 0 | (17,309) |
Net income | $ 0 | 0 | 15,511 | 0 | 15,511 |
Balance (in shares) at Dec. 31, 2018 | 26,984,747 | ||||
Balance at Dec. 31, 2018 | $ 27 | 258,502 | 291,460 | (8,492) | 541,497 |
Net income | 31,677 | ||||
Other comprehensive income | |||||
Comprehensive income | 31,675 | ||||
Net income | 31,677 | ||||
Balance (in shares) at Mar. 31, 2019 | 26,846,981 | ||||
Balance at Mar. 31, 2019 | $ 27 | 259,611 | 291,173 | (8,016) | 542,795 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 75,785 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 245 | 0 | 0 | 245 |
Stock-based compensation expense | $ 0 | 3,486 | 0 | 0 | 3,486 |
Repurchases of common stock (in shares) | (40,669) | ||||
Repurchases of common stock | $ 0 | (390) | (3,711) | 0 | (4,101) |
Net income | 0 | 0 | 16,166 | 0 | 16,166 |
Other comprehensive income | |||||
Foreign currency translation adjustment | 0 | 0 | (478) | (478) | |
Comprehensive income | 15,688 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 75,785 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 245 | 0 | 0 | 245 |
Stock-based compensation expense | $ 0 | 3,486 | 0 | 0 | 3,486 |
Repurchases of common stock (in shares) | (40,669) | ||||
Repurchases of common stock | $ 0 | (390) | (3,711) | 0 | (4,101) |
Net income | $ 0 | 0 | 16,166 | 0 | $ 16,166 |
Balance (in shares) at Dec. 31, 2019 | 26,786,459 | 26,786,459 | |||
Balance at Dec. 31, 2019 | $ 27 | 268,059 | 324,722 | (7,018) | $ 585,790 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 23,525 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | (902) | 0 | 0 | (902) |
Stock-based compensation expense | $ 0 | 3,033 | 0 | 0 | 3,033 |
Repurchases of common stock (in shares) | (161,460) | ||||
Repurchases of common stock | $ 0 | (1,616) | (9,569) | 0 | (11,185) |
Net income | 0 | 0 | 13,984 | 0 | 13,984 |
Other comprehensive income | |||||
Foreign currency translation adjustment | $ 0 | 0 | 0 | (2,980) | (2,980) |
Comprehensive income | 11,004 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 23,525 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | (902) | 0 | 0 | (902) |
Stock-based compensation expense | $ 0 | 3,033 | 0 | 0 | 3,033 |
Repurchases of common stock (in shares) | (161,460) | ||||
Repurchases of common stock | $ 0 | (1,616) | (9,569) | 0 | (11,185) |
Net income | $ 0 | 0 | 13,984 | 0 | $ 13,984 |
Balance (in shares) at Dec. 31, 2019 | 26,786,459 | 26,786,459 | |||
Balance at Dec. 31, 2019 | $ 27 | 268,059 | 324,722 | (7,018) | $ 585,790 |
Net income | 26,591 | ||||
Other comprehensive income | |||||
Comprehensive income | 23,975 | ||||
Net income | 26,591 | ||||
Balance (in shares) at Mar. 31, 2020 | 26,648,524 | ||||
Balance at Mar. 31, 2020 | $ 27 | 268,574 | 329,137 | (9,998) | 587,740 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 96,186 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 400 | 0 | 0 | 400 |
Stock-based compensation expense | $ 0 | 3,639 | 0 | 0 | 3,639 |
Repurchases of common stock (in shares) | (38,154) | ||||
Repurchases of common stock | $ 0 | (382) | (3,119) | 0 | (3,501) |
Net income | 0 | 0 | 12,607 | 0 | 12,607 |
Other comprehensive income | |||||
Foreign currency translation adjustment | 0 | 0 | 364 | 364 | |
Comprehensive income | 12,971 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 96,186 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 400 | 0 | 0 | 400 |
Stock-based compensation expense | $ 0 | 3,639 | 0 | 0 | 3,639 |
Repurchases of common stock (in shares) | (38,154) | ||||
Repurchases of common stock | $ 0 | (382) | (3,119) | 0 | (3,501) |
Net income | $ 0 | $ 0 | $ 12,607 | $ 0 | $ 12,607 |
Consolidated Statements of Sh_2
Consolidated Statements of Shareholders' Equity - USD ($) $ in Thousands | Common Stock [Member] | Additional Paid-in Capital [Member] | Retained Earnings [Member] | AOCI Attributable to Parent [Member] | Total |
Balance (in shares) at Dec. 31, 2018 | 26,984,747 | ||||
Balance at Dec. 31, 2018 | $ 27 | $ 258,502 | $ 291,460 | $ (8,492) | $ 541,497 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 19,950 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | (420) | 0 | 0 | (420) |
Stock-based compensation expense | $ 0 | 3,040 | 0 | 0 | 3,040 |
Repurchases of common stock (in shares) | (157,716) | ||||
Repurchases of common stock | $ 0 | (1,511) | (15,798) | 0 | (17,309) |
Net income | 0 | 0 | 15,511 | 0 | 15,511 |
Other comprehensive income | |||||
Foreign currency translation adjustment | $ 0 | 0 | 0 | 476 | 476 |
Comprehensive income | 15,987 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 19,950 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | (420) | 0 | 0 | (420) |
Stock-based compensation expense | $ 0 | 3,040 | 0 | 0 | 3,040 |
Repurchases of common stock (in shares) | (157,716) | ||||
Repurchases of common stock | $ 0 | (1,511) | (15,798) | 0 | (17,309) |
Net income | $ 0 | 0 | 15,511 | 0 | 15,511 |
Balance (in shares) at Mar. 31, 2019 | 26,846,981 | ||||
Balance at Mar. 31, 2019 | $ 27 | 259,611 | 291,173 | (8,016) | 542,795 |
Balance (in shares) at Dec. 31, 2018 | 26,984,747 | ||||
Balance at Dec. 31, 2018 | $ 27 | 258,502 | 291,460 | (8,492) | 541,497 |
Net income | 31,677 | ||||
Other comprehensive income | |||||
Comprehensive income | 31,675 | ||||
Net income | 31,677 | ||||
Balance (in shares) at Jun. 30, 2019 | 26,882,097 | ||||
Balance at Jun. 30, 2019 | $ 27 | 262,952 | 303,628 | (8,494) | 558,113 |
Balance (in shares) at Mar. 31, 2019 | 26,846,981 | ||||
Balance at Mar. 31, 2019 | $ 27 | 259,611 | 291,173 | (8,016) | 542,795 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 75,785 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 245 | 0 | 0 | 245 |
Stock-based compensation expense | $ 0 | 3,486 | 0 | 0 | 3,486 |
Repurchases of common stock (in shares) | (40,669) | ||||
Repurchases of common stock | $ 0 | (390) | (3,711) | 0 | (4,101) |
Net income | 0 | 0 | 16,166 | 0 | 16,166 |
Other comprehensive income | |||||
Foreign currency translation adjustment | 0 | 0 | (478) | (478) | |
Comprehensive income | 15,688 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 75,785 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 245 | 0 | 0 | 245 |
Stock-based compensation expense | $ 0 | 3,486 | 0 | 0 | 3,486 |
Repurchases of common stock (in shares) | (40,669) | ||||
Repurchases of common stock | $ 0 | (390) | (3,711) | 0 | (4,101) |
Net income | $ 0 | 0 | 16,166 | 0 | 16,166 |
Balance (in shares) at Jun. 30, 2019 | 26,882,097 | ||||
Balance at Jun. 30, 2019 | $ 27 | 262,952 | 303,628 | (8,494) | $ 558,113 |
Balance (in shares) at Dec. 31, 2019 | 26,786,459 | 26,786,459 | |||
Balance at Dec. 31, 2019 | $ 27 | 268,059 | 324,722 | (7,018) | $ 585,790 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 23,525 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | (902) | 0 | 0 | (902) |
Stock-based compensation expense | $ 0 | 3,033 | 0 | 0 | 3,033 |
Repurchases of common stock (in shares) | (161,460) | ||||
Repurchases of common stock | $ 0 | (1,616) | (9,569) | 0 | (11,185) |
Net income | 0 | 0 | 13,984 | 0 | 13,984 |
Other comprehensive income | |||||
Foreign currency translation adjustment | $ 0 | 0 | 0 | (2,980) | (2,980) |
Comprehensive income | 11,004 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 23,525 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | (902) | 0 | 0 | (902) |
Stock-based compensation expense | $ 0 | 3,033 | 0 | 0 | 3,033 |
Repurchases of common stock (in shares) | (161,460) | ||||
Repurchases of common stock | $ 0 | (1,616) | (9,569) | 0 | (11,185) |
Net income | $ 0 | 0 | 13,984 | 0 | 13,984 |
Balance (in shares) at Mar. 31, 2020 | 26,648,524 | ||||
Balance at Mar. 31, 2020 | $ 27 | 268,574 | 329,137 | (9,998) | $ 587,740 |
Balance (in shares) at Dec. 31, 2019 | 26,786,459 | 26,786,459 | |||
Balance at Dec. 31, 2019 | $ 27 | 268,059 | 324,722 | (7,018) | $ 585,790 |
Net income | 26,591 | ||||
Other comprehensive income | |||||
Comprehensive income | 23,975 | ||||
Net income | $ 26,591 | ||||
Balance (in shares) at Jun. 30, 2020 | 26,706,556 | 26,706,556 | |||
Balance at Jun. 30, 2020 | $ 27 | 272,231 | 338,625 | (9,634) | $ 601,249 |
Balance (in shares) at Mar. 31, 2020 | 26,648,524 | ||||
Balance at Mar. 31, 2020 | $ 27 | 268,574 | 329,137 | (9,998) | 587,740 |
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 96,186 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 400 | 0 | 0 | 400 |
Stock-based compensation expense | $ 0 | 3,639 | 0 | 0 | 3,639 |
Repurchases of common stock (in shares) | (38,154) | ||||
Repurchases of common stock | $ 0 | (382) | (3,119) | 0 | (3,501) |
Net income | 0 | 0 | 12,607 | 0 | 12,607 |
Other comprehensive income | |||||
Foreign currency translation adjustment | 0 | 0 | 364 | 364 | |
Comprehensive income | 12,971 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations (in shares) | 96,186 | ||||
Common shares issued on exercise of options and other, net of shares withheld for tax obligations | $ 0 | 400 | 0 | 0 | 400 |
Stock-based compensation expense | $ 0 | 3,639 | 0 | 0 | 3,639 |
Repurchases of common stock (in shares) | (38,154) | ||||
Repurchases of common stock | $ 0 | (382) | (3,119) | 0 | (3,501) |
Net income | $ 0 | 0 | 12,607 | 0 | $ 12,607 |
Balance (in shares) at Jun. 30, 2020 | 26,706,556 | 26,706,556 | |||
Balance at Jun. 30, 2020 | $ 27 | $ 272,231 | $ 338,625 | $ (9,634) | $ 601,249 |
Consolidated Statements of Cash
Consolidated Statements of Cash Flows (Unaudited) - USD ($) $ in Thousands | 6 Months Ended | |
Jun. 30, 2020 | Jun. 30, 2019 | |
Operating activities | ||
Net income | $ 26,591 | $ 31,677 |
Adjustments to reconcile net income to net cash provided by operating activities: | ||
Depreciation and amortization | 15,855 | 14,981 |
Stock-based compensation expense | 6,672 | 6,526 |
Deferred taxes | 5,651 | 1,585 |
Amortization of held-to-maturity securities | 129 | 7 |
Other | (854) | (279) |
Changes in operating assets and liabilities: | ||
Accounts receivable | (4,292) | (3,461) |
Inventories | (801) | 392 |
Prepaid expenses and other | (1,068) | 24 |
Income taxes | (1,341) | 4,833 |
Accounts payable | 1,082 | 3,848 |
Accrued liabilities and other | 5,793 | (5,245) |
Net cash provided by operating activities | 53,417 | 54,888 |
Investing activities | ||
Purchases of property, equipment and other capital assets | (33,305) | (34,136) |
Purchases of other assets and investments | (3,000) | (4,000) |
Purchases of marketable securities | (57,212) | (8,983) |
Proceeds from maturities of marketable securities | 28,225 | 29,170 |
Net cash used in investing activities | (65,292) | (17,949) |
Financing activities | ||
Proceeds from exercises of stock options | 2,855 | 2,243 |
Purchases of shares withheld for tax obligations | (3,367) | (2,418) |
Repurchases of common stock | (14,686) | (21,410) |
Net cash used in financing activities | (15,198) | (21,585) |
Effect of exchange rate changes on cash and cash equivalents | (149) | 135 |
Net (decrease) increase in cash and cash equivalents | (27,222) | 15,489 |
Cash and cash equivalents, beginning of period | 125,225 | 85,046 |
Cash and cash equivalents, end of period | $ 98,003 | $ 100,535 |
Note 1 - Basis of Presentation
Note 1 - Basis of Presentation | 6 Months Ended |
Jun. 30, 2020 | |
Notes to Financial Statements | |
Organization, Consolidation and Presentation of Financial Statements Disclosure [Text Block] | Note 1 The unaudited interim Consolidated Financial Statements of Proto Labs, Inc. (Protolabs, the Company, we, us or our) have been prepared in accordance with accounting principles generally accepted in the United States of America (U.S. GAAP) for interim financial information and with the instructions to Form 10 10 X. not may The preparation of the financial statements in conformity with U.S. GAAP requires management to make estimates and assumptions that affect the reported amounts of assets, liabilities, revenues, expenses, and the related disclosures at the date of the financial statements and during the reporting period. Actual results could materially differ from these estimates. For further information, refer to the audited Consolidated Financial Statements and Notes thereto included in the Company’s Annual Report on Form 10 December 31, 2019 February 26, 2020. The accompanying Consolidated Balance Sheet as of December 31, 2019 not 10 10 February 26, 2020 |
Note 2 - Recent Accounting Pron
Note 2 - Recent Accounting Pronouncements | 6 Months Ended |
Jun. 30, 2020 | |
Notes to Financial Statements | |
Significant Accounting Policies [Text Block] | Note 2 Recently Adopted Accounting Pronouncements During the first 2020, 2016 13, Financial Instruments – Credit Losses no During the fourth 2019, 2017 04, no |
Note 3 - Net Income Per Common
Note 3 - Net Income Per Common Share | 6 Months Ended |
Jun. 30, 2020 | |
Notes to Financial Statements | |
Earnings Per Share [Text Block] | Note 3 Basic net income per share is computed based on the weighted-average number of common shares outstanding. Diluted net income per share is computed based on the weighted-average number of common shares outstanding, increased by the number of additional shares that would have been outstanding had potentially dilutive common shares been issued and reduced by the number of shares the Company could have repurchased from the proceeds from issuance of the potentially dilutive shares. Potentially dilutive shares of common stock include stock options, restricted stock units and restricted stock awards granted under stock-based compensation plans and shares committed to be purchased under the employee stock purchase plan. Performance stock units are excluded from the calculation of dilutive potential common shares until the performance conditions have been satisfied. The table below sets forth the computation of basic and diluted net income per share: Three Months Ended Six Months Ended June 30, June 30, (in thousands, except share and per share amounts) 2020 2019 2020 2019 Net income $ 12,607 $ 16,166 $ 26,591 $ 31,677 Basic - weighted-average shares outstanding: 26,660,498 26,875,153 26,718,652 26,919,016 Effect of dilutive securities: Employee stock options and other 100,368 166,269 119,286 194,312 Diluted - weighted-average shares outstanding: 26,760,866 27,041,422 26,837,938 27,113,328 Net income per share: Basic $ 0.47 $ 0.60 $ 1.00 $ 1.18 Diluted $ 0.47 $ 0.60 $ 0.99 $ 1.17 |
Note 4 - Goodwill and Other Int
Note 4 - Goodwill and Other Intangible Assets | 6 Months Ended |
Jun. 30, 2020 | |
Notes to Financial Statements | |
Goodwill and Intangible Assets Disclosure [Text Block] | Note 4 There were no changes in the carrying amount of Goodwill during the three six June 30, 2020 Intangible assets other than goodwill at June 30, 2020 December 31, 2019 June 30, 2020 December 31, 2019 Useful Weighted Average (in thousands) Gross Accumulated Amortization Net Gross Accumulated Amortization Net Life (in years) Useful Life Remaining (in years) Intangible assets with finite lives: Marketing assets $ 930 $ (574 ) $ 356 $ 930 $ (527 ) $ 403 10.0 3.8 Non-compete agreement 270 (230 ) 40 270 (222 ) 48 2.0 - 5.0 2.5 Software technology 13,229 (2,960 ) 10,269 13,229 (2,275 ) 10,954 10.0 7.5 Customer relationships 10,070 (4,874 ) 5,196 10,070 (4,106 ) 5,964 6.0 - 9.0 3.3 Total intangible assets $ 24,499 $ (8,638 ) $ 15,861 $ 24,499 $ (7,130 ) $ 17,369 Amortization expense for intangible assets was $0.8 million and $0.9 million for the three June 30, 2020 2019 six June 30, 2020 2019, Estimated aggregated amortization expense based on the current carrying value of the amortizable intangible assets is as follows: (in thousands) Estimated Amortization Expense Remaining 2020 $ 1,508 2021 3,016 2022 3,016 2023 2,813 2024 1,400 Thereafter 4,108 Total estimated amortization expense $ 15,861 |
Note 5 - Fair Value Measurement
Note 5 - Fair Value Measurements | 6 Months Ended |
Jun. 30, 2020 | |
Notes to Financial Statements | |
Fair Value Disclosures [Text Block] | Note 5 Accounting Standards Codification (ASC 820 Fair Value Measuremen 820 820 three may Level 1—Quoted Level 2—Observable 1 not Level 3—Unobservable no The Company’s cash consists of bank deposits. The Company’s cash equivalents measured at fair value consist of money market mutual funds. The Company determines the fair value of these investments using Level 1 The following table summarizes financial assets as of June 30, 2020 December 31, 2019 June 30, 2020 December 31, 2019 (in thousands) Level 1 Level 2 Level 3 Level 1 Level 2 Level 3 Financial Assets: Cash and cash equivalents Money market mutual fund $ 26,088 $ - $ - $ 68,962 $ - $ - Total $ 26,088 $ - $ - $ 68,962 $ - $ - |
Note 6 - Marketable Securities
Note 6 - Marketable Securities | 6 Months Ended |
Jun. 30, 2020 | |
Notes to Financial Statements | |
Investment [Text Block] | Note 6 The Company invests in short-term and long-term agency, municipal, corporate and other debt securities. The securities are categorized as held-to-maturity and are recorded at amortized cost, net of an allowance for credit losses. Categorization as held-to-maturity is based on the Company’s ability and intent to hold these securities to maturity. The following table summarizes information regarding the Company’s short-term and long-term marketable securities as of June 30, 2020 December 31, 2019 June 30, 2020 (in thousands) Cost Unrealized Gains Unrealized Losses Fair Value U.S. municipal securities $ 8,840 $ 71 $ - $ 8,911 Corporate debt securities 34,968 355 (2 ) 35,321 U.S. government agency securities 25,272 23 (5 ) 25,290 Certificates of deposit/time deposits 5,189 112 - 5,301 Commercial paper 2,986 13 - 2,999 Total marketable securities $ 77,255 $ 574 $ (7 ) $ 77,822 December 31, 2019 (in thousands) Cost Unrealized Gains Unrealized Losses Fair Value U.S. municipal securities $ 10,204 $ 9 $ (3 ) $ 10,210 Corporate debt securities 26,944 80 (12 ) 27,012 U.S. government agency securities 6,274 1 (7 ) 6,268 Certificates of deposit/time deposits 1,484 22 - 1,506 Commercial paper 3,491 - - 3,491 Total marketable securities $ 48,397 $ 112 $ (22 ) $ 48,487 Fair values for the corporate debt securities are primarily determined based on quoted market prices (Level 1 2 During the first 2020, 2016 13, Financial Instruments – Credit Losses. no Classification of marketable securities as current or non-current is based upon the security’s maturity date as of the date of these financial statements. The June 30, 2020 may may June 30, (in thousands) 2020 Due in one year or less $ 33,128 Due after one year through five years 44,127 Total marketable securities $ 77,255 |
Note 7 - Inventory
Note 7 - Inventory | 6 Months Ended |
Jun. 30, 2020 | |
Notes to Financial Statements | |
Inventory Disclosure [Text Block] | Note 7 Inventory consists primarily of raw materials, which are recorded at the lower of cost or market using the average-cost method, which approximates first first The Company’s inventory consisted of the following as of the dates indicated: June 30, December 31, (in thousands) 2020 2019 Raw materials $ 10,784 $ 9,818 Work in process 228 501 Total inventory 11,012 10,319 Allowance for obsolescence (238 ) (244 ) Inventory, net of allowance $ 10,774 $ 10,075 |
Note 8 - Stock-based Compensati
Note 8 - Stock-based Compensation | 6 Months Ended |
Jun. 30, 2020 | |
Notes to Financial Statements | |
Share-based Payment Arrangement [Text Block] | Note 8 Under the Company’s 2012 2012 2012 ten may 2012 may not Employee Stock Purchase Plan The Company’s 2012 six May 15 November 15, first Stock-Based Compensation Expense Stock-based compensation expense was $3.6 million and $3.5 million for the three June 30, 2020 2019 six June 20, 2020 2019, Stock Options The following table summarizes stock option activity during the six June 30, 2020 Weighted- Average Stock Options Exercise Price Options outstanding at December 31, 2019 276,266 $ 72.38 Granted 60,065 105.79 Exercised (18,052 ) 49.68 Forfeited (36,841 ) 66.97 Options outstanding at June 30, 2020 281,438 $ 81.67 Exercisable at June 30, 2020 144,822 $ 65.88 The outstanding options generally have a term of ten four five first first The weighted-average grant date fair value of options that were granted during the six June 30, 2020 The following table provides the assumptions used in the Black-Scholes pricing model valuation of options during the six June 30, 2020 2019 Six Months Ended June 30, 2020 2019 Risk-free interest rate 0.50 - 1.47% 2.35 - 2.58% Expected life (years) 6.25 6.25 Expected volatility 42.40 - 43.83% 42.52 - 42.74% Expected dividend yield 0% 0% As of June 30, 2020 Restricted Stock Restricted stock awards are share-settled awards and restrictions lapse ratably over the vesting period, which is generally a period from four five first first The following table summarizes restricted stock activity during the six June 30, 2020 Weighted- Average Grant Date Restricted Fair Value Stock Per Share Restricted stock at December 31, 2019 314,973 $ 89.55 Granted 107,988 111.72 Restrictions lapsed (100,596 ) 84.57 Forfeited (9,253 ) 91.25 Restricted stock at June 30, 2020 313,112 $ 98.75 As of June 30, 2020 Performance Stock Performance stock units (PSUs) are expressed in terms of a target number of PSUs, with anywhere between 0 three 2017 2019 2020 The following table summarizes performance stock activity during the six June 30, 2020 Weighted- Average Grant Date Performance Fair Value Stock Per Share Performance stock at December 31, 2019 9,383 $ 58.35 Granted 19,956 118.66 Restrictions lapsed (7,113 ) 58.35 Performance change - - Forfeited (2,270 ) 58.35 Performance stock at June 30, 2020 19,956 $ 118.66 The following table provides the assumptions used in the Monte Carlo pricing model valuation of PSUs during the six June 30, 2020 Six Months Ended June 30, 2020 Risk-free interest rate 1.41% Expected life (years) 2.88 Expected volatility 38.70% Expected dividend yield 0% As of June 30, 2020 Employee Stock Purchase Plan The following table presents the assumptions used to estimate the fair value of the ESPP during the six June 30, 2020 2019 Six Months Ended June 30, 2020 2019 Risk-free interest rate 0.17 - 1.59% 2.33 - 2.35% Expected life (months) 6.00 6.00 Expected volatility 42.63 - 59.99% 37.36 - 53.57% Expected dividend yield 0% 0% |
Note 9 - Accumulated Other Comp
Note 9 - Accumulated Other Comprehensive Loss | 6 Months Ended |
Jun. 30, 2020 | |
Notes to Financial Statements | |
Disclosure of Reclassification Amount [Text Block] | Note 9 Other comprehensive income (loss) is comprised entirely of foreign currency translation adjustments. The following table presents the changes in accumulated other comprehensive income (loss) balances during the three six June 30, 2020 2019 Three Months Ended Six Months Ended June 30, June 30, (in thousands) 2020 2019 2020 2019 Foreign currency translation adjustments Balance at beginning of period $ (9,998 ) $ (8,016 ) $ (7,018 ) $ (8,492 ) Other comprehensive income (loss) before reclassifications 364 (478 ) (2,616 ) (2 ) Amounts reclassified from accumulated other comprehensive loss - - - - Net current-period other comprehensive income (loss) 364 (478 ) (2,616 ) (2 ) Balance at end of period $ (9,634 ) $ (8,494 ) $ (9,634 ) $ (8,494 ) |
Note 10 - Income Taxes
Note 10 - Income Taxes | 6 Months Ended |
Jun. 30, 2020 | |
Notes to Financial Statements | |
Income Tax Disclosure [Text Block] | Note 10 The Company is subject to income tax in multiple jurisdictions and the use of estimates is required to determine the provision for income taxes. For the three June 30, 2020 2019 six June 30, 2020 2019 three June 30, 2020 three June 30, 2020 2019 six June 30, 2020 six June 30, 2020 2019 The effective income tax rate for the six June 30, 2020 The Company had unrecognized tax benefits totaling $4.7 million as of June 30, 2020 December 31, 2019 The Coronavirus Aid, Relief, and Economic Security (CARES) Act was signed into law on March 27, 2020. 2017 2018 2019. June 30, 2020 December 31, 2020. 2021. |
Note 11 - Segment Reporting
Note 11 - Segment Reporting | 6 Months Ended |
Jun. 30, 2020 | |
Notes to Financial Statements | |
Segment Reporting Disclosure [Text Block] | Note 11 The Company’s reportable segments are based on the internal reporting used by the Company’s Chief Executive Officer, who is the chief operating decision maker (CODM), to assess operating performance and make decisions about the allocation of resources. The Corporate Unallocated and Japan category includes non-reportable segments, as well as research and development and general and administrative costs that the Company does not Intercompany transactions primarily relate to intercontinental activity and have been eliminated and are excluded from the reported amounts. The difference between income from operations and pre-tax income relates to foreign currency-related gains and losses and interest income on cash balances and investments, which are not Revenue and income from operations by reportable segment for the three six June 30, 2020 2019 Three Months Ended June 30, Six Months Ended June 30, (in thousands) 2020 2019 2020 2019 Revenue: United States $ 86,823 $ 91,149 $ 176,899 $ 178,960 Europe 16,729 20,940 37,516 42,194 Japan 3,023 3,843 7,268 8,230 Total revenue $ 106,575 $ 115,932 $ 221,683 $ 229,384 Three Months Ended June 30, Six Months Ended June 30, (in thousands) 2020 2019 2020 2019 Income from Operations: United States $ 24,349 $ 27,948 $ 49,438 $ 54,258 Europe 2,261 3,756 6,625 7,977 Corporate Unallocated and Japan (12,259 ) (12,131 ) (24,887 ) (23,214 ) Total Income from Operations $ 14,351 $ 19,573 $ 31,176 $ 39,021 Total long-lived assets at June 30, 2020 December 31, 2019 June 30, December 31, (in thousands) 2020 2019 Total long-lived assets: United States $ 220,183 $ 210,171 Europe 52,817 45,019 Japan 8,129 8,522 Total Assets $ 281,129 $ 263,712 Revenue by product line for the three six June 30, 2020 2019 Three Months Ended June 30, Six Months Ended June 30, (in thousands) 2020 2019 2020 2019 Revenue: Injection Molding $ 57,894 $ 55,457 $ 112,670 $ 110,768 CNC Machining 28,760 38,888 66,645 76,760 3D Printing 14,236 15,266 30,184 29,746 Sheet Metal 4,669 5,472 10,318 10,497 Other Revenue 1,016 849 1,866 1,613 Total revenue $ 106,575 $ 115,932 $ 221,683 $ 229,384 |
Note 3 - Net Income Per Commo_2
Note 3 - Net Income Per Common Share (Tables) | 6 Months Ended |
Jun. 30, 2020 | |
Notes Tables | |
Schedule of Earnings Per Share, Basic and Diluted [Table Text Block] | Three Months Ended Six Months Ended June 30, June 30, (in thousands, except share and per share amounts) 2020 2019 2020 2019 Net income $ 12,607 $ 16,166 $ 26,591 $ 31,677 Basic - weighted-average shares outstanding: 26,660,498 26,875,153 26,718,652 26,919,016 Effect of dilutive securities: Employee stock options and other 100,368 166,269 119,286 194,312 Diluted - weighted-average shares outstanding: 26,760,866 27,041,422 26,837,938 27,113,328 Net income per share: Basic $ 0.47 $ 0.60 $ 1.00 $ 1.18 Diluted $ 0.47 $ 0.60 $ 0.99 $ 1.17 |
Note 4 - Goodwill and Other I_2
Note 4 - Goodwill and Other Intangible Assets (Tables) | 6 Months Ended |
Jun. 30, 2020 | |
Notes Tables | |
Schedule of Finite-Lived Intangible Assets [Table Text Block] | June 30, 2020 December 31, 2019 Useful Weighted Average (in thousands) Gross Accumulated Amortization Net Gross Accumulated Amortization Net Life (in years) Useful Life Remaining (in years) Intangible assets with finite lives: Marketing assets $ 930 $ (574 ) $ 356 $ 930 $ (527 ) $ 403 10.0 3.8 Non-compete agreement 270 (230 ) 40 270 (222 ) 48 2.0 - 5.0 2.5 Software technology 13,229 (2,960 ) 10,269 13,229 (2,275 ) 10,954 10.0 7.5 Customer relationships 10,070 (4,874 ) 5,196 10,070 (4,106 ) 5,964 6.0 - 9.0 3.3 Total intangible assets $ 24,499 $ (8,638 ) $ 15,861 $ 24,499 $ (7,130 ) $ 17,369 |
Schedule of Finite-Lived Intangible Assets, Future Amortization Expense [Table Text Block] | (in thousands) Estimated Amortization Expense Remaining 2020 $ 1,508 2021 3,016 2022 3,016 2023 2,813 2024 1,400 Thereafter 4,108 Total estimated amortization expense $ 15,861 |
Note 5 - Fair Value Measureme_2
Note 5 - Fair Value Measurements (Tables) | 6 Months Ended |
Jun. 30, 2020 | |
Notes Tables | |
Fair Value, Assets Measured on Recurring Basis [Table Text Block] | June 30, 2020 December 31, 2019 (in thousands) Level 1 Level 2 Level 3 Level 1 Level 2 Level 3 Financial Assets: Cash and cash equivalents Money market mutual fund $ 26,088 $ - $ - $ 68,962 $ - $ - Total $ 26,088 $ - $ - $ 68,962 $ - $ - |
Note 6 - Marketable Securities
Note 6 - Marketable Securities (Tables) | 6 Months Ended |
Jun. 30, 2020 | |
Notes Tables | |
Debt Securities, Held-to-maturity [Table Text Block] | June 30, 2020 (in thousands) Cost Unrealized Gains Unrealized Losses Fair Value U.S. municipal securities $ 8,840 $ 71 $ - $ 8,911 Corporate debt securities 34,968 355 (2 ) 35,321 U.S. government agency securities 25,272 23 (5 ) 25,290 Certificates of deposit/time deposits 5,189 112 - 5,301 Commercial paper 2,986 13 - 2,999 Total marketable securities $ 77,255 $ 574 $ (7 ) $ 77,822 December 31, 2019 (in thousands) Cost Unrealized Gains Unrealized Losses Fair Value U.S. municipal securities $ 10,204 $ 9 $ (3 ) $ 10,210 Corporate debt securities 26,944 80 (12 ) 27,012 U.S. government agency securities 6,274 1 (7 ) 6,268 Certificates of deposit/time deposits 1,484 22 - 1,506 Commercial paper 3,491 - - 3,491 Total marketable securities $ 48,397 $ 112 $ (22 ) $ 48,487 |
Investments Classified by Contractual Maturity Date [Table Text Block] | June 30, (in thousands) 2020 Due in one year or less $ 33,128 Due after one year through five years 44,127 Total marketable securities $ 77,255 |
Note 7 - Inventory (Tables)
Note 7 - Inventory (Tables) | 6 Months Ended |
Jun. 30, 2020 | |
Notes Tables | |
Schedule of Inventory, Current [Table Text Block] | June 30, December 31, (in thousands) 2020 2019 Raw materials $ 10,784 $ 9,818 Work in process 228 501 Total inventory 11,012 10,319 Allowance for obsolescence (238 ) (244 ) Inventory, net of allowance $ 10,774 $ 10,075 |
Note 8 - Stock-based Compensa_2
Note 8 - Stock-based Compensation (Tables) | 6 Months Ended |
Jun. 30, 2020 | |
Notes Tables | |
Share-based Payment Arrangement, Option, Activity [Table Text Block] | Weighted- Average Stock Options Exercise Price Options outstanding at December 31, 2019 276,266 $ 72.38 Granted 60,065 105.79 Exercised (18,052 ) 49.68 Forfeited (36,841 ) 66.97 Options outstanding at June 30, 2020 281,438 $ 81.67 Exercisable at June 30, 2020 144,822 $ 65.88 |
Schedule of Share-based Payment Award, Stock Options, Valuation Assumptions [Table Text Block] | Six Months Ended June 30, 2020 2019 Risk-free interest rate 0.50 - 1.47% 2.35 - 2.58% Expected life (years) 6.25 6.25 Expected volatility 42.40 - 43.83% 42.52 - 42.74% Expected dividend yield 0% 0% |
Share-based Payment Arrangement, Restricted Stock and Restricted Stock Unit, Activity [Table Text Block] | Weighted- Average Grant Date Restricted Fair Value Stock Per Share Restricted stock at December 31, 2019 314,973 $ 89.55 Granted 107,988 111.72 Restrictions lapsed (100,596 ) 84.57 Forfeited (9,253 ) 91.25 Restricted stock at June 30, 2020 313,112 $ 98.75 |
Schedule of Nonvested Performance-based Units Activity [Table Text Block] | Weighted- Average Grant Date Performance Fair Value Stock Per Share Performance stock at December 31, 2019 9,383 $ 58.35 Granted 19,956 118.66 Restrictions lapsed (7,113 ) 58.35 Performance change - - Forfeited (2,270 ) 58.35 Performance stock at June 30, 2020 19,956 $ 118.66 |
Schedule of Share-based Payment Award, Awards Other Than Stock Options, Valuation Assumptions [Table Text Block] | Six Months Ended June 30, 2020 Risk-free interest rate 1.41% Expected life (years) 2.88 Expected volatility 38.70% Expected dividend yield 0% |
Schedule of Share-based Payment Award, Employee Stock Purchase Plan, Valuation Assumptions [Table Text Block] | Six Months Ended June 30, 2020 2019 Risk-free interest rate 0.17 - 1.59% 2.33 - 2.35% Expected life (months) 6.00 6.00 Expected volatility 42.63 - 59.99% 37.36 - 53.57% Expected dividend yield 0% 0% |
Note 9 - Accumulated Other Co_2
Note 9 - Accumulated Other Comprehensive Loss (Tables) | 6 Months Ended |
Jun. 30, 2020 | |
Notes Tables | |
Comprehensive Income (Loss) [Table Text Block] | Three Months Ended Six Months Ended June 30, June 30, (in thousands) 2020 2019 2020 2019 Foreign currency translation adjustments Balance at beginning of period $ (9,998 ) $ (8,016 ) $ (7,018 ) $ (8,492 ) Other comprehensive income (loss) before reclassifications 364 (478 ) (2,616 ) (2 ) Amounts reclassified from accumulated other comprehensive loss - - - - Net current-period other comprehensive income (loss) 364 (478 ) (2,616 ) (2 ) Balance at end of period $ (9,634 ) $ (8,494 ) $ (9,634 ) $ (8,494 ) |
Note 11 - Segment Reporting (Ta
Note 11 - Segment Reporting (Tables) | 6 Months Ended |
Jun. 30, 2020 | |
Notes Tables | |
Income from Operations by Geographic Area [Table Text Block] | Three Months Ended June 30, Six Months Ended June 30, (in thousands) 2020 2019 2020 2019 Income from Operations: United States $ 24,349 $ 27,948 $ 49,438 $ 54,258 Europe 2,261 3,756 6,625 7,977 Corporate Unallocated and Japan (12,259 ) (12,131 ) (24,887 ) (23,214 ) Total Income from Operations $ 14,351 $ 19,573 $ 31,176 $ 39,021 |
Long-lived Assets by Geographic Areas [Table Text Block] | June 30, December 31, (in thousands) 2020 2019 Total long-lived assets: United States $ 220,183 $ 210,171 Europe 52,817 45,019 Japan 8,129 8,522 Total Assets $ 281,129 $ 263,712 |
Disaggregation of Revenue [Table Text Block] | Three Months Ended June 30, Six Months Ended June 30, (in thousands) 2020 2019 2020 2019 Revenue: Injection Molding $ 57,894 $ 55,457 $ 112,670 $ 110,768 CNC Machining 28,760 38,888 66,645 76,760 3D Printing 14,236 15,266 30,184 29,746 Sheet Metal 4,669 5,472 10,318 10,497 Other Revenue 1,016 849 1,866 1,613 Total revenue $ 106,575 $ 115,932 $ 221,683 $ 229,384 |
Operating Segments [Member] | |
Notes Tables | |
Revenue from External Customers by Geographic Areas [Table Text Block] | Three Months Ended June 30, Six Months Ended June 30, (in thousands) 2020 2019 2020 2019 Revenue: United States $ 86,823 $ 91,149 $ 176,899 $ 178,960 Europe 16,729 20,940 37,516 42,194 Japan 3,023 3,843 7,268 8,230 Total revenue $ 106,575 $ 115,932 $ 221,683 $ 229,384 |
Note 3 - Net Income Per Commo_3
Note 3 - Net Income Per Common Share - Computation of Basic and Diluted Net Income Per Share (Details) - USD ($) $ / shares in Units, $ in Thousands | 3 Months Ended | 6 Months Ended | ||||
Jun. 30, 2020 | Mar. 31, 2020 | Jun. 30, 2019 | Mar. 31, 2019 | Jun. 30, 2020 | Jun. 30, 2019 | |
Net income | $ 12,607 | $ 13,984 | $ 16,166 | $ 15,511 | $ 26,591 | $ 31,677 |
Basic - weighted-average shares outstanding: (in shares) | 26,660,498 | 26,875,153 | 26,718,652 | 26,919,016 | ||
Employee stock options and other (in shares) | 100,368 | 166,269 | 119,286 | 194,312 | ||
Diluted - weighted-average shares outstanding: (in shares) | 26,760,866 | 27,041,422 | 26,837,938 | 27,113,328 | ||
Basic (in dollars per share) | $ 0.47 | $ 0.60 | $ 1 | $ 1.18 | ||
Diluted (in dollars per share) | $ 0.47 | $ 0.60 | $ 0.99 | $ 1.17 |
Note 4 - Goodwill and Other I_3
Note 4 - Goodwill and Other Intangible Assets (Details Textual) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2020 | Jun. 30, 2019 | Jun. 30, 2020 | Jun. 30, 2019 | |
Goodwill, Period Increase (Decrease), Total | $ 0 | $ 0 | ||
Amortization of Intangible Assets, Total | $ 800 | $ 900 | $ 1,500 | $ 1,700 |
Note 4 - Goodwill and Other I_4
Note 4 - Goodwill and Other Intangible Assets - Intangible Assets Other Than Goodwill (Details) - USD ($) $ in Thousands | 6 Months Ended | |
Jun. 30, 2020 | Dec. 31, 2019 | |
Gross | $ 24,499 | $ 24,499 |
Accumulated Amortization | (8,638) | (7,130) |
Net | 15,861 | 17,369 |
Marketing-Related Intangible Assets [Member] | ||
Gross | 930 | 930 |
Accumulated Amortization | (574) | (527) |
Net | $ 356 | 403 |
Useful Life (Year) | 10 years | |
Weighted average useful life remaining (Year) | 3 years 9 months 18 days | |
Noncompete Agreements [Member] | ||
Gross | $ 270 | 270 |
Accumulated Amortization | (230) | (222) |
Net | $ 40 | 48 |
Weighted average useful life remaining (Year) | 2 years 6 months | |
Noncompete Agreements [Member] | Minimum [Member] | ||
Useful Life (Year) | 2 years | |
Noncompete Agreements [Member] | Maximum [Member] | ||
Useful Life (Year) | 5 years | |
Computer Software, Intangible Asset [Member] | ||
Gross | $ 13,229 | 13,229 |
Accumulated Amortization | (2,960) | (2,275) |
Net | $ 10,269 | 10,954 |
Useful Life (Year) | 10 years | |
Weighted average useful life remaining (Year) | 7 years 6 months | |
Customer Relationships [Member] | ||
Gross | $ 10,070 | 10,070 |
Accumulated Amortization | (4,874) | (4,106) |
Net | $ 5,196 | $ 5,964 |
Weighted average useful life remaining (Year) | 3 years 3 months 18 days | |
Customer Relationships [Member] | Minimum [Member] | ||
Useful Life (Year) | 6 years | |
Customer Relationships [Member] | Maximum [Member] | ||
Useful Life (Year) | 9 years |
Note 4 - Goodwill and Other I_5
Note 4 - Goodwill and Other Intangible Assets - Estimated Aggregated Amortization Expense (Details) - USD ($) $ in Thousands | Jun. 30, 2020 | Dec. 31, 2019 |
Remaining 2020 | $ 1,508 | |
2021 | 3,016 | |
2022 | 3,016 | |
2023 | 2,813 | |
2024 | 1,400 | |
Thereafter | 4,108 | |
Total estimated amortization expense | $ 15,861 | $ 17,369 |
Note 5 - Fair Value Measureme_3
Note 5 - Fair Value Measurements - Fair Value of Financial Assets Measured on a Recurring Basis (Details) - Fair Value, Recurring [Member] - USD ($) $ in Thousands | Jun. 30, 2020 | Dec. 31, 2019 |
Fair Value, Inputs, Level 1 [Member] | ||
Money market mutual fund | $ 26,088 | $ 68,962 |
Total | 26,088 | 68,962 |
Fair Value, Inputs, Level 2 [Member] | ||
Money market mutual fund | 0 | 0 |
Total | 0 | 0 |
Fair Value, Inputs, Level 3 [Member] | ||
Money market mutual fund | 0 | 0 |
Total | $ 0 | $ 0 |
Note 6 - Marketable Securitie_2
Note 6 - Marketable Securities - Short-term and Long-term Marketable Securities (Details) - USD ($) $ in Thousands | Jun. 30, 2020 | Dec. 31, 2019 |
Amortized Cost | $ 77,255 | $ 48,397 |
Unrealized Gains | 574 | 112 |
Unrealized Losses | (7) | (22) |
Fair Value | 77,822 | 48,487 |
Bank Time Deposits [Member] | ||
Amortized Cost | 5,189 | 1,484 |
Unrealized Gains | 112 | 22 |
Unrealized Losses | 0 | 0 |
Fair Value | 5,301 | 1,506 |
US States and Political Subdivisions Debt Securities [Member] | ||
Amortized Cost | 8,840 | 10,204 |
Unrealized Gains | 71 | 9 |
Unrealized Losses | 0 | (3) |
Fair Value | 8,911 | 10,210 |
Corporate Debt Securities [Member] | ||
Amortized Cost | 34,968 | 26,944 |
Unrealized Gains | 355 | 80 |
Unrealized Losses | (2) | (12) |
Fair Value | 35,321 | 27,012 |
US Government Agencies Debt Securities [Member] | ||
Amortized Cost | 25,272 | 6,274 |
Unrealized Gains | 23 | 1 |
Unrealized Losses | (5) | (7) |
Fair Value | 25,290 | 6,268 |
Commercial Paper, Not Included with Cash and Cash Equivalents [Member] | ||
Amortized Cost | 2,986 | 3,491 |
Unrealized Gains | 13 | 0 |
Unrealized Losses | 0 | 0 |
Fair Value | $ 2,999 | $ 3,491 |
Note 6 - Marketable Securitie_3
Note 6 - Marketable Securities - Balance of Held-to-maturity Debt Securities by Contractual Maturity (Details) - USD ($) $ in Thousands | Jun. 30, 2020 | Dec. 31, 2019 |
Due in one year or less | $ 33,128 | |
Due after one year through five years | 44,127 | |
Total marketable securities | $ 77,255 | $ 48,397 |
Note 7 - Inventory - Inventory
Note 7 - Inventory - Inventory (Details) - USD ($) $ in Thousands | Jun. 30, 2020 | Dec. 31, 2019 |
Raw materials | $ 10,784 | $ 9,818 |
Work in process | 228 | 501 |
Total inventory | 11,012 | 10,319 |
Allowance for obsolescence | (238) | (244) |
Inventory, net of allowance | $ 10,774 | $ 10,075 |
Note 8 - Stock-based Compensa_3
Note 8 - Stock-based Compensation (Details Textual) - USD ($) $ / shares in Units, $ in Millions | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2020 | Jun. 30, 2019 | Jun. 30, 2020 | Jun. 30, 2019 | |
Share-based Payment Arrangement, Expense | $ 3.6 | $ 3.5 | $ 6.7 | $ 6.5 |
Share-based Compensation Arrangement by Share-based Payment Award, Options, Grants in Period, Weighted Average Grant Date Fair Value (in dollars per share) | $ 45.32 | |||
ESPP [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Discount from Market Price, Offering Date | 15.00% | |||
Employee Stock Purchase Plan, Offering Period (Month) | 6 months | |||
Share-based Compensation Arrangement by Share-based Payment Award, Purchase Price of Common Stock, Percent | 85.00% | |||
Share-based Payment Arrangement, Option [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Expiration Period (Year) | 10 years | |||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Amount, Total | 5.3 | $ 5.3 | ||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Period for Recognition (Year) | 3 years | |||
Share-based Payment Arrangement, Option [Member] | Minimum [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Award Vesting Period (Year) | 4 years | |||
Share-based Payment Arrangement, Option [Member] | Maximum [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Award Vesting Period (Year) | 5 years | |||
Restricted Stock [Member] | ||||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Amount, Total | 27.4 | $ 27.4 | ||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Period for Recognition (Year) | 2 years 9 months 18 days | |||
Restricted Stock [Member] | Minimum [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Award Vesting Period (Year) | 4 years | |||
Restricted Stock [Member] | Maximum [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Award Vesting Period (Year) | 5 years | |||
Performance Shares [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Award Vesting Period (Year) | 3 years | |||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Amount, Total | $ 2.1 | $ 2.1 | ||
Share-based Payment Arrangement, Nonvested Award, Cost Not yet Recognized, Period for Recognition (Year) | 2 years 7 months 6 days | |||
Percentage of Target Number Capable of Being Earned and Vesting, Lower Limit | 0.00% | 0.00% | ||
Percentage of Target Number Capable of Being Earned and Vesting, Upper Limit | 150.00% | 150.00% | ||
Long-Term Incentive Plan 2012 [Member] | ||||
Share-based Compensation Arrangement by Share-based Payment Award, Expiration Period (Year) | 10 years |
Note 8 - Stock-based Compensa_4
Note 8 - Stock-based Compensation - Stock Option Activity (Details) | 6 Months Ended |
Jun. 30, 2020$ / sharesshares | |
Options outstanding (in shares) | shares | 276,266 |
Options outstanding, weighted-average exercise price (in dollars per share) | $ / shares | $ 72.38 |
Granted (in shares) | shares | 60,065 |
Granted, weighted-average exercise price (in dollars per share) | $ / shares | $ 105.79 |
Exercised (in shares) | shares | (18,052) |
Exercised, weighted-average exercise price (in dollars per share) | $ / shares | $ 49.68 |
Forfeited (in shares) | shares | (36,841) |
Forfeited, weighted-average exercise price (in dollars per share) | $ / shares | $ 66.97 |
Options outstanding (in shares) | shares | 281,438 |
Options outstanding, weighted-average exercise price (in dollars per share) | $ / shares | $ 81.67 |
Options exercisable (in shares) | shares | 144,822 |
Options exercisable, weighted-average exercise price (in dollars per share) | $ / shares | $ 65.88 |
Note 8 - Stock-based Compensa_5
Note 8 - Stock-based Compensation - Assumptions Used in the Valuation of Options (Details) - Share-based Payment Arrangement, Option [Member] | 6 Months Ended | |
Jun. 30, 2020 | Jun. 30, 2019 | |
Expected life (years) (Year) | 6 years 3 months | 6 years 3 months |
Expected dividend yield | 0.00% | 0.00% |
Minimum [Member] | ||
Risk-free interest rate | 0.50% | 2.35% |
Expected volatility | 42.40% | 42.52% |
Maximum [Member] | ||
Risk-free interest rate | 1.47% | 2.58% |
Expected volatility | 43.83% | 42.74% |
Note 8 - Stock-based Compensa_6
Note 8 - Stock-based Compensation - Restricted Stock Options (Details) - Restricted Stock [Member] | 6 Months Ended |
Jun. 30, 2020$ / sharesshares | |
Restricted stock (in shares) | shares | 314,973 |
Restricted stock, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 89.55 |
Granted (in shares) | shares | 107,988 |
Granted, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 111.72 |
Restrictions lapsed (in shares) | shares | (100,596) |
Restrictions lapsed, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 84.57 |
Forfeited (in shares) | shares | (9,253) |
Forfeited, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 91.25 |
Restricted stock (in shares) | shares | 313,112 |
Restricted stock, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 98.75 |
Note 8 - Stock-based Compensa_7
Note 8 - Stock-based Compensation - Performance Stock (Details) - Performance Shares [Member] | 6 Months Ended |
Jun. 30, 2020$ / sharesshares | |
Performance stock (in shares) | shares | 9,383 |
Restricted stock, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 58.35 |
Granted (in shares) | shares | 19,956 |
Granted, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 118.66 |
Restrictions lapsed (in shares) | shares | (7,113) |
Restrictions lapsed, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 58.35 |
Performance change (in shares) | shares | 0 |
Performance change, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 0 |
Forfeited (in shares) | shares | (2,270) |
Forfeited, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 58.35 |
Performance stock (in shares) | shares | 19,956 |
Restricted stock, weighted-average grant date fair value (in dollars per share) | $ / shares | $ 118.66 |
Note 8 - Stock-based Compensa_8
Note 8 - Stock-based Compensation - Assumptions Used in the Valuation of Performance Stock (Details) - Performance Shares [Member] | 6 Months Ended |
Jun. 30, 2020 | |
Risk-free interest rate | 1.41% |
Expected life (years) (Year) | 2 years 10 months 17 days |
Expected volatility | 38.70% |
Expected dividend yield | 0.00% |
Note 8 - Stock-based Compensa_9
Note 8 - Stock-based Compensation - Assumptions Used to Estimate the Fair Value of the ESPP (Details) - Employee Stock Purchase Plan [Member] | 6 Months Ended | |
Jun. 30, 2020 | Jun. 30, 2019 | |
Expected life (months) (Year) | 6 years | 6 years |
Expected dividend yield | 0.00% | 0.00% |
Minimum [Member] | ||
Risk-free interest rate | 0.17% | 2.33% |
Expected volatility | 42.63% | 37.36% |
Maximum [Member] | ||
Risk-free interest rate | 1.59% | 2.35% |
Expected volatility | 59.99% | 53.57% |
Note 9 - Accumulated Other Co_3
Note 9 - Accumulated Other Comprehensive Loss - Other Comprehensive Loss (Details) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2020 | Jun. 30, 2019 | Jun. 30, 2020 | Jun. 30, 2019 | |
Balance | $ 587,740 | $ 542,795 | $ 585,790 | $ 541,497 |
Balance | 601,249 | 558,113 | 601,249 | 558,113 |
Accumulated Foreign Currency Adjustment Attributable to Parent [Member] | ||||
Balance | (9,998) | (8,016) | (7,018) | (8,492) |
Other comprehensive income (loss) before reclassifications | 364 | (478) | (2,616) | (2) |
Amounts reclassified from accumulated other comprehensive loss | 0 | 0 | 0 | 0 |
Net current-period other comprehensive income (loss) | 364 | (478) | (2,616) | (2) |
Balance | $ (9,634) | $ (8,494) | $ (9,634) | $ (8,494) |
Note 10 - Income Taxes (Details
Note 10 - Income Taxes (Details Textual) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | |||
Jun. 30, 2020 | Jun. 30, 2019 | Jun. 30, 2020 | Jun. 30, 2019 | Dec. 31, 2019 | |
Income Tax Expense (Benefit), Total | $ 2,511 | $ 4,532 | $ 6,406 | $ 8,682 | |
Effective Income Tax Rate Reconciliation, Percent, Total | 16.60% | 21.90% | 19.40% | 21.50% | |
Effective Income Tax Rate Continuing Operations Increase (Decrease) During the Period | (5.30%) | (2.10%) | |||
Effective Income Tax Rate Reconciliation, at Federal Statutory Income Tax Rate, Percent | 21.00% | ||||
Unrecognized Tax Benefits, Ending Balance | $ 4,700 | $ 4,700 | $ 4,600 | ||
Income Taxes Payable, CARES Act | (2,600) | (2,600) | |||
Deferred Tax Liabilities, CARES Act | $ 2,600 | $ 2,600 |
Note 11 - Segment Reporting - R
Note 11 - Segment Reporting - Revenue From Operations by Reportable Segment (Details) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2020 | Jun. 30, 2019 | Jun. 30, 2020 | Jun. 30, 2019 | |
Revenue | $ 106,575 | $ 115,932 | $ 221,683 | $ 229,384 |
Operating Segments [Member] | ||||
Revenue | 106,575 | 115,932 | 221,683 | 229,384 |
Operating Segments [Member] | United States Segment [Member] | ||||
Revenue | 86,823 | 91,149 | 176,899 | 178,960 |
Operating Segments [Member] | Europe Segment [Member] | ||||
Revenue | 16,729 | 20,940 | 37,516 | 42,194 |
Operating Segments [Member] | Japan Segment [Member] | ||||
Revenue | $ 3,023 | $ 3,843 | $ 7,268 | $ 8,230 |
Note 11 - Segment Reporting - I
Note 11 - Segment Reporting - Income From Operations (Details) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2020 | Jun. 30, 2019 | Jun. 30, 2020 | Jun. 30, 2019 | |
Income from operations | $ 14,351 | $ 19,573 | $ 31,176 | $ 39,021 |
Operating Segments [Member] | United States Segment [Member] | ||||
Income from operations | 24,349 | 27,948 | 49,438 | 54,258 |
Operating Segments [Member] | Europe Segment [Member] | ||||
Income from operations | 2,261 | 3,756 | 6,625 | 7,977 |
Operating Segments [Member] | Corporate Unallocated and Japan Segment[Member] | ||||
Income from operations | $ (12,259) | $ (12,131) | $ (24,887) | $ (23,214) |
Note 11 - Segment Reporting - L
Note 11 - Segment Reporting - Long-lived Assets by Geographic Region (Details) - USD ($) $ in Thousands | Jun. 30, 2020 | Dec. 31, 2019 |
Long-lived assets | $ 281,129 | $ 263,712 |
Operating Segments [Member] | ||
Long-lived assets | 281,129 | 263,712 |
Operating Segments [Member] | United States Segment [Member] | ||
Long-lived assets | 220,183 | 210,171 |
Operating Segments [Member] | Europe Segment [Member] | ||
Long-lived assets | 52,817 | 45,019 |
Operating Segments [Member] | Japan Segment [Member] | ||
Long-lived assets | $ 8,129 | $ 8,522 |
Note 11 - Segment Reporting - D
Note 11 - Segment Reporting - Disaggregation of Revenue (Details) - USD ($) $ in Thousands | 3 Months Ended | 6 Months Ended | ||
Jun. 30, 2020 | Jun. 30, 2019 | Jun. 30, 2020 | Jun. 30, 2019 | |
Revenue | $ 106,575 | $ 115,932 | $ 221,683 | $ 229,384 |
Injection Molding (Protomold) [Member] | ||||
Revenue | 57,894 | 55,457 | 112,670 | 110,768 |
CNC Machining (Firstcut) [Member] | ||||
Revenue | 28,760 | 38,888 | 66,645 | 76,760 |
3D Printing (Fineline) [Member] | ||||
Revenue | 14,236 | 15,266 | 30,184 | 29,746 |
Sheet Metal [Member] | ||||
Revenue | 4,669 | 5,472 | 10,318 | 10,497 |
Other Products [Member] | ||||
Revenue | $ 1,016 | $ 849 | $ 1,866 | $ 1,613 |