diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
index 0c72ca7ee72ea09c3ae4dc395da0e061e79c48d0..f7a3a2d39239d6ce64129e719862b80362c5ec0e 100644
--- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
+++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C
@@ -402,17 +402,17 @@ int main(int argc, char *argv[])
     PtrList< List<SLList<indexedParticle*>*> > cellParticles(cloudDirs.size());
 
     PtrList<PtrList<labelIOField> > lagrangianLabelFields(cloudDirs.size());
-    PtrList<PtrList<labelIOFieldField> > lagrangianLabelFieldFields
+    PtrList<PtrList<labelFieldCompactIOField> > lagrangianLabelFieldFields
     (
         cloudDirs.size()
     );
     PtrList<PtrList<scalarIOField> > lagrangianScalarFields(cloudDirs.size());
-    PtrList<PtrList<scalarIOFieldField> > lagrangianScalarFieldFields
+    PtrList<PtrList<scalarFieldCompactIOField> > lagrangianScalarFieldFields
     (
         cloudDirs.size()
     );
     PtrList<PtrList<vectorIOField> > lagrangianVectorFields(cloudDirs.size());
-    PtrList<PtrList<vectorIOFieldField> > lagrangianVectorFieldFields
+    PtrList<PtrList<vectorFieldCompactIOField> > lagrangianVectorFieldFields
     (
         cloudDirs.size()
     );
@@ -420,13 +420,14 @@ int main(int argc, char *argv[])
     (
         cloudDirs.size()
     );
-    PtrList<PtrList<sphericalTensorIOFieldField> >
+    PtrList<PtrList<sphericalTensorFieldCompactIOField> >
         lagrangianSphericalTensorFieldFields(cloudDirs.size());
     PtrList<PtrList<symmTensorIOField> > lagrangianSymmTensorFields
     (
         cloudDirs.size()
     );
-    PtrList<PtrList<symmTensorIOFieldField> > lagrangianSymmTensorFieldFields
+    PtrList<PtrList<symmTensorFieldCompactIOField> >
+    lagrangianSymmTensorFieldFields
     (
         cloudDirs.size()
     );
@@ -434,7 +435,7 @@ int main(int argc, char *argv[])
     (
         cloudDirs.size()
     );
-    PtrList<PtrList<tensorIOFieldField> > lagrangianTensorFieldFields
+    PtrList<PtrList<tensorFieldCompactIOField> > lagrangianTensorFieldFields
     (
         cloudDirs.size()
     );
diff --git a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.H b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.H
index dafd94c34308c4373f03a8ebbbe923e10d5493b5..fe28c184835b274042ebc61f99910b851be50dd5 100644
--- a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.H
+++ b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.H
@@ -37,7 +37,7 @@ SourceFiles
 #define lagrangianFieldDecomposer_H
 
 #include "Cloud.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 #include "indexedParticle.H"
 #include "passiveParticle.H"
 
@@ -111,9 +111,9 @@ public:
             const IOobjectList& lagrangianObjects,
             PtrList
             <
-                PtrList<IOFieldField<Field<Type>, Type> >
+                PtrList<CompactIOField<Field<Type>, Type> >
             >& lagrangianFields
-//            PtrList<IOFieldField<Field<Type>, Type > >& lagrangianFields
+//            PtrList<CompactIOField<Field<Type>, Type > >& lagrangianFields
         );
 
 
@@ -126,10 +126,10 @@ public:
         ) const;
 
         template<class Type>
-        tmp<IOFieldField<Field<Type>, Type> > decomposeFieldField
+        tmp<CompactIOField<Field<Type>, Type> > decomposeFieldField
         (
             const word& cloudName,
-            const IOFieldField<Field<Type>, Type>& field
+            const CompactIOField<Field<Type>, Type>& field
         ) const;
 
 
diff --git a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C
index 7e42907fd0ddde6bcef1658535fc2c61a2ea1ec9..50d17f0391ac9ffa057d27fc07004556c22b37a1 100644
--- a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C
+++ b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C
@@ -68,7 +68,7 @@ void Foam::lagrangianFieldDecomposer::readFieldFields
 (
     const label cloudI,
     const IOobjectList& lagrangianObjects,
-    PtrList<PtrList<IOFieldField<Field<Type>, Type> > >& lagrangianFields
+    PtrList<PtrList<CompactIOField<Field<Type>, Type> > >& lagrangianFields
 )
 {
     // Search list of objects for lagrangian fields
@@ -79,13 +79,17 @@ void Foam::lagrangianFieldDecomposer::readFieldFields
 
     IOobjectList lagrangianTypeObjectsB
     (
-        lagrangianObjects.lookupClass(IOFieldField<Field<Type>, Type>::typeName)
+        lagrangianObjects.lookupClass
+        (
+            CompactIOField<Field<Type>,
+            Type>::typeName
+        )
     );
 
     lagrangianFields.set
     (
         cloudI,
-        new PtrList<IOFieldField<Field<Type>, Type> >
+        new PtrList<CompactIOField<Field<Type>, Type> >
         (
             lagrangianTypeObjectsA.size() + lagrangianTypeObjectsB.size()
         )
@@ -98,7 +102,7 @@ void Foam::lagrangianFieldDecomposer::readFieldFields
         lagrangianFields[cloudI].set
         (
             lagrangianFieldi++,
-            new IOFieldField<Field<Type>, Type>(*iter())
+            new CompactIOField<Field<Type>, Type>(*iter())
         );
     }
 
@@ -107,7 +111,7 @@ void Foam::lagrangianFieldDecomposer::readFieldFields
         lagrangianFields[cloudI].set
         (
             lagrangianFieldi++,
-            new IOFieldField<Field<Type>, Type>(*iter())
+            new CompactIOField<Field<Type>, Type>(*iter())
         );
     }
 }
