diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.C
index d6dd42a0451801e5b66b1953e8fa669d95858819..75a21a16903e01a205ea3a6c793a6a93c51a7b4e 100644
--- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.C
+++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.C
@@ -31,7 +31,8 @@ template<class ThermoType>
 Foam::autoPtr<Foam::chemistryReader<ThermoType> >
 Foam::chemistryReader<ThermoType>::New
 (
-    const dictionary& thermoDict
+    const dictionary& thermoDict,
+    speciesTable& species
 )
 {
     // Let the chemistry reader type default to CHEMKIN
@@ -50,7 +51,7 @@ Foam::chemistryReader<ThermoType>::New
     {
         FatalErrorIn
         (
-            "chemistryReader::New(const dictionary& thermoDict)"
+            "chemistryReader::New(const dictionary&, speciesTable&)"
         )   << "Unknown chemistryReader type "
             << chemistryReaderTypeName << nl << nl
             << "Valid chemistryReader types are:" << nl
@@ -58,7 +59,10 @@ Foam::chemistryReader<ThermoType>::New
             << exit(FatalError);
     }
 
-    return autoPtr<chemistryReader<ThermoType> >(cstrIter()(thermoDict));
+    return autoPtr<chemistryReader<ThermoType> >
+    (
+        cstrIter()(thermoDict, species)
+    );
 }
 
 
diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H
index 839100b7a34f4037babd34db64496ee8a4ff66ac..9a27fc90c2f98e1529bc58724afc88fd9c3b9692 100644
--- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H
+++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemistryReader/chemistryReader.H
@@ -85,16 +85,21 @@ public:
             chemistryReader,
             dictionary,
             (
-                const dictionary& thermoDict
+                const dictionary& thermoDict,
+                speciesTable& species
             ),
-            (thermoDict)
+            (thermoDict, species)
         );
 
 
     // Selectors
 
         //- Select constructed from dictionary
-        static autoPtr<chemistryReader> New(const dictionary& thermoDict);
+        static autoPtr<chemistryReader> New
+        (
+            const dictionary& thermoDict,
+            speciesTable& species
+        );
 
 
     //- Destructor
@@ -104,9 +109,6 @@ public:
 
     // Member Functions
 
-        //- Return access to the list of species
-        virtual const speciesTable& species() const = 0;
-
         //- Return access to the thermo packages
         virtual const HashPtrTable<ThermoType>& speciesThermo() const = 0;
 
diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C
index a95f9439c980f59b06f4e8b2f59a1509022e9616..26fb1b14789489335652705d91f9116cb7e34bc2 100644
--- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C
+++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.C
@@ -854,29 +854,31 @@ void Foam::chemkinReader::read
 Foam::chemkinReader::chemkinReader
 (
     const fileName& CHEMKINFileName,
+    speciesTable& species,
     const fileName& thermoFileName
 )
 :
     lineNo_(1),
     specieNames_(10),
-    speciesTable_(),
+    speciesTable_(species),
     reactions_(speciesTable_, speciesThermo_)
 {
     read(CHEMKINFileName, thermoFileName);
 }
 
 
-Foam::chemkinReader::chemkinReader(const dictionary& thermoDict)
+Foam::chemkinReader::chemkinReader
+(
+    const dictionary& thermoDict,
+    speciesTable& species
+)
 :
     lineNo_(1),
     specieNames_(10),
-    speciesTable_(),
+    speciesTable_(species),
     reactions_(speciesTable_, speciesThermo_)
 {
-    fileName chemkinFile
-    (
-        fileName(thermoDict.lookup("CHEMKINFile")).expand()
-    );
+    fileName chemkinFile(fileName(thermoDict.lookup("CHEMKINFile")).expand());
 
     fileName thermoFile = fileName::null;
 
diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H
index f00889d0564e4b7994844fdae88ab5afd252d371..6e0d4dc5c1af7eec497eb6d7c0ece31f71be1c39 100644
--- a/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H
+++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinReader.H
@@ -193,7 +193,7 @@ private:
         HashTable<label> specieIndices_;
 
         //- Table of species
-        speciesTable speciesTable_;
+        speciesTable& speciesTable_;
 
         //- Specie phase
         HashTable<phase> speciePhase_;
@@ -318,11 +318,12 @@ public:
         chemkinReader
         (
             const fileName& chemkinFile,
+            speciesTable& species,
             const fileName& thermoFileName = fileName::null
         );
 
         //- Construct by getting the CHEMKIN III file name from dictionary
-        chemkinReader(const dictionary& thermoDict);
+        chemkinReader(const dictionary& thermoDict, speciesTable& species);
 
 
     //- Destructor
diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C
index 3024473270f94d87ad8d1a99792b29cf4ed5055c..0efe8e2b8a5ec839bd63619bce637c3cd9d7475c 100644
--- a/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C
+++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.C
@@ -27,12 +27,28 @@ License
 #include "IFstream.H"
 #include "addToRunTimeSelectionTable.H"
 
+// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
+
+template<class ThermoType>
+Foam::speciesTable& Foam::foamChemistryReader<ThermoType>::setSpecies
+(
+    const dictionary& dict,
+    speciesTable& species
+)
+{
+    wordList s(dict.lookup("species"));
+    species.transfer(s);
+    return species;
+}
+
+
 // * * * * * * * * * * * * * * * * Constructor * * * * * * * * * * * * * * * //
 
 template<class ThermoType>
 Foam::foamChemistryReader<ThermoType>::foamChemistryReader
 (
     const fileName& reactionsFileName,
+    speciesTable& species,
     const fileName& thermoFileName
 )
 :
@@ -51,8 +67,8 @@ Foam::foamChemistryReader<ThermoType>::foamChemistryReader
             fileName(thermoFileName).expand()
         )()
     ),
