diff --git a/src/OpenFOAM/fields/pointPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValuePointPatchField.C b/src/OpenFOAM/fields/pointPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValuePointPatchField.C
index b2074123a94bc6afbeb464c3e3459d08dc6df042..2ce7ada7ea1ce5445da016c0e5f064d13322df43 100644
--- a/src/OpenFOAM/fields/pointPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValuePointPatchField.C
+++ b/src/OpenFOAM/fields/pointPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValuePointPatchField.C
@@ -28,8 +28,6 @@ License
 #include "Time.H"
 #include "IFstream.H"
 
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 template<class Type>
@@ -57,8 +55,7 @@ timeVaryingUniformFixedValuePointPatchField
 )
 :
     fixedValuePointPatchField<Type>(ptf, p, iF, mapper),
-    timeDataFile_(ptf.timeDataFile_),
-    timeSeries_(ptf.timeBounding())
+    timeSeries_(ptf.timeSeries_)
 {}
 
 
@@ -73,8 +70,7 @@ timeVaryingUniformFixedValuePointPatchField
 )
 :
     fixedValuePointPatchField<Type>(p, iF),
-    timeDataFile_(dict.lookup("timeDataFile")),
-    timeSeries_(word(dict.lookup("timeBounding")))
+    timeSeries_(this->db(), dict)
 {
     updateCoeffs();
 }
@@ -89,8 +85,7 @@ timeVaryingUniformFixedValuePointPatchField
 )
 :
     fixedValuePointPatchField<Type>(ptf),
-    timeDataFile_(ptf.timeDataFile_),
-    timeSeries_(ptf.timeBounding())
+    timeSeries_(ptf.timeSeries_)
 {}
 
 
@@ -104,67 +99,12 @@ timeVaryingUniformFixedValuePointPatchField
 )
 :
     fixedValuePointPatchField<Type>(ptf, iF),
-    timeDataFile_(ptf.timeDataFile_),
-    timeSeries_(ptf.timeBounding())
+    timeSeries_(ptf.timeSeries_)
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template<class Type>
-Type
-Foam::timeVaryingUniformFixedValuePointPatchField<Type>::
-currentValue()
-{
-    if (timeSeries_.size() == 0)
-    {
-        fileName fName(timeDataFile_);
-        fName.expand();
-
-        if (fName.size() == 0)
-        {
-            FatalErrorIn
-            (
-                "timeVaryingUniformFixedValuePointPatchField"
-                "::currentValue()"
-            )   << "timeDataFile not specified for Patch "
-                << this->patch().name()
-                << exit(FatalError);
-        }
-        else
-        {
-            // relative path
-            if (fName[0] != '/')
-            {
-                fName = this->db().path()/fName;
-            }
-
-            // just in case we change the interface to timeSeries
-            word boundType = timeBounding();
-
-            IFstream(fName)() >> timeSeries_;
-            timeSeries_.bounding(boundType);
-
-            // be a bit paranoid and check that the list is okay
-            timeSeries_.check();
-        }
-
-        if (timeSeries_.size() == 0)
-        {
-            FatalErrorIn
-            (
-                "timeVaryingUniformFixedValuePointPatchField"
-                "::currentValue()"
-            )   << "empty time series for Patch "
-                << this->patch().name()
-                << exit(FatalError);
-        }
-    }
-
-    return timeSeries_(this->db().time().timeOutputValue());
-}
-
-
 template<class Type>
 void Foam::timeVaryingUniformFixedValuePointPatchField<Type>::updateCoeffs()
 {
@@ -173,7 +113,7 @@ void Foam::timeVaryingUniformFixedValuePointPatchField<Type>::updateCoeffs()
         return;
     }
 
-    this->operator==(currentValue());
+    this->operator==(timeSeries_(this->db().time().timeOutputValue()));
     fixedValuePointPatchField<Type>::updateCoeffs();
 }
 
@@ -182,13 +122,8 @@ template<class Type>
 void Foam::timeVaryingUniformFixedValuePointPatchField<Type>::write(Ostream& os) const
 {
     fixedValuePointPatchField<Type>::write(os);
-    os.writeKeyword("timeDataFile")
-        << timeDataFile_ << token::END_STATEMENT << nl;
-    os.writeKeyword("timeBounding")
-        << timeBounding() << token::END_STATEMENT << nl;
+    timeSeries_.write(os);
 }
 
 
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
 // ************************************************************************* //
diff --git a/src/OpenFOAM/fields/pointPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValuePointPatchField.H b/src/OpenFOAM/fields/pointPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValuePointPatchField.H
index eee6a444399932592fdf42e9008a065b5e4640a7..e13150034d2be93b6c38efff58bd52dd7b870fb6 100644
--- a/src/OpenFOAM/fields/pointPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValuePointPatchField.H
+++ b/src/OpenFOAM/fields/pointPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValuePointPatchField.H
@@ -40,7 +40,7 @@ SourceFiles
 #define timeVaryingUniformFixedValuePointPatchField_H
 
 #include "fixedValuePointPatchField.H"
