VOLUME 1, ISSUE 3 · SPRING 2025 · METHODS
The Common Ion Effect Is Taught Backwards
Computational study · Peer-edited by the club review board · LaTeX source · Analysis code · Raw output · Interactive model
The Rule, Taught Straight
Start with the version every student meets. Silver chloride, or calcium fluoride, or whichever sparingly soluble salt the textbook has on hand, sits in water at equilibrium: solid on one side, a small population of dissolved ions on the other, related by a solubility product \(K_{sp} = [\mathrm{M}][\mathrm{A}]\). Dissolve some already-dissolved-looking sodium salt of the same anion into that water and the anion concentration jumps. The product \([\mathrm{M}][\mathrm{A}]\) cannot exceed \(K_{sp}\), so \([\mathrm{M}]\) must fall, and since \([\mathrm{M}]\) is the solubility, the salt becomes less soluble. That argument, taken alone, is complete and correct as far as it goes. Le Chatelier's principle gives the same answer from a different direction: stress an equilibrium by adding a product, and the system shifts to consume some of it, precipitating more solid. Every general chemistry syllabus we could find teaches one version or the other, usually both, usually with barium iodate or silver chloride as the worked example [1][3][9].
The rule earns its keep outside a beaker too. Soil chemists have used exactly this argument since the 1950s to explain why phosphate fertiliser becomes less available to plants in calcium-rich soil, where the calcium already dissolved suppresses the phosphate salts' own solubility by the identical mass-action logic [12]. A 2013 undergraduate lab exercise still teaches the effect the same way Zuffanti did in 1940: precipitate silver acetate, add more acetate, watch the precipitate grow [1][3]. A 1961 paper even demonstrated it with a radioactive tracer, so that "the solubility went down" could be read off a Geiger counter instead of a scale [2]. The argument generalises, it predicts a real and measurable direction of change, and it costs almost nothing to teach: one line of algebra, one appeal to a principle every student has already half-memorised.
None of that is in dispute here. What is missing from nearly every version of this rule we could find, including several aimed at correcting common misconceptions about \(K_{sp}\) itself [10], is a boundary. The rule as taught has no stated domain of validity: it gets presented the way a conservation law would, not the way an approximation would, and the distinction matters, because \([\mathrm{M}][\mathrm{A}]=K_{sp}\) is only one equation. A real solution can hold several more.
What We Actually Built
The club has no bench and no balance, and nothing below pretends otherwise. What follows came out of a Python script, run on a laptop, that knows nothing about a real beaker beyond the equilibrium constants we typed into it. Given a sparingly soluble salt MA (or MA2), we solve, at a fixed added common-ion concentration and a fixed pH, the coupled system of:
the solubility product, \(K_{sp}=[\mathrm M][\mathrm A]\) or \([\mathrm M][\mathrm A]^2\); stepwise complex formation between the cation and the same anion, \(\mathrm M + n\,\mathrm A \rightleftharpoons \mathrm{MA}_n\) with cumulative constant \(\beta_n=[\mathrm{MA}_n]/([\mathrm M][\mathrm A]^n)\); the anion's own acid-base speciation, \(\mathrm{HA}\rightleftharpoons \mathrm H^+ + \mathrm A^-\), \(K_a\); and the water equilibrium \(K_w=[\mathrm H^+][\mathrm{OH}^-]=1.000\times10^{-14}\) at 25°C, matching the precision value at 298.15 K [11], which fixes \([\mathrm{OH}^-]\) once pH is treated as the externally held variable that professional geochemical modelling software also treats it as [16].
Nothing here is linearised or dropped. Every mass balance is written in full: total dissolved cation is the free ion plus every complex, weighted by nothing but its own concentration; total anion added is the free conjugate base, plus its protonated form, plus every anion tied up in a complex, weighted by stoichiometry. For silver chloride this reduces, after substituting \([\mathrm{Ag}^+]=K_{sp}/c\) (with \(c=[\mathrm{Cl}^-]\)) into both mass balances, to one equation in \(c\) alone,
$$C = \frac{c}{f(\mathrm{pH})} - \frac{K_{sp}}{c} + K_{sp}\beta_2 c + 2K_{sp}\beta_3 c^2 + 3K_{sp}\beta_4 c^3,$$where \(C\) is the added chloride and \(f\) is the fraction of the chloride family present as free Cl- rather than HCl (essentially 1 everywhere we look). Every term on the right of that equation is positive for \(c>0\), so the right side is strictly increasing in \(c\): for any \(C\) there is exactly one physical root, found here by bisection on \(\log c\) rather than by any method that could silently pick the wrong one. Total dissolved silver, \(x(c)\), is then algebraic. Ba(IO3)2 and CaF2 use the same construction with no complex-formation terms, since the club found no well documented complexation of Ba2+ with iodate or Ca2+ with fluoride strong enough to matter, and that omission is named here rather than hidden. Numerical treatments of exactly this kind of coupled system have their own small literature going back to at least 1966 [7][8], and professional geochemical modelling software solves the same class of problem at industrial scale [16]; our solver is a great deal smaller than PHREEQC and answers a great deal narrower a question.
Checking the Machine Before Trusting It
A solver that has not been checked is a guess with more decimal places. Four checks, in increasing order of how much they could have caught.
Every equilibrium and mass balance, at every grid point. We solved all three salts across 24 common-ion concentrations from 10-8 to 5 M crossed with 8 pH values from 0 to 14, 576 solves in total, and at each one substituted the converged concentrations back into \(K_{sp}\), into every \(\beta_n\) expression, and into every mass balance. The worst relative residual over all 576 points, for any of these six checks, was 3.97 × 10-15, under 18 units of machine epsilon, about as close to zero as a double-precision float has any business getting.
An independent full charge balance. Real potentiometric determinations of Ksp lean on exactly this style of cross-check, trusting a known-addition titration only once its own electroneutrality closes [13]. Treating the common ion as a fully dissociated sodium salt and pH as held by an external strong acid or base, the required amount of that titrant can be computed two genuinely different ways: once from full electroneutrality, once from a proton condition referenced to water and the anion's own zero-proton level. The two are algebraically identical only if the mass balances hold, and disagreement here would mean the model's own bookkeeping was inconsistent somewhere charge-based rather than mass-based checks would catch. They agreed to 9.5 × 10-9 (Ba(IO3)2), 1.1 × 10-10 (CaF2) and 4.6 × 10-9 (AgCl): good, but not machine precision, and we did not smooth that over. The gap is catastrophic-cancellation noise between [H+] and [OH-] near pH 7, where both are of order 10-7 and their difference, which the check needs, is not. That gap is a property of subtracting two nearly equal floats, not of the chemistry, and it sits nine to eleven orders of magnitude below any number this article reports as a result.
Closed-form algebra. With no common ion added and pH high enough that the anion is fully
deprotonated, Ba(IO3)2 and CaF2 both reduce to a cubic in the
molar solubility \(x\), \(4x^3 = K_{sp}\), solvable in one line. We also solved that cubic a second
way, independently, with numpy.roots, a general-purpose polynomial root finder that
shares no code with the bisection solver. At four common-ion concentrations each the two methods
agreed to between 1.3 × 10-16 and 9.2 × 10-16,
which is to say they agreed completely.
The published minimum. Section 7 covers this at length, because it is where the interesting disagreement almost, but does not quite, appear.
Plain Arithmetic
Barium iodate first, because it has no complications. \(K_{sp}=1.57\times10^{-9}\). With no common ion and the anion fully deprotonated, solubility satisfies \(4x^3=K_{sp}\), so
$$x = \left(\frac{1.57\times10^{-9}}{4}\right)^{1/3} = 7.32172\times10^{-4}\ \text{M}.$$The solver, working the full coupled system rather than this shortcut, returns 7.321725 × 10-4 M: a relative difference of 3.9 × 10-7 from the hand calculation, and 2.4 × 10-4 from the commonly quoted textbook value of 7.32 × 10-4 M, which is rounded to three figures and should not be expected to agree any more closely than that. Add 0.01 M sodium iodate and the solver gives 1.5602 × 10-5 M, a 21-fold suppression, exactly the sign and roughly the size the rule predicts. No surprises, and starting with the clean case was the point.
Silver chloride in pure water is a better test, because the "simple" answer and the exact one are not quite the same number, and the gap is itself a small result. The naive formula is \(x=\sqrt{K_{sp}}=\sqrt{1.77\times10^{-10}}=1.330413\times10^{-5}\) M, which is also the figure most general chemistry tables quote (1.33 × 10-5 M). The solver, which also accounts for the neutral ion pair AgCl(aq) forming even with no chloride deliberately added, returns 1.34986 × 10-5 M, 1.46% higher. That 1.46% is not solver error. At \(x=1.33\times10^{-5}\) M, \(\beta_1 c \approx 1096 \times 1.33\times10^{-5}\approx 0.0146\), so about 1.4% of the dissolved silver in "pure water" AgCl solubility is already the neutral complex, not the free ion the textbook formula assumes is the only thing there, a small number on its own. Whether a reader finds it satisfying or irritating that even the control case is not quite the idealisation it gets taught as says something about how they will feel about §7.
Meeting 1
Picked the three salts by asking which sparingly soluble salts have a well documented
complex-formation ladder for their own precipitating ion. Silver halides came up first, every
time.
Meeting 1, later
Wanted a second salt with real pH sensitivity, for contrast. Fluoride was the obvious choice: a
genuine weak base, well characterised, and CaF2 has no competing complexation to muddy the
comparison.
Meeting 2
First version of the AgCl solver treated added chloride as equal to free chloride, ignoring how
much gets consumed forming complexes. Fine at low concentration, visibly wrong once complex
formation is the whole story, which is exactly the regime we needed right. Rewrote it around the
full mass balance in §2.
Meeting 2
Charge-balance check came back at 0.35% relative error, nowhere near machine precision. Spent
most of the meeting assuming a real bug. The culprit turned out to be a sign error in the
hand-derived proton condition, not the solver; once corrected, agreement dropped to parts in
109, then
stalled there, which turned out to be floating-point cancellation near pH 7 rather than a second
bug. Documented in §3 instead of hidden.
Meeting 3
Argued for forty minutes about whether the AgCl chloro-complex constants were trustworthy enough
to build an article's headline number on. Resolved by making the uncertainty a first-class part
of the analysis (§10) instead of a footnote.
Meeting 3
Seed fixed at 20250306. Every number in this article is one run of the file as it now stands.
Where Fluoride Behaves
Calcium fluoride gives a cleaner look at a different failure of the naive rule: not a reversal, but a channel the rule never mentions at all. Fluoride is the conjugate base of a real, moderate weak acid, \(K_a(\mathrm{HF})=6.6\times10^{-4}\), \(\mathrm{p}K_a=3.18\) [6], and the \(K_{sp}=3.89\times10^{-11}\) used throughout comes from a 1977 potentiometric redetermination [5]. Hold the total fluoride added fixed at 10-3 M and sweep pH from 0 to 8. At pH 7 and above, where essentially all of that fluoride sits as free F-, the solver settles onto a plateau of 3.41 × 10-5 M dissolved calcium. Drop the pH to 2.55 and solubility has already risen tenfold. Drop it to 1.27 and it has risen a hundredfold. At pH 0 it sits at 2.78 × 10-2 M, 816 times the neutral-pH value, because most of the added fluoride is protonated to HF and no longer counts as free F- for the Ksp expression, so the system must dissolve far more calcium fluoride to keep \([\mathrm{Ca}^{2+}][\mathrm F^-]^2\) pinned at \(K_{sp}\).
Ba(IO3)2 shows a faint trace of the same mechanism (iodic acid is weak enough, \(\mathrm{p}K_a\approx0.77\), to matter below pH 2) and AgCl shows essentially none: run the identical pH sweep at the same fixed 10-3 M added chloride and solubility varies by 0.0000% from pH 0 to 8, because hydrochloric acid has no meaningful conjugate-base chemistry in that range. The lesson is not "pH matters." It is that whether pH matters is a fact about the specific anion, not about solubility equilibria in general, and a rule that never even raises the question cannot tell a student which salts to worry about. The same protonation channel is also more than a classroom curiosity: it governs how far fluoride travels through real acidic groundwater, and is a documented factor in endemic dental fluorosis in low-pH aquifers [15].
None of this, worth stressing, is a reversal with respect to fluoride itself. Add more F- at fixed pH and CaF2 solubility falls, monotonically, everywhere we tested: no Ca2+-F- complex is strong enough in real water to turn that around, and we put none into the model. CaF2 is a salt where pH is a second lever the textbook rule never names, and where the common-ion rule, with respect to the common ion, is completely honest. Keep both of those sentences in mind for what comes next.
The Rule Breaks
Now chloride, on its own, no pH trick required. Add sodium chloride to a saturated silver chloride solution and, exactly as taught, solubility falls: from 1.35 × 10-5 M in pure water down through 8.1 × 10-6 at 1.4 × 10-5 M chloride, down through 1.8 × 10-6 at 10-4 M, continuing to fall for another two decades of added chloride. Then, at 3.011 × 10-3 M added NaCl, it stops falling. Solubility bottoms out at 3.1147 × 10-7 M, 223 times lower than the pure-water value and the lowest concentration of dissolved silver anywhere in this whole study, and every gram of additional chloride from that point on makes the precipitate more soluble, not less.
The minimum's location came out of two completely independent numerical routes: a ternary search
directly on the solver's own \(x(c)\), which is provably convex in \(c\) and therefore has exactly
one minimum, and an exact quartic root (again via numpy.roots, again sharing no code
with the search) of \(3\beta_4c^4+2\beta_3c^3+\beta_2c^2-1=0\), the closed-form stationary-point
condition on the same expression. They agreed to 4.7 × 10-9. Set against
the analytical-chemistry teaching literature, which has described a chloride-concentration minimum
for AgCl solubility since at least Zuffanti's 1940 demonstration paper [1] and reiterated it
through Roig's 1961 radiotracer version [2], both quoting the minimum only as an order of
magnitude rather than to four figures, our number falls inside the 10-3 to 10-2
M range those sources describe. We would rather report that honestly, at the precision the
secondary literature actually supports, than manufacture a false fourth significant figure to
compare against.
Who Is Actually Carrying the Silver
Ask the solver what form the dissolved silver actually takes, rather than only how much of it there is, and the handoff behind the minimum turns into an inventory rather than a curve. Right at the minimum, 62.3% of the dissolved silver is the neutral ion pair AgCl(aq), 18.9% is free Ag+, and 18.8% is AgCl2-, with AgCl32- and AgCl43- together accounting for barely 0.06%. The minimum sits almost exactly where the free-ion channel that used to carry solubility and the complex-ion channel about to take it over are equally weak, a three-way tie between species with nothing else in common except that all three happen to matter least at that one chloride concentration.
Move to 5 M NaCl, near table salt's own solubility ceiling, and the inventory has completely turned over. Free Ag+ has fallen to 7.2 × 10-9 of the total, AgCl(aq) to a rounding error, and 88.3% of the dissolved silver now travels as AgCl43-, with almost all the remainder as AgCl32-. Total solubility there is 4.9564 × 10-3 M, 15,913 times the minimum and 367 times higher than silver chloride dissolves in plain water with no chloride added at all. Le Chatelier's principle, taken on its own, has no way to see any of this coming, because it reasons about one equilibrium being stressed, and by 5 M chloride the equilibrium doing almost all the work is not \([\mathrm{Ag}^+][\mathrm{Cl}^-]=K_{sp}\) any more but \([\mathrm{AgCl}_4^{3-}]=\beta_4[\mathrm{Ag}^+][\mathrm{Cl}^-]^4\), which the common-ion rule was never written to describe, running in the opposite direction and, by 5 M chloride, winning outright.
How Wrong the Textbook Gets
Put a number on "wrong." Define the naive rule's relative error as \((x_{\text{naive}}-x_{\text{exact}})/x_{\text{exact}}\). That error stays small and well behaved only in a narrow band: within ±10% for added chloride between 3.9 × 10-5 and 1.06 × 10-4 M, within ±20% between 2.8 × 10-5 and 2.06 × 10-4 M. Below that band the naive formula actually overshoots, because \(S=K_{sp}/C\) assumes the common ion swamps the salt's own contribution to it, an assumption that fails as \(C\) approaches the pure-water solubility itself; at \(C=10^{-7}\) M, smaller than the salt's own solubility, the naive rule predicts 1.77 × 10-3 M, over a hundred times too high. Above the band the naive rule fails in the opposite direction and never recovers: by \(C=5\) M it predicts 3.54 × 10-11 M, low by a factor of 1.40 × 108, a hundred and forty million, against the solver's 4.96 × 10-3 M. The naive rule is not merely optimistic at high chloride; it is looking at the wrong equilibrium entirely.
| Salt | Ksp (25°C) | Complexation modelled | pH-sensitive | Pure-water solubility | Minimum, and where | Max. enhancement |
|---|---|---|---|---|---|---|
| Ba(IO3)2 | 1.57×10-9 | none found | below pH ≈2 only | 7.3217×10-4 M | none (monotone) | 1.00× (never reverses) |
| CaF2 | 3.89×10-11 | none included | strongly, pH 0–5 | 2.1347×10-4 M | none (monotone) | 1.00× (never reverses) |
| AgCl | 1.77×10-10 | 4-step Cl⁻ ladder | no (<0.0001%) | 1.3499×10-5 M | 3.1147×10-7 M at 3.01×10-3 M | 15,913× (min → 5 M) |
The Map of Where It Holds
Chloride is not the only ligand silver has. Ammonia forms its own well known two-step complex, Ag(NH3)2+, with a standard tabulated overall formation constant near log β2 = 7.05, independent of whatever chloride happens to be around. Add both at once and the question stops being "does the rule hold" and becomes "where, on a map of the two concentrations, does it hold." We solved the full two-ligand system, silver in equilibrium with both Cl- and NH3 simultaneously, on a 26 × 26 grid spanning 10-6 to 5 M chloride and 10-6 to 2 M ammonia, and classified each of the 676 points by the sign of \(d\ln x/d\ln[\mathrm{Cl}^-]\): negative means the textbook rule holds at that point, positive means it has reversed.
222 of the 676 points, 32.8%, reverse. More tellingly, the boundary between the two regions moves in a single, readable direction. With essentially no ammonia present the reversal threshold sits at 3.0 × 10-3 M chloride, matching the pure-Cl- minimum in §7 almost exactly, as it should, since with no ammonia the two systems are the same system. Raise ammonia to 6.0 × 10-3 M and the threshold has moved out to 6.7 × 10-2 M chloride. At 0.11 M ammonia it sits at 0.79 M chloride. At 2 M ammonia, close to the top of our grid, the rule holds almost everywhere we tested and only reverses in the single most concentrated chloride cell. Ammonia does not stop the reversal from happening. It gives silver an escape route into solution that does not depend on chloride at all, which lowers the marginal effect of any given amount of extra chloride and pushes the point where chloride's own complexes take over out to higher and higher concentration. The interactive model lets a reader move both sliders and watch this boundary shift in real time.
The Objection We Take Seriously
Here is the strongest version of the case against everything above. The entire reversal rests on four numbers, the stepwise AgCln formation constants, that trace to one 1952 potentiometric measurement [4] this club could not read in full, because it sits behind a publisher paywall. We do not know, first-hand, how precisely Jonte and Martin themselves believed those constants, and reproducing them from a compiled secondary value, as we did, is exactly the kind of second-hand sourcing that should make a reader suspicious of a headline result. Maybe the reversal is real chemistry. Maybe it is an artifact of a seventy-year-old number nobody in this club independently verified.
We cannot re-run Jonte and Martin's titration. What we can do is ask how wrong those constants would have to be before the conclusion changes, and answer with the same solver rather than with reassurance. We assigned each of the four log β values an assumed uncertainty of ±0.05 (a guess at the kind of precision a careful 1950s potentiometric study could plausibly achieve, not a number the paper itself gave us) and drew 100,000 independent sets from independent normal distributions around the reported values. In every single one of the 100,000 draws, the enhancement ratio from the minimum to 5 M chloride came out above 1: 100.0000% of draws show a reversal. The location of the minimum moved a little: log10(concentration at the minimum) came out at −2.5212 ± 0.0001 (a standard error, not a range), corresponding to 3.01 × 10-3 M with essentially no spread worth reporting at this sample size, while the enhancement ratio itself averaged 16,165 ± 6.5 across the draws, close to but not identical to the 15,913 computed at the nominal constants, which is simply what averaging a mildly nonlinear function over a distribution does. We went further and asked how far \(\beta_2\) alone would have to be wrong, holding \(\beta_3\) and \(\beta_4\) at their nominal values, to push the minimum out past 6.1 M, roughly where liquid water can no longer hold any more NaCl at all: there is no positive value of \(\beta_2\) that does it, because \(\beta_3\) and \(\beta_4\) alone are already large enough to force a minimum inside the physically reachable concentration range. Short of the original measurement being wrong by several orders of magnitude, not a plausible reading of even a skeptical prior on 1950s potentiometry, the reversal survives. What does not survive scrutiny is any claim to know its exact location or size to more than about two significant figures, and we have tried not to claim that anywhere above.
What to Actually Remember
Keep the rule. Throw out the word "always." Adding a common ion suppresses solubility whenever the ion you added does nothing else, and for most of the salts a first-year course reaches for, table salt, chalk, gypsum, that is the whole story and the rule is simply correct. Get suspicious the moment the precipitating cation is one chemistry already treats as a good complex-former, silver, copper(I), lead, mercury, aluminium, zinc, and the anion you are adding is also a competent ligand for it, halides above all, along with hydroxide, cyanide, thiosulfate, ammonia. In that combination, and really only in that combination, keep adding the common ion and past some concentration, usually far below where the salt itself would ever saturate a real solution, the rule inverts. The mechanism is not exotic: it is the same law of mass action the rule itself is built on, applied to a second reaction the rule was never written to include. A student who leaves remembering one sentence should leave with this one: solubility is set by every equilibrium the ion actually participates in, and \(K_{sp}\) is only ever one of them.
Reproducing this
One file, one command. No packages beyond numpy, on Python 3.12.
python solubility-equilibria.py > solubility-equilibria-output.txt
Expected runtime is a few seconds to a low number of tens of seconds. Three runs on the same
laptop printed 6.56, 8.24 and 6.82 seconds, with numpy 2.4.2 on Python 3.12.3; every printed number
was identical across all three, since nothing in the file depends on wall-clock time. The master
seed is 20250306, hard-coded once, and the single default_rng stream feeds the entire
Monte Carlo section deterministically. Every figure above, and every number quoted in the text,
comes out of that one file; the printed coordinate blocks near the end of the raw output are the
exact pixel positions transcribed into the SVG markup here. The interactive model runs the same equations in
your browser and reproduces the minimum and the regime map at its default settings.
References
- Zuffanti, S. (1940). Solubility product: a demonstration introducing the common ion effect and formation of complex ions. Journal of Chemical Education 17, 433. doi:10.1021/ed017p433
- Roig, E., Rieckehoff, I. C., Russo, G. S. & Curet, J. D. (1961). Radioisotope demonstration of common ion effect on solubility. Journal of Chemical Education 38, 350. doi:10.1021/ed038p350
- Laranjo, M. T. & Amaral, S. T. (2013). Determining the solubility product of silver acetate and verifying the common-ion effect: a general chemistry experiment. The Chemical Educator 18, 24–27. doi:10.1333/s00897132458a
- Jonte, J. H. & Martin, D. S. Jr. (1952). The solubility of silver chloride and the formation of complexes in chloride solution. Journal of the American Chemical Society 74, 2052–2054. doi:10.1021/ja01128a058
- Macaskill, J. B. & Bates, R. G. (1977). Solubility product constant of calcium fluoride. The Journal of Physical Chemistry 81, 496–498. doi:10.1021/j100520a026
- Usha, A. V. & Atkinson, G. (1992). The effect of pressure on the dissociation constant of hydrofluoric acid and the association constant of the NaF ion pair at 25°C. Journal of Solution Chemistry 21, 477–488. doi:10.1007/bf00649700
- Stone, E. E. (1966). Complex chemical equilibria: application of Newton-Raphson method to solve non-linear equations. Journal of Chemical Education 43, 241. doi:10.1021/ed043p241
- Baeza-Baeza, J. J. & García-Álvarez-Coque, M. C. (2011). Systematic approach to calculate the concentration of chemical species in multi-equilibrium problems. Journal of Chemical Education 88, 169–173. doi:10.1021/ed100784v
- Gamsjäger, H., Lorimer, J. W., Scharlin, P. & Shaw, D. G. (2016). Common ion effect. IUPAC Compendium of Chemical Terminology. doi:10.1515/iupac.80.0077
- Priyasmika, R. (2023). Analysis of misconceptions on material solubility and solubility product (Ksp) using a four tier diagnostic test instrument. Tarbiyah: Jurnal Ilmiah Kependidikan 12, 115–126. doi:10.18592/tarbiyah.v12i2.10647
- Bandura, A. V. & Lvov, S. N. (2006). The ionization constant of water over wide ranges of temperature and density. Journal of Physical and Chemical Reference Data 35, 15–30. doi:10.1063/1.1928231
- Kittrick, J. A. & Jackson, M. L. (1955). Common ion effect on phosphate solubility. Soil Science 79, 415–422. doi:10.1097/00010694-195506000-00001
- Midgley, D. (1988). Common ion effect in the determination of solubility products by means of known addition potentiometry. The Analyst 113, 1743. doi:10.1039/an9881301743
- Hunter, R. J. (1966). Calculation of activity coefficient from Debye-Hückel theory. Journal of Chemical Education 43, 550. doi:10.1021/ed043p550
- Gbadebo, A. M. (2012). Groundwater fluoride and dental fluorosis in southwestern Nigeria. Environmental Geochemistry and Health 34, 597–604. doi:10.1007/s10653-012-9455-1
- Parkhurst, D. L. & Appelo, C. A. J. (2013). Description of input and examples for PHREEQC version 3: a computer program for speciation, batch-reaction, one-dimensional transport, and inverse geochemical calculations. U.S. Geological Survey Techniques and Methods, book 6, chapter A43. doi:10.3133/tm6a43