+    speciesTable_(setSpecies(chemDict_, species)),
     speciesThermo_(thermoDict_),
-    speciesTable_(chemDict_.lookup("species")),
     reactions_(speciesTable_, speciesThermo_, chemDict_)
 {}
 
@@ -60,7 +76,8 @@ Foam::foamChemistryReader<ThermoType>::foamChemistryReader
 template<class ThermoType>
 Foam::foamChemistryReader<ThermoType>::foamChemistryReader
 (
-    const dictionary& thermoDict
+    const dictionary& thermoDict,
+    speciesTable& species
 )
 :
     chemistryReader<ThermoType>(),
@@ -79,7 +96,7 @@ Foam::foamChemistryReader<ThermoType>::foamChemistryReader
         )()
     ),
     speciesThermo_(thermoDict_),
-    speciesTable_(chemDict_.lookup("species")),
+    speciesTable_(setSpecies(chemDict_, species)),
     reactions_(speciesTable_, speciesThermo_, chemDict_)
 {}
 
diff --git a/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.H b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.H
index 84f18d22210307c97a46afe5949a2f1d49792082..925692dc7aa4d90018647610f4e5f7165604635c 100644
--- a/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.H
+++ b/src/thermophysicalModels/reactionThermo/chemistryReaders/foamChemistryReader/foamChemistryReader.H
@@ -67,7 +67,7 @@ class foamChemistryReader
         HashPtrTable<ThermoType> speciesThermo_;
 
         //- Table of species
-        speciesTable speciesTable_;
+        speciesTable& speciesTable_;
 
         //- List of the reactions
         ReactionList<ThermoType> reactions_;
@@ -75,6 +75,9 @@ class foamChemistryReader
 
     // Private Member Functions
 
+        //- Set the species list
+        speciesTable& setSpecies(const dictionary& dict, speciesTable& species);
+
         //- Disallow default bitwise copy construct
         foamChemistryReader(const foamChemistryReader&);
 
@@ -94,12 +97,17 @@ public:
         foamChemistryReader
         (
             const fileName& reactionsFileName,
+            speciesTable& species,
             const fileName& thermoFileName
         );
 
         //- Construct by getting the foamChemistry and thermodynamics file names
         //  from dictionary
-        foamChemistryReader(const dictionary& thermoDict);
+        foamChemistryReader
+        (
+            const dictionary& thermoDict,
+            speciesTable& species
+        );
 
 
     //- Destructor
diff --git a/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.C b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.C
index 4303a0e7fb2c8f28e1fcdfbb93928dc9bb129d56..6c8cd1f50acacabae381cb4682d627605afe5b29 100644
--- a/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.C
+++ b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.C
@@ -35,14 +35,15 @@ Foam::reactingMixture<ThermoType>::reactingMixture
     const fvMesh& mesh
 )
 :
+    speciesTable(),
     autoPtr<chemistryReader<ThermoType> >
     (
-        chemistryReader<ThermoType>::New(thermoDict)
+        chemistryReader<ThermoType>::New(thermoDict, *this)
     ),
     multiComponentMixture<ThermoType>
     (
         thermoDict,
-        autoPtr<chemistryReader<ThermoType> >::operator()().species(),
+        *this,
         autoPtr<chemistryReader<ThermoType> >::operator()().speciesThermo(),
         mesh
     ),
diff --git a/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.H b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.H
index 5c004eefebb77568bc1acb38c002cb9012ddffc3..b29c0758ad6589663e4c3feab8a631a9b64128d0 100644
--- a/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.H
+++ b/src/thermophysicalModels/reactionThermo/mixtures/reactingMixture/reactingMixture.H
@@ -35,6 +35,7 @@ SourceFiles
 #ifndef reactingMixture_H
 #define reactingMixture_H
 
+#include "speciesTable.H"
 #include "chemistryReader.H"
 #include "multiComponentMixture.H"
 
@@ -50,6 +51,7 @@ namespace Foam
 template<class ThermoType>
 class reactingMixture
 :
+    public speciesTable,
     public autoPtr<chemistryReader<ThermoType> >,
     public multiComponentMixture<ThermoType>,
     public PtrList<Reaction<ThermoType> >
@@ -84,6 +86,16 @@ public:
 
         //- Read dictionary
         void read(const dictionary&);
+
+        label size() const
+        {
+            return PtrList<Reaction<ThermoType> >::size();
+        }
+
+        Reaction<ThermoType>& operator [] (const label i)
+        {
+            return PtrList<Reaction<ThermoType> >::operator[](i);
+        }
 };