diff --git a/src/fvMotionSolver/Make/files b/src/fvMotionSolver/Make/files
index bd1bb87ede2b32056614a854307fa267f09ed13f..fc295442b64d4a1335f17a7193e962402228d2e1 100644
--- a/src/fvMotionSolver/Make/files
+++ b/src/fvMotionSolver/Make/files
@@ -34,5 +34,7 @@ pointPatchFields/derived/surfaceDisplacement/surfaceDisplacementPointPatchVector
 pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyDisplacementPointPatchVectorField.C
 pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotion.C
 pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionIO.C
+pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionState.C
+pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionStateIO.C
 
 LIB = $(FOAM_LIBBIN)/libfvMotionSolvers
diff --git a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyDisplacementPointPatchVectorField.C b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyDisplacementPointPatchVectorField.C
index ddfe3d94cbfc1712452b3e2ed3a8e391cd5f6ca1..324b10f574f597e6e0dca7d4d6e1558dcd3c87db 100644
--- a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyDisplacementPointPatchVectorField.C
+++ b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyDisplacementPointPatchVectorField.C
@@ -130,7 +130,7 @@ void sixDofRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
     dictionary forcesDict;
 
     forcesDict.add("patches", wordList(1, ptPatch.name()));
-    forcesDict.add("rhoInf", 0.0);
+    forcesDict.add("rhoInf", 1.0);
     forcesDict.add("CofR", motion_.centreOfMass());
 
     forces f("forces", db(), forcesDict);
@@ -148,22 +148,6 @@ void sixDofRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
 
         gravity = g.value();
     }
-    else
-    {
-        uniformDimensionedVectorField g
-        (
-            IOobject
-            (
-                "g",
-                db().time().constant(),
-                db(),
-                IOobject::READ_IF_PRESENT,
-                IOobject::NO_WRITE
-            )
-        );
-
-        gravity = g.value();
-    }
 
     motion_.updateForce
     (
@@ -172,15 +156,6 @@ void sixDofRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
         t.deltaT().value()
     );
 
-    // motion_.updateForce
-    // (
-    //     vector::zero,
-    //     vector::zero,
-    //     t.deltaT().value()
-    // );
-
-    Info<< motion_ << endl;
-
     Field<vector>::operator=(motion_.generatePositions(p0_) - p0_);
 
     fixedValuePointPatchField<vector>::updateCoeffs();
diff --git a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotion.C b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotion.C
index 02ad37e4416de104796d267548107c6188f0781b..5db7351535ef682e0ec495d19559a8978ec61b61 100644
--- a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotion.C
+++ b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotion.C
@@ -30,54 +30,47 @@ License
 
 Foam::sixDofRigidBodyMotion::sixDofRigidBodyMotion()
 :
-    centreOfMass_(vector::zero),
+    motionState_(),
     refCentreOfMass_(vector::zero),
     momentOfInertia_(diagTensor::one*VSMALL),
-    mass_(VSMALL),
-    Q_(I),
-    v_(vector::zero),
-    a_(vector::zero),
-    pi_(vector::zero),
-    tau_(vector::zero)
+    mass_(VSMALL)
 {}
 
 
 Foam::sixDofRigidBodyMotion::sixDofRigidBodyMotion
 (
     const point& centreOfMass,
-    const point& refCentreOfMass,
-    const diagTensor& momentOfInertia,
-    scalar mass,
     const tensor& Q,
     const vector& v,
     const vector& a,
     const vector& pi,
-    const vector& tau
+    const vector& tau,
+    scalar mass,
+    const point& refCentreOfMass,
+    const diagTensor& momentOfInertia
 )
 :
-    centreOfMass_(centreOfMass),
+    motionState_
+    (
+        centreOfMass,
+        Q,
+        v,
+        a,
+        pi,
+        tau
+    ),
     refCentreOfMass_(refCentreOfMass),
     momentOfInertia_(momentOfInertia),
-    mass_(mass),
-    Q_(Q),
-    v_(v),
-    a_(a),
-    pi_(pi),
-    tau_(tau)
+    mass_(mass)
 {}
 
 
 Foam::sixDofRigidBodyMotion::sixDofRigidBodyMotion(const dictionary& dict)
 :
