Changes in version 2.2.0-33 o label.plot() and label.figure() now handle logarithmic scales for x and y axes. o Fix bug preventing mosaic() from being used to form H2O. o For IAPWS95 water model, add 0.1 bar (0.01 MPa) to values of Psat > 1 bar computed from WP02.auxiliary() to prevent Born functions, which are calculated as finite difference derivatives, from exploding. o Add stibnite (Sb2S3) from Robie and Hemingway (1995). o Add skutterudite (CoAs2.92) and heazlewoodite (Ni3S2) from Majzlan et al. (2022). o Add phosphorylate() to calculate affinity of phosphorylation reactions with pH-dependent speciation, including Mg-complexed species. o Add hyphen.in.pdf() for replacing minus signs with hyphens in text added to PDF plots. o Use Elementa reference style (like CSE name-year style but all authors are listed) in Rd files. o Add colors to demo/NaCl.R. o Add aqueous SO2 and the trisulfur radical ion (S3^-) to basis species for mosaic calculations in examples, demos, and vignettes. However, some lines with S3^- are commented because of large slowdowns (especially in anintro.Rmd and multi-metal.Rmd). Thanks to Evgeniy Bastrakov for suggesting this change. o Remove lex(), which only wrapped its argument in as.expression(c()). o Remove unused subroutines in src/H2O92D.f: valTD, Psublm, TsHGK, TdPsdT, tcorr, and cpswap. o Add CI workflow for Codecov. o Move demos() and examples() functions to demos. These "meta-demos" show output on screen (demo/demos.R, demo/examples.R) or save to PNG files (demo/demos_png.R, demo/examples_png.R) o Add FAQ question: How is the _sum of activities_ of basis species defined for mosaic diagrams? Changes in version 2.2.0 (2025-06-20) OBIGT DATABASE FORMAT o Mineral species whose T value is a Cp equation limit or phase transition temperature are indicated by CGL or CGL_Ttr, respectively, in model. At temperatures above the T limit, subcrt() extrapolates values and produces a warning for CGL species or returns NA values for CGL_Ttr species. The addition of CGL_Ttr replaces the previous strategy of using signed values of T. OBIGT DEFAULT DATA o Add tantalum species from Hu et al. (2024). o Add germanium, indium, gallium, and cadmium minerals and aqueous species from the compilation of Huston and Bastrakov (2024). Move Cd and In chloride, In fluoride, and Ga hydroxide complexes from Shock et al. (1997) and Sverjensky et al. (1997) to optional data. Thanks to Evgeniy Bastrakov for providing data files for these species and for Co, Ta, Nb, U, and REE minerals and uranyl complexes mentioned below. o Add palladium and platinum hydrosulfide complexes (Pd(HS)4^-2 and Pt(HS)4^-2) from Laskar et al. (2025). o Add aqueous uranyl complexes from Migdisov et al. (2025). Move aqueous uranium species from Shock, Sassani and Betz (1997) (except for HUO4^-) to optional data. o Add alkylamines, benzylamines, and aminiums from Robinson et al. (2024). o Add tin chloride complexes and updated parameters for Sn^+2 and Th^+4 from Liu et al. (2023). o Add uranium, uraninite (UO2), beta-UO2.25, UO2.25, alpha-UO2.3333, beta-UO2.3333, UO2.6667, gamma-UO3, rutherfordine (UO2CO3), beta-UO2(OH)2, and Na2U2O7 from Grenthe et al. (2020). o Add Fe-bearing serpentinization-relevant minerals (ferrous hydroxide, ferrotremolite, greenalite, minnesotaite, Mg-cronstedtite, and hisingerite) from Leong and Shock (2020). o Add REE minerals from the compilation of Migdisov et al. (2016) with modifications. o Add yttrium fluoride complexes (YF^+2 and YF2^+) from Loges et al. (2013). o Add REE fluoride and chloride complexes from Migdisov et al. (2009) (previously available in CHNOSZ 0.9-5 to 1.0.8). Move aqueous REE species from Haas et al. (1995) to optional data. o Add beta-Ta2O5 from Jacob et al. (2009). o Add Co(OH)2 from Shvarov and Bastrakov, 1999. o Add chromite (FeCr2O4) and cassiterite (SnO2) from Robie and Hemingway (1995). Move cassiterite from Jackson and Helgeson (1985) to optional data. o Add spherocobaltite (CoCO3) from Barin et al. (1977). o Add CoSO4 and beta-Nb2O5 from Naumov et al. (1974). A PDF of this publication is available from the National Technical Reports Library. o Move americium complexes from optional to default data. Entropy of the element Am has been listed in element.csv since CHNOSZ 1.4.0. o Cite Denbigh (1981) for the hydrogen ion convention. o Due to an apparent typo in Wagman et al. (1982), Δ_H_°f for In^+3 and derived species was corrected by -7335 cal/mol to maintain GHS consistency. This is in addition to the correction for S° previously noted by Shock and Helgeson (1988). o Fix sign of _c_ parameter for nesquehonite. Thanks to James Leong and Grayson Boyer. o Restore steam (H2O gas). OBIGT OPTIONAL DATA o Make new directory OBIGT/testing to hold optional data files for testing, including SiO2.csv (renamed from AS04.csv) and GEMSFIT.csv in addition to those listed below. o Add testing/IGEM.csv: Au and Cu complexes and SO4^-2-bearing species from researchers at IGEM RAS. o Add testing/Sandia.csv: Mg(OH)2-MgCl2-H2O phases from Knight et al. (2024). DOCUMENTATION o Major revision of *anintro.Rmd*. o Add demo/MgATP.R: speciation of ATP with H^+ and Mg^+2, based on Alberty (2003) (moved from anintro.Rmd). o Update demo/contour.R to use conditions taken from Ding et al. (2023) and optional data for Au species from IGEM RAS, including polynuclear Au2S2^-2. o Add demo/rubisco_Zc.R, moved from anintro.Rmd. o Add demo/sum_S.R: log _f_O2-log _m_ ΣS diagram for Fe-S-O-C minerals with solubility contours for Fe and Au. o Add demo/uranyl.R: total (carbonate|sulfate)-pH diagrams for uranyl species, after Migdisov et al. (2025). o Add FAQ questions: • Why are mineral stability boundaries curved on mosaic diagrams? • Where do the names CHNOSZ, OBIGT, and subcrt come from? • What are the main limitations of CHNOSZ? NEW FEATURES o axis.label() now uses summation symbol (Σ) for total activity or molality of basis species used as a plotting variable in mosaic(). o Restore lines to the output of diagram() with the the x and y coordinates of stability field boundaries. o check.EOS() now uses values of Born coefficients _X_ and _Q_ that are consistent with either SUPCRT92 or DEW, depending on the model listed for the species in OBIGT (HKF or DEW, respectively). o rank.affinity() now rescales average ranks of groups to the same bounds. CHANGES TO NAMES AND DEFAULTS o In diagram(), the default for the *type* argument when using the output from solubility() is now loga.balance (sum of activities of aqueous species) rather than loga.equil (activities of individual aqueous species). o In NaCl(), rename argument *m_tot* to *m_NaCl* (moles of of NaCl added to 1 kg H2O) and rename output with m_Naplus, m_Clminus, m_NaCl0, and m_HCl0 (molalities of aqueous species). o Rename logB.to.OBIGT() to logK.to.OBIGT() and add a *state* argument which accepts aq (aqueous species using heat capacity parameters in the HKF model; the default) or cr (minerals using the Maier-Kelley equation in the CGL model; a new option). o In water(), rename *P1* logical argument to *Psat_floor* numeric argument. BUG FIXES o water() with the IAPWS95 model now respects the value of *Psat_floor*, making it possible to remove the floor of 1 bar. o Fix using Eh in transect mode of affinity() (feature was not working since at least version 0.9-7). OTHER CHANGES o expr.species() no longer subscripts formulas after a variable (activity, fugacity, or molality: _a_, _f_, or _m_). This avoids readability issues with double subscripting of elements' coefficients. An example of the new formatting is “log _f_O2”. o Add scripts and data files in extdata/protein/Cas for amino acid compositions of CRISPR-associated (Cas) proteins in different classes and subtypes listed by Makarova et al. (2020). o Remove ispecies from output of check.OBIGT() to avoid trivial diffs. REMOVED FEATURES o Remove add.alpha(). Instead of this function, grDevices::adjustcolor() is now used in stack_mosaic() to add transparency. o Remove seq2aa(). o Move read.fasta(), count.aa(), and aasum() to canprot with different names (read_fasta(), count_aa(), and sum_aa()). o Move equilibrium.Rmd and protein.equil() to JMDplots. Changes in version 2.1.0 (2024-02-11) NEW FEATURES o Add *FAQ.Rmd* vignette with the following questions: How is ‘CHNOSZ’ pronounced?, How should CHNOSZ be cited?, What thermodynamic models are used in CHNOSZ?, When and why do equal-activity boundaries depend on total activity?, How can minerals with polymorphic transitions be added to the database?, How can I make a diagram with the trisulfur radical ion (S3^-)?, In OBIGT, what is the meaning of T for solids, liquids, and gases?, and How can mineral pH buffers be plotted? o Add *use.polymorphs* argument to subcrt() to allow turning off automatic identification of stable polymorphs. This is used in the FAQ (How can minerals with polymorphic transitions be added to the database?). o Restore EOSregress.R and its reverse dependencies *eos-regress.Rmd* and demo/adenine.R. Thanks to Kris Fecteau and Kirt Robinson for the suggestion. o mosaic() now handles the situation where the alternate basis species include one of the axis variables on a diagram (by changing the argument names in its internal calls to affinity()) and adjusts the labels for the diagram accordingly (e.g. “total C”, “total S”, etc.). Thanks to Evgeniy Bastrakov for the suggestion. o The environment variable CHNOSZ_BUILD_LARGE_VIGNETTES is used to control *dpi* in knitr chunk options. Setting this variable results in larger vignettes that are used for the CHNOSZ website; if this variable is unset (as in CRAN checks), a smaller package is built. o rank.affinity() now returns average group rankings as percentage values. OBIGT DATABASE o subcrt() now outputs ΔG° and issues a warning above the temperature limit for Cp equations for minerals and other CGL species. The temperature limit for Cp equations is stored as the opposite (negative) value in OBIGT. The previous behavior of outputting NA for ΔG° and issuing a message is now reserved for phase stability limits (i.e., melting, vaporization, or decomposition). See *FAQ.Rmd* for details. o Add carrollite (Cu0.92Co2.07S4) from von der Heyden et al. (2024). o Modify cattierite (CoS2) and linnaeite (Co3S4) to use parameters from Pankratz et al. (1987) as listed by Williams-Jones and Vasyukova (2022). o Add 36 charged amino acids from Kitadai (2015) and update several others (Arg^+, Arg^-, Asp^-, Glu^-, His^+, Lys^+, Lys^-, and Tyr^-). Thanks to Grayson Boyer. o In OBIGT(), load Berman_cr.csv before inorganic_cr.csv so that info("Fe2O3") matches hematite rather than maghemite. o Rename checkGHS() and checkEOS() to check.GHS() and check.EOS() and change the default for *return.difference* to TRUE. BUG FIXES o Fix bugs in subcrt() where *exceed.Ttr* and *IS* arguments were not applied to automatically balanced reactions. o Fix bug in dPdTtr() where OBIGT database parameters were not converted to Joules. This allows re-activating the tests for quartz (which depend on the computed transition temperature) in test-subcrt.R. Changes in version 2.0.0 (2023-03-13) MAJOR USER-VISIBLE CHANGES o Units of Joules instead of calories are now used by default for the thermodynamic properties output by subcrt(). That is, E.units("J") is the default setting. Scripts that implicitly depend on the previous default setting of E.units("cal") may need to be modified to produce expected output. o A model column has been added to the OBIGT thermodynamic database. This specifies the model for calculating standard thermodynamic properties. Currently available models are H2O (water), HKF (revised Helgeson-Kirkham-Flowers model for aqueous species), CGL (heat capacity equation for crystalline, gas, and liquid species), Berman (Berman model for minerals), AD (Akinfiev-Diamond model for aqueous species), and DEW (Deep Earth Water model, a variation of HKF). All OBIGT data files that can be read using add.OBIGT() must have this column; there is no back-compatibility support for data files in the old format. o Backward compatibility for OBIGT data files without an E_units column has been removed. o Order-of-magnitude (OOM) scaling of heat capacity coefficients for the CGL model in OBIGT data files has been removed. OOM scaling of HKF and DEW model parameters is still in place. o Change license from GPL (>= 2) to GPL-3. OBIGT DATABASE o Move aqueous CH4 back to organic_aq.csv and move gaseous CH4 from inorganic_gas.csv to organic_gas.csv. o Modify OBIGT(no.organics = TRUE) to prune the database of organic compounds _except_ CH4. The ability to remove hundreds of more complex organic compounds while keeping CH4 is useful for some calculations for abiotic reactions in hydrothermal systems. o Merge biotic_aq.csv into organic_aq.csv. o OBIGT/inorganic_cr.csv: Add aluminum (Al), cobalt monoxide (CoO), guite (Co3O4), and zinc from Robie and Hemingway (1995). o OBIGT/inorganic_cr.csv: Modify linnaeite (Co3S4) to use 25 °C parameters from Robie and Hemingway (1995) and heat capacity coefficients from Pankratz et al. (1987). o OBIGT/inorganic_cr.csv: Modify Co-pentlandite (Co9S8) to use parameters from Pankratz et al. (1987) as listed by Williams-Jones and Vasyukova (2022). o OBIGT/organic_aq.csv: Correct formulas of Na(Mal)-, K(Mal)-, and Dy(Mal)+. Thanks to Grayson Boyer. NEW FEATURES: THERMODYNAMIC DATA o Add logB.to.OBIGT() to fit selected thermodynamic parameters (G and S at 25 °C and c1, c2, and omega HKF coefficients) to formation constants of aqueous species as a function of temperature. o Add vignette *custom_data.Rmd* with description of database format, data-entry conventions, and examples of customizing the thermodynamic database using add.OBIGT(), mod.OBIGT(), and logB.to.OBIGT(). NEW FEATURES: DIAGRAMS o Add stack_mosaic() to create stacked mosaic diagrams, where the species formed in the first layer become the basis species for the species formed in the second layer. This function implements the procedure for making mosaic diagrams for bimetallic systems described in *multi-metal.Rmd*. o Add loga_aq argument to mosiac() (also present in new function stack_mosaic()) to control the activity of mosaiced aqueous basis species. This obviates a workaround that was previously used in the Mosaic Stacking 2 section of *multi-metal.Rmd*. o Add add.alpha() to add alpha value to a color specified in any notation accepted by col2rgb(). NEW FEATURES: PROTEINS o Add function rank.affinity() to calculate means of affinity rankings for specified groups of proteins, intended for evolutionary comparisons. The output of the new function can be used by diagram(). o Add an *as.residue* argument to add.protein() to normalize amino acid compositions by protein length. o Add a check to add.protein() that all new protein IDs (protein name + organism name) are unique. o In affinity(), print a message to indicate whether ionization calculations for proteins are being done. o seq2aa() allows an empty sequence (zero counts of amino acids), useful for intializing a data frame of amino acid composition. NEW FEATURES: OTHER o NaCl() has been rewritten to include pH dependence (i.e. formation of HCl as well as NaCl) by using affinity() and equilibrate() instead of algebraic equations. o Ion size parameters used in the Bdot equation have been moved from the code for nonideal() to extdata/thermo/Bdot_acirc.csv, which is read into thermo()$Bdot_acirc and can be changed by the user. o The two preceding features are used in a new demo yttrium.R to show speciation of Y-Cl complexes as a function of NaCl concentration, pH, _T_, and _P_, after Guan et al. (2020). REMOVED FEATURES o cgl(), hkf(), and AD() are no longer exported. subcrt() should be used for all calculations of thermodynamic properties. o Remove EOSregress() and the associated demo and vignette. o Remove parallel calculations in read.fasta() and count.aa(). o Remove revisit(), findit(), uniprot.aa(), nucleic.formula(), and nucleic.complement(). BUG FIXES o Add stringsAsFactors = FALSE to a cbind() call in mix(), needed for R < 4.0.0. Thanks to Xiaojia Jiang for the bug report. o In *multi-metal.Rmd*, work around absence of hcl.colors() in R < 3.6.0. o diagram(): Improve handling of length > 1 col, lty and lwd arguments for predominance diagrams. Because field boundaries are drawn for the first species, then that species is removed before drawing boundaries for the second species, and so on, species for which different-colored or -styled lines are desired should be placed at the top of the species list. This change makes possible one less call to diagram() in Mosaic Stacking 1 and 2 in *multi-metal.Rmd*, and now the entire chalcopyrite field in Mosaic Stacking 2 is bounded by a thick orange line, instead of just the border with bornite. o Improve handling of non-integer coefficients in expr.species(). For example, the result for FeS1.33 was previously incorrectly formatted as FeS.33 but is now correctly formatted as FeS1.33. OTHER CHANGES o The component of the output of subcrt() contains the model for each species. o subcrt() produces an error if an aqueous species with the DEW model is requested but the DEW water model isn't activated. o Add a *zap* argument to mod.OBIGT() to clear parameters of preexisting species (used by logB.to.OBIGT()). o In affinity(), make loga.protein = 0 the default (changed from -3). o Add tests stack_mosaic.R and stack_solubility.R (these create PDF files for visual inspection of results). o axis.label() produces labels with units delimited by parentheses instead of a comma. o seq2aa() now has the *sequence* argument first and a default of NA for *protein* (the protein name). o Remove unused cutoff value in thermo()$opt. o Move *ibasis* argument to first position in describe.basis(). Changes in version 1.4.3 (2022-02-22) UNIT TESTING o Skip tests on CRAN that fail for M1mac and ATLAS (heat capacity and the second derivative of H2O density in tinytest/test-AD.R). Changes in version 1.4.2 (2022-02-08) PLANNED API CHANGE o In the next major release of CHNOSZ (to be version 2.0.0), units of Joules instead of calories will be used by default for the thermodynamic properties output by subcrt(). That is, E.units("J") will be the default setting. User scripts that implicitly depend on the current default setting of E.units("cal") will need to be modified to produce expected results after this change is made. THERMODYNAMIC CALCULATIONS o The AD() function, which provides an implementation of the Akinfiev and Diamond (2003) equation of state for aqueous nonelectrolytes, now calculates entropy, heat capacity, and volume in addition to the previously available Gibbs energy. o For minerals with thermodynamic parameters in the equations of Berman (1988), info() with a numeric argument now lists values of G, H, S, Cp, and V at 25 °C and 1 bar (these were previously shown as NA). Thanks to Evgeniy Bastrakov for suggesting both of these changes. OBIGT DATABASE o Add H2WO4(aq) and Cp coefficients of scheelite (CaWO4) from Liu et al. (2021). o Add aqueous species in the system Ca-Mg-Na-K-Al-Si-O-H-C-Cl from Miron et al. (2016) and Miron et al. (2017) to GEMSFIT.csv. o Add pyrobitumen (C54H42) from Helgeson et al. (2009) to organic_cr.csv. o Move Ar, Xe, CH4, and CO2 from organic_aq.csv to inorganic_aq.csv. o Fix formula of CaCl2 in DEW.csv. Thanks to Grayson Boyer. o Remove OldAA.csv (superseded thermodynamic parameters for amino acids). This file is now available in the JMDplots package. OTHER CHANGES o Tests are now run using the tinytest package. o Add an *add* argument to basis() to allow adding a species to an existing set of basis species. o The AkDi() function has been renamed to AD(), and all variables and data files likewise use the acronym AD. In particular, the Akinfiev-Diamond model is activated for an aqueous species by using abbrv = "AD" in thermo()$OBIGT. o Names of functions, variables, and data files now use capitalized Berman, not berman. o In vignettes/multi-metal.Rmd (“Diagrams with multiple metals”), add a link to the associated paper (Dick, 2021). REMOVED FUNCTIONS o Remove maxdiff() and expect_maxdiff(), previously used in tests. o Remove read.blast(), id.blast(), write.blast(), def2gi(), and example files in extdata/bison. o Remove eqdata(), a script for extracting data from EQ3/6 output files. Changes in version 1.4.1 (2021-04-09) NEW FEATURES o Add demo/Pourbaix.R (Eh-pH diagrams with isosolubility lines, after Pourbaix, 1974). This demo depends on the following two changes. o Revise solubility() to enable calculating overall (i.e. minimum) solubility for multiple minerals. Calculations for multiple minerals are also now used in demo/zinc.R. o Restore *lty.aq* and *lty.cr* arguments to diagram() to control plotting of aq-aq and cr-cr field boundaries. o Add *no.organics* argument to OBIGT() to load the thermodynamic database without organic species. DATA UPDATES o OBIGT/Berman_cr.csv: Where possible, use standard abbreviations for mineral names (including hematite (Hem) and magnetite (Mag)), as listed by Whitney and Evans (2010). o OBIGT/organic_aq.csv: Add properties of aqueous fatty acids, saccharides, and other species, and add associated demo/E_coli.R (Gibbs energy of biomass synthesis in _E. coli_, after LaRowe and Amend, 2016). o OBIGT/inorganic_aq.csv: Add properties of aqueous Nb and Ta species from Akinfiev et al., 2020. o OBIGT/inorganic_cr.csv: Add willemite (Zn2SiO4) from Robie and Hemingway, 1995 and Barin et al., 1977 (heat capacity equation). o OBIGT/inorganic_cr.csv: Move alunite here from SUPCRT92.csv. o thermo/protein.csv: Rename CDC2_HUMAN to CDK1_HUMAN (UniProt: P06493). OTHER CHANGES o Automatic detection of dissociation reactions was fragile and has been removed from solubility(). The new default (dissociate = FALSE) is to not consider dissociation reactions. o In the return value of diagram(), predominant.values previously only contained affinities (extracted from the values element of the eout argument). Now it has the values for the predominant species extracted from the values actually used to make the plot (the plotvals list in the output), i.e. affinities divided by the balancing coefficients if eout is the output of affinity, or activities if eout is the output of equilibrate. Therefore it can now be used to draw contours or a color image showing the activities of the predominant species. This is used for a diagram in a new preprint (Dick, 2021). o Revise multi-metal.Rmd: Improve mineral abbreviations and placement of labels; use updated DFT energies from Materials Project; add Mosaic Stacking 2 (minerals and aqueous species); add _K_^eff calculation (Robinson et al., 2021); add Δ_G_pbx color scale. o Rename demo/berman.R to demo/potassium.R. o Remove unused limSolve package from Suggests in DESCRIPTION. o Add option thermo()$opt$ionize.aa to control calculation of properties of ionized proteins in affinity(). o Fix bug where protein ionization calculations with ionize.aa() were incorrectly affected by the setting of E.units(). o The Akinfiev-Diamond model is now activated by setting abbrv = "AkDi" for any aqueous species, instead of setting the charge (z) to NA. This simplifies the more common use case of adding a custom aqueous species to OBIGT with mostly NA parameters. o Remove bases2 argument from mosaic() (old backward compatibility feature). Changes in version 1.4.0 (2020-11-11) MAJOR CHANGES o An *add* argument has been added to species(). _With the default of add = FALSE, loading new species now causes any existing species definition to be *deleted*._ To add species to an existing system, use add = TRUE. With this change, scripts can be made more concise because species(delete = TRUE) is no longer needed to clear the species definition in a series of calculations for different systems. o The naming convention for methane has changed. The name *methane* now applies exclusively to the gas; the formula *CH4* without a state continues to represent the aqueous species. This behavior is consistent with inorganic gases but differs from most organic substances, where the name refers to the aqueous species. This change was made because in the past there was no way to use info() or subcrt() with a single character argument to identify gaseous methane, which is common in geochemistry. (Note that info("CH4", "gas") can still be used.) A hack to revert to the old behavior, where *methane* refers primarily to the aqueous species, is mod.OBIGT(info("CH4"), name = "methane"). o The all-uppercase acronym *OBIGT* is used everywhere it appears in file, function, and object names. In particular, the thermodynamic database now is located at thermo()$OBIGT, and functions add.OBIGT() and mod.OBIGT() replace the previous add.obigt() and mod.obigt(). o The new default of NULL for *limit.water* in diagram() causes the main diagram to be overlaid on the fields of water stability (white) and instability (gray). Change this to TRUE to obtain the previous default of masking all parts of the diagram outside of the water stability field. NEW FEATURES o Add function *mash()* for combining two diagrams for different systems (i.e., simple overlay of diagrams for two single-metal systems). o Add function *mix()* for combining two single-metal diagrams with a third diagram for bimetallic species. This can be used to produce diagrams for a binary system with fixed composition of the metals. o Add function *rebalance()* for making a new diagram by secondary balancing between two systems. o Add a *stable* argument to mosaic() to use previously calculated stabilities of species (e.g. minerals) for the changing basis species. This allows mosaic() calculations to be linked in series (or "stacked"), for instance to sequentially add metals (Fe, then Cu) to a diagram. o Add vignette *multi-metal.Rmd* for examples that use these new features to make diagrams for systems with multiple metals (specifically Fe-V and Fe-Cu). CHANGES TO OBIGT DATABASE o Dates in the date column have been converted to use ISO 8601 extended format (e.g. 2020-08-16). The accessory function today(), to render the current date using the previous format, has been removed. o Update species parameters for the 2019 version of the Deep Earth Water (DEW) model (Huang and Sverjensky, 2019). o inorganic_aq.csv, inorganic_aq.csv: Add arsenopyrite, loellingite, westerveldite, and aqueous As(OH)3 and AsO(OH)3 from Perfetti et al., 2008. o inorganic_aq.csv: Add Co-chloride species from Liu et al., 2018. o inorganic_aq.csv: Add metal carbonate and bicarbonate complexes and FeSO4 from St Clair et al., 2019. o inorganic_cr.csv: Add wustite, manganese, and Mn oxides (manganosite, pyrolusite, bixbyite, and hausmannite) from Robie and Hemingway, 1995. o inorganic_cr.csv: Add amorphous Mn(OH)2 from Wagman et al., 1982 (GHS) and Senoh et al., 1998 (estimated Cp values). o inorganic_cr.csv: Add huebnerite (MnWO4) from Liu and Xiao, 2020. o inorganic_cr.csv: Add linnaeite (Co3S4) and Co-pentlandite (Co9S8) from Vaughan and Craig, 1978 and cattierite (CoS2) and cobalt from Robie and Hemingway, 1995. o Add GHS and Cp at 25 °C for almandine, dickite, fluorphlogopite, glaucophane, grunerite, halloysite, larnite, pyrope (SUPCRT92.csv) and bromellite (inorganic_cr.csv) from Robie and Hemingway, 1995. o inorganic_cr.csv: Correct formulas for number of H2O in some As-bearing minerals. o SUPCRT92.csv: Change lowercase to uppercase "A" (Angstrom) in names of minerals with suffixes indicating interlayer spacing (amesite, clinochlore, cronstedtite, daphnite). o Remove bracketed suffixes in references (e.g. [S92] was used to indicate that the data first appeared in SUPCRT92). o Use uncompressed data files (i.e. .csv, not .csv.xz) and rename DEW_aq.csv to DEW.csv. o The package is now installed with the bibtex file for the OBIGT database (docs/OBIGT.bib), which is used by the logKcalc package (). o thermo/element.csv: Add entropies for Am, Pu, Cm, Np from Thoenen et al., 2014 (The PSI/Nagra Chemical Thermodynamic Database 12/07). DEMOS AND VIGNETTES o Add demo/comproportionation.R: Gibbs energy of sulfur comproportionation, after Amend et al., 2020. o Add demo/zinc.R: Solubilities of multiple minerals (zincite and sphalerite). o Revise and simplify anintro.Rmd and equilibrium.Rmd (converted from equilibrium.Rnw). o Revise OBIGT.Rmd to reduce the size of the HTML file and make deep linking to individual sections work. o Add viglink Rd macro so HTML versions of Rd files can link to vignettes. o Remove vignette hotspring.Rnw and demos bison.R and bugstab.R. The material is now in the bison.Rmd vignette and bugstab.R demo in the JMDplots package (). o New demo berman.R, extracted from berman.Rd. o Revise demo mosaic.R to use mash() to show S and C species together, make better use of transparency, and dy argument to adjust positions of labels. DIAGRAM IMPROVEMENTS o Change default resolution in affinity() from 128 to 256. This greatly improves the appearance of diagrams made with the default settings. o which.pmax() was rewritten to speed up identification of predominant species, and the drawing of field boundaries in diagram() was made more efficient. The latter change has prompted the removal of the lty.aq and lty.cr arguments from diagram(). o Add a *bottom* argument to ratlab() to allow changing the ion in the denominator to something other than H+. o The srt, *dx* (new), and dy arguments in diagram() can now be used to rotate and adjust the position of field labels, not only line labels. This and other arguments (cex, col, col.names, font, family, bold, italic) can have length > 1 to apply different settings to each species. o Add a *min.area* argument to diagram() to specify the minimum area of fields that should be labeled. This is useful for removing labels from small fields on crowded diagrams. o The list returned by diagram() now includes a *predominant.values* component, which has the affinities of the predominant species at each grid point. This can be used as shown in the multi-metal.Rmd vignette to compute the Pourbaix energy (Δ_G_pbx) for a metastable material. OTHER CHANGES o subcrt(): replace action.unbalanced argument with *autobalance*, which now provides the ability to prevent autobalancing. o Setting the water model with water() updates the literature references in thermo()$OBIGT. o thermo.refs() shows CHNOSZ version and date. o subcrt() and affinity() use degree symbol (*°C*) in messages. o Change thermo$... to thermo()$... in messages and comments. o mosaic() now allows a *blend* argument of length > 1 to apply a specific setting to each group of basis species. o Fix palply.Rd for new warning about “Non-file package-anchored link(s) in documentation object” in R CMD check. o Remove wjd() (implementation of Gibbs energy minimization method from White et al., 1958) and demo wjd.R and supporting data file. o Add "QCa" as a keyword for preset species in basis() (glutamine, cysteine, acetic acid, H2O, O2). o Add *T* and *P* arguments to retrieve() to require that species have non-NA values of standard Gibbs energy at this temperature and pressure. o Change defaults in mod.buffer() to be more suitable for mineral buffers (state = "cr" and logact = 0). o Remove extdata/supcrt (scripts to read SUPCRT data files). o Convert this NEWS file to Rd format.