-#include "timeSeries.H"
+#include "interpolationTable.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -58,14 +58,9 @@ class timeVaryingUniformFixedValuePointPatchField
 {
     // Private data
 
-        //- file containing time/uniformFixedValue
-        fileName timeDataFile_;
-
         //- the time series being used, including the bounding treatment
-        timeSeries<Type> timeSeries_;
+        interpolationTable<Type> timeSeries_;
 
-        //- interpolate the value at the current time
-        Type currentValue();
 
 public:
 
@@ -138,14 +133,8 @@ public:
 
         // Access
 
-            //- Return the out-of-bounds treatment as a word
-            word timeBounding() const
-            {
-                return timeSeries_.bounding();
-            }
-
             //- Return the time series used
-            const timeSeries<Type>& timeData() const
+            const interpolationTable<Type>& timeSeries() const
             {
                 return timeSeries_;
             }
diff --git a/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.C b/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.C
new file mode 100644
index 0000000000000000000000000000000000000000..e2f1f92e7775e837a9822f475258a001a9305332
--- /dev/null
+++ b/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.C
@@ -0,0 +1,482 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 1991-2008 OpenCFD Ltd.
+     \\/     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 2 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, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*---------------------------------------------------------------------------*/
+
+#include "interpolationTable.H"
+#include "IFstream.H"
+#include "objectRegistry.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+template<class Type>
+Foam::interpolationTable<Type>::interpolationTable()
+:
+    List<Tuple2<scalar, Type> >(),
+    dict_(dictionary::null),
+    boundAction_(interpolationTable::WARN),
+    fileName_("undefined_fileName")
+{}
+
+
+template<class Type>
+Foam::interpolationTable<Type>::interpolationTable
+(
+    const objectRegistry& obr,
+    const dictionary& dict
+)
+:
+    List<Tuple2<scalar, Type> >(),
+    dict_(dict),
+    boundAction_(wordToBoundAction(dict.lookup("boundAction"))),
+    fileName_(dict.lookup("fileName"))
+{
+    fileName_.expand();
+
+    // Correct for relative path
+    if (fileName_[0] != '/')
+    {
+        fileName_ = obr.db().path()/fileName_;
+    }
+
+    // Read data from file
+    IFstream(fileName_)() >> *this;
+
+    // Check that the data is okay
+    check();
+
+    if (this->size() == 0)
+    {
+        FatalErrorIn
+        (
+            "Foam::interpolationTable<Type>::interpolationTable"
+            "(const dictionary& dict)"
+        )   << "table is empty" << nl
+            << exit(FatalError);
+    }
+}
+
+
+template<class Type>
+Foam::interpolationTable<Type>::interpolationTable
+(
+     const interpolationTable& interpTable
+)
+:
+    List<Tuple2<scalar, Type> >(interpTable),
+    dict_(interpTable.dict_),
+    boundAction_(interpTable.boundAction_),
+    fileName_(interpTable.fileName_)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+template<class Type>
+Foam::interpolationTable<Type>::~interpolationTable()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+template<class Type>
+Foam::word Foam::interpolationTable<Type>::boundActionToWord
+(
+     const boundActions& bound
+) const
+{
+    word enumName("warn");
+
+    switch (bound)
+    {
+        case interpolationTable::ERROR:
+        {
+            enumName = "error";
+            break;
+        }
+        case interpolationTable::WARN:
+        {
+            enumName = "warn";
+            break;
+        }
+        case interpolationTable::CLAMP:
+        {
+            enumName = "clamp";
+            break;
+        }
+        case interpolationTable::REPEAT:
+        {
+            enumName = "repeat";
+            break;
+        }
+    }
+
+    return enumName;
+}
+
+
+template<class Type>
+typename Foam::interpolationTable<Type>::boundActions
+Foam::interpolationTable<Type>::wordToBoundAction
+(
+    const word& bound
+) const
+{
+    if (bound == "error")
+    {
+        return interpolationTable::ERROR;
+    }
+    else if (bound == "warn")
+    {
+        return interpolationTable::WARN;
+    }
+    else if (bound == "clamp")
+    {
+        return interpolationTable::CLAMP;
+    }
+    else if (bound == "repeat")
+    {
+        return interpolationTable::REPEAT;
+    }
+    else
+    {
+        WarningIn
+        (
+            "Foam::interpolationTable<Type>::wordToBoundAction(const word&)"
+        )   << "bad bounding specifier " << bound << " using 'warn'" << endl;
+
+        return interpolationTable::WARN;
+    }
+}
+
+
+template<class Type>
+void Foam::interpolationTable<Type>::check() const
+{
+    label n = size();
+    scalar prevValue = List<Tuple2<scalar, Type> >::operator[](0).first();
+
+    for (label i=1; i<n; ++i)
+    {
+        const scalar currValue =
+            List<Tuple2<scalar, Type> >::operator[](i).first();
+
+        // avoid duplicate values (divide-by-zero error)
+        if (currValue <= prevValue)
+        {
+            FatalErrorIn
+            (
+                "Foam::interpolationTable<Type>::checkOrder() const"
+            )   << "out-of-order value: "
+                << currValue << " at index " << i << nl
+                << exit(FatalError);
+        }
+        prevValue = currValue;
+    }
+}
+
+
+template<class Type>
+typename Foam::interpolationTable<Type>::boundActions
+Foam::interpolationTable<Type>::boundAction
+(
+    const boundActions& bound
+)
+{
+    boundActions prev = boundAction_;
+    boundAction_ = bound;
+    return prev;
+}
+
+
+template<class Type>
+void Foam::interpolationTable<Type>::write(Ostream& os) const
+{
+    os.writeKeyword("fileName")
+        << fileName_ << token::END_STATEMENT << nl;
+    os.writeKeyword("boundAction")
+        << boundActionToWord(boundAction_) << token::END_STATEMENT << nl;
+}
+
+
+// * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
+
+template<class Type>
+const Foam::Tuple2<Foam::scalar, Type>&
+Foam::interpolationTable<Type>::operator[](const label i) const
+{
+    label ii = i;
+    label n  = size();
+
+    if (n <= 1)
+    {
+        ii = 0;
+    }
+    else if (ii < 0)
+    {
+        switch (boundAction_)
+        {
+            case interpolationTable::ERROR:
+            {
+                FatalErrorIn
+                (
+                    "Foam::interpolationTable<Type>::operator[]"
+                    "(const label) const"
+                )   << "index (" << ii << ") underflow" << nl
+                    << exit(FatalError);
+                break;
+            }
+            case interpolationTable::WARN:
+            {
+                WarningIn
+                (
+                    "Foam::interpolationTable<Type>::operator[]"
+                    "(const label) const"
+                )   << "index (" << ii << ") underflow" << nl
+                    << "    Continuing with the first entry"
+                    << endl;
+                // fall-through to 'CLAMP'
+            }
+            case interpolationTable::CLAMP:
+            {
+                ii = 0;
+                break;
+            }
+            case interpolationTable::REPEAT:
+            {
+                while (ii < 0)
+                {
+                    ii += n;
+                }
+                break;
+            }
+        }
+    }
+    else if (ii >= n)
+    {
+        switch (boundAction_)
+        {
+            case interpolationTable::ERROR:
+            {
+                FatalErrorIn
+                (
+                    "Foam::interpolationTable<Type>::operator[]"
+                    "(const label) const"
+                )   << "index (" << ii << ") overflow" << nl
+                    << exit(FatalError);
+                break;
+            }
+            case interpolationTable::WARN:
+            {
+                WarningIn
+                (
+                    "Foam::interpolationTable<Type>::operator[]"
+                    "(const label) const"
+                )   << "index (" << ii << ") overflow" << nl
+                    << "    Continuing with the last entry"
+                    << endl;
+                // fall-through to 'CLAMP'
+            }
+            case interpolationTable::CLAMP:
+            {
+                ii = n - 1;
+                break;
+            }
+            case interpolationTable::REPEAT:
+            {
+                while (ii >= n)
+                {
+                    ii -= n;
+                }
+                break;
+            }
+        }
+    }
+
+    return List<Tuple2<scalar, Type> >::operator[](ii);
+}
+
+
+template<class Type>
+Type Foam::interpolationTable<Type>::operator()(const scalar value) const
+{
+    label n = size();
+
+    if (n <= 1)
+    {
+        return List<Tuple2<scalar, Type> >::operator[](0).second();
+    }
+
+    scalar minLimit = List<Tuple2<scalar, Type> >::operator[](0).first();
+    scalar maxLimit = List<Tuple2<scalar, Type> >::operator[](n-1).first();
+    scalar lookupValue = value;
+
+    if (lookupValue < minLimit)
+    {
+        switch (boundAction_)
+        {
+            case interpolationTable::ERROR:
+            {
+                FatalErrorIn
+                (
+                    "Foam::interpolationTable<Type>::operator[]"
+                    "(const scalar) const"
+                )   << "value (" << lookupValue << ") underflow" << nl
+                    << exit(FatalError);
+                break;
+            }
+            case interpolationTable::WARN:
+            {
+                WarningIn
+                (
+                    "Foam::interpolationTable<Type>::operator[]"
+                    "(const scalar) const"
+                )   << "value (" << lookupValue << ") underflow" << nl
+                    << "    Continuing with the first entry"
+                    << endl;
+                // fall-through to 'CLAMP'
+            }
+            case interpolationTable::CLAMP:
+            {
+                return List<Tuple2<scalar, Type> >::operator[](0).second();
+                break;
+            }
+            case interpolationTable::REPEAT:
+            {
+                // adjust lookupValue to >= 0
+                while (lookupValue < 0)
+                {
+                    lookupValue += maxLimit;
+                }
+                break;
+            }
+        }
+    }
+    else if (lookupValue >= maxLimit)
+    {
+        switch (boundAction_)
+        {
+            case interpolationTable::ERROR:
+            {
+                FatalErrorIn
+                (
+                    "Foam::interpolationTable<Type>::operator[]"
+                    "(const label) const"
+                )   << "value (" << lookupValue << ") overflow" << nl
+                    << exit(FatalError);
+                break;
+            }
+            case interpolationTable::WARN:
+            {
+                WarningIn
+                (
+                    "Foam::interpolationTable<Type>::operator[]"
+                    "(const label) const"
+                )   << "value (" << lookupValue << ") overflow" << nl
+                    << "    Continuing with the last entry"
+                    << endl;
+                // fall-through to 'CLAMP'
+            }
+            case interpolationTable::CLAMP:
+            {
+                return List<Tuple2<scalar, Type> >::operator[](n-1).second();
+                break;
+            }
+            case interpolationTable::REPEAT:
+            {
+                // adjust lookupValue <= maxLimit
+                while (lookupValue > maxLimit)
+                {
+                    lookupValue -= maxLimit;
+                }
+                break;
+            }
+        }
+    }
+
+    label lo = 0;
+    label hi = 0;
+
+    // look for the correct range
+    for (label i = 0; i < n; ++i)
+    {
+        if (lookupValue >= List<Tuple2<scalar, Type> >::operator[](i).first())
+        {
+            lo = hi = i;
+        }
+        else
+        {
+            hi = i;
+            break;
+        }
+    }
+
+    if (lo == hi)
+    {
+        // we are at the end of the table - or there is only a single entry
+        return List<Tuple2<scalar, Type> >::operator[](hi).second();
+    }
+    else if (hi == 0)
+    {
+        // this treatment should should only occur under these conditions:
+        //  -> the 'REPEAT' treatment
+        //  -> (0 <= value <= minLimit)
+        //  -> minLimit > 0
+        // Use the value at maxLimit as the value for value=0
+        lo = n - 1;
+
+        return
+        (
+            List<Tuple2<scalar, Type> >::operator[](lo).second()
+          + (
+                List<Tuple2<scalar, Type> >::operator[](hi).second()
+              - List<Tuple2<scalar, Type> >::operator[](lo).second()
+            )
+           *(lookupValue / minLimit)
+        );
+    }
+    else
+    {
+        // normal interpolation
+        return
+        (
+            List<Tuple2<scalar, Type> >::operator[](lo).second()
+          + (
+                List<Tuple2<scalar, Type> >::operator[](hi).second()
+              - List<Tuple2<scalar, Type> >::operator[](lo).second()
+            )
+           *(
+                lookupValue
+              - List<Tuple2<scalar, Type> >::operator[](lo).first()
+            )
+           /(
+                List<Tuple2<scalar, Type> >::operator[](hi).first()
+              - List<Tuple2<scalar, Type> >::operator[](lo).first()
+            )
+        );
+    }
+}
+
+
+// ************************************************************************* //
diff --git a/src/OpenFOAM/interpolations/timeSeries/timeSeries.H b/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.H
similarity index 57%
rename from src/OpenFOAM/interpolations/timeSeries/timeSeries.H
rename to src/OpenFOAM/interpolations/interpolationTable/interpolationTable.H
index 09433e3ff996492995e3324e46522c501c609652..207e19f91cc34ac8abebadac796e36492069e2a2 100644
--- a/src/OpenFOAM/interpolations/timeSeries/timeSeries.H
+++ b/src/OpenFOAM/interpolations/interpolationTable/interpolationTable.H
@@ -23,7 +23,7 @@ License
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
 Class
-    Foam::timeSeries
+    Foam::interpolationTable
 
 Description
     A list of times and values.
@@ -40,12 +40,12 @@ Note
     - Accessing a list with a single element will always return the same value.
 
 SourceFiles
-    timeSeries.C
+    interpolationTable.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef timeSeries_H
-#define timeSeries_H
+#ifndef interpolationTable_H
+#define interpolationTable_H
 
 #include "List.H"
 #include "Tuple2.H"
@@ -55,21 +55,23 @@ SourceFiles
 namespace Foam
 {
 
+class objectRegistry;
+
 /*---------------------------------------------------------------------------*\
-                        Class timeSeries Declaration
+                      Class interpolationTable Declaration
 \*---------------------------------------------------------------------------*/
 
-template<class T>
-class timeSeries
+template<class Type>
+class interpolationTable
 :
-    public List<Tuple2<scalar, T> >
+    public List<Tuple2<scalar, Type> >
 {
 public:
 
     // Public data types
 
-        //- Enumeration for handling out-of-bound times
-        enum bounds
+        //- Enumeration for handling out-of-bound values
+        enum boundActions
         {
             ERROR,          /*!< Exit with a FatalError */
             WARN,           /*!< Issue warning and clamp value (default) */
@@ -77,86 +79,96 @@ public:
             REPEAT          /*!< Treat as a repeating list */
         };
 
+
 private:
 
     // Private data
 
-        //- Enumeration for handling out-of-bound times
-        bounds bounding_;
+        //- Parent dictionary
+        const dictionary& dict_;
+
+        //- Enumeration for handling out-of-bound values
+        boundActions boundAction_;
+
+        //- File name
+        fileName fileName_;
+
 
 public:
 
     // Constructors
 
-        //- Construct null, optionally with a given bounding
-        timeSeries(const bounds = timeSeries::WARN);
+        //- Construct null
+        interpolationTable();
 
-        //- Construct null with a given bounding
-        timeSeries(const word&);
+        //- Construct from objectRegistry and dictionary
+        interpolationTable(const objectRegistry& obr, const dictionary& dict);
 
-        //- Construct from Istream, optionally with a given bounding
-        timeSeries(Istream&, const bounds = timeSeries::WARN);
+        //- Construct copy
+        interpolationTable(const interpolationTable& interpTable);
 
-        //- Construct from Istream with a given bounding
-        timeSeries(Istream&, const word&);
 
-    // Destructor
+    //- Destructor
+    ~interpolationTable();
 
-        ~timeSeries();
 
     // Member Functions
 
-    // Access
+        // Access
 
-        //- Return the size
-        label size() const
-        {
-            return List<Tuple2<scalar, T> >::size();
-        }
+            //- Return the size
+            label size() const
+            {
+                return List<Tuple2<scalar, Type> >::size();
+            }
 
-        //- Return the out-of-bounds treatment as a word
-        word bounding() const;
+            //- Return the out-of-bounds treatment as a word
+            word boundActionToWord(const boundActions& bound) const;
 
-    // Check
+            //- Return the out-of-bounds treatment as an enumeration
+            boundActions wordToBoundAction(const word& bound) const;
 
-        //- Check that list is monotonically increasing
-        //  Exit with a FatalError if there is a problem
-        void check() const;
 
-    // Edit
+        // Check
+
+            //- Check that list is monotonically increasing
+            //  Exit with a FatalError if there is a problem
+            void check() const;
 
-        //- Set the out-of-bounds treatment from enum, return previous setting
-        bounds bounding(const bounds& bound)
-        {
-            bounds prev = bounding_;
-            bounding_ = bound;
-            return prev;
-        }
 
-        //- Set the out-of-bounds treatment from word
-        void bounding(const word& bound);
+        // Edit
 
-    // Member Operators
+            //- Set the out-of-bounds treatment from enum, return previous
+            //  setting
+            boundActions boundAction(const boundActions& bound);
 
-        //- Return an element of constant Tuple2<scalar, T>
-        const Tuple2<scalar, T>& operator[](const label) const;
 
-        //- Return an interpolated value
-        T operator()(const scalar) const;
+        // Member Operators
 
+            //- Return an element of constant Tuple2<scalar, Type>
+            const Tuple2<scalar, Type>& operator[](const label) const;
+
+            //- Return an interpolated value
+            Type operator()(const scalar) const;
+
+
+        // I-O
+
+            //- Write
+            void write(Ostream& os) const;
 };
 
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace Foam
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
 #ifdef NoRepository
-#   include "timeSeries.C"
+#   include "interpolationTable.C"
 #endif
 
 #endif
+
 // ************************************************************************* //
diff --git a/src/OpenFOAM/interpolations/timeSeries/timeSeries.C b/src/OpenFOAM/interpolations/timeSeries/timeSeries.C
deleted file mode 100644
index a886251c677b9cb85b7d49182d818d792c24485e..0000000000000000000000000000000000000000
--- a/src/OpenFOAM/interpolations/timeSeries/timeSeries.C
+++ /dev/null
@@ -1,402 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 1991-2008 OpenCFD Ltd.
-     \\/     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 2 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, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*---------------------------------------------------------------------------*/
-
-#include "timeSeries.H"
-#include "Istream.H"
-
-// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
-
-// * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
-
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-template<typename T>
-Foam::timeSeries<T>::timeSeries(const bounds bound)
-:
-    List<Tuple2<scalar, T> >(),
-    bounding_(bound)
-{}
-
-
-template<typename T>
-Foam::timeSeries<T>::timeSeries(const word& bound)
-:
-    List<Tuple2<scalar, T> >(),
-    bounding_(timeSeries::WARN)
-{
-    bounding(bound);
-}
-
-
-template<typename T>
-Foam::timeSeries<T>::timeSeries(Istream& is, const bounds bound)
-:
-    List<Tuple2<scalar, T> >(is),
-    bounding_(bound)
-{}
-
-
-template<typename T>
-Foam::timeSeries<T>::timeSeries(Istream& is, const word& bound)
-:
-    List<Tuple2<scalar, T> >(is),
-    bounding_(timeSeries::WARN)
-{
-    bounding(bound);
-}
-
-
-// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * //
-
-// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
-
-template<typename T>
-Foam::timeSeries<T>::~timeSeries()
-{}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-template<typename T>
-Foam::word Foam::timeSeries<T>::bounding() const
-{
-    word enumName("warn");
-
-    switch (bounding_)
-    {
-        case timeSeries::ERROR:
-            enumName = "error";
-            break;
-
-        case timeSeries::WARN:
-            enumName = "warn";
-            break;
-
-        case timeSeries::CLAMP:
-            enumName = "clamp";
-            break;
-
-        case timeSeries::REPEAT:
-            enumName = "repeat";
-            break;
-    }
-
-    return enumName;
-}
-
-
-template<typename T>
-void Foam::timeSeries<T>::bounding(const word& bound)
-{
-    if (bound == "error")
-    {
-        bounding_ = timeSeries::ERROR;
-    }
-    else if (bound == "warn")
-    {
-        bounding_ = timeSeries::WARN;
-    }
-    else if (bound == "clamp")
-    {
-        bounding_ = timeSeries::CLAMP;
-    }
-    else if (bound == "repeat")
-    {
-        bounding_ = timeSeries::REPEAT;
-    }
-    else
-    {
-        WarningIn("Foam::timeSeries<T>::boundingEnum(const word&)")
-            << "bad bounding specifier " << bound << " using 'warn'" << endl;
-
-        bounding_ = timeSeries::WARN;
-    }
-}
-
-
-template<typename T>
-void Foam::timeSeries<T>::check() const
-{
-    label n = size();
-    scalar prevTime = List<Tuple2<scalar, T> >::operator[](0).first();
-
-    for (label i = 1; i < n; ++i)
-    {
-        const scalar currTime = List<Tuple2<scalar, T> >::operator[](i).first();
-
-        // avoid duplicate times (divide-by-zero error)
-        if (currTime <= prevTime)
-        {
-            FatalErrorIn
-            (
-                "Foam::timeSeries<T>::checkOrder() const"
-            )   << "out-of-order time: "
-                << currTime << " at index " << i << nl
-                << exit(FatalError);
-        }
-        prevTime = currTime;
-    }
-}
-
-
-// * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
-
-
-template<typename T>
-const Foam::Tuple2<Foam::scalar, T>&
-Foam::timeSeries<T>::operator[](const label i) const
-{
-    label ii = i;
-    label n  = size();
-
-    if (n <= 1)
-    {
-        ii = 0;
-    }
-    else if (ii < 0)
-    {
-        switch (bounding_)
-        {
-            case timeSeries::ERROR:
-                FatalErrorIn
-                (
-                    "Foam::timeSeries<T>::operator[](const label) const"
-                )   << "index (" << ii << ") underflow" << nl
-                    << exit(FatalError);
-                break;
-
-            case timeSeries::WARN:
-                WarningIn
-                (
-                    "Foam::timeSeries<T>::operator[](const label) const"
-                )   << "index (" << ii << ") underflow" << nl
-                    << "    Continuing with the first entry"
-                    << endl;
-                // fall-through to 'CLAMP'
-
-            case timeSeries::CLAMP:
-                ii = 0;
-                break;
-
-            case timeSeries::REPEAT:
-                while (ii < 0)
-                {
-                    ii += n;
-                }
-                break;
-        }
-    }
-    else if (ii >= n)
-    {
-        switch (bounding_)
-        {
-            case timeSeries::ERROR:
-                FatalErrorIn
-                (
-                    "Foam::timeSeries<T>::operator[](const label) const"
-                )   << "index (" << ii << ") overflow" << nl
-                    << exit(FatalError);
-                break;
-
-            case timeSeries::WARN:
-                WarningIn
-                (
-                    "Foam::timeSeries<T>::operator[](const label) const"
-                )   << "index (" << ii << ") overflow" << nl
-                    << "    Continuing with the last entry"
-                    << endl;
-                // fall-through to 'CLAMP'
-
-            case timeSeries::CLAMP:
-                ii = n - 1;
-                break;
-
-            case timeSeries::REPEAT:
-                while (ii >= n)
-                {
-                    ii -= n;
-                }
-                break;
-        }
-    }
-
-    return List<Tuple2<scalar, T> >::operator[](ii);
-}
-
-
-template<typename T>
-T Foam::timeSeries<T>::operator()(const scalar timeValue) const
-{
-    label n = size();
-
-    if (n <= 1)
-    {
-        return List<Tuple2<scalar, T> >::operator[](0).second();
-    }
-
-    scalar minTime = List<Tuple2<scalar, T> >::operator[](0).first();
-    scalar maxTime = List<Tuple2<scalar, T> >::operator[](n-1).first();
-    scalar lookupTime = timeValue;
-
-    if (lookupTime < minTime)
-    {
-        switch (bounding_)
-        {
-            case timeSeries::ERROR:
-                FatalErrorIn
-                (
-                    "Foam::timeSeries<T>::operator[](const scalar) const"
-                )   << "time (" << lookupTime << ") underflow" << nl
-                    << exit(FatalError);
-                break;
-
-            case timeSeries::WARN:
-                WarningIn
-                (
-                    "Foam::timeSeries<T>::operator[](const scalar) const"
-                )   << "time (" << lookupTime << ") underflow" << nl
-                    << "    Continuing with the first entry"
-                    << endl;
-                // fall-through to 'CLAMP'
-
-            case timeSeries::CLAMP:
-                return List<Tuple2<scalar, T> >::operator[](0).second();
-                break;
-
-            case timeSeries::REPEAT:
-                // adjust lookupTime to >= 0
-                while (lookupTime < 0)
-                {
-                    lookupTime += maxTime;
-                }
-                break;
-        }
-    }
-    else if (lookupTime >= maxTime)
-    {
-        switch (bounding_)
-        {
-            case timeSeries::ERROR:
-                FatalErrorIn
-                (
-                    "Foam::timeSeries<T>::operator[](const label) const"
-                )   << "time (" << lookupTime << ") overflow" << nl
-                    << exit(FatalError);
-                break;
-
-            case timeSeries::WARN:
-                WarningIn
-                (
-                    "Foam::timeSeries<T>::operator[](const label) const"
-                )   << "time (" << lookupTime << ") overflow" << nl
-                    << "    Continuing with the last entry"
-                    << endl;
-                // fall-through to 'CLAMP'
-
-            case timeSeries::CLAMP:
-                return List<Tuple2<scalar, T> >::operator[](n-1).second();
-                break;
-
-            case timeSeries::REPEAT:
-                // adjust lookupTime <= maxTime
-                while (lookupTime > maxTime)
-                {
-                    lookupTime -= maxTime;
-                }
-                break;
-        }
-    }
-
-    label lo = 0;
-    label hi = 0;
-
-    // look for the correct range
-    for (label i = 0; i < n; ++i)
-    {
-        if (lookupTime >= List<Tuple2<scalar, T> >::operator[](i).first())
-        {
-            lo = hi = i;
-        }
-        else
-        {
-            hi = i;
-            break;
-        }
-    }
-
-    if (lo == hi)
-    {
-        // we are at the end of the table - or there is only a single entry
-        return List<Tuple2<scalar, T> >::operator[](hi).second();
-    }
-    else if (hi == 0)
-    {
-        // this treatment should should only occur under these condition:
-        //  -> the 'REPEAT' treatment
-        //  -> (0 <= time <= minTime)
-        //  -> minTime > 0
-        // Use the value at maxTime as the value for time=0
-        lo = n - 1;
-
-        return
-        (
-            List<Tuple2<scalar, T> >::operator[](lo).second()
-          +
-            (
-                List<Tuple2<scalar, T> >::operator[](hi).second()
-              - List<Tuple2<scalar, T> >::operator[](lo).second()
-            )
-          * (lookupTime / minTime)
-        );
-    }
-    else
-    {
-        // normal interpolation
-        return
-        (
-            List<Tuple2<scalar, T> >::operator[](lo).second()
-          +
-            (
-                List<Tuple2<scalar, T> >::operator[](hi).second()
-              - List<Tuple2<scalar, T> >::operator[](lo).second()
-            )
-          *
-            (
-                lookupTime
-              - List<Tuple2<scalar, T> >::operator[](lo).first()
-            )
-          /
-            (
-                List<Tuple2<scalar, T> >::operator[](hi).first()
-              - List<Tuple2<scalar, T> >::operator[](lo).first()
-            )
-        );
-    }
-}
-
-
-// ************************************************************************* //
diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files
index d0e560c73b995f7119c7741ef86f4c906ff0c1a9..d4a3e0ff78e55c5fa2cdfdeccfdd6682511565eb 100644
--- a/src/finiteVolume/Make/files
+++ b/src/finiteVolume/Make/files
@@ -78,7 +78,7 @@ $(derivedFvPatchFields)/freestream/freestreamFvPatchFields.C
 $(derivedFvPatchFields)/freestreamPressure/freestreamPressureFvPatchScalarField.C
 $(derivedFvPatchFields)/inletOutlet/inletOutletFvPatchFields.C
 $(derivedFvPatchFields)/inletOutletTotalTemperature/inletOutletTotalTemperatureFvPatchScalarField.C
-$(derivedFvPatchFields)/massFlowRateInletVelocity/massFlowRateInletVelocityFvPatchVectorField.C
+$(derivedFvPatchFields)/flowRateInletVelocity/flowRateInletVelocityFvPatchVectorField.C
 $(derivedFvPatchFields)/movingWallVelocity/movingWallVelocityFvPatchVectorField.C
 $(derivedFvPatchFields)/oscillatingFixedValue/oscillatingFixedValueFvPatchFields.C
 $(derivedFvPatchFields)/outletInlet/outletInletFvPatchFields.C
@@ -96,7 +96,7 @@ $(derivedFvPatchFields)/surfaceNormalFixedValue/surfaceNormalFixedValueFvPatchVe
 $(derivedFvPatchFields)/syringePressure/syringePressureFvPatchScalarField.C
 $(derivedFvPatchFields)/timeVaryingMappedFixedValue/AverageIOFields.C
 $(derivedFvPatchFields)/timeVaryingMappedFixedValue/timeVaryingMappedFixedValueFvPatchFields.C
-$(derivedFvPatchFields)/timeVaryingMassFlowRateInletVelocity/timeVaryingMassFlowRateInletVelocityFvPatchVectorField.C
+$(derivedFvPatchFields)/timeVaryingFlowRateInletVelocity/timeVaryingFlowRateInletVelocityFvPatchVectorField.C
 $(derivedFvPatchFields)/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFvPatchFields.C
 $(derivedFvPatchFields)/totalPressure/totalPressureFvPatchScalarField.C
 $(derivedFvPatchFields)/timeVaryingUniformTotalPressure/timeVaryingUniformTotalPressureFvPatchScalarField.C
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/massFlowRateInletVelocity/massFlowRateInletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/flowRateInletVelocity/flowRateInletVelocityFvPatchVectorField.C
similarity index 75%
rename from src/finiteVolume/fields/fvPatchFields/derived/massFlowRateInletVelocity/massFlowRateInletVelocityFvPatchVectorField.C
rename to src/finiteVolume/fields/fvPatchFields/derived/flowRateInletVelocity/flowRateInletVelocityFvPatchVectorField.C
index 393cac55d0b994fe33c4e4a25e0112dffe79159d..c3427b4bded0a4c28ae931f79021ee374d885ddd 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/massFlowRateInletVelocity/massFlowRateInletVelocityFvPatchVectorField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/flowRateInletVelocity/flowRateInletVelocityFvPatchVectorField.C
@@ -24,7 +24,7 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "massFlowRateInletVelocityFvPatchVectorField.H"
+#include "flowRateInletVelocityFvPatchVectorField.H"
 #include "volFields.H"
 #include "addToRunTimeSelectionTable.H"
 #include "fvPatchFieldMapper.H"
@@ -33,38 +33,40 @@ License
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
 
 Foam::
-massFlowRateInletVelocityFvPatchVectorField::
-massFlowRateInletVelocityFvPatchVectorField
+flowRateInletVelocityFvPatchVectorField::
+flowRateInletVelocityFvPatchVectorField
 (
     const fvPatch& p,
     const DimensionedField<vector, volMesh>& iF
 )
 :
     fixedValueFvPatchField<vector>(p, iF),
-    massFlowRate_(0),
+    flowRate_(0),
     phiName_("phi"),
     rhoName_("rho")
 {}
 
+
 Foam::
-massFlowRateInletVelocityFvPatchVectorField::
-massFlowRateInletVelocityFvPatchVectorField
+flowRateInletVelocityFvPatchVectorField::
+flowRateInletVelocityFvPatchVectorField
 (
-    const massFlowRateInletVelocityFvPatchVectorField& ptf,
+    const flowRateInletVelocityFvPatchVectorField& ptf,
     const fvPatch& p,
     const DimensionedField<vector, volMesh>& iF,
     const fvPatchFieldMapper& mapper
 )
 :
     fixedValueFvPatchField<vector>(ptf, p, iF, mapper),
-    massFlowRate_(ptf.massFlowRate_),
+    flowRate_(ptf.flowRate_),
     phiName_(ptf.phiName_),
     rhoName_(ptf.rhoName_)
 {}
 
+
 Foam::
-massFlowRateInletVelocityFvPatchVectorField::
-massFlowRateInletVelocityFvPatchVectorField
+flowRateInletVelocityFvPatchVectorField::
+flowRateInletVelocityFvPatchVectorField
 (
     const fvPatch& p,
     const DimensionedField<vector, volMesh>& iF,
@@ -72,7 +74,7 @@ massFlowRateInletVelocityFvPatchVectorField
 )
 :
     fixedValueFvPatchField<vector>(p, iF, dict),
-    massFlowRate_(readScalar(dict.lookup("massFlowRate"))),
+    flowRate_(readScalar(dict.lookup("flowRate"))),
     phiName_("phi"),
     rhoName_("rho")
 {
@@ -87,29 +89,31 @@ massFlowRateInletVelocityFvPatchVectorField
     }
 }
 
+
 Foam::
-massFlowRateInletVelocityFvPatchVectorField::
-massFlowRateInletVelocityFvPatchVectorField
+flowRateInletVelocityFvPatchVectorField::
+flowRateInletVelocityFvPatchVectorField
 (
-    const massFlowRateInletVelocityFvPatchVectorField& ptf
+    const flowRateInletVelocityFvPatchVectorField& ptf
 )
 :
     fixedValueFvPatchField<vector>(ptf),
-    massFlowRate_(ptf.massFlowRate_),
+    flowRate_(ptf.flowRate_),
     phiName_(ptf.phiName_),
     rhoName_(ptf.rhoName_)
 {}
 
+
 Foam::
-massFlowRateInletVelocityFvPatchVectorField::
-massFlowRateInletVelocityFvPatchVectorField
+flowRateInletVelocityFvPatchVectorField::
+flowRateInletVelocityFvPatchVectorField
 (
-    const massFlowRateInletVelocityFvPatchVectorField& ptf,
+    const flowRateInletVelocityFvPatchVectorField& ptf,
     const DimensionedField<vector, volMesh>& iF
 )
 :
     fixedValueFvPatchField<vector>(ptf, iF),
-    massFlowRate_(ptf.massFlowRate_),
+    flowRate_(ptf.flowRate_),
     phiName_(ptf.phiName_),
     rhoName_(ptf.rhoName_)
 {}
@@ -117,7 +121,7 @@ massFlowRateInletVelocityFvPatchVectorField
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-void Foam::massFlowRateInletVelocityFvPatchVectorField::updateCoeffs()
+void Foam::flowRateInletVelocityFvPatchVectorField::updateCoeffs()
 {
     if (updated())
     {
@@ -125,7 +129,7 @@ void Foam::massFlowRateInletVelocityFvPatchVectorField::updateCoeffs()
     }
 
     // a simpler way of doing this would be nice
-    scalar avgU = -massFlowRate_/gSum(patch().magSf());
+    scalar avgU = -flowRate_/gSum(patch().magSf());
 
     vectorField n = patch().nf();
 
@@ -151,23 +155,23 @@ void Foam::massFlowRateInletVelocityFvPatchVectorField::updateCoeffs()
     {
         FatalErrorIn
         (
-            "massFlowRateInletVelocityFvPatchVectorField::updateCoeffs()"
+            "flowRateInletVelocityFvPatchVectorField::updateCoeffs()"
         )   << "dimensions of phi are incorrect"
             << "\n    on patch " << this->patch().name()
             << " of field " << this->dimensionedInternalField().name()
             << " in file " << this->dimensionedInternalField().objectPath()
-            << exit(FatalError);
+            << nl << exit(FatalError);
     }
 
     fixedValueFvPatchField<vector>::updateCoeffs();
 }
 
 
-void Foam::massFlowRateInletVelocityFvPatchVectorField::write(Ostream& os) const
+void Foam::flowRateInletVelocityFvPatchVectorField::write(Ostream& os) const
 {
     fvPatchField<vector>::write(os);
 
-    os.writeKeyword("massFlowRate") << massFlowRate_
+    os.writeKeyword("flowRate") << flowRate_
         << token::END_STATEMENT << nl;
 
     if (phiName_ != "phi")
@@ -191,7 +195,7 @@ namespace Foam
    makePatchTypeField
    (
        fvPatchVectorField,
-       massFlowRateInletVelocityFvPatchVectorField
+       flowRateInletVelocityFvPatchVectorField
    );
 }
 
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/massFlowRateInletVelocity/massFlowRateInletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/flowRateInletVelocity/flowRateInletVelocityFvPatchVectorField.H
similarity index 70%
rename from src/finiteVolume/fields/fvPatchFields/derived/massFlowRateInletVelocity/massFlowRateInletVelocityFvPatchVectorField.H
rename to src/finiteVolume/fields/fvPatchFields/derived/flowRateInletVelocity/flowRateInletVelocityFvPatchVectorField.H
index 8171e24db6a204f4e3c65dd717066f9f0ad9b507..b0c8de9b2f018be80b6060eb2d87eba3214d2060 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/massFlowRateInletVelocity/massFlowRateInletVelocityFvPatchVectorField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/flowRateInletVelocity/flowRateInletVelocityFvPatchVectorField.H
@@ -23,19 +23,22 @@ License
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
 Class
-    Foam::massFlowRateInletVelocityFvPatchVectorField
+    Foam::flowRateInletVelocityFvPatchVectorField
 
 Description
-    Describes an massflow normal vector boundary condition by its magnitude
-    as an integral over its area.
-    The current density is used to correct the velocity.
+    Describes an volumetric/mass flow normal vector boundary condition by its
+    magnitude as an integral over its area.
+    The basis of the patch (volumetric or mass) is determined by the
+    dimensions of the flux, phi.
+    The current density is used to correct the velocity when applying the mass
+    basis.
 
     Example of the boundary condition specification:
     @verbatim
     inlet
     {
-        type            massFlowRateInletVelocity;
-        massFlowRate    0.2;             // Mass flow rate [kg/s]
+        type            flowRateInletVelocity;
+        flowRate        0.2;        // Volumetric/mass flow rate [m3/s or kg/s]
         value           uniform (0 0 0); // placeholder
     }
     @endverbatim
@@ -46,12 +49,12 @@ Note
     - Strange behaviour with potentialFoam since the U equation is not solved
 
 SourceFiles
-    massFlowRateInletVelocityFvPatchVectorField.C
+    flowRateInletVelocityFvPatchVectorField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef massFlowRateInletVelocityFvPatchVectorField_H
-#define massFlowRateInletVelocityFvPatchVectorField_H
+#ifndef flowRateInletVelocityFvPatchVectorField_H
+#define flowRateInletVelocityFvPatchVectorField_H
 
 #include "fixedValueFvPatchFields.H"
 
@@ -60,17 +63,17 @@ SourceFiles
 namespace Foam
 {
 /*---------------------------------------------------------------------------*\
-               Class massFlowRateInletVelocityFvPatch Declaration
+               Class flowRateInletVelocityFvPatch Declaration
 \*---------------------------------------------------------------------------*/
 
-class massFlowRateInletVelocityFvPatchVectorField
+class flowRateInletVelocityFvPatchVectorField
 :
     public fixedValueFvPatchVectorField
 {
     // Private data
 
-        //- Inlet integral mass flow rate
-        scalar massFlowRate_;
+        //- Inlet integral flow rate
+        scalar flowRate_;
 
         //- Name of the flux transporting the field
         word phiName_;
@@ -82,20 +85,20 @@ class massFlowRateInletVelocityFvPatchVectorField
 public:
 
    //- Runtime type information
-   TypeName("massFlowRateInletVelocity");
+   TypeName("flowRateInletVelocity");
 
 
    // Constructors
 
         //- Construct from patch and internal field
-        massFlowRateInletVelocityFvPatchVectorField
+        flowRateInletVelocityFvPatchVectorField
         (
             const fvPatch&,
             const DimensionedField<vector, volMesh>&
         );
 
         //- Construct from patch, internal field and dictionary
-        massFlowRateInletVelocityFvPatchVectorField
+        flowRateInletVelocityFvPatchVectorField
         (
             const fvPatch&,
             const DimensionedField<vector, volMesh>&,
@@ -103,20 +106,20 @@ public:
         );
 
         //- Construct by mapping given
-        //  massFlowRateInletVelocityFvPatchVectorField
+        //  flowRateInletVelocityFvPatchVectorField
         //  onto a new patch
-        massFlowRateInletVelocityFvPatchVectorField
+        flowRateInletVelocityFvPatchVectorField
         (
-            const massFlowRateInletVelocityFvPatchVectorField&,
+            const flowRateInletVelocityFvPatchVectorField&,
             const fvPatch&,
             const DimensionedField<vector, volMesh>&,
             const fvPatchFieldMapper&
         );
 
         //- Construct as copy
-        massFlowRateInletVelocityFvPatchVectorField
+        flowRateInletVelocityFvPatchVectorField
         (
-            const massFlowRateInletVelocityFvPatchVectorField&
+            const flowRateInletVelocityFvPatchVectorField&
         );
 
         //- Construct and return a clone
@@ -124,14 +127,14 @@ public:
         {
             return tmp<fvPatchVectorField>
             (
-                new massFlowRateInletVelocityFvPatchVectorField(*this)
+                new flowRateInletVelocityFvPatchVectorField(*this)
             );
         }
 
         //- Construct as copy setting internal field reference
-        massFlowRateInletVelocityFvPatchVectorField
+        flowRateInletVelocityFvPatchVectorField
         (
-            const massFlowRateInletVelocityFvPatchVectorField&,
+            const flowRateInletVelocityFvPatchVectorField&,
             const DimensionedField<vector, volMesh>&
         );
 
@@ -143,7 +146,7 @@ public:
         {
             return tmp<fvPatchVectorField>
             (
-                new massFlowRateInletVelocityFvPatchVectorField(*this, iF)
+                new flowRateInletVelocityFvPatchVectorField(*this, iF)
             );
         }
 
@@ -152,16 +155,16 @@ public:
 
         // Access
 
-            //- Return the mass flux
-            scalar massFlowRate() const
+            //- Return the flux
+            scalar flowRate() const
             {
-                return massFlowRate_;
+                return flowRate_;
             }
 
-            //- Return reference to the mass flux to allow adjustment
-            scalar& massFlowRate()
+            //- Return reference to the flux to allow adjustment
+            scalar& flowRate()
             {
-                return massFlowRate_;
+                return flowRate_;
             }
 
 
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingFlowRateInletVelocity/timeVaryingFlowRateInletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingFlowRateInletVelocity/timeVaryingFlowRateInletVelocityFvPatchVectorField.C
new file mode 100644
index 0000000000000000000000000000000000000000..f492d86c7769ee68c63572ab43e2de15b62d7ec7
--- /dev/null
+++ b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingFlowRateInletVelocity/timeVaryingFlowRateInletVelocityFvPatchVectorField.C
@@ -0,0 +1,141 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2006-2008 OpenCFD Ltd.
+     \\/     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 2 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, write to the Free Software Foundation,
+    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+\*---------------------------------------------------------------------------*/
+
+#include "timeVaryingFlowRateInletVelocityFvPatchVectorField.H"
+#include "volFields.H"
+#include "addToRunTimeSelectionTable.H"
+#include "fvPatchFieldMapper.H"
+#include "surfaceFields.H"
+#include "Time.H"
+#include "IFstream.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::
+timeVaryingFlowRateInletVelocityFvPatchVectorField::
+timeVaryingFlowRateInletVelocityFvPatchVectorField
+(
+    const fvPatch& p,
+    const DimensionedField<vector, volMesh>& iF
+)
+:
+    flowRateInletVelocityFvPatchVectorField(p, iF),
+    timeSeries_()
+{}
+
+
+Foam::
+timeVaryingFlowRateInletVelocityFvPatchVectorField::
+timeVaryingFlowRateInletVelocityFvPatchVectorField
+(
+    const timeVaryingFlowRateInletVelocityFvPatchVectorField& ptf,
+    const fvPatch& p,
+    const DimensionedField<vector, volMesh>& iF,
+    const fvPatchFieldMapper& mapper
+)
+:
+    flowRateInletVelocityFvPatchVectorField(ptf, p, iF, mapper),
+    timeSeries_(ptf.timeSeries_)
+{}
+
+
+Foam::
+timeVaryingFlowRateInletVelocityFvPatchVectorField::
+timeVaryingFlowRateInletVelocityFvPatchVectorField
+(
+    const fvPatch& p,
+    const DimensionedField<vector, volMesh>& iF,
+    const dictionary& dict
+)
+:
+    flowRateInletVelocityFvPatchVectorField(p, iF, dict),
+    timeSeries_(this->db(), dict)
+{}
+
+
+Foam::
+timeVaryingFlowRateInletVelocityFvPatchVectorField::
+timeVaryingFlowRateInletVelocityFvPatchVectorField
+(
+    const timeVaryingFlowRateInletVelocityFvPatchVectorField& ptf
+)
+:
+    flowRateInletVelocityFvPatchVectorField(ptf),
+    timeSeries_(ptf.timeSeries_)
+{}
+
+
+Foam::
+timeVaryingFlowRateInletVelocityFvPatchVectorField::
+timeVaryingFlowRateInletVelocityFvPatchVectorField
+(
+    const timeVaryingFlowRateInletVelocityFvPatchVectorField& ptf,
+    const DimensionedField<vector, volMesh>& iF
+)
+:
+    flowRateInletVelocityFvPatchVectorField(ptf, iF),
+    timeSeries_(ptf.timeSeries_)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+
+void Foam::
+timeVaryingFlowRateInletVelocityFvPatchVectorField::
+updateCoeffs()
+{
+    if (updated())
+    {
+        return;
+    }
+
+    flowRate() = timeSeries_(this->db().time().timeOutputValue());
+    flowRateInletVelocityFvPatchVectorField::updateCoeffs();
+}
+
+
+void Foam::
+timeVaryingFlowRateInletVelocityFvPatchVectorField::
+write(Ostream& os) const
+{
+    flowRateInletVelocityFvPatchVectorField::write(os);
+    timeSeries_.write(os);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+   makePatchTypeField
+   (
+       fvPatchVectorField,
+       timeVaryingFlowRateInletVelocityFvPatchVectorField
+   );
+}
+
+
+// ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingMassFlowRateInletVelocity/timeVaryingMassFlowRateInletVelocityFvPatchVectorField.H b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingFlowRateInletVelocity/timeVaryingFlowRateInletVelocityFvPatchVectorField.H
similarity index 66%
rename from src/finiteVolume/fields/fvPatchFields/derived/timeVaryingMassFlowRateInletVelocity/timeVaryingMassFlowRateInletVelocityFvPatchVectorField.H
rename to src/finiteVolume/fields/fvPatchFields/derived/timeVaryingFlowRateInletVelocity/timeVaryingFlowRateInletVelocityFvPatchVectorField.H
index f400c9ce4a33e888384c0d68598c9f8581083c13..5713450f91b7f2b0e0a34fcb97ed6157a6b7faf5 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingMassFlowRateInletVelocity/timeVaryingMassFlowRateInletVelocityFvPatchVectorField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingFlowRateInletVelocity/timeVaryingFlowRateInletVelocityFvPatchVectorField.H
@@ -23,19 +23,19 @@ License
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
 Class
-    Foam::timeVaryingMassFlowRateInletVelocityFvPatchVectorField
+    Foam::timeVaryingFlowRateInletVelocityFvPatchVectorField
 
 Description
-    A time-varying form of a massflow normal vector boundary condition.
+    A time-varying form of a flow normal vector boundary condition.
 
     Example of the boundary condition specification:
     @verbatim
     inlet
     {
-        type            timeVaryingMassFlowRateInletVelocity;
-        massFlowRate    0.2;              // Massflow rate [kg/s]
+        type            timeVaryingFlowRateInletVelocity;
+        flowRate        0.2;         // Volumetric/mass flow rate [m3/s or kg/s]
         value           uniform (0 0 0);  // placeholder
-        timeDataFile   "time-series";
+        fileName        "time-series";
         timeBounding    repeat;           // (error|warn|clamp|repeat)
     }
     @endverbatim
@@ -46,58 +46,54 @@ Note
     - strange behaviour with potentialFoam since the U equation is not solved
 
 See Also
-    Foam::timeSeries and Foam::massFlowRateInletVelocityFvPatchVectorField
+    Foam::timeSeries and Foam::flowRateInletVelocityFvPatchVectorField
 
 SourceFiles
-    timeVaryingMassFlowRateInletVelocityFvPatchVectorField.C
+    timeVaryingFlowRateInletVelocityFvPatchVectorField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef timeVaryingMassFlowRateInletVelocityFvPatchVectorField_H
-#define timeVaryingMassFlowRateInletVelocityFvPatchVectorField_H
+#ifndef timeVaryingFlowRateInletVelocityFvPatchVectorField_H
+#define timeVaryingFlowRateInletVelocityFvPatchVectorField_H
+
+#include "flowRateInletVelocityFvPatchVectorField.H"
+#include "interpolationTable.H"
 
-#include "massFlowRateInletVelocityFvPatchVectorField.H"
-#include "timeSeries.H"
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
 /*---------------------------------------------------------------------------*\
-        Class timeVaryingMassFlowRateInletVelocityFvPatch Declaration
+        Class timeVaryingFlowRateInletVelocityFvPatch Declaration
 \*---------------------------------------------------------------------------*/
 
-class timeVaryingMassFlowRateInletVelocityFvPatchVectorField
+class timeVaryingFlowRateInletVelocityFvPatchVectorField
 :
-    public massFlowRateInletVelocityFvPatchVectorField
+    public flowRateInletVelocityFvPatchVectorField
 {
     // Private data
 
-        //- file containing time/massFlowRate
-        fileName timeDataFile_;
-
         //- the time series being used, including the bounding treatment
-        timeSeries<scalar> timeSeries_;
+        interpolationTable<scalar> timeSeries_;
 
-        //- interpolate the value at the current time
-        scalar currentValue();
 
 public:
 
     //- Runtime type information
-    TypeName("timeVaryingMassFlowRateInletVelocity");
+    TypeName("timeVaryingFlowRateInletVelocity");
 
 
     // Constructors
 
         //- Construct from patch and internal field
-        timeVaryingMassFlowRateInletVelocityFvPatchVectorField
+        timeVaryingFlowRateInletVelocityFvPatchVectorField
         (
             const fvPatch&,
             const DimensionedField<vector, volMesh>&
         );
 
         //- Construct from patch, internal field and dictionary
-        timeVaryingMassFlowRateInletVelocityFvPatchVectorField
+        timeVaryingFlowRateInletVelocityFvPatchVectorField
         (
             const fvPatch&,
             const DimensionedField<vector, volMesh>&,
@@ -105,18 +101,18 @@ public:
         );
 
         //- Construct by mapping given patch field onto a new patch
-        timeVaryingMassFlowRateInletVelocityFvPatchVectorField
+        timeVaryingFlowRateInletVelocityFvPatchVectorField
         (
-            const timeVaryingMassFlowRateInletVelocityFvPatchVectorField&,
+            const timeVaryingFlowRateInletVelocityFvPatchVectorField&,
             const fvPatch&,
             const DimensionedField<vector, volMesh>&,
             const fvPatchFieldMapper&
         );
 
         //- Construct as copy
-        timeVaryingMassFlowRateInletVelocityFvPatchVectorField
+        timeVaryingFlowRateInletVelocityFvPatchVectorField
         (
-            const timeVaryingMassFlowRateInletVelocityFvPatchVectorField&
+            const timeVaryingFlowRateInletVelocityFvPatchVectorField&
         );
 
         //- Construct and return a clone
@@ -124,14 +120,14 @@ public:
         {
             return tmp<fvPatchVectorField>
             (
-                new timeVaryingMassFlowRateInletVelocityFvPatchVectorField(*this)
+                new timeVaryingFlowRateInletVelocityFvPatchVectorField(*this)
             );
         }
 
         //- Construct as copy setting internal field reference
-        timeVaryingMassFlowRateInletVelocityFvPatchVectorField
+        timeVaryingFlowRateInletVelocityFvPatchVectorField
         (
-            const timeVaryingMassFlowRateInletVelocityFvPatchVectorField&,
+            const timeVaryingFlowRateInletVelocityFvPatchVectorField&,
             const DimensionedField<vector, volMesh>&
         );
 
@@ -143,34 +139,34 @@ public:
         {
             return tmp<fvPatchVectorField>
             (
-                new timeVaryingMassFlowRateInletVelocityFvPatchVectorField(*this, iF)
+                new timeVaryingFlowRateInletVelocityFvPatchVectorField
+                (
+                    *this,
+                    iF
+                )
             );
         }
 
+
     // Member functions
 
         // Access
 
-            //- Return the out-of-bounds treatment as a word
-            word timeBounding() const
-            {
-                return timeSeries_.bounding();
-            }
-
             //- Return the time series used
-            const timeSeries<scalar>& timeData() const
+            const interpolationTable<scalar>& timeSeries() const
             {
                 return timeSeries_;
             }
 
+
         // Evaluation functions
 
             //- Update the coefficients associated with the patch field
             virtual void updateCoeffs();
 
+
         //- Write
         virtual void write(Ostream&) const;
-
 };
 
 
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingMassFlowRateInletVelocity/timeVaryingMassFlowRateInletVelocityFvPatchVectorField.C b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingMassFlowRateInletVelocity/timeVaryingMassFlowRateInletVelocityFvPatchVectorField.C
deleted file mode 100644
index 9526998a5710126e905f8b47fc8e0bd3618ddc6a..0000000000000000000000000000000000000000
--- a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingMassFlowRateInletVelocity/timeVaryingMassFlowRateInletVelocityFvPatchVectorField.C
+++ /dev/null
@@ -1,200 +0,0 @@
-/*---------------------------------------------------------------------------*\
-  =========                 |
-  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
-   \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2006-2008 OpenCFD Ltd.
-     \\/     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 2 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, write to the Free Software Foundation,
-    Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
-\*---------------------------------------------------------------------------*/
-
-#include "timeVaryingMassFlowRateInletVelocityFvPatchVectorField.H"
-#include "volFields.H"
-#include "addToRunTimeSelectionTable.H"
-#include "fvPatchFieldMapper.H"
-#include "surfaceFields.H"
-#include "Time.H"
-#include "IFstream.H"
-
-// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
-
-Foam::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField
-(
-    const fvPatch& p,
-    const DimensionedField<vector, volMesh>& iF
-)
-:
-    massFlowRateInletVelocityFvPatchVectorField(p, iF)
-{}
-
-
-Foam::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField
-(
-    const timeVaryingMassFlowRateInletVelocityFvPatchVectorField& ptf,
-    const fvPatch& p,
-    const DimensionedField<vector, volMesh>& iF,
-    const fvPatchFieldMapper& mapper
-)
-:
-    massFlowRateInletVelocityFvPatchVectorField(ptf, p, iF, mapper),
-    timeDataFile_(ptf.timeDataFile_),
-    timeSeries_(ptf.timeBounding())
-{}
-
-
-Foam::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField
-(
-    const fvPatch& p,
-    const DimensionedField<vector, volMesh>& iF,
-    const dictionary& dict
-)
-:
-    massFlowRateInletVelocityFvPatchVectorField(p, iF, dict),
-    timeDataFile_(dict.lookup("timeDataFile")),
-    timeSeries_(word(dict.lookup("timeBounding")))
-{}
-
-
-Foam::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField
-(
-    const timeVaryingMassFlowRateInletVelocityFvPatchVectorField& ptf
-)
-:
-    massFlowRateInletVelocityFvPatchVectorField(ptf),
-    timeDataFile_(ptf.timeDataFile_),
-    timeSeries_(ptf.timeBounding())
-{}
-
-
-Foam::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField
-(
-    const timeVaryingMassFlowRateInletVelocityFvPatchVectorField& ptf,
-    const DimensionedField<vector, volMesh>& iF
-)
-:
-    massFlowRateInletVelocityFvPatchVectorField(ptf, iF),
-    timeDataFile_(ptf.timeDataFile_),
-    timeSeries_(ptf.timeBounding())
-{}
-
-
-// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
-
-Foam::scalar
-Foam::timeVaryingMassFlowRateInletVelocityFvPatchVectorField::
-currentValue()
-{
-    if (timeSeries_.size() == 0)
-    {
-        fileName fName(timeDataFile_);
-        fName.expand();
-
-        if (fName.size() == 0)
-        {
-            FatalErrorIn
-            (
-                "timeVaryingMassFlowRateInletVelocity"
-                "::currentValue()"
-            )   << "timeDataFile not specified for Patch "
-                << this->patch().name()
-                << exit(FatalError);
-        }
-        else
-        {
-            // relative path
-            if (fName[0] != '/')
-            {
-                fName = this->db().path()/fName;
-            }
-
-            // just in case we change the interface to timeSeries
-            word boundType = timeBounding();
-
-            IFstream(fName)() >> timeSeries_;
-            timeSeries_.bounding(boundType);
-
-            // be a bit paranoid and check that the list is okay
-            timeSeries_.check();
-        }
-
-        if (timeSeries_.size() == 0)
-        {
-            FatalErrorIn
-            (
-                "timeVaryingMassFlowRateInletVelocity"
-                "::currentValue()"
-            )   << "empty time series for Patch "
-                << this->patch().name()
-                << exit(FatalError);
-        }
-    }
-
-    return timeSeries_(this->db().time().timeOutputValue());
-}
-
-
-void Foam::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField::
-updateCoeffs()
-{
-    if (updated())
-    {
-        return;
-    }
-
-    massFlowRate() = currentValue();
-    massFlowRateInletVelocityFvPatchVectorField::updateCoeffs();
-}
-
-
-void Foam::
-timeVaryingMassFlowRateInletVelocityFvPatchVectorField::
-write(Ostream& os) const
-{
-    massFlowRateInletVelocityFvPatchVectorField::write(os);
-    os.writeKeyword("timeDataFile")
-        << timeDataFile_ << token::END_STATEMENT << nl;
-    os.writeKeyword("timeBounding")
-        << timeBounding() << token::END_STATEMENT << nl;
-}
-
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-namespace Foam
-{
-   makePatchTypeField
-   (
-       fvPatchVectorField,
-       timeVaryingMassFlowRateInletVelocityFvPatchVectorField
-   );
-}
-
-
-// ************************************************************************* //
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFvPatchField.C b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFvPatchField.C
index 646ee136d54b8993d81e1b133c11d317225c4469..dc09d678b2257f5b5151228a9614e62833ffbe2a 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFvPatchField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFvPatchField.C
@@ -38,7 +38,8 @@ timeVaryingUniformFixedValueFvPatchField
     const DimensionedField<Type, volMesh>& iF
 )
 :
-    fixedValueFvPatchField<Type>(p, iF)
+    fixedValueFvPatchField<Type>(p, iF),
+    timeSeries_()
 {}
 
 
@@ -52,8 +53,7 @@ timeVaryingUniformFixedValueFvPatchField
 )
 :
     fixedValueFvPatchField<Type>(p, iF),
-    timeDataFile_(dict.lookup("timeDataFile")),
-    timeSeries_(word(dict.lookup("timeBounding")))
+    timeSeries_(this->db(), dict)
 {
    if (dict.found("value"))
    {
@@ -77,8 +77,7 @@ timeVaryingUniformFixedValueFvPatchField
 )
 :
     fixedValueFvPatchField<Type>(ptf, p, iF, mapper),
-    timeDataFile_(ptf.timeDataFile_),
-    timeSeries_(ptf.timeBounding())
+    timeSeries_(ptf.timeSeries_)
 {}
 
 
@@ -90,8 +89,7 @@ timeVaryingUniformFixedValueFvPatchField
 )
 :
     fixedValueFvPatchField<Type>(ptf),
-    timeDataFile_(ptf.timeDataFile_),
-    timeSeries_(ptf.timeBounding())
+    timeSeries_(ptf.timeSeries_)
 {}
 
 
@@ -104,66 +102,12 @@ timeVaryingUniformFixedValueFvPatchField
 )
 :
     fixedValueFvPatchField<Type>(ptf, iF),