-    centreOfMass_(dict.lookup("centreOfMass")),
-    refCentreOfMass_(dict.lookupOrDefault("refCentreOfMass", centreOfMass_)),
+    motionState_(dict),
+    refCentreOfMass_(dict.lookupOrDefault("refCentreOfMass", centreOfMass())),
     momentOfInertia_(dict.lookup("momentOfInertia")),
-    mass_(readScalar(dict.lookup("mass"))),
-    Q_(dict.lookupOrDefault("Q", tensor(I))),
-    v_(dict.lookupOrDefault("v", vector::zero)),
-    a_(dict.lookupOrDefault("a", vector::zero)),
-    pi_(dict.lookupOrDefault("pi", vector::zero)),
-    tau_(dict.lookupOrDefault("tau", vector::zero))
+    mass_(readScalar(dict.lookup("mass")))
 {}
 
 
@@ -86,15 +79,10 @@ Foam::sixDofRigidBodyMotion::sixDofRigidBodyMotion
     const sixDofRigidBodyMotion& sDofRBM
 )
 :
-    centreOfMass_(sDofRBM.centreOfMass()),
+    motionState_(sDofRBM.motionState()),
     refCentreOfMass_(sDofRBM.refCentreOfMass()),
     momentOfInertia_(sDofRBM.momentOfInertia()),
-    mass_(sDofRBM.mass()),
-    Q_(sDofRBM.Q()),
-    v_(sDofRBM.v()),
-    a_(sDofRBM.a()),
-    pi_(sDofRBM.pi()),
-    tau_(sDofRBM.tau())
+    mass_(sDofRBM.mass())
 {}
 
 
@@ -114,36 +102,42 @@ void Foam::sixDofRigidBodyMotion::updatePosition
     // First leapfrog velocity adjust and motion part, required before
     // force calculation
 
-    v_ += 0.5*deltaT*a_;
+    if (Pstream::master())
+    {
+        v() += 0.5*deltaT*a();
+
+        pi() += 0.5*deltaT*tau();
+
+        // Leapfrog move part
+        centreOfMass() += deltaT*v();
 
-    pi_ += 0.5*deltaT*tau_;
+        // Leapfrog orientation adjustment
 
-    // Leapfrog move part
-    centreOfMass_ += deltaT*v_;
+        tensor R;
 
-    // Leapfrog orientation adjustment
+        R = rotationTensorX(0.5*deltaT*pi().x()/momentOfInertia_.xx());
+        pi() = pi() & R;
+        Q() = Q() & R;
 
-    tensor R;
+        R = rotationTensorY(0.5*deltaT*pi().y()/momentOfInertia_.yy());
+        pi() = pi() & R;
+        Q() = Q() & R;
 
-    R = rotationTensorX(0.5*deltaT*pi_.x()/momentOfInertia_.xx());
-    pi_ = pi_ & R;
-    Q_ = Q_ & R;
+        R = rotationTensorZ(deltaT*pi().z()/momentOfInertia_.zz());
+        pi() = pi() & R;
+        Q() = Q() & R;
 
-    R = rotationTensorY(0.5*deltaT*pi_.y()/momentOfInertia_.yy());
-    pi_ = pi_ & R;
-    Q_ = Q_ & R;
+        R = rotationTensorY(0.5*deltaT*pi().y()/momentOfInertia_.yy());
+        pi() = pi() & R;
+        Q() = Q() & R;
 
-    R = rotationTensorZ(deltaT*pi_.z()/momentOfInertia_.zz());
-    pi_ = pi_ & R;
-    Q_ = Q_ & R;
+        R = rotationTensorX(0.5*deltaT*pi().x()/momentOfInertia_.xx());
+        pi() = pi() & R;
+        Q() = Q() & R;
 
-    R = rotationTensorY(0.5*deltaT*pi_.y()/momentOfInertia_.yy());
-    pi_ = pi_ & R;
-    Q_ = Q_ & R;
+    }
 
-    R = rotationTensorX(0.5*deltaT*pi_.x()/momentOfInertia_.xx());
-    pi_ = pi_ & R;
-    Q_ = Q_ & R;
+    Pstream::scatter(motionState_);
 }
 
 
@@ -157,14 +151,18 @@ void Foam::sixDofRigidBodyMotion::updateForce
     // Second leapfrog velocity adjust part, required after motion and
     // force calculation part
 
