diff --git a/src/thermophysicalModels/specie/equationOfState/perfectFluid/perfectFluid.C b/src/thermophysicalModels/specie/equationOfState/perfectFluid/perfectFluid.C
new file mode 100644
index 0000000000..844f293e2d
--- /dev/null
+++ b/src/thermophysicalModels/specie/equationOfState/perfectFluid/perfectFluid.C
@@ -0,0 +1,76 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "perfectFluid.H"
+#include "IOstreams.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+Foam::perfectFluid::perfectFluid(Istream& is)
+:
+ Specie(is),
+ rho0_(readScalar(is))
+{
+ is.check("perfectFluid::perfectFluid(Istream& is)");
+}
+
+
+template
+Foam::perfectFluid::perfectFluid(const dictionary& dict)
+:
+ Specie(dict),
+ rho0_(readScalar(dict.subDict("equationOfState").lookup("rho0")))
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+void Foam::perfectFluid::write(Ostream& os) const
+{
+ Specie::write(os);
+
+ dictionary dict("equationOfState");
+ dict.add("rho0", rho0_);
+
+ os << indent << dict.dictName() << dict;
+}
+
+
+// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
+
+template
+Foam::Ostream& Foam::operator<<(Ostream& os, const perfectFluid& pf)
+{
+ os << static_cast(pf)
+ << token::SPACE << pf.rho0_;
+
+ os.check("Ostream& operator<<(Ostream&, const perfectFluid&)");
+ return os;
+}
+
+
+// ************************************************************************* //
diff --git a/src/thermophysicalModels/specie/equationOfState/perfectFluid/perfectFluid.H b/src/thermophysicalModels/specie/equationOfState/perfectFluid/perfectFluid.H
new file mode 100644
index 0000000000..76cf80c4a8
--- /dev/null
+++ b/src/thermophysicalModels/specie/equationOfState/perfectFluid/perfectFluid.H
@@ -0,0 +1,223 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Class
+ Foam::perfectFluid
+
+Description
+ Perfect gas equation of state.
+
+SourceFiles
+ perfectFluidI.H
+ perfectFluid.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef perfectFluid_H
+#define perfectFluid_H
+
+#include "autoPtr.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of friend functions and operators
+
+template class perfectFluid;
+
+template
+inline perfectFluid operator+
+(
+ const perfectFluid&,
+ const perfectFluid&
+);
+
+template
+inline perfectFluid operator-
+(
+ const perfectFluid&,
+ const perfectFluid&
+);
+
+template
+inline perfectFluid operator*
+(
+ const scalar,
+ const perfectFluid&
+);
+
+template
+inline perfectFluid operator==
+(
+ const perfectFluid&,
+ const perfectFluid&
+);
+
+template
+Ostream& operator<<
+(
+ Ostream&,
+ const perfectFluid&
+);
+
+
+/*---------------------------------------------------------------------------*\
+ Class perfectFluid Declaration
+\*---------------------------------------------------------------------------*/
+
+template
+class perfectFluid
+:
+ public Specie
+{
+ // Private data
+
+ //- The reference density
+ scalar rho0_;
+
+public:
+
+ // Constructors
+
+ //- Construct from components
+ inline perfectFluid(const Specie& sp, const scalar rho0);
+
+ //- Construct from Istream
+ perfectFluid(Istream&);
+
+ //- Construct from dictionary
+ perfectFluid(const dictionary& dict);
+
+ //- Construct as named copy
+ inline perfectFluid(const word& name, const perfectFluid&);
+
+ //- Construct and return a clone
+ inline autoPtr clone() const;
+
+ // Selector from Istream
+ inline static autoPtr New(Istream& is);
+
+ // Selector from dictionary
+ inline static autoPtr New(const dictionary& dict);
+
+
+ // Member functions
+
+ //- Return the instantiated type name
+ static word typeName()
+ {
+ return "perfectFluid<" + word(Specie::typeName_()) + '>';
+ }
+
+
+ // Fundamental properties
+
+ //- Is the equation of state is incompressible i.e. rho != f(p)
+ static const bool incompressible = false;
+
+ //- Is the equation of state is isochoric i.e. rho = const
+ static const bool isochoric = false;
+
+ //- Return density [kg/m^3]
+ inline scalar rho(scalar p, scalar T) const;
+
+ //- Return compressibility rho/p [s^2/m^2]
+ inline scalar psi(scalar p, scalar T) const;
+
+ //- Return compression factor []
+ inline scalar Z(scalar p, scalar T) const;
+
+ //- Return (cp - cv) [J/(kmol K]
+ inline scalar cpMcv(scalar p, scalar T) const;
+
+
+ // IO
+
+ //- Write to Ostream
+ void write(Ostream& os) const;
+
+
+ // Member operators
+
+ inline void operator+=(const perfectFluid&);
+ inline void operator-=(const perfectFluid&);
+
+ inline void operator*=(const scalar);
+
+
+ // Friend operators
+
+ friend perfectFluid operator+
+ (
+ const perfectFluid&,
+ const perfectFluid&
+ );
+
+ friend perfectFluid operator-
+ (
+ const perfectFluid&,
+ const perfectFluid&
+ );
+
+ friend perfectFluid operator*
+ (
+ const scalar s,
+ const perfectFluid&
+ );
+
+ friend perfectFluid operator==
+ (
+ const perfectFluid&,
+ const perfectFluid&
+ );
+
+
+ // Ostream Operator
+
+ friend Ostream& operator<<
+ (
+ Ostream&,
+ const perfectFluid&
+ );
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "perfectFluidI.H"
+
+#ifdef NoRepository
+# include "perfectFluid.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/thermophysicalModels/specie/equationOfState/perfectFluid/perfectFluidI.H b/src/thermophysicalModels/specie/equationOfState/perfectFluid/perfectFluidI.H
new file mode 100644
index 0000000000..21fc092fe2
--- /dev/null
+++ b/src/thermophysicalModels/specie/equationOfState/perfectFluid/perfectFluidI.H
@@ -0,0 +1,220 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "perfectFluid.H"
+
+// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
+
+template
+inline Foam::perfectFluid::perfectFluid
+(
+ const Specie& sp,
+ const scalar rho0
+)
+:
+ Specie(sp),
+ rho0_(rho0)
+{}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+template
+inline Foam::perfectFluid::perfectFluid
+(
+ const word& name,
+ const perfectFluid& pf
+)
+:
+ Specie(name, pf),
+ rho0_(pf.rho0_)
+{}
+
+
+template
+inline Foam::autoPtr >
+Foam::perfectFluid::clone() const
+{
+ return autoPtr >(new perfectFluid(*this));
+}
+
+
+template
+inline Foam::autoPtr >
+Foam::perfectFluid::New(Istream& is)
+{
+ return autoPtr >(new perfectFluid(is));
+}
+
+
+template
+inline Foam::autoPtr >
+Foam::perfectFluid::New
+(
+ const dictionary& dict
+)
+{
+ return autoPtr >(new perfectFluid(dict));
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+inline Foam::scalar Foam::perfectFluid::rho(scalar p, scalar T) const
+{
+ return rho0_ + p/(this->R()*T);
+}
+
+
+template
+inline Foam::scalar Foam::perfectFluid::psi(scalar, scalar T) const
+{
+ return 1.0/(this->R()*T);
+}
+
+
+template
+inline Foam::scalar Foam::perfectFluid::Z(scalar, scalar) const
+{
+ return 1.0;
+}
+
+
+template
+inline Foam::scalar Foam::perfectFluid::cpMcv(scalar, scalar) const
+{
+ return this->RR;
+}
+
+
+// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
+
+template
+inline void Foam::perfectFluid::operator+=
+(
+ const perfectFluid& pf
+)
+{
+ scalar molr1 = this->nMoles();
+
+ Specie::operator+=(pf);
+
+ molr1 /= this->nMoles();
+ scalar molr2 = pf.nMoles()/this->nMoles();
+
+ rho0_ = molr1*rho0_ + molr2*pf.rho0_;
+}
+
+
+template
+inline void Foam::perfectFluid::operator-=
+(
+ const perfectFluid& pf
+)
+{
+ scalar molr1 = this->nMoles();
+
+ Specie::operator-=(pf);
+
+ molr1 /= this->nMoles();
+ scalar molr2 = pf.nMoles()/this->nMoles();
+
+ rho0_ = molr1*rho0_ - molr2*pf.rho0_;
+}
+
+
+template
+inline void Foam::perfectFluid::operator*=(const scalar s)
+{
+ Specie::operator*=(s);
+}
+
+
+// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
+
+template
+inline Foam::perfectFluid Foam::operator+
+(
+ const perfectFluid& pf1,
+ const perfectFluid& pf2
+)
+{
+ scalar nMoles = pf1.nMoles() + pf2.nMoles();
+ scalar molr1 = pf1.nMoles()/nMoles;
+ scalar molr2 = pf2.nMoles()/nMoles;
+
+ return rhoConst
+ (
+ static_cast(pf1)
+ + static_cast(pf2),
+ molr1*pf1.rho0_ + molr2*pf2.rho0_
+ );
+}
+
+
+template
+inline Foam::perfectFluid Foam::operator-
+(
+ const perfectFluid& pf1,
+ const perfectFluid& pf2
+)
+{
+ scalar nMoles = pf1.nMoles() + pf2.nMoles();
+ scalar molr1 = pf1.nMoles()/nMoles;
+ scalar molr2 = pf2.nMoles()/nMoles;
+
+ return rhoConst
+ (
+ static_cast(pf1)
+ - static_cast(pf2),
+ molr1*pf1.rho0_ - molr2*pf2.rho0_
+ );
+}
+
+
+template
+inline Foam::perfectFluid Foam::operator*
+(
+ const scalar s,
+ const perfectFluid& pf
+)
+{
+ return perfectFluid(s*static_cast(pf), pf.rho0_);
+}
+
+
+template
+inline Foam::perfectFluid Foam::operator==
+(
+ const perfectFluid& pf1,
+ const perfectFluid& pf2
+)
+{
+ return pf2 - pf1;
+}
+
+
+// ************************************************************************* //