-    timeDataFile_(ptf.timeDataFile_),
-    timeSeries_(ptf.timeBounding())
+    timeSeries_(ptf.timeSeries_)
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-template<class Type>
-Type Foam::timeVaryingUniformFixedValueFvPatchField<Type>::
-currentValue()
-{
-    if (timeSeries_.size() == 0)
-    {
-        fileName fName(timeDataFile_);
-        fName.expand();
-
-        if (fName.size() == 0)
-        {
-            FatalErrorIn
-            (
-                "timeVaryingUniformFixedValueFvPatchField"
-                "::currentValue()"
-            )   << "timeDataFile not specified for Patch "
-                << this->patch().name()
-                << exit(FatalError);
-        }
-        else
-        {
-            // relative path
-            if (fName[0] != '/')
-            {
-                fName = this->db().path()/fName;
-            }
-
-            // just in case we change the interface to timeSeries
-            word boundType = timeBounding();
-
-            IFstream(fName)() >> timeSeries_;
-            timeSeries_.bounding(boundType);
-
-            // be a bit paranoid and check that the list is okay
-            timeSeries_.check();
-        }
-
-        if (timeSeries_.size() == 0)
-        {
-            FatalErrorIn
-            (
-                "timeVaryingUniformFixedValueFvPatchField"
-                "::currentValue()"
-            )   << "empty time series for Patch "
-                << this->patch().name()
-                << exit(FatalError);
-        }
-    }
-
-    return timeSeries_(this->db().time().timeOutputValue());
-}
-
-
 template<class Type>
 void Foam::timeVaryingUniformFixedValueFvPatchField<Type>::updateCoeffs()
 {
@@ -172,7 +116,10 @@ void Foam::timeVaryingUniformFixedValueFvPatchField<Type>::updateCoeffs()
         return;
     }
 