-    a_ = fGlobal/mass_;
+    if (Pstream::master())
+    {
+        a() = fGlobal/mass_;
 
-    tau_ = (Q_.T() & tauGlobal);
+        tau() = (Q().T() & tauGlobal);
 
-    v_ += 0.5*deltaT*a_;
+        v() += 0.5*deltaT*a();
 
-    pi_ += 0.5*deltaT*tau_;
+        pi() += 0.5*deltaT*tau();
+    }
 
+    Pstream::scatter(motionState_);
 }
 
 
@@ -178,30 +176,34 @@ void Foam::sixDofRigidBodyMotion::updateForce
     // Second leapfrog velocity adjust part, required after motion and
     // force calculation part
 
-    a_ = vector::zero;
+    if (Pstream::master())
+    {
+        a() = vector::zero;
 
-    tau_ = vector::zero;
+        tau() = vector::zero;
 
-    forAll(positions, i)
-    {
-        const vector& f = forces[i];
+        forAll(positions, i)
+        {
+            const vector& f = forces[i];
 
-        a_ += f/mass_;
+            a() += f/mass_;
 
-        tau_ += (positions[i] ^ (Q_.T() & f));
-    }
+            tau() += (positions[i] ^ (Q().T() & f));
+        }
 
-    v_ += 0.5*deltaT*a_;
+        v() += 0.5*deltaT*a();
 
-    pi_ += 0.5*deltaT*tau_;
+        pi() += 0.5*deltaT*tau();
+    }
 
+    Pstream::scatter(motionState_);
 }
 
 
 Foam::tmp<Foam::pointField>
 Foam::sixDofRigidBodyMotion::generatePositions(const pointField& pts) const
 {
-    return (centreOfMass_ + (Q_ & (pts - refCentreOfMass_)));
+    return (centreOfMass() + (Q() & (pts - refCentreOfMass_)));
 }
 
 
diff --git a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotion.H b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotion.H
index 2bdb7fbf0562d46a7b9c2c501b7c2c16b1b342d0..3db9d58f6d74e32e5a8bdbf74d5fa96b5ff84708 100644
--- a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotion.H
+++ b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotion.H
@@ -53,8 +53,7 @@ SourceFiles
 #ifndef sixDofRigidBodyMotion_H
 #define sixDofRigidBodyMotion_H
 
-#include "vector.H"
-#include "diagTensor.H"
+#include "sixDofRigidBodyMotionState.H"
 #include "pointField.H"
 #include "mathConstants.H"
 
@@ -81,8 +80,8 @@ class sixDofRigidBodyMotion
 {
     // Private data
 
-        //- Current position of the centre of mass of the body
-        point centreOfMass_;
+        // state data object
+        sixDofRigidBodyMotionState motionState_;
 
         //- Centre of mass of reference state
         point refCentreOfMass_;
@@ -93,23 +92,6 @@ class sixDofRigidBodyMotion
         //- Mass of the body
         scalar mass_;
 
-        //- Orientation, stored as the rotation tensor to transform
-        //  from the body to the global reference frame, i.e.:
-        //  globalVector = Q_ & bodyLocalVector
-        //  bodyLocalVector = Q_.T() & globalVector
-        tensor Q_;
-
-        // Linear velocity of body
-        vector v_;
-
-        // Total linear acceleration of body
-        vector a_;
-
-        //- Angular momentum of body, in body local reference frame
-        vector pi_;
-
-        //- Total torque on body, in body local reference frame
-        vector tau_;
 
     // Private Member Functions
 
@@ -137,14 +119,14 @@ public:
         sixDofRigidBodyMotion
         (
             const point& centreOfMass,
-            const point& refCentreOfMass,
-            const diagTensor& momentOfInertia,
-            scalar mass,
             const tensor& Q,
             const vector& v,
             const vector& a,
-            const vector&  pi,
-            const vector& tau
+            const vector& pi,
+            const vector& tau,
+            scalar mass,
+            const point& refCentreOfMass,
+            const diagTensor& momentOfInertia
         );
 
         //- Construct from dictionary
@@ -183,6 +165,9 @@ public:
 
         // Access
 
+            //- Return access to the motion state
+            inline const sixDofRigidBodyMotionState& motionState() const;
+
             //- Return access to the centre of mass
             inline const point& centreOfMass() const;
 
diff --git a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionI.H b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionI.H
index 09b1fa64db8b5375445ed8e8216086ba2ca2b9b0..2ce3160b016dc9fc23bb9e7a6609e99dff143e82 100644
--- a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionI.H
+++ b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionI.H
@@ -64,9 +64,16 @@ Foam::sixDofRigidBodyMotion::rotationTensorZ(scalar phi) const
 }
 
 
