Months after a batch is cured, small orange or brown freckles appear — first one bar, then several, usually starting where the soap was handled or where it faced the room. They smell faintly of crayons or old cooking oil. That's DOS, and unlike almost everything else that goes wrong in soapmaking it cannot be fixed, only prevented.
What it is: the fat in your bar that never became soap has oxidized. Oxygen attacks the double bonds in unsaturated fatty acids, and the breakdown products are colored and smell rancid. Every extra double bond in a fatty acid at least doubles how fast it happens — which is where the useful number comes from, and it isn't the one soapmakers watch.
The number to watch isn't iodine
Iodine value counts double bonds, so it is the obvious candidate and it is on every calculator screen. The problem is that it counts them all the same. Oleic acid has one double bond and is comparatively stable; linoleic has two and linolenic has three, and both go many times faster. An oil can carry a high iodine value almost entirely as oleic and be fine.
The sounder rule, from classicbells, is to keep linoleic + linolenic at or below 15% of the blend. Our engine computes that directly:
| Blend | Iodine | Oleic | Linoleic + linolenic | Against the 15% rule |
|---|---|---|---|---|
| Lard barlard 50 / olive 30 / coconut 15 / castor 5 | 60 | 45% | 7% | Within it. |
| Classic barolive 35 / coconut 30 / palm 30 / castor 5 | 53 | 38% | 8% | Within it. |
| Sunflower bar, high oleichigh-oleic sunflower 40 / coconut 30 / palm 25 / castor 5 | 54 | 46% | 5% | Within it. |
| Castile100% olive | 85 | 69% | 13% | Within it. |
| Hemp barhemp 25 / olive 20 / coconut 30 / palm 20 / castor 5 | 76 | 27% | 24% | Over — 1.6× the limit. |
| Grapeseed bargrapeseed 35 / coconut 30 / palm 30 / castor 5 | 69 | 21% | 28% | Over — 1.9× the limit. |
| Sunflower bar, ordinarysunflower 40 / coconut 30 / palm 25 / castor 5 | 74 | 19% | 31% | Over — 2.1× the limit. |
Computed by this site's engine at 5% superfat; per-oil figures are in the oil properties chart. The 15% guideline is classicbells'. Highlighted rows are the pair that makes the point.
Read the two highlighted rows together. Castile has the highest iodine value here — 85 — and only 13% polyunsaturated, comfortably inside the rule, because almost all of that unsaturation is oleic. The ordinary sunflower bar has a lower iodine value of 74 and 31% polyunsaturated, double the limit. If you picked your recipe by the iodine column you ranked those two backwards, and 40 of the 94 oils in our table are over the 15% line whatever their iodine says.
The label tells you almost nothing. Ordinary sunflower oil is 71% linoleic plus linolenic; the high-oleic variety, sold under the same everyday name, is 5%. That is 14 times the fragile fat, from a jar that looks identical. Safflower runs 75% against 15%, and canola 30% against 16%. If a supplier can't tell you which one they're selling, assume the worse of the two — and the seed oils at the top of the range are worse again: evening primrose oil at 89%, pomegranate seed oil at 85%, raspberry seed oil at 81%.
How much fragile fat is actually in the bar
Only the oil that never saponified is exposed — soap itself is far more stable than the fat it came from. So the quantity that matters is your superfat multiplied by how much of your blend is polyunsaturated, and it moves further than either decision suggests on its own:
| Blend | At 5% superfat | At 20% superfat |
|---|---|---|
| Lard bar | 3.5 g | 14.0 g |
| Classic bar | 4.0 g | 16.0 g |
| Sunflower bar, high oleic | 2.5 g | 10.0 g |
| Castile | 6.5 g | 26.0 g |
| Hemp bar | 12.0 g | 48.0 g |
| Grapeseed bar | 14.0 g | 56.0 g |
| Sunflower bar, ordinary | 15.5 g | 62.0 g |
Grams of polyunsaturated free oil per kilo of oils — superfat × the blend's linoleic + linolenic share. Computed by this site's engine.
A lard bar at 5% superfat leaves 3.5 g of oxidation-prone free fat per kilo. The ordinary sunflower bar at 20% leaves 62.0 g — 18 times as much, from two choices that feel unrelated to each other and to rancidity.
Which puts a familiar piece of beginner advice in an awkward light. Raising superfat is recommended for gentleness and as a margin for error, and both are good reasons — but every point of superfat is another gram per kilo of fat waiting to oxidize, so a high superfat and a long shelf life are in direct tension. The superfat guide argues for 5% as a floor; this is the argument against treating 15% as a free upgrade. If your blend is polyunsaturated, keep the superfat modest.
It is mostly not your oils
Here is the reframe that catches most people out. Recipes get blamed for DOS, but the trigger is usually contamination: classicbells is blunt about it — "metallic contamination is the single most important trigger for rancidity in soap", with copper the worst offender, then iron and lead. Trace metals catalyze the oxidation; without them the same fats last far longer.
- Use distilled water. The cheapest single thing on this page. Tap water carries dissolved minerals and metals straight into the batch.
- Don't cure on metal. Coated wire racks scratch; plain steel and anything copper is worse. Plastic, plastic-coated or stainless is the answer, and a wooden shelf is fine.
- Buy oils you'll use. Oil that was already partly oxidized when it went in cannot be rescued by anything downstream. Buy sizes you get through, keep them cool and closed, and smell them before a batch.
- Store finished bars cool, dark and dry. Heat, light and humidity all accelerate it. Wrap after curing rather than during.
Most of what circulates about preventing DOS is folklore, but there is real work behind some of it: Kevin Dunn's artificial-aging experiments, reported by Wholesale Supplies Plus, aged soaps in oxygen and watched for spots. Olive oil soap in an oxygen atmosphere went noticeably orange after about 100 hours; coconut oil soap barely changed. Adding a chelator and an antioxidant together — 0.1% tetrasodium EDTA plus 0.1% rosemary oleoresin, by oil weight — pushed the onset past 250 hours. Of the chelators tested, EDTA was the effective one. Citrate, which many handmade soapmakers use instead, did not perform against rancidity in those tests, though it does chelate the hard-water minerals that cause soap scum, and the maker community reports it helps. Worth knowing which part of that is measured and which is reported. Whichever you use, the acid additives calculator gives the dose — and the extra lye, if you make citrate from citric acid.
Can you save a bar that has spots?
No. Oxidation is not reversible, and the spots spread — a bar with three freckles today has more next month, because the breakdown products catalyze further breakdown. You can cut spots off a large bar and use the rest quickly for yourself, and you should not sell or gift affected soap. Check the rest of the batch, since they usually go together.
What DOS is not: it is not lye-related and not a safety problem in the way a lye-heavy bar is — a spotted bar will wash you perfectly well, it just smells wrong and looks worse. It's also not soda ash, which is white, appears in days rather than months, and rinses off.
One caution about the iodine column itself
A last reason to read the fatty acids rather than the summary number. The oil dataset every soap calculator shares — ours included, from SoapCalc oil list — lists pomegranate seed oil at an iodine value of 22, next to a profile of 78% linolenic acid. Those two figures cannot both be right: a fat that is 78% triply-unsaturated has an iodine value well over 200, not 22. The listed INS of 168 is computed from the same wrong number, and it propagates, because the second "independent" reference is the same dataset.
We print the value as published rather than quietly correcting someone else's data — but we can see the contradiction at all only because we hold the fatty acids beside it. If you are choosing an oil for shelf life, add up the linoleic and linolenic and ignore the iodine column.
The short version
- Add linoleic + linolenic, aim for 15% or less. Iodine ranks recipes backwards.
- Check which sunflower you bought. 71% or 5%, same name.
- Superfat multiplies it. 3.5 g/kg to 62.0 g/kg across ordinary choices.
- Distilled water, no metal racks. Metals are the trigger, not the fats.
- It can't be fixed — and it isn't a safety problem, just a ruined bar.