-    fvPatchField<Type>::operator==(currentValue());
+    fvPatchField<Type>::operator==
+    (
+        timeSeries_(this->db().time().timeOutputValue())
+    );
     fixedValueFvPatchField<Type>::updateCoeffs();
 }
 
@@ -184,10 +131,7 @@ void Foam::timeVaryingUniformFixedValueFvPatchField<Type>::write
 ) const
 {
     fvPatchField<Type>::write(os);
-    os.writeKeyword("timeDataFile")
-        << timeDataFile_ << token::END_STATEMENT << nl;
-    os.writeKeyword("timeBounding")
-        << timeBounding() << token::END_STATEMENT << nl;
+    timeSeries_.write(os);
     this->writeEntry("value", os);
 }
 
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFvPatchField.H b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFvPatchField.H
index 36f4b02e48c62f648ca80dd58ada622a62765866..1491c0a53c949bbbb8b17ca72655d1dd23d4457d 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFvPatchField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformFixedValue/timeVaryingUniformFixedValueFvPatchField.H
@@ -54,7 +54,7 @@ SourceFiles
 #define timeVaryingUniformFixedValueFvPatchField_H
 
 #include "fixedValueFvPatchField.H"
-#include "timeSeries.H"
+#include "interpolationTable.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -72,14 +72,8 @@ class timeVaryingUniformFixedValueFvPatchField
 {
     // Private data
 
-        //- File containing time/uniformFixedValue
-        fileName timeDataFile_;
-
         //- The time series being used, including the bounding treatment
-        timeSeries<Type> timeSeries_;
-
-        //- Interpolate the value at the current time
-        Type currentValue();
+        interpolationTable<Type> timeSeries_;
 
 
 public:
@@ -153,14 +147,8 @@ public:
 
         // Access
 
-            //- Return the out-of-bounds treatment as a word
-            word timeBounding() const
-            {
-                return timeSeries_.bounding();
-            }
-
             //- Return the time series used
-            const timeSeries<Type>& timeData() const
+            const interpolationTable<Type>& timeSeries() const
             {
                 return timeSeries_;
             }
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformTotalPressure/timeVaryingUniformTotalPressureFvPatchScalarField.C b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformTotalPressure/timeVaryingUniformTotalPressureFvPatchScalarField.C
index c7407adf982252a4539352bd1ea83ec0965ab8ad..711fccdbc629b4ccdfa26f552bbd938e6e571286 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformTotalPressure/timeVaryingUniformTotalPressureFvPatchScalarField.C
+++ b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformTotalPressure/timeVaryingUniformTotalPressureFvPatchScalarField.C
@@ -46,8 +46,8 @@ timeVaryingUniformTotalPressureFvPatchScalarField
     rhoName_("undefined"),
     psiName_("undefined"),
     gamma_(0.0),
-    p0_(0.0)
-
+    p0_(0.0),
+    totalPressureTimeSeries_()
 {}
 
 
@@ -66,8 +66,7 @@ timeVaryingUniformTotalPressureFvPatchScalarField
     psiName_(dict.lookup("psi")),
     gamma_(readScalar(dict.lookup("gamma"))),
     p0_(readScalar(dict.lookup("p0"))),
-    totalPressureDataFileName_(dict.lookup("totalPressureDataFileName")),
-    totalPressureTimeSeries_(word(dict.lookup("timeBounding")))
+    totalPressureTimeSeries_(this->db(), dict)
 {
     if (dict.found("value"))
     {
@@ -99,8 +98,7 @@ timeVaryingUniformTotalPressureFvPatchScalarField
     psiName_(ptf.psiName_),
     gamma_(ptf.gamma_),
     p0_(ptf.p0_),
-    totalPressureDataFileName_(ptf.totalPressureDataFileName_),
-    totalPressureTimeSeries_(ptf.timeBounding())
+    totalPressureTimeSeries_(ptf.totalPressureTimeSeries_)
 {}
 
 
@@ -117,8 +115,7 @@ timeVaryingUniformTotalPressureFvPatchScalarField
     psiName_(tppsf.psiName_),
     gamma_(tppsf.gamma_),
     p0_(tppsf.p0_),
-    totalPressureDataFileName_(tppsf.totalPressureDataFileName_),
-    totalPressureTimeSeries_(tppsf.timeBounding())
+    totalPressureTimeSeries_(tppsf.totalPressureTimeSeries_)
 {}
 
 
@@ -136,64 +133,12 @@ timeVaryingUniformTotalPressureFvPatchScalarField
     psiName_(tppsf.psiName_),
     gamma_(tppsf.gamma_),
     p0_(tppsf.p0_),
-    totalPressureDataFileName_(tppsf.totalPressureDataFileName_),
-    totalPressureTimeSeries_(tppsf.timeBounding())
+    totalPressureTimeSeries_(tppsf.totalPressureTimeSeries_)
 {}
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-Foam::scalar Foam::timeVaryingUniformTotalPressureFvPatchScalarField::
-currentValue()
-{
-    if (totalPressureTimeSeries_.size() == 0)
-    {
-        fileName fName(totalPressureDataFileName_);
-        fName.expand();
-
-        if (fName.size() == 0)
-        {
-            FatalErrorIn
-            (
-                "timeVaryingUniformFixedValueFvPatchField::currentValue()"
-            )   << "timeDataFile not specified for Patch "
-                << patch().name()
-                << exit(FatalError);
-        }
-        else
-        {
-            // relative path
-            if (fName[0] != '/')
-            {
-                fName = db().path()/fName;
-            }
-
-            // just in case we change the interface to timeSeries
-            word boundType = timeBounding();
-
-            IFstream(fName)() >> totalPressureTimeSeries_;
-            totalPressureTimeSeries_.bounding(boundType);
-
-            // be a bit paranoid and check that the list is okay
-            totalPressureTimeSeries_.check();
-        }
-
-        if (totalPressureTimeSeries_.size() == 0)
-        {
-            FatalErrorIn
-            (
-                "timeVaryingUniformFixedValueFvPatchField"
-                "::currentValue()"
-            )   << "empty time series for Patch "
-                << this->patch().name()
-                << exit(FatalError);
-        }
-    }
-
-    return totalPressureTimeSeries_(this->db().time().timeOutputValue());
-}
-
-
 void Foam::timeVaryingUniformTotalPressureFvPatchScalarField::updateCoeffs
 (
     const vectorField& Up
@@ -204,7 +149,7 @@ void Foam::timeVaryingUniformTotalPressureFvPatchScalarField::updateCoeffs
         return;
     }
 
-    p0_ = currentValue();
+    p0_ = totalPressureTimeSeries_(this->db().time().timeOutputValue());
 
     const fvsPatchField<scalar>& phip =
         patch().lookupPatchField<surfaceScalarField, scalar>(phiName_);
@@ -279,10 +224,7 @@ void Foam::timeVaryingUniformTotalPressureFvPatchScalarField::write(Ostream& os)
     os.writeKeyword("psi") << psiName_ << token::END_STATEMENT << nl;
     os.writeKeyword("gamma") << gamma_ << token::END_STATEMENT << nl;
     os.writeKeyword("p0") << p0_ << token::END_STATEMENT << endl;
-    os.writeKeyword("totalPressureDataFileName")
-        << totalPressureDataFileName_ << token::END_STATEMENT << nl;
-    os.writeKeyword("timeBounding")
-        << timeBounding() << token::END_STATEMENT << nl;
+    totalPressureTimeSeries_.write(os);
     writeEntry("value", os);
 }
 
diff --git a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformTotalPressure/timeVaryingUniformTotalPressureFvPatchScalarField.H b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformTotalPressure/timeVaryingUniformTotalPressureFvPatchScalarField.H
index 48d4b9996126f67ba44008c9ea4222fa6cca5260..4bfead28d1cbd105ca4cbf6753f8a463e8147be7 100644
--- a/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformTotalPressure/timeVaryingUniformTotalPressureFvPatchScalarField.H
+++ b/src/finiteVolume/fields/fvPatchFields/derived/timeVaryingUniformTotalPressure/timeVaryingUniformTotalPressureFvPatchScalarField.H
@@ -38,7 +38,7 @@ SourceFiles
 #define timeVaryingUniformTotalPressureFvPatchScalarField_H
 
 #include "fixedValueFvPatchFields.H"
-#include "timeSeries.H"
+#include "interpolationTable.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -74,11 +74,8 @@ class timeVaryingUniformTotalPressureFvPatchScalarField
         //- Total pressure
         scalar p0_;
 
-        fileName totalPressureDataFileName_;
-        timeSeries<scalar> totalPressureTimeSeries_;
-
-        //- Interpolate the value at the current time
-        scalar currentValue();
+        //- Table of time vs total pressure
+        interpolationTable<scalar> totalPressureTimeSeries_;
 
 
 public:
@@ -189,14 +186,8 @@ public:
                 return p0_;
             }
 
-            //- Return the out-of-bounds treatment as a word
-            word timeBounding() const
-            {
-                return totalPressureTimeSeries_.bounding();
-            }
-
             //- Return the time series used
-            const timeSeries<scalar>& totalPressureTimeSeries() const
+            const interpolationTable<scalar>& totalPressureTimeSeries() const
             {
                 return totalPressureTimeSeries_;
             }