+inline const Foam::sixDofRigidBodyMotionState&
+Foam::sixDofRigidBodyMotion::motionState() const
+{
+    return motionState_;
+}
+
+
 inline const Foam::point& Foam::sixDofRigidBodyMotion::centreOfMass() const
 {
-    return centreOfMass_;
+    return motionState_.centreOfMass();
 }
 
 
@@ -91,37 +98,37 @@ inline Foam::scalar Foam::sixDofRigidBodyMotion::mass() const
 
 inline const Foam::tensor& Foam::sixDofRigidBodyMotion::Q() const
 {
-    return Q_;
+    return motionState_.Q();
 }
 
 
 inline const Foam::vector& Foam::sixDofRigidBodyMotion::v() const
 {
-    return v_;
+    return motionState_.v();
 }
 
 
 inline const Foam::vector& Foam::sixDofRigidBodyMotion::a() const
 {
-    return a_;
+    return motionState_.a();
 }
 
 
 inline const Foam::vector& Foam::sixDofRigidBodyMotion::pi() const
 {
-    return pi_;
+    return motionState_.pi();
 }
 
 
 inline const Foam::vector& Foam::sixDofRigidBodyMotion::tau() const
 {
-    return tau_;
+    return motionState_.tau();
 }
 
 
 inline Foam::point& Foam::sixDofRigidBodyMotion::centreOfMass()
 {
-    return centreOfMass_;
+    return motionState_.centreOfMass();
 }
 
 
@@ -145,31 +152,31 @@ inline Foam::scalar& Foam::sixDofRigidBodyMotion::mass()
 
 inline Foam::tensor& Foam::sixDofRigidBodyMotion::Q()
 {
-    return Q_;
+    return motionState_.Q();
 }
 
 
 inline Foam::vector& Foam::sixDofRigidBodyMotion::v()
 {
-    return v_;
+    return motionState_.v();
 }
 
 
 inline Foam::vector& Foam::sixDofRigidBodyMotion::a()
 {
-    return a_;
+    return motionState_.a();
 }
 
 
 inline Foam::vector& Foam::sixDofRigidBodyMotion::pi()
 {
-    return pi_;
+    return motionState_.pi();
 }
 
 
 inline Foam::vector& Foam::sixDofRigidBodyMotion::tau()
 {
-    return tau_;
+    return motionState_.tau();
 }
 
 
diff --git a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionIO.C b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionIO.C
index b6dcf42891dd016dfe5d565a3ab45e74118c019e..fe4902a94d116eb3f1dc7c60f306c9c059d23c96 100644
--- a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionIO.C
+++ b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionIO.C
@@ -31,24 +31,14 @@ License
 
 void Foam::sixDofRigidBodyMotion::write(Ostream& os) const
 {
-    os.writeKeyword("centreOfMass")
-        << centreOfMass_ << token::END_STATEMENT << nl;
+    motionState_.write(os);
+
     os.writeKeyword("refCentreOfMass")
         << refCentreOfMass_ << token::END_STATEMENT << nl;
     os.writeKeyword("momentOfInertia")
         << momentOfInertia_ << token::END_STATEMENT << nl;
     os.writeKeyword("mass")
         << mass_ << token::END_STATEMENT << nl;
-    os.writeKeyword("Q")
-        << Q_ << token::END_STATEMENT << nl;
-    os.writeKeyword("v")
-        << v_ << token::END_STATEMENT << nl;
-    os.writeKeyword("a")
-        << a_ << token::END_STATEMENT << nl;
-    os.writeKeyword("pi")
-        << pi_ << token::END_STATEMENT << nl;
-    os.writeKeyword("tau")
-        << tau_ << token::END_STATEMENT << nl;
 }
 
 