@@ -145,20 +149,20 @@ Foam::lagrangianFieldDecomposer::decomposeField
 
 
 template<class Type>
-Foam::tmp<Foam::IOFieldField<Foam::Field<Type>, Type> >
+Foam::tmp<Foam::CompactIOField<Foam::Field<Type>, Type> >
 Foam::lagrangianFieldDecomposer::decomposeFieldField
 (
     const word& cloudName,
-    const IOFieldField<Field<Type>, Type>& field
+    const CompactIOField<Field<Type>, Type>& field
 ) const
 {
     // Create and map the internal field values
     Field<Field<Type> > procField(field, particleIndices_);
 
     // Create the field for the processor
-    return tmp<IOFieldField<Field<Type>, Type> >
+    return tmp<CompactIOField<Field<Type>, Type> >
     (
-        new IOFieldField<Field<Type>, Type>
+        new CompactIOField<Field<Type>, Type>
         (
             IOobject
             (
diff --git a/applications/utilities/preProcessing/mapFields/MapLagrangianFields.H b/applications/utilities/preProcessing/mapFields/MapLagrangianFields.H
index 87b3746484af8fe9d44b960b55f82a329fca5116..5719b69ecb646152173beb87ffe6d0fe93b1d167 100644
--- a/applications/utilities/preProcessing/mapFields/MapLagrangianFields.H
+++ b/applications/utilities/preProcessing/mapFields/MapLagrangianFields.H
@@ -37,7 +37,7 @@ Description
 #include "GeometricField.H"
 #include "meshToMesh.H"
 #include "IOobjectList.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -106,9 +106,9 @@ void MapLagrangianFields
             // Read field (does not need mesh)
             IOField<Field<Type> > fieldSource(*fieldIter());
 
-            // Map - use IOFieldField to automatically write in
+            // Map - use CompactIOField to automatically write in
             // compact form for binary format.
-            IOFieldField<Field<Type>, Type> fieldTarget
+            CompactIOField<Field<Type>, Type> fieldTarget
             (
                 IOobject
                 (
@@ -135,7 +135,7 @@ void MapLagrangianFields
 
     {
         IOobjectList fieldFields =
-            objects.lookupClass(IOFieldField<Field<Type>, Type>::typeName);
+            objects.lookupClass(CompactIOField<Field<Type>, Type>::typeName);
 
         forAllIter(IOobjectList, fieldFields, fieldIter)
         {
@@ -143,10 +143,10 @@ void MapLagrangianFields
                 << fieldIter()->name() << endl;
 
             // Read field (does not need mesh)
-            IOFieldField<Field<Type>, Type> fieldSource(*fieldIter());
+            CompactIOField<Field<Type>, Type> fieldSource(*fieldIter());
 
             // Map
-            IOFieldField<Field<Type>, Type> fieldTarget
+            CompactIOField<Field<Type>, Type> fieldTarget
             (
                 IOobject
                 (
diff --git a/src/OpenFOAM/db/IOobjects/IOFieldField/IOFieldField.C b/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C
similarity index 87%
rename from src/OpenFOAM/db/IOobjects/IOFieldField/IOFieldField.C
rename to src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C
index db16414701634b3d004f3821cfe1acac050e5bb1..dcbc1b0f396810373c8cba186cfd7baaab467c7a 100644
--- a/src/OpenFOAM/db/IOobjects/IOFieldField/IOFieldField.C
+++ b/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.C
@@ -23,13 +23,13 @@ License
 
 \*---------------------------------------------------------------------------*/
 
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 #include "labelList.H"
 
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
 template<class T, class BaseType>
-void Foam::IOFieldField<T, BaseType>::readFromStream()
+void Foam::CompactIOField<T, BaseType>::readFromStream()
 {
     Istream& is = readStream(word::null);
 
@@ -47,7 +47,7 @@ void Foam::IOFieldField<T, BaseType>::readFromStream()
     {
         FatalIOErrorIn
         (
-            "IOFieldField<T, BaseType>::readFromStream()",
+            "CompactIOField<T, BaseType>::readFromStream()",
             is
         )   << "unexpected class name " << headerClassName()
             << " expected " << typeName << " or " << IOField<T>::typeName
@@ -61,7 +61,7 @@ void Foam::IOFieldField<T, BaseType>::readFromStream()
 // * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * * //
 
 template<class T, class BaseType>
-Foam::IOFieldField<T, BaseType>::IOFieldField(const IOobject& io)
+Foam::CompactIOField<T, BaseType>::CompactIOField(const IOobject& io)
 :
     regIOobject(io)
 {
@@ -77,7 +77,7 @@ Foam::IOFieldField<T, BaseType>::IOFieldField(const IOobject& io)
 
 
 template<class T, class BaseType>
-Foam::IOFieldField<T, BaseType>::IOFieldField
+Foam::CompactIOField<T, BaseType>::CompactIOField
 (
     const IOobject& io,
     const label size
@@ -101,7 +101,7 @@ Foam::IOFieldField<T, BaseType>::IOFieldField
 
 
 template<class T, class BaseType>
-Foam::IOFieldField<T, BaseType>::IOFieldField
+Foam::CompactIOField<T, BaseType>::CompactIOField
 (
     const IOobject& io,
     const Field<T>& list
@@ -125,7 +125,7 @@ Foam::IOFieldField<T, BaseType>::IOFieldField
 
 
 template<class T, class BaseType>
-Foam::IOFieldField<T, BaseType>::IOFieldField
+Foam::CompactIOField<T, BaseType>::CompactIOField
 (
     const IOobject& io,
     const Xfer<Field<T> >& list
@@ -149,7 +149,7 @@ Foam::IOFieldField<T, BaseType>::IOFieldField
 // * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * * //
 
 template<class T, class BaseType>
-Foam::IOFieldField<T, BaseType>::~IOFieldField()
+Foam::CompactIOField<T, BaseType>::~CompactIOField()
 {}
 
 
@@ -157,7 +157,7 @@ Foam::IOFieldField<T, BaseType>::~IOFieldField()
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
 template<class T, class BaseType>
-bool Foam::IOFieldField<T, BaseType>::writeObject
+bool Foam::CompactIOField<T, BaseType>::writeObject
 (
     IOstream::streamFormat fmt,
     IOstream::versionNumber ver,
@@ -186,7 +186,7 @@ bool Foam::IOFieldField<T, BaseType>::writeObject
 
 
 template<class T, class BaseType>
-bool Foam::IOFieldField<T, BaseType>::writeData(Ostream& os) const
+bool Foam::CompactIOField<T, BaseType>::writeData(Ostream& os) const
 {
     return (os << *this).good();
 }
@@ -195,9 +195,9 @@ bool Foam::IOFieldField<T, BaseType>::writeData(Ostream& os) const
 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
 
 template<class T, class BaseType>
-void Foam::IOFieldField<T, BaseType>::operator=
+void Foam::CompactIOField<T, BaseType>::operator=
 (
-    const IOFieldField<T, BaseType>& rhs
+    const CompactIOField<T, BaseType>& rhs
 )
 {
     Field<T>::operator=(rhs);
@@ -205,7 +205,7 @@ void Foam::IOFieldField<T, BaseType>::operator=
 
 
 template<class T, class BaseType>
-void Foam::IOFieldField<T, BaseType>::operator=(const Field<T>& rhs)
+void Foam::CompactIOField<T, BaseType>::operator=(const Field<T>& rhs)
 {
     Field<T>::operator=(rhs);
 }
@@ -217,7 +217,7 @@ template<class T, class BaseType>
 Foam::Istream& Foam::operator>>
 (
     Foam::Istream& is,
-    Foam::IOFieldField<T, BaseType>& L
+    Foam::CompactIOField<T, BaseType>& L
 )
 {
     // Read compact
@@ -248,7 +248,7 @@ template<class T, class BaseType>
 Foam::Ostream& Foam::operator<<
 (
     Foam::Ostream& os,
-    const Foam::IOFieldField<T, BaseType>& L
+    const Foam::CompactIOField<T, BaseType>& L
 )
 {
     // Keep ascii writing same.
diff --git a/src/OpenFOAM/db/IOobjects/IOFieldField/IOFieldField.H b/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.H
similarity index 77%
rename from src/OpenFOAM/db/IOobjects/IOFieldField/IOFieldField.H
rename to src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.H
index 2174d2d469879957a82b44d7cc61e5a42eba24a4..f7622cae557d22a280f4351b8aa0275e974c52fc 100644
--- a/src/OpenFOAM/db/IOobjects/IOFieldField/IOFieldField.H
+++ b/src/OpenFOAM/db/IOobjects/CompactIOField/CompactIOField.H
@@ -22,18 +22,22 @@ License
     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
 
 Class
-    Foam::IOFieldField
+    Foam::CompactIOField
 
 Description
-    A Field of objects of type \<T\> with automated input and output.
+    A Field of objects of type \<T\> with automated input and output using
+    a compact storage. Behaves like IOField except when binary output in
+    case it writes a CompactListList.
+
+    Useful for fields of small subfields e.g. in lagrangian
 
 SourceFiles
-    IOFieldField.C
+    CompactIOField.C
 
 \*---------------------------------------------------------------------------*/
 
-#ifndef IOFieldField_H
-#define IOFieldField_H
+#ifndef CompactIOField_H
+#define CompactIOField_H
 
 #include "IOField.H"
 #include "regIOobject.H"
@@ -47,25 +51,25 @@ class Istream;
 class Ostream;
 
 // Forward declaration of friend functions and operators
-template<class T, class BaseType> class IOFieldField;
+template<class T, class BaseType> class CompactIOField;
 
 template<class T, class BaseType> Istream& operator>>
 (
     Istream&,
-    IOFieldField<T, BaseType>&
+    CompactIOField<T, BaseType>&
 );
 template<class T, class BaseType> Ostream& operator<<
 (
     Ostream&,
-    const IOFieldField<T, BaseType>&
+    const CompactIOField<T, BaseType>&
 );
 
 /*---------------------------------------------------------------------------*\
-                        Class IOFieldField Declaration
+                        Class CompactIOField Declaration
 \*---------------------------------------------------------------------------*/
 
 template<class T, class BaseType>
-class IOFieldField
+class CompactIOField
 :
     public regIOobject,
     public Field<T>
@@ -84,21 +88,21 @@ public:
     // Constructors
 
         //- Construct from IOobject
-        IOFieldField(const IOobject&);
+        CompactIOField(const IOobject&);
 
-        //- Construct from IOobject and size of IOFieldField
-        IOFieldField(const IOobject&, const label);
+        //- Construct from IOobject and size
+        CompactIOField(const IOobject&, const label);
 
         //- Construct from IOobject and a Field
-        IOFieldField(const IOobject&, const Field<T>&);
+        CompactIOField(const IOobject&, const Field<T>&);
 
         //- Construct by transferring the Field contents
-        IOFieldField(const IOobject&, const Xfer<Field<T> >&);
+        CompactIOField(const IOobject&, const Xfer<Field<T> >&);
 
 
     // Destructor
 
-        virtual ~IOFieldField();
+        virtual ~CompactIOField();
 
 
     // Member functions
@@ -115,7 +119,7 @@ public:
 
     // Member operators
 
-        void operator=(const IOFieldField<T, BaseType>&);
+        void operator=(const CompactIOField<T, BaseType>&);
 
         void operator=(const Field<T>&);
 
@@ -126,14 +130,14 @@ public:
         friend Istream& operator>> <T, BaseType>
         (
             Istream&,
-            IOFieldField<T, BaseType>&
+            CompactIOField<T, BaseType>&
         );
 
         // Write Field to Ostream.
         friend Ostream& operator<< <T, BaseType>
         (
             Ostream&,
-            const IOFieldField<T, BaseType>&
+            const CompactIOField<T, BaseType>&
         );
 };
 
@@ -145,7 +149,7 @@ public:
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #ifdef NoRepository
-#   include "IOFieldField.C"
+#   include "CompactIOField.C"
 #endif
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/OpenFOAM/fields/Fields/diagTensorField/diagTensorFieldIOField.C b/src/OpenFOAM/fields/Fields/diagTensorField/diagTensorFieldIOField.C
index 219201dbbba1d01d796c273de696fda988ec5f5b..7d9e5c7c48f53e112ebed1291a81646013fddadd 100644
--- a/src/OpenFOAM/fields/Fields/diagTensorField/diagTensorFieldIOField.C
+++ b/src/OpenFOAM/fields/Fields/diagTensorField/diagTensorFieldIOField.C
@@ -41,8 +41,8 @@ namespace Foam
 
     defineTemplateTypeNameAndDebugWithName
     (
-        diagTensorIOFieldField,
-        "diagTensorCompactFieldField",
+        diagTensorFieldCompactIOField,
+        "diagTensorFieldCompactField",
         0
     );
 }
diff --git a/src/OpenFOAM/fields/Fields/diagTensorField/diagTensorFieldIOField.H b/src/OpenFOAM/fields/Fields/diagTensorField/diagTensorFieldIOField.H
index bca26c2b68fcd8e51129ee8fe06562a93bc38555..075e73886f499cd92351fe55a5ea6c55f36adbaa 100644
--- a/src/OpenFOAM/fields/Fields/diagTensorField/diagTensorFieldIOField.H
+++ b/src/OpenFOAM/fields/Fields/diagTensorField/diagTensorFieldIOField.H
@@ -33,15 +33,15 @@ Description
 #define diagTensorFieldIOField_H
 
 #include "diagTensorField.H"
-#include "IOField.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
     typedef IOField<diagTensorField> diagTensorFieldIOField;
-    typedef IOFieldField<diagTensorField, diagTensor> diagTensorIOFieldField;
+    typedef CompactIOField<diagTensorField, diagTensor>
+    diagTensorFieldCompactIOField;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/OpenFOAM/fields/Fields/labelField/labelFieldIOField.C b/src/OpenFOAM/fields/Fields/labelField/labelFieldIOField.C
index 5c76bec0c3b6fcf1222e2f0bd15c1cd87195cae9..aea2310d1da672a8423f30e48cfcd97649f83eea 100644
--- a/src/OpenFOAM/fields/Fields/labelField/labelFieldIOField.C
+++ b/src/OpenFOAM/fields/Fields/labelField/labelFieldIOField.C
@@ -41,8 +41,8 @@ namespace Foam
 
     defineTemplateTypeNameAndDebugWithName
     (
-        labelIOFieldField,
-        "labelCompactFieldField",
+        labelFieldCompactIOField,
+        "labelFieldCompactField",
         0
     );
 }
diff --git a/src/OpenFOAM/fields/Fields/labelField/labelFieldIOField.H b/src/OpenFOAM/fields/Fields/labelField/labelFieldIOField.H
index 6b626ada9e2e4c3b64cda4efe347cd94df605eba..daac00e8043f80921c4091818ad70271e91a639f 100644
--- a/src/OpenFOAM/fields/Fields/labelField/labelFieldIOField.H
+++ b/src/OpenFOAM/fields/Fields/labelField/labelFieldIOField.H
@@ -34,14 +34,14 @@ Description
 
 #include "labelField.H"
 #include "IOField.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
     typedef IOField<labelField> labelFieldIOField;
-    typedef IOFieldField<labelField, label> labelIOFieldField;
+    typedef CompactIOField<labelField, label> labelFieldCompactIOField;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/OpenFOAM/fields/Fields/scalarField/scalarFieldIOField.C b/src/OpenFOAM/fields/Fields/scalarField/scalarFieldIOField.C
index 2477f3b72876a18ab41507fbb8d8053b7e1186b0..60e5167ba8583d593330f8d37a5b8954c6536b8d 100644
--- a/src/OpenFOAM/fields/Fields/scalarField/scalarFieldIOField.C
+++ b/src/OpenFOAM/fields/Fields/scalarField/scalarFieldIOField.C
@@ -41,8 +41,8 @@ namespace Foam
 
     defineTemplateTypeNameAndDebugWithName
     (
-        scalarIOFieldField,
-        "scalarCompactFieldField",
+        scalarFieldCompactIOField,
+        "scalarFieldCompactField",
         0
     );
 }
diff --git a/src/OpenFOAM/fields/Fields/scalarField/scalarFieldIOField.H b/src/OpenFOAM/fields/Fields/scalarField/scalarFieldIOField.H
index 5dbad94dfeba6b6b1a3e48316e885ecf3ea85271..226a559aff3a76d3111080412ab6ee9c8e5d765b 100644
--- a/src/OpenFOAM/fields/Fields/scalarField/scalarFieldIOField.H
+++ b/src/OpenFOAM/fields/Fields/scalarField/scalarFieldIOField.H
@@ -33,15 +33,14 @@ Description
 #define scalarFieldIOField_H
 
 #include "scalarField.H"
-#include "IOField.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
     typedef IOField<scalarField> scalarFieldIOField;
-    typedef IOFieldField<scalarField, scalar> scalarIOFieldField;
+    typedef CompactIOField<scalarField, scalar> scalarFieldCompactIOField;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/OpenFOAM/fields/Fields/sphericalTensorField/sphericalTensorFieldIOField.C b/src/OpenFOAM/fields/Fields/sphericalTensorField/sphericalTensorFieldIOField.C
index 71473742e5a3ff616a6723cd2edfcd4102e0b3ad..e323374ed328f2ec2c34ea2069f6af7b1865a1eb 100644
--- a/src/OpenFOAM/fields/Fields/sphericalTensorField/sphericalTensorFieldIOField.C
+++ b/src/OpenFOAM/fields/Fields/sphericalTensorField/sphericalTensorFieldIOField.C
@@ -41,8 +41,8 @@ namespace Foam
 
     defineTemplateTypeNameAndDebugWithName
     (
-        sphericalTensorIOFieldField,
-        "sphericalTensorCompactFieldField",
+        sphericalTensorFieldCompactIOField,
+        "sphericalTensorFieldCompactField",
         0
     );
 }
diff --git a/src/OpenFOAM/fields/Fields/sphericalTensorField/sphericalTensorFieldIOField.H b/src/OpenFOAM/fields/Fields/sphericalTensorField/sphericalTensorFieldIOField.H
index 59d8e611439b044c47f3e2ae8ad6d00abf01a4d8..8756d2b3e46cddcbd1a6f8351f9d23e061cff54b 100644
--- a/src/OpenFOAM/fields/Fields/sphericalTensorField/sphericalTensorFieldIOField.H
+++ b/src/OpenFOAM/fields/Fields/sphericalTensorField/sphericalTensorFieldIOField.H
@@ -33,8 +33,7 @@ Description
 #define sphericalTensorFieldIOField_H
 
 #include "sphericalTensorField.H"
-#include "IOField.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -42,8 +41,8 @@ namespace Foam
 {
     typedef IOField<sphericalTensorField> sphericalTensorFieldIOField;
 
-    typedef IOFieldField<sphericalTensorField, sphericalTensor>
-    sphericalTensorIOFieldField;
+    typedef CompactIOField<sphericalTensorField, sphericalTensor>
+    sphericalTensorFieldCompactIOField;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorFieldIOField.C b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorFieldIOField.C
index 13105766a70ba3751da545fae3da0bb8a029cd89..e231bf4d2bd26cbd49d87616eb23094e2e4190b0 100644
--- a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorFieldIOField.C
+++ b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorFieldIOField.C
@@ -41,8 +41,8 @@ namespace Foam
 
     defineTemplateTypeNameAndDebugWithName
     (
-        symmTensorIOFieldField,
-        "symmTensorCompactFieldField",
+        symmTensorFieldCompactIOField,
+        "symmTensorFieldCompactField",
         0
     );
 }
diff --git a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorFieldIOField.H b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorFieldIOField.H
index eb688b33a7ed9ecd772189d51129772ef036f15c..c08c93c4b1c627830cfde1a9986601fb4682fdea 100644
--- a/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorFieldIOField.H
+++ b/src/OpenFOAM/fields/Fields/symmTensorField/symmTensorFieldIOField.H
@@ -33,15 +33,15 @@ Description
 #define symmTensorFieldIOField_H
 
 #include "symmTensorField.H"
-#include "IOField.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
     typedef IOField<symmTensorField> symmTensorFieldIOField;
-    typedef IOFieldField<symmTensorField, symmTensor> symmTensorIOFieldField;
+    typedef CompactIOField<symmTensorField, symmTensor>
+    symmTensorFieldCompactIOField;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/OpenFOAM/fields/Fields/tensorField/tensorFieldIOField.C b/src/OpenFOAM/fields/Fields/tensorField/tensorFieldIOField.C
index 63c33df2ad274b0005a94c7b4bd707024e804b7b..a4c4d8fbb2bf7e5a55423005165dd4a576e06b4f 100644
--- a/src/OpenFOAM/fields/Fields/tensorField/tensorFieldIOField.C
+++ b/src/OpenFOAM/fields/Fields/tensorField/tensorFieldIOField.C
@@ -41,8 +41,8 @@ namespace Foam
 
     defineTemplateTypeNameAndDebugWithName
     (
-        tensorIOFieldField,
-        "tensorCompactFieldField",
+        tensorFieldCompactIOField,
+        "tensorFieldCompactField",
         0
     );
 }
diff --git a/src/OpenFOAM/fields/Fields/tensorField/tensorFieldIOField.H b/src/OpenFOAM/fields/Fields/tensorField/tensorFieldIOField.H
index 48fbabf881763567f3d0cea85811c4495ab420a0..8accb107110832b9b3b3c67f7035acbed2d45fb4 100644
--- a/src/OpenFOAM/fields/Fields/tensorField/tensorFieldIOField.H
+++ b/src/OpenFOAM/fields/Fields/tensorField/tensorFieldIOField.H
@@ -33,15 +33,14 @@ Description
 #define tensorFieldIOField_H
 
 #include "tensorField.H"
-#include "IOField.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
     typedef IOField<tensorField> tensorFieldIOField;
-    typedef IOFieldField<tensorField, tensor> tensorIOFieldField;
+    typedef CompactIOField<tensorField, tensor> tensorFieldCompactIOField;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/OpenFOAM/fields/Fields/vector2DField/vector2DFieldIOField.C b/src/OpenFOAM/fields/Fields/vector2DField/vector2DFieldIOField.C
index 510f6f67f013b5e1d15a9f5da1830db74c0d7a34..05fe916191118bff7ad3d0757abc217cee6f89d1 100644
--- a/src/OpenFOAM/fields/Fields/vector2DField/vector2DFieldIOField.C
+++ b/src/OpenFOAM/fields/Fields/vector2DField/vector2DFieldIOField.C
@@ -41,8 +41,8 @@ namespace Foam
 
     defineTemplateTypeNameAndDebugWithName
     (
-        vector2DIOFieldField,
-        "vector2DCompactFieldField",
+        vector2DFieldCompactIOField,
+        "vector2DFieldCompactField",
         0
     );
 }
diff --git a/src/OpenFOAM/fields/Fields/vector2DField/vector2DFieldIOField.H b/src/OpenFOAM/fields/Fields/vector2DField/vector2DFieldIOField.H
index 9640e38a0192c918e242ce56539db5b8e85e1b12..e3e1e489ffb7da7f4fd564cf414876b291c90253 100644
--- a/src/OpenFOAM/fields/Fields/vector2DField/vector2DFieldIOField.H
+++ b/src/OpenFOAM/fields/Fields/vector2DField/vector2DFieldIOField.H
@@ -33,15 +33,14 @@ Description
 #define vector2DFieldIOField_H
 
 #include "vector2DField.H"
-#include "IOField.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
     typedef IOField<vector2DField> vector2DFieldIOField;
-    typedef IOFieldField<vector2DField, vector2D> vector2DIOFieldField;
+    typedef CompactIOField<vector2DField, vector2D> vector2DFieldCompactIOField;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/OpenFOAM/fields/Fields/vectorField/vectorFieldIOField.C b/src/OpenFOAM/fields/Fields/vectorField/vectorFieldIOField.C
index 9ba26b2d6ebca9bf8fbda8ff818e491591599cf0..1783bfcfeee4f23bc5670f2158c7492894ada94e 100644
--- a/src/OpenFOAM/fields/Fields/vectorField/vectorFieldIOField.C
+++ b/src/OpenFOAM/fields/Fields/vectorField/vectorFieldIOField.C
@@ -41,8 +41,8 @@ namespace Foam
 
     defineTemplateTypeNameAndDebugWithName
     (
-        vectorIOFieldField,
-        "vectorCompactFieldField",
+        vectorFieldCompactIOField,
+        "vectorFieldCompactField",
         0
     );
 }
diff --git a/src/OpenFOAM/fields/Fields/vectorField/vectorFieldIOField.H b/src/OpenFOAM/fields/Fields/vectorField/vectorFieldIOField.H
index b46b55b3fa05b84fe3b57a8c28762da5152c0fbd..2d46114514abd836896f039accf1e15d05cb7391 100644
--- a/src/OpenFOAM/fields/Fields/vectorField/vectorFieldIOField.H
+++ b/src/OpenFOAM/fields/Fields/vectorField/vectorFieldIOField.H
@@ -33,15 +33,14 @@ Description
 #define vectorFieldIOField_H
 
 #include "vectorField.H"
-#include "IOField.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 namespace Foam
 {
     typedef IOField<vectorField> vectorFieldIOField;
-    typedef IOFieldField<vectorField, vector> vectorIOFieldField;
+    typedef CompactIOField<vectorField, vector> vectorFieldCompactIOField;
 }
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
diff --git a/src/lagrangian/basic/Cloud/Cloud.H b/src/lagrangian/basic/Cloud/Cloud.H
index 0c9b32ebac5b02638b1589c5f99917a614ab3b41..1868b9c881559307c91eaaa8a9cba618aa1c5bf2 100644
--- a/src/lagrangian/basic/Cloud/Cloud.H
+++ b/src/lagrangian/basic/Cloud/Cloud.H
@@ -38,7 +38,7 @@ SourceFiles
 #include "cloud.H"
 #include "IDLList.H"
 #include "IOField.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 #include "polyMesh.H"
 #include "indexedOctree.H"
 #include "treeDataCell.H"
@@ -350,7 +350,7 @@ public:
             void checkFieldFieldIOobject
             (
                 const Cloud<ParticleType>& c,
-                const IOFieldField<Field<DataType>, DataType>& data
+                const CompactIOField<Field<DataType>, DataType>& data
             ) const;
 
             //- Read the field data for the cloud of particles. Dummy at
diff --git a/src/lagrangian/basic/Cloud/CloudIO.C b/src/lagrangian/basic/Cloud/CloudIO.C
index c12d12d6a517cdaf807eefd7edf148337731f893..bc0e7defd2c3dae3919dbc075884d45e62a8f007 100644
--- a/src/lagrangian/basic/Cloud/CloudIO.C
+++ b/src/lagrangian/basic/Cloud/CloudIO.C
@@ -225,7 +225,7 @@ template<class DataType>
 void Foam::Cloud<ParticleType>::checkFieldFieldIOobject
 (
     const Cloud<ParticleType>& c,
-    const IOFieldField<Field<DataType>, DataType>& data
+    const CompactIOField<Field<DataType>, DataType>& data
 ) const
 {
     if (data.size() != c.size())
@@ -235,7 +235,7 @@ void Foam::Cloud<ParticleType>::checkFieldFieldIOobject
             "void Cloud<ParticleType>::checkFieldFieldIOobject"
             "("
                 "const Cloud<ParticleType>&, "
-                "const IOFieldField<Field<DataType>, DataType>&"
+                "const CompactIOField<Field<DataType>, DataType>&"
             ") const"
         )   << "Size of " << data.name()
             << " field " << data.size()
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
index 4a76cb0173c634584c2f9b6ee7ce480843c8b592..7ff71216d80d2905b317e1dc9c98fa1a0da7d939 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcel.H
@@ -62,8 +62,8 @@ namespace Foam
 {
 
 typedef CollisionRecordList<vector, vector> collisionRecordList;
-typedef vectorIOFieldField pairDataIOFieldField;
-typedef vectorIOFieldField wallDataIOFieldField;
+typedef vectorFieldCompactIOField pairDataFieldCompactIOField;
+typedef vectorFieldCompactIOField wallDataFieldCompactIOField;
 
 template<class ParcelType>
 class KinematicParcel;
diff --git a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
index 8f1645db60622d0fe9b053c19d49446eeb87dc7d..ca46547cc224d5fd3d872bdb834a4c6d8a74a7e4 100644
--- a/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
+++ b/src/lagrangian/intermediate/parcels/Templates/KinematicParcel/KinematicParcelIO.C
@@ -181,13 +181,13 @@ void Foam::KinematicParcel<ParcelType>::readFields(Cloud<ParcelType>& c)
     IOField<vector> UTurb(c.fieldIOobject("UTurb", IOobject::MUST_READ));
     c.checkFieldIOobject(c, UTurb);
 
-    labelIOFieldField collisionRecordsPairAccessed
+    labelFieldCompactIOField collisionRecordsPairAccessed
     (
         c.fieldIOobject("collisionRecordsPairAccessed", IOobject::MUST_READ)
     );
     c.checkFieldFieldIOobject(c, collisionRecordsPairAccessed);
 
-    labelIOFieldField collisionRecordsPairOrigProcOfOther
+    labelFieldCompactIOField collisionRecordsPairOrigProcOfOther
     (
         c.fieldIOobject
         (
@@ -197,7 +197,7 @@ void Foam::KinematicParcel<ParcelType>::readFields(Cloud<ParcelType>& c)
     );
     c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther);
 
-    labelIOFieldField collisionRecordsPairOrigIdOfOther
+    labelFieldCompactIOField collisionRecordsPairOrigIdOfOther
     (
         c.fieldIOobject
         (
@@ -207,25 +207,25 @@ void Foam::KinematicParcel<ParcelType>::readFields(Cloud<ParcelType>& c)
     );
     c.checkFieldFieldIOobject(c, collisionRecordsPairOrigProcOfOther);
 
-    pairDataIOFieldField collisionRecordsPairData
+    pairDataFieldCompactIOField collisionRecordsPairData
     (
         c.fieldIOobject("collisionRecordsPairData", IOobject::MUST_READ)
     );
     c.checkFieldFieldIOobject(c, collisionRecordsPairData);
 
-    labelIOFieldField collisionRecordsWallAccessed
+    labelFieldCompactIOField collisionRecordsWallAccessed
     (
         c.fieldIOobject("collisionRecordsWallAccessed", IOobject::MUST_READ)
     );
     c.checkFieldFieldIOobject(c, collisionRecordsWallAccessed);
 
-    vectorIOFieldField collisionRecordsWallPRel
+    vectorFieldCompactIOField collisionRecordsWallPRel
     (
         c.fieldIOobject("collisionRecordsWallPRel", IOobject::MUST_READ)
     );
     c.checkFieldFieldIOobject(c, collisionRecordsWallPRel);
 
-    wallDataIOFieldField collisionRecordsWallData
+    wallDataFieldCompactIOField collisionRecordsWallData
     (
         c.fieldIOobject("collisionRecordsWallData", IOobject::MUST_READ)
     );
@@ -292,12 +292,12 @@ void Foam::KinematicParcel<ParcelType>::writeFields(const Cloud<ParcelType>& c)
     IOField<scalar> tTurb(c.fieldIOobject("tTurb", IOobject::NO_READ), np);
     IOField<vector> UTurb(c.fieldIOobject("UTurb", IOobject::NO_READ), np);
 
-    labelIOFieldField collisionRecordsPairAccessed
+    labelFieldCompactIOField collisionRecordsPairAccessed
     (
         c.fieldIOobject("collisionRecordsPairAccessed", IOobject::NO_READ),
         np
     );
-    labelIOFieldField collisionRecordsPairOrigProcOfOther
+    labelFieldCompactIOField collisionRecordsPairOrigProcOfOther
     (
         c.fieldIOobject
         (
@@ -306,27 +306,27 @@ void Foam::KinematicParcel<ParcelType>::writeFields(const Cloud<ParcelType>& c)
         ),
         np
     );
-    labelIOFieldField collisionRecordsPairOrigIdOfOther
+    labelFieldCompactIOField collisionRecordsPairOrigIdOfOther
     (
         c.fieldIOobject("collisionRecordsPairOrigIdOfOther", IOobject::NO_READ),
         np
     );
-    pairDataIOFieldField collisionRecordsPairData
+    pairDataFieldCompactIOField collisionRecordsPairData
     (
         c.fieldIOobject("collisionRecordsPairData", IOobject::NO_READ),
         np
     );
-    labelIOFieldField collisionRecordsWallAccessed
+    labelFieldCompactIOField collisionRecordsWallAccessed
     (
         c.fieldIOobject("collisionRecordsWallAccessed", IOobject::NO_READ),
         np
     );
-    vectorIOFieldField collisionRecordsWallPRel
+    vectorFieldCompactIOField collisionRecordsWallPRel
     (
         c.fieldIOobject("collisionRecordsWallPRel", IOobject::NO_READ),
         np
     );
-    wallDataIOFieldField collisionRecordsWallData
+    wallDataFieldCompactIOField collisionRecordsWallData
     (
         c.fieldIOobject("collisionRecordsWallData", IOobject::NO_READ),
         np
diff --git a/src/parallel/reconstruct/reconstruct/reconstructLagrangian.H b/src/parallel/reconstruct/reconstruct/reconstructLagrangian.H
index 95cda63b60c01b81f0f9854f6225a53b0ba1f792..6107e9f3694df76df5bb7a8d81512a070b4efcba 100644
--- a/src/parallel/reconstruct/reconstruct/reconstructLagrangian.H
+++ b/src/parallel/reconstruct/reconstruct/reconstructLagrangian.H
@@ -38,7 +38,7 @@ SourceFiles
 #include "cloud.H"
 #include "polyMesh.H"
 #include "IOobjectList.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 #include "fvMesh.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -69,7 +69,7 @@ tmp<IOField<Type> > reconstructLagrangianField
 
 
 template<class Type>
-tmp<IOFieldField<Field<Type>, Type> > reconstructLagrangianFieldField
+tmp<CompactIOField<Field<Type>, Type> > reconstructLagrangianFieldField
 (
     const word& cloudName,
     const polyMesh& mesh,
diff --git a/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C b/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C
index 6642a5d9cc0102e7ba033d7316d35ca50757a708..9fa92b8cedcd010ab322415f3d9f8a02e58ffc51 100644
--- a/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C
+++ b/src/parallel/reconstruct/reconstruct/reconstructLagrangianFields.C
@@ -24,7 +24,7 @@ License
 \*---------------------------------------------------------------------------*/
 
 #include "IOField.H"
-#include "IOFieldField.H"
+#include "CompactIOField.H"
 #include "Time.H"
 
 // * * * * * * * * * * * * * * * Global Functions  * * * * * * * * * * * * * //
@@ -89,7 +89,7 @@ Foam::tmp<Foam::IOField<Type> > Foam::reconstructLagrangianField
 
 
 template<class Type>
-Foam::tmp<Foam::IOFieldField<Foam::Field<Type>, Type> >
+Foam::tmp<Foam::CompactIOField<Foam::Field<Type>, Type> >
 Foam::reconstructLagrangianFieldField
 (
     const word& cloudName,
@@ -99,9 +99,9 @@ Foam::reconstructLagrangianFieldField
 )
 {
     // Construct empty field on mesh
-    tmp<IOFieldField<Field<Type>, Type > > tfield
+    tmp<CompactIOField<Field<Type>, Type > > tfield
     (
-        new IOFieldField<Field<Type>, Type>
+        new CompactIOField<Field<Type>, Type>
         (
             IOobject
             (
@@ -132,7 +132,7 @@ Foam::reconstructLagrangianFieldField
 
         if (localIOobject.headerOk())
         {
-            IOFieldField<Field<Type>, Type> fieldi(localIOobject);
+            CompactIOField<Field<Type>, Type> fieldi(localIOobject);
 
             label offset = field.size();
             field.setSize(offset + fieldi.size());
@@ -194,7 +194,7 @@ void Foam::reconstructLagrangianFieldFields
 )
 {
     {
-        const word fieldClassName(IOFieldField<Field<Type>, Type>::typeName);
+        const word fieldClassName(CompactIOField<Field<Type>, Type>::typeName);
 
         IOobjectList fields = objects.lookupClass(fieldClassName);