XML 29 R17.htm IDEA: XBRL DOCUMENT
v3.26.1

Operating Segments | 6 Months Ended
--- | ---
Jun. 30, 2026
Segment Reporting [Abstract] |
Operating Segments | Operating Segments As discussed in Note 1, the Company operates in two segments (i) ODR, in which the Company performs owner direct projects and/or provides maintenance or service primarily on MEPC systems, and specialty contracting projects to existing buildings direct to, or assigned by, building owners or operators, and (ii) GCR, in which the Company generally manages new construction or renovation projects that involve primarily MEPC systems awarded to the Company by general contractors or construction managers. Segment information is prepared on the same basis the Company’s Chief Operating Decision Maker (“CODM”) reviews operating results for the purposes of allocating resources and assessing performance. The Company’s CODM is comprised of its President and Chief Executive Officer and Executive Vice President and Chief Financial Officer. The Company’s CODM evaluates segment performance and makes resource allocation decisions primarily based on gross profit. Gross profit is a key measure used by the CODM in the annual budgeting and forecasting process, as well as in periodic reviews of actual operating results compared to planned performance. The CODM uses the Company's gross profit measure to assess the operating performance of its reportable segments, establish business priorities, and make decisions regarding the allocation of capital and other resources among those segments. In accordance with ASC Topic 280 – Segment Reporting, the Company has aggregated all of the ODR work performed at its branches into one ODR reportable segment and all of the GCR work performed at its branches into one GCR reportable segment. All transactions between segments are eliminated in consolidation. All of the Company’s identifiable assets are located in the United States, which is where the Company is domiciled. Condensed consolidated segment information for the three and six months ended June 30, 2026 and 2025 were as follows:
| Three Months Ended June 30, |  | Six Months Ended June 30,
(in thousands) | 2026 |  | 2025 |  | 2026 |  | 2025
Statement of Operations Data: |  |  |  |  |  |  |
Revenue: |  |  |  |  |  |  |
ODR | $ | 128,414 |  |  | $ | 108,948 |  |  | $ | 228,225 |  |  | $ | 199,341 |
GCR | 45,043 |  |  | 33,293 |  |  | 84,091 |  |  | 76,008 |
Total revenue | 173,457 |  |  | 142,241 |  |  | 312,316 |  |  | 275,349 |
Cost of revenue: |  |  |  |  |  |  |
ODR | 97,654 |  |  | 77,359 |  |  | 174,481 |  |  | 141,591 |
GCR | 38,510 |  |  | 25,056 |  |  | 69,372 |  |  | 57,213 |
Total cost of revenue | 136,164 |  |  | 102,415 |  |  | 243,853 |  |  | 198,804 |
Gross profit: |  |  |  |  |  |  |
ODR | 30,760 |  |  | 31,589 |  |  | 53,744 |  |  | 57,750 |
GCR | 6,533 |  |  | 8,237 |  |  | 14,719 |  |  | 18,795 |
Total gross profit | 37,293 |  |  | 39,826 |  |  | 68,463 |  |  | 76,545 |
Selling, general and administrative(1) | 28,116 |  |  | 26,632 |  |  | 56,230 |  |  | 53,150 |
Acquisition-related retention expense and contingent consideration | 230 |  |  | 795 |  |  | 379 |  |  | 1,222 |
Amortization of intangibles | 1,695 |  |  | 1,757 |  |  | 3,469 |  |  | 3,620 |
Operating income | $ | 7,252 |  |  | $ | 10,642 |  |  | $ | 8,385 |  |  | $ | 18,553 |
Other (expenses) income: |  |  |  |  |  |  |
Interest expense | (773) |  |  | (563) |  |  | (1,474) |  |  | (1,089) |
Interest income | 1 |  |  | 334 |  |  | 16 |  |  | 704 |
Gain on disposition of property and equipment | 81 |  |  | 407 |  |  | 319 |  |  | 740 |
Gain (loss) on change in fair value of interest rate swap | 22 |  |  | (56) |  |  | 60 |  |  | (153) |
Total other (expenses) income | (669) |  |  | 122 |  |  | (1,079) |  |  | 202 |
Income before income taxes | $ | 6,583 |  |  | $ | 10,764 |  |  | $ | 7,306 |  |  | $ | 18,755 |
(1) Included within selling, general and administrative expenses was $2.1 million and $1.6 million of non-cash stock-based compensation expense for the three months ended June 30, 2026 and 2025, respectively, and $3.9 million and $3.2 million for the six months ended June 30, 2026 and 2025, respectively. The Company does not identify capital expenditures and total assets by segment in its internal financial reports due in part to the shared use of a centralized fleet of vehicles and specialized equipment.

X
- References No definition available. + Details
Name: | us-gaap_SegmentReportingAbstract
Namespace Prefix: | us-gaap_
Data Type: | xbrli:stringItemType
Balance Type: | na
Period Type: | duration

X
- Definition The entire disclosure for segment reporting. + References Reference 1: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 40 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-40 Reference 2: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 42 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-42 Reference 3: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 34 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-34 Reference 4: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 32 -Subparagraph (f) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-32 Reference 5: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 32 -Subparagraph (ee) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-32 Reference 6: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 31 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-31 Reference 7: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 26C -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-26C Reference 8: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 26B -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-26B Reference 9: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 22 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-22 Reference 10: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 15 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-15 Reference 11: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 41 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-41 Reference 12: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 21 -Subparagraph (b) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-21 Reference 13: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 21 -Subparagraph (a) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-21 Reference 14: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 32 -Subparagraph (e) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-32 Reference 15: http://www.xbrl.org/2003/role/exampleRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 55 -Paragraph 48 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482785/280-10-55-48 Reference 16: http://www.xbrl.org/2003/role/disclosureRef -Topic 270 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 1 -Subparagraph (i) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482964/270-10-50-1 Reference 17: http://www.xbrl.org/2003/role/exampleRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 55 -Paragraph 54 -Subparagraph (d) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482785/280-10-55-54 Reference 18: http://www.xbrl.org/2003/role/exampleRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 55 -Paragraph 47 -Subparagraph (c) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482785/280-10-55-47 Reference 19: http://www.xbrl.org/2003/role/exampleRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 55 -Paragraph 54 -Subparagraph (a) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482785/280-10-55-54 Reference 20: http://www.xbrl.org/2003/role/exampleRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 55 -Paragraph 47 -Subparagraph (a) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482785/280-10-55-47 Reference 21: http://www.xbrl.org/2003/role/exampleRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 55 -Paragraph 54 -Subparagraph (e) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482785/280-10-55-54 Reference 22: http://www.xbrl.org/2003/role/exampleRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 55 -Paragraph 47 -Subparagraph (d) -Publisher FASB -URI https://asc.fasb.org/1943274/2147482785/280-10-55-47 Reference 23: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -Name Accounting Standards Codification -Publisher FASB -URI https://asc.fasb.org/280/tableOfContent Reference 24: http://www.xbrl.org/2003/role/disclosureRef -Topic 280 -SubTopic 10 -Name Accounting Standards Codification -Section 50 -Paragraph 26 -Publisher FASB -URI https://asc.fasb.org/1943274/2147482810/280-10-50-26 + Details
Name: | us-gaap_SegmentReportingDisclosureTextBlock
Namespace Prefix: | us-gaap_
Data Type: | dtr-types:textBlockItemType
Balance Type: | na
Period Type: | duration