Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor · · Updated 2026-09-27

H1 2026 sector ETF winners and losers scorecard

See all eleven S&P 500 sector ETFs ranked for H1 2026, Q1-to-Q2 rotation, sector breadth, and trading costs, so you fit spot the strongest setup.

H1 2026 sector scorecard show the full range of results: technology (XLK) finish the six months up 30.8%, communication services (XLC) finish -9.3%, and about forty percentage points separate the best sector from the worst one. Three out of the eleven S&P 500 sector ETFs end the half in the red. Almost no sector keep the same rank from Q1 to Q2. The half be two opposite markets wey join together, and this page score both. Every number below na stored query result; expand any panel to see the exact SQL.

Wetin be sector ETF, and how this page dey score am

The eleven Select Sector SPDR funds divide S&P 500 into different industry buckets. So, one ticker fit give you exposure to, or help you hedge, one sector view. Each fund hold members of its sector index, with weighting based on market value. E dey trade throughout the session like stock.

This page dey score each fund in four ways: price return, from first regular-hours open reach last regular-hours close; the quarter split wey dey under the half number; dollar volume, wey be price multiply by shares traded and na the clearest measure of how much money change hand; plus bid-ask spread, wey be the gap between the best price to buy and the best price to sell. Na this spread be the cost of one round trip. The index-level ledger for the same six months, including rates, options, IPOs and breadth, dey for the H1 2026 market recap.

The scorecard: eleven sectors, half and quarter splits

QueryThe eleven sector ETFs: H1 2026 return, Q1 and Q2 split, and H1 dollar volume
tickerH1 return %Q1 return %Q2 return %H1 dollar bn
XLB11.79.8186.8
XLC-9.3-6.2-3.790.3
XLE18.836.9-11316.2
XLF-2.2-9.97.7271.7
XLI193.913.3222.8
XLK30.8-8.742286
XLP6.95.51.7163.7
XLRE9.11.37.738.4
XLU5.77-1128.7
XLV2.5-5.47.8218.8
XLY-2.3-9.36.9132.5
The exact SQL behind every number
SELECT ticker,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
    round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
  AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY ticker
Run am yourself

Make you read the half-year column first: technology lead with 30.8%, industrials follow with 19% and energy with 18.8%, while three sectors finish negative: communication services at -9.3%, consumer discretionary at -2.3%, and financials at -2.2%. Eight out of eleven positive sectors na respectable breadth for a half wey start with indexes falling.

Na the quarter columns carry the real story. Q1 leaders na energy (36.9%), materials (9.8%), utilities (7%), and staples (5.5%). Na one commodity trade plus the classic defensives. Technology (-8.7%), financials (-9.9%), and discretionary (-9.3%) fall together with the broad market. Q2 turn the table upside down: technology return 42%, industrials 13.3%, and health care 7.8%, while energy (-11%), communication services (-3.7%), and utilities (-1%) finish the quarter in the red. Energy's round trip, 36.9% then -11%, plus financials' mirror image, -9.9% then 7.7%, na the two clearest examples of wetin one half-year number fit hide.

The rotation, month by month

Na three tickers carry the whole rotation story, so this panel dey track dem month by month: XLE (Q1 leader), XLK (Q2 leader), and XLF (the mirror trade).