@@ -56,15 +46,10 @@ void Foam::sixDofRigidBodyMotion::write(Ostream& os) const
 
 Foam::Istream& Foam::operator>>(Istream& is, sixDofRigidBodyMotion& sDofRBM)
 {
-    is  >> sDofRBM.centreOfMass_
+    is  >> sDofRBM.motionState_
         >> sDofRBM.refCentreOfMass_
         >> sDofRBM.momentOfInertia_
-        >> sDofRBM.mass_
-        >> sDofRBM.Q_
-        >> sDofRBM.v_
-        >> sDofRBM.a_
-        >> sDofRBM.pi_
-        >> sDofRBM.tau_;
+        >> sDofRBM.mass_;
 
     // Check state of Istream
     is.check
@@ -83,15 +68,10 @@ Foam::Ostream& Foam::operator<<
     const sixDofRigidBodyMotion& sDofRBM
 )
 {
-    os  << token::SPACE << sDofRBM.centreOfMass()
+    os  << sDofRBM.motionState()
         << token::SPACE << sDofRBM.refCentreOfMass()
         << token::SPACE << sDofRBM.momentOfInertia()
-        << token::SPACE << sDofRBM.mass()
-        << token::SPACE << sDofRBM.Q()
-        << token::SPACE << sDofRBM.v()
-        << token::SPACE << sDofRBM.a()
-        << token::SPACE << sDofRBM.pi()
-        << token::SPACE << sDofRBM.tau();
+        << token::SPACE << sDofRBM.mass() ;
 
     // Check state of Ostream
     os.check
diff --git a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionState.C b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionState.C
new file mode 100644
index 0000000000000000000000000000000000000000..5d54079099357d63b5edbdc62abd9a6b70834bf8
--- /dev/null
+++ b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionState.C
@@ -0,0 +1,95 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2009-2009 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 "sixDofRigidBodyMotionState.H"
+
+// * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
+
+Foam::sixDofRigidBodyMotionState::sixDofRigidBodyMotionState()
+:
+    centreOfMass_(vector::zero),
+    Q_(I),
+    v_(vector::zero),
+    a_(vector::zero),
+    pi_(vector::zero),
+    tau_(vector::zero)
+{}
+
+
+Foam::sixDofRigidBodyMotionState::sixDofRigidBodyMotionState
+(
+    const point& centreOfMass,
+    const tensor& Q,
+    const vector& v,
+    const vector& a,
+    const vector& pi,
+    const vector& tau
+)
+:
+    centreOfMass_(centreOfMass),
+    Q_(Q),
+    v_(v),
+    a_(a),
+    pi_(pi),
+    tau_(tau)
+{}
+
+
+Foam::sixDofRigidBodyMotionState::sixDofRigidBodyMotionState
+(
+    const dictionary& dict
+)
+:
+    centreOfMass_(dict.lookup("centreOfMass")),
+    Q_(dict.lookupOrDefault("Q", tensor(I))),
+    v_(dict.lookupOrDefault("v", vector::zero)),
+    a_(dict.lookupOrDefault("a", vector::zero)),
+    pi_(dict.lookupOrDefault("pi", vector::zero)),
+    tau_(dict.lookupOrDefault("tau", vector::zero))
+{}
+
+
+Foam::sixDofRigidBodyMotionState::sixDofRigidBodyMotionState
+(
+    const sixDofRigidBodyMotionState& sDofRBMS
+)
+:
+    centreOfMass_(sDofRBMS.centreOfMass()),
+    Q_(sDofRBMS.Q()),
+    v_(sDofRBMS.v()),
+    a_(sDofRBMS.a()),
+    pi_(sDofRBMS.pi()),
+    tau_(sDofRBMS.tau())
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
+
+Foam::sixDofRigidBodyMotionState::~sixDofRigidBodyMotionState()
+{}
+
+
+// ************************************************************************* //
diff --git a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionState.H b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionState.H
new file mode 100644
index 0000000000000000000000000000000000000000..f7942e31bd99fb4304d49610cfe93c14780a2a68
--- /dev/null
+++ b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionState.H
@@ -0,0 +1,194 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2009-2009 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
+
+Class
+    Foam::sixDofRigidBodyMotionState
+
+Description
+    Holds the motion state of sixDof object.  Wrapped up together
+    to allow rapid scatter to other processors.  The processors must all
+    maintain exactly the same state data to avoid any drift or inconsistency.
+
+SourceFiles
+    sixDofRigidBodyMotionStateI.H
+    sixDofRigidBodyMotionState.C
+    sixDofRigidBodyMotionStateIO.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef sixDofRigidBodyMotionState_H
+#define sixDofRigidBodyMotionState_H
+
+#include "vector.H"
+#include "point.H"
+#include "diagTensor.H"
+#include "tensor.H"
+#include "dictionary.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of classes
+class Istream;
+class Ostream;
+
+// Forward declaration of friend functions and operators
+class sixDofRigidBodyMotionState;
+Istream& operator>>(Istream&, sixDofRigidBodyMotionState&);
+Ostream& operator<<(Ostream&, const sixDofRigidBodyMotionState&);
+
+
+/*---------------------------------------------------------------------------*\
+                  Class sixDofRigidBodyMotionState Declaration
+\*---------------------------------------------------------------------------*/
+
+class sixDofRigidBodyMotionState
+{
+    // Private data
+
+        //- Current position of the centre of mass of the body
+        point centreOfMass_;
+
+        //- Orientation, stored as the rotation tensor to transform
+        //  from the body to the global reference frame, i.e.:
+        //  globalVector = Q_ & bodyLocalVector
+        //  bodyLocalVector = Q_.T() & globalVector
+        tensor Q_;
+
+        // Linear velocity of body
+        vector v_;
+
+        // Total linear acceleration of body
+        vector a_;
+
+        //- Angular momentum of body, in body local reference frame
+        vector pi_;
+
+        //- Total torque on body, in body local reference frame
+        vector tau_;
+
+
+public:
+
+    // Constructors
+
+        //- Construct null
+        sixDofRigidBodyMotionState();
+
+        //- Construct from components
+        sixDofRigidBodyMotionState
+        (
+            const point& centreOfMass,
+            const tensor& Q,
+            const vector& v,
+            const vector& a,
+            const vector& pi,
+            const vector& tau
+        );
+
+        //- Construct from dictionary
+        sixDofRigidBodyMotionState(const dictionary& dict);
+
+        //- Construct as copy
+        sixDofRigidBodyMotionState(const sixDofRigidBodyMotionState&);
+
+
+    //- Destructor
+    ~sixDofRigidBodyMotionState();
+
+
+    // Member Functions
+
+        // Access
+
+            //- Return access to the centre of mass
+            inline const point& centreOfMass() const;
+
+            //- Return access to the orientation
+            inline const tensor& Q() const;
+
+            //- Return access to velocity
+            inline const vector& v() const;
+
+            //- Return access to acceleration
+            inline const vector& a() const;
+
+            //- Return access to angular momentum
+            inline const vector& pi() const;
+
+            //- Return access to torque
+            inline const vector& tau() const;
+
+
+        // Edit
+
+            //- Return non-const access to the centre of mass
+            inline point& centreOfMass();
+
+            //- Return non-const access to the orientation
+            inline tensor& Q();
+
+            //- Return non-const access to vector
+            inline vector& v();
+
+            //- Return non-const access to acceleration
+            inline vector& a();
+
+            //- Return non-const access to angular momentum
+            inline vector& pi();
+
+            //- Return non-const access to torque
+            inline vector& tau();
+
+
+        //- Write
+        void write(Ostream&) const;
+
+
+    // Friend Functions
+
+    // Friend Operators
+
+    // IOstream Operators
+
+        friend Istream& operator>>(Istream&, sixDofRigidBodyMotionState&);
+        friend Ostream& operator<<(Ostream&, const sixDofRigidBodyMotionState&);
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#include "sixDofRigidBodyMotionStateI.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionStateI.H b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionStateI.H
new file mode 100644
index 0000000000000000000000000000000000000000..dff9412fba8a767f896a2ace23cc062d3923bd1e
--- /dev/null
+++ b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionStateI.H
@@ -0,0 +1,102 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2009-2009 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
+
+\*---------------------------------------------------------------------------*/
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
+inline const Foam::point& Foam::sixDofRigidBodyMotionState::centreOfMass() const
+{
+    return centreOfMass_;
+}
+
+
+inline const Foam::tensor& Foam::sixDofRigidBodyMotionState::Q() const
+{
+    return Q_;
+}
+
+
+inline const Foam::vector& Foam::sixDofRigidBodyMotionState::v() const
+{
+    return v_;
+}
+
+
+inline const Foam::vector& Foam::sixDofRigidBodyMotionState::a() const
+{
+    return a_;
+}
+
+
+inline const Foam::vector& Foam::sixDofRigidBodyMotionState::pi() const
+{
+    return pi_;
+}
+
+
+inline const Foam::vector& Foam::sixDofRigidBodyMotionState::tau() const
+{
+    return tau_;
+}
+
+
+inline Foam::point& Foam::sixDofRigidBodyMotionState::centreOfMass()
+{
+    return centreOfMass_;
+}
+
+
+inline Foam::tensor& Foam::sixDofRigidBodyMotionState::Q()
+{
+    return Q_;
+}
+
+
+inline Foam::vector& Foam::sixDofRigidBodyMotionState::v()
+{
+    return v_;
+}
+
+
+inline Foam::vector& Foam::sixDofRigidBodyMotionState::a()
+{
+    return a_;
+}
+
+
+inline Foam::vector& Foam::sixDofRigidBodyMotionState::pi()
+{
+    return pi_;
+}
+
+
+inline Foam::vector& Foam::sixDofRigidBodyMotionState::tau()
+{
+    return tau_;
+}
+
+
+// ************************************************************************* //
diff --git a/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionStateIO.C b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionStateIO.C
new file mode 100644
index 0000000000000000000000000000000000000000..3934e57cf24af5c82adc621a34b9131a102b0dcc
--- /dev/null
+++ b/src/fvMotionSolver/pointPatchFields/derived/sixDofRigidBodyDisplacement/sixDofRigidBodyMotion/sixDofRigidBodyMotionStateIO.C
@@ -0,0 +1,98 @@
+/*---------------------------------------------------------------------------*\
+  =========                 |
+  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
+   \\    /   O peration     |
+    \\  /    A nd           | Copyright (C) 2009-2009 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 "sixDofRigidBodyMotionState.H"
+#include "IOstreams.H"
+
+// * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
+
+void Foam::sixDofRigidBodyMotionState::write(Ostream& os) const
+{
+    os.writeKeyword("centreOfMass")
+        << centreOfMass_ << token::END_STATEMENT << nl;
+    os.writeKeyword("Q")
+        << Q_ << token::END_STATEMENT << nl;
+    os.writeKeyword("v")
+        << v_ << token::END_STATEMENT << nl;
+    os.writeKeyword("a")
+        << a_ << token::END_STATEMENT << nl;
+    os.writeKeyword("pi")
+        << pi_ << token::END_STATEMENT << nl;
+    os.writeKeyword("tau")
+        << tau_ << token::END_STATEMENT << nl;
+}
+
+
+// * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
+
+Foam::Istream& Foam::operator>>
+(
+    Istream& is, sixDofRigidBodyMotionState& sDofRBMS
+)
+{
+    is  >> sDofRBMS.centreOfMass_
+        >> sDofRBMS.Q_
+        >> sDofRBMS.v_
+        >> sDofRBMS.a_
+        >> sDofRBMS.pi_
+        >> sDofRBMS.tau_;
+
+    // Check state of Istream
+    is.check
+    (
+        "Foam::Istream& Foam::operator>>"
+        "(Foam::Istream&, Foam::sixDofRigidBodyMotionState&)"
+    );
+
+    return is;
+}
+
+
+Foam::Ostream& Foam::operator<<
+(
+    Ostream& os,
+    const sixDofRigidBodyMotionState& sDofRBMS
+)
+{
+    os  << token::SPACE << sDofRBMS.centreOfMass()
+        << token::SPACE << sDofRBMS.Q()
+        << token::SPACE << sDofRBMS.v()
+        << token::SPACE << sDofRBMS.a()
+        << token::SPACE << sDofRBMS.pi()
+        << token::SPACE << sDofRBMS.tau();
+
+    // Check state of Ostream
+    os.check
+    (
+        "Foam::Ostream& Foam::operator<<(Foam::Ostream&, "
+        "const Foam::sixDofRigidBodyMotionState&)"
+    );
+
+    return os;
+}
+
+
+// ************************************************************************* //