QueryXLE, XLF, and XLK by month: the H1 2026 rotation at month grain
monthtickermonth return %
2026-01-01XLE14.1
2026-01-01XLF-2.5
2026-01-01XLK-1.2
2026-02-01XLE11.6
2026-02-01XLF-3.8
2026-02-01XLK-3.3
2026-03-01XLE6
2026-03-01XLF-2.4
2026-03-01XLK-3
2026-04-01XLE-0.2
2026-04-01XLF4.7
2026-04-01XLK18.9
2026-05-01XLE-4.7
2026-05-01XLF-1.6
2026-05-01XLK19.1
2026-06-01XLE-6.8
2026-06-01XLF4.7
2026-06-01XLK-1
The exact SQL behind every number
SELECT toString(toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York')))) AS month, ticker,
    round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS month_return_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLE', 'XLF', 'XLK')
  AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY month, ticker
ORDER BY month, ticker
Run am yourself

XLE rise for each of the first three months: 14.1% for January, 11.6% for February, and 6% for March. Na staircase wey dey slow down. After that, e go three months straight without gain (-0.2%, -4.7%, -6.8%). XLK run the opposite pattern: e dey negative for January, February, and March, then 18.9% for April and 19.1% for May. Those two months back-to-back build almost the whole half wey lead the sector. April na the handoff. Na one column for this table show the leadership flip. XLF get two positive months: April and June, at 4.7% and 4.7%. The releases wey the half traded against — inflation prints, payrolls, and the Treasury curve — dey collected for the macro picture entering H2 2026.

Breadth inside each sector

Return wey sector fund make no tell us how many of the members join the move. Warehouse no get sector-classification column, so this panel dey measure breadth inside each sector with one fixed basket wey dem disclose fully: five household large-cap names for each sector, fifty-five altogether, and dem list every one for the SQL. Na sample of famous names, e no be the funds' actual holdings. Data notes explain the basket's limits.

QueryFive-name baskets per sector: members up vs down, median, best and worst, H1 2026
sectormembersmembers wey risemembers wey fallmedian member %best memberbest member %worst memberworst member %
health care (XLV)55021.7UNH25.5ABBV9.9
real estate (XLRE)54121.3EQIX36.1AMT-6.7
materials (XLB)55019.5LIN21.7SHW6.4
industrials (XLI)55017.5CAT84.3RTX3.4
energy (XLE)55013.6EOG23.5CVX9
utilities (XLU)5419.1AEP18.5CEG-30.6
technology (XLK)5325.2AVGO6.9ORCL-25.7
financials (XLF)5413.5MS17.1WFC-11.4
consumer staples (XLP)5412.4KO16.3PEP-5.5
consumer discretionary (XLY)523-8.2AMZN3NKE-35.9
communication services (XLC)514-15.2GOOGL12.7NFLX-24.2
The exact SQL behind every number
SELECT sector,
       count() AS members,
       countIf(ret_pct > 0) AS members_up,
       countIf(ret_pct <= 0) AS members_down,
       round(quantileDeterministic(0.5)(ret_pct, cityHash64(ticker)), 1) AS median_member_pct,
       argMax(ticker, (ret_pct, ticker)) AS best_member,
       round(max(ret_pct), 1) AS best_member_pct,
       argMin(ticker, (ret_pct, ticker)) AS worst_member,
       round(min(ret_pct), 1) AS worst_member_pct
FROM (
    SELECT ticker,
           multiIf(ticker IN ('AAPL','MSFT','NVDA','AVGO','ORCL'), 'technology (XLK)',
                   ticker IN ('META','GOOGL','NFLX','DIS','TMUS'), 'communication services (XLC)',
                   ticker IN ('XOM','CVX','COP','EOG','SLB'), 'energy (XLE)',
                   ticker IN ('JPM','BAC','WFC','GS','MS'), 'financials (XLF)',
                   ticker IN ('GE','CAT','RTX','UNP','UPS'), 'industrials (XLI)',
                   ticker IN ('LLY','UNH','JNJ','ABBV','MRK'), 'health care (XLV)',
                   ticker IN ('AMZN','TSLA','HD','MCD','NKE'), 'consumer discretionary (XLY)',
                   ticker IN ('PG','COST','WMT','KO','PEP'), 'consumer staples (XLP)',
                   ticker IN ('NEE','SO','DUK','CEG','AEP'), 'utilities (XLU)',
                   ticker IN ('PLD','AMT','EQIX','WELL','SPG'), 'real estate (XLRE)',
                   'materials (XLB)') AS sector,
           (argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
            / argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100 AS ret_pct
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('AAPL','MSFT','NVDA','AVGO','ORCL','META','GOOGL','NFLX','DIS','TMUS','XOM','CVX','COP','EOG','SLB','JPM','BAC','WFC','GS','MS','GE','CAT','RTX','UNP','UPS','LLY','UNH','JNJ','ABBV','MRK','AMZN','TSLA','HD','MCD','NKE','PG','COST','WMT','KO','PEP','NEE','SO','DUK','CEG','AEP','PLD','AMT','EQIX','WELL','SPG','LIN','SHW','APD','FCX','ECL')
      AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
    GROUP BY ticker
)
GROUP BY sector
ORDER BY median_member_pct DESC, sector
Run am yourself

Two rows deserve the most attention. For Health care, all 5 of the five basket names rise, with median of 21.7%, while XLV, the fund, gain 2.5% for the same period. Fund return dey use market value weight; basket median dey give every member equal weight. Health care na the clearest case of the basket beating the fund. Technology show the same gap for the opposite direction, and from start to finish, na the widest gap of all: the fund gain 30.8%, while its five biggest household names split 3 up and 2 down, with median of 5.2%, and ORCL print -25.7%. The sector headline gain no come from its classic megacaps. The next panel show where e come from. For the rest of the table, CAT's 84.3% na the best print among all fifty-five names. Communication services na the weakest room for the building: 1 of five rise, median of -15.2%, with NFLX at -24.2%.

The memory-semis trade inside technology

QueryEight heavily traded chip and memory names: H1 return, quarter split, H1 dollar volume
tickerH1 return %Q1 return %Q2 return %H1 dollar bn
SNDK830.1160248.41592.7
MU29014.4229.92862.1
INTC269.316.8210969
AMD165.3-7.1179.81185.9
TXN70.410.953.4168.3
AVGO6.9-12.320.3865.1
QCOM6.3-25.944.4277.6
NVDA5.2-8.213.53287.9
The exact SQL behind every number
SELECT ticker,
    round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
    round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
    round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / argMinIf(toFloat64(open), window_start, window_start >= toDateTime('2026-04-01 00:00:00') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
    round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('MU', 'SNDK', 'NVDA', 'AMD', 'INTC', 'AVGO', 'QCOM', 'TXN')
  AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY h1_return_pct DESC, ticker
Run am yourself

Technology sector break am, and the half-year defining single-name trade dey show. SNDK return 830.1% for six months, MU 290%, INTC 269.3%, and AMD 165.3%, while NVDA, the biggest single-name tape for the set with $3287.9 billion half-year turnover, return 5.2%, with AVGO at 6.9% and QCOM at 6.3%. The complex split into two. Memory-and-foundry names multiply, while the established AI-accelerator names move sideways. The Q2 column show the timing: MU's 229.9%, INTC's 210%, and AMD's 179.8% land for the same quarter wey XLK print its 42%. The sector fund rally and the memory repricing happen for the same three months of tape. MU June dey break down tick by tick here, and NVDA June deep-dive dey track the divergence session by session.

Wey the trading dollars go

QuerySector ETF dollar volume, Q1 vs Q2 2026: every fund traded less in the recovery quarter
tickerQ1 dollar bnQ2 dollar bnQ2 vs Q1 %
XLK161.2124.8-23
XLE184.2132-28
XLU74.754-28
XLC53.736.7-32
XLY78.753.8-32
XLB52.334.5-34
XLV133.285.6-36
XLF166.8104.9-37
XLI136.586.3-37
XLP104.159.6-43
XLRE24.813.6-45
The exact SQL behind every number
SELECT ticker,
    round(sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS q1_dollar_bn,
    round(sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS q2_dollar_bn,
    round((sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
         / sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 0) AS q2_vs_q1_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
  AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY q2_vs_q1_pct DESC, ticker
Run am yourself

Dollar volume move for one direction: all the eleven sector funds trade fewer dollars for second quarter than for first quarter. The top row for the table show the smallest decline, XLK at -23%, from $161.2 billion go $124.8 billion, while the bottom na real estate at -45%. The sector wrappers busy pass for the quarter wey the indexes fall, and activity inside dem thin as recovery dey continue. Two scale notes from the panels above: XLE na the sector fund wey trade pass for the half, at $316.2 billion, while MU alone turn over $2862.1 billion, roughly ten times the XLK fund’s $286 billion. Sector products na the scoreboard; na single names dem use play the H1 game.

Wetin e cost to trade each sector

Return tables dey everywhere; quote tapes no dey. This panel dey measure each fund median quoted bid-ask spread, wey be the cost of one round trip, across one complete labeled session, June 29, 2026. E use every NBBO update wey print that day.

QueryMedian quoted spread by sector ETF, one representative session (June 29, 2026), regular hours
tickermedian spread bpsquote updates minvalid wey dem drop
XLV0.622.11150
XLY0.861.1921
XLC0.931.1282
XLI1.11.3812
XLK1.12.7255
XLP1.180.7633
XLE1.850.591
XLF1.860.382
XLB1.970.410
XLU2.180.296
XLRE2.230.280
The exact SQL behind every number
SELECT ticker,
    round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 2) AS med_spread_bps,
    round(count() / 1e6, 2) AS quote_updates_m,
    countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
  AND sip_timestamp >= toDateTime64('2026-06-29 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-29 20:00:00', 9)
GROUP BY ticker
ORDER BY med_spread_bps, ticker
Run am yourself

The cheapest fund to trade that session na XLV, with median of 0.62 basis points; the widest na XLRE at 2.23. One basis point na hundredth of one percent. So the whole table dey show hundredths of one percent per round trip. Na this be the practical meaning of “sector ETFs dey liquid.” Quote-update counts differ almost ten times across the table, but the medians still dey gather within just a couple basis points of each other. For comparison, the June 29 microstructure deep-dive dey analyze the same session SPY quote tape, and e get tighter spread than every fund for this table.

FAQ

Which sector perform pass for H1 2026?

Technology. XLK return 30.8% for the half-year, and all of am happen for second quarter (42% for Q2 after -8.7% for Q1). Communication services (XLC) na the worst at -9.3%.

The same sectors lead for Q1 and Q2 2026?

No, the two quarters dey almost opposite. Energy lead Q1 at 36.9% and finish Q2 at -11%; technology print -8.7% for Q1 and lead Q2 at 42%. Utilities and staples lead early, but dem weaken later.

How much e cost to trade sector SPDR ETF?

For the June 29, 2026 session wey dem measure, median quoted spreads dey from 0.62 basis points (XLV) reach 2.23 (XLRE), meaning hundredths of one percent for round trip. This one tight pass wetin typical single stock dey offer.

Why sector ETF return dey different from the returns of the members?

The funds weight holdings according to market value, so na a few giant members dey dominate the print. But basket median dey treat every member equally. For H1 2026, the gap wide pass for health care: five-name basket median of 21.7% against XLV at 2.5%.

Which ones be the eleven sector ETFs?

XLB (materials), XLC (communication services), XLE (energy), XLF (financials), XLI (industrials), XLK (technology), XLP (consumer staples), XLRE (real estate), XLU (utilities), XLV (health care), and XLY (consumer discretionary). Together, dem divide the S&P 500 into sectors.

Data notes

Full data notes
  • Breadth baskets na fixed editorial samples of five household large-caps for each sector. Dem no be fund holdings, and dem no get weights. We screen candidates against the half’s split calendar. Minute bars no dey adjusted. If split happen for inside the period, e spoil open-to-close return, so we replace two otherwise obvious names for that screen. Every figure for this page na price return; dividends no dey inside.
  • Basket medians dey use deterministic quantiles. We break ties among best/worst members by ticker, so regeneration no fit reorder ties.
  • Spread panel dey measure one labeled session, June 29, 2026, no be the whole half. Six-month whole-quote-tape scan across eleven tickers pass the query budget wey this page dey generate under. Invalid quotes, whether crossed or one-sided, dey count for the panel; we no dey silently drop dem.
  • Scorecard panel na the same query wey H1 recap carry, so the two pages no fit disagree on sector number.

Methodology

  • Window na January 1 – June 30, 2026. Returns na from first regular-hours open reach last regular-hours close inside each window, and queries wey dey show calculate am. Regular hours na Eastern wall clock (9:30–15:59), with conversion for each row, so e handle EST and EDT months for the half correctly.
  • Dem apply quarter boundaries based on Eastern trading date: Q1 end March 31, Q2 start April 1.
  • Dollar volume na price times shares wey dem sum for regular hours inside the same queries.
  • Generation dey pass through gated read-only path; public page no dey query live data. Warehouse state na as of July 12, 2026.

Full ledger for the half, indexes, rates and options tape dey inside H1 2026 market recap. If you wan slice sector another way, each panel SQL dey run as e be for Strasmore terminal.

#sectors#etfs#rotation#spreads#semiconductors