diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C
index 554e482c21091587fd02c283205622f497935359..8b248991d5cce5caca462a6ecf920856691cc935 100644
--- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C
+++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C
@@ -49,7 +49,10 @@ sixDoFRigidBodyDisplacementPointPatchVectorField
     fixedValuePointPatchField<vector>(p, iF),
     motion_(),
     initialPoints_(p.localPoints()),
-    rhoInf_(1.0)
+    rhoInf_(1.0),
+    rhoName_("rho"),
+    lookupGravity_(-1),
+    g_(vector::zero)
 {}
 
 
@@ -63,8 +66,23 @@ sixDoFRigidBodyDisplacementPointPatchVectorField
 :
     fixedValuePointPatchField<vector>(p, iF, dict),
     motion_(dict),
-    rhoInf_(readScalar(dict.lookup("rhoInf")))
+    rhoInf_(1.0),
+    rhoName_(dict.lookupOrDefault<word>("rhoName", "rho")),
+    lookupGravity_(-1),
+    g_(vector::zero)
 {
+    if (rhoName_ == "rhoInf")
+    {
+        rhoInf_ = readScalar(dict.lookup("rhoInf"));
+    }
+
+    if (dict.found("g"))
+    {
+        lookupGravity_ = -2;
+
+        g_ = dict.lookup("g");
+    }
+
     if (!dict.found("value"))
     {
         updateCoeffs();
@@ -93,7 +111,10 @@ sixDoFRigidBodyDisplacementPointPatchVectorField
     fixedValuePointPatchField<vector>(ptf, p, iF, mapper),
     motion_(ptf.motion_),
     initialPoints_(ptf.initialPoints_, mapper),
-    rhoInf_(ptf.rhoInf_)
+    rhoInf_(ptf.rhoInf_),
+    rhoName_(ptf.rhoName_),
+    lookupGravity_(ptf.lookupGravity_),
+    g_(ptf.g_)
 {}
 
 
@@ -107,7 +128,10 @@ sixDoFRigidBodyDisplacementPointPatchVectorField
     fixedValuePointPatchField<vector>(ptf, iF),
     motion_(ptf.motion_),
     initialPoints_(ptf.initialPoints_),
-    rhoInf_(ptf.rhoInf_)
+    rhoInf_(ptf.rhoInf_),
+    rhoName_(ptf.rhoName_),
+    lookupGravity_(ptf.lookupGravity_),
+    g_(ptf.g_)
 {}
 
 
@@ -146,6 +170,33 @@ void sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
         return;
     }
 
+    if (lookupGravity_ < 0)
+    {
+        if (db().foundObject<uniformDimensionedVectorField>("g"))
+        {
+            if (lookupGravity_ == -2)
+            {
+                FatalErrorIn
+                (
+                    "void sixDoFRigidBodyDisplacementPointPatchVectorField"
+                    "::updateCoeffs()"
+                )
+                    << "Specifying the value of g in this boundary condition "
+                    << "when g is available from the database is considered "
+                    << "a fatal error to avoid the possibility of inconsistency"
+                    << exit(FatalError);
+            }
+            else
+            {
+                lookupGravity_ = 1;
+            }
+        }
+        else
+        {
+            lookupGravity_ = 0;
+        }
+    }
+
     const polyMesh& mesh = this->dimensionedInternalField().mesh()();
     const Time& t = mesh.time();
     const pointPatch& ptPatch = this->patch();
@@ -160,6 +211,7 @@ void sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
 
     forcesDict.add("patches", wordList(1, ptPatch.name()));
     forcesDict.add("rhoInf", rhoInf_);
+    forcesDict.add("rhoName", rhoName_);
     forcesDict.add("CofR", motion_.centreOfMass());
 
     forces f("forces", db(), forcesDict);
@@ -168,19 +220,17 @@ void sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
 
     // Get the forces on the patch faces at the current positions
 
-    vector gravity = vector::zero;
-
-    if (db().foundObject<uniformDimensionedVectorField>("g"))
+    if (lookupGravity_ == 1)
     {
         uniformDimensionedVectorField g =
             db().lookupObject<uniformDimensionedVectorField>("g");
 
-        gravity = g.value();
+        g_ = g.value();
     }
 
     motion_.updateForce
     (
-        fm.first().first() + fm.first().second() + gravity*motion_.mass(),
+        fm.first().first() + fm.first().second() + g_*motion_.mass(),
         fm.second().first() + fm.second().second(),
         t.deltaTValue()
     );
@@ -197,10 +247,20 @@ void sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
 void sixDoFRigidBodyDisplacementPointPatchVectorField::write(Ostream& os) const
 {
     pointPatchField<vector>::write(os);
+
+    os.writeKeyword("rhoInf") << rhoInf_ << token::END_STATEMENT << nl;
+
+    os.writeKeyword("rhoName") << rhoName_ << token::END_STATEMENT << nl;
+
+    if (lookupGravity_ == 0 || lookupGravity_ == -2)
+    {
+        os.writeKeyword("g") << g_ << token::END_STATEMENT << nl;
+    }
+
     motion_.write(os);
-    os.writeKeyword("rhoInf")
-        << rhoInf_ << token::END_STATEMENT << nl;
+
     initialPoints_.writeEntry("initialPoints", os);
+
     writeEntry("value", os);
 }
 
diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H
index fa30a7eff2c0e1402087a2ba08a481ca00e8edd9..ca1a3715e494ce7bb8f08df757a1af8fac7ed552 100644
--- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H
+++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H
@@ -60,9 +60,30 @@ class sixDoFRigidBodyDisplacementPointPatchVectorField
         pointField initialPoints_;
 
         //- Reference density required by the forces object for
-        //  incompressible calculations
+        //  incompressible calculations, required if rhoName == rhoInf
         scalar rhoInf_;
 
+        //- Name of density field, optional unless used for an
+        //  incompressible simulation, when this needs to be specified
+        //  as rhoInf
+        word rhoName_;
+
+        //- State of gravity lookup:
+        //  -1 = not determined yet, as the BC may be instantiated before g has
+        //       been read into the db yet.  Determination deferred until first
+        //       call to updateCoeffs.  A g keyword was not supplied to the
+        //       dictionary.
+        //  -2 = as for -1, but a gravity value was specified in the dictionary,
+        //       specifying a value in the dictionary is considered a fatal
+        //       error if g is available from the db.
+        //   0 = Use this boundary condition's own value of gravity, as not
+        //       available from the db.
+        //   1 = Lookup gravity from db.
+        label lookupGravity_;
+
+        //- Gravity vector to store when not available from the db
+        vector g_;
+
 
 public:
 
diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.C
index f63607c99cdf7b15fc7fb9bca4d3ed78c9d76351..7b7537eec3be52a83a81582738ae292d1cc2b2b6 100644
--- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.C
+++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.C
@@ -47,8 +47,7 @@ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
 :
     fixedValuePointPatchField<vector>(p, iF),
     motion_(),
-    initialPoints_(p.localPoints()),
-    rhoInf_(1.0)
+    initialPoints_(p.localPoints())
 {}
 
 
@@ -61,8 +60,7 @@ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
 )
 :
     fixedValuePointPatchField<vector>(p, iF, dict),
-    motion_(dict),
-    rhoInf_(readScalar(dict.lookup("rhoInf")))
+    motion_(dict)
 {
     if (!dict.found("value"))
     {
@@ -91,8 +89,7 @@ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
 :
     fixedValuePointPatchField<vector>(ptf, p, iF, mapper),
     motion_(ptf.motion_),
-    initialPoints_(ptf.initialPoints_, mapper),
-    rhoInf_(ptf.rhoInf_)
+    initialPoints_(ptf.initialPoints_, mapper)
 {}
 
 
@@ -105,8 +102,7 @@ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
 :
     fixedValuePointPatchField<vector>(ptf, iF),
     motion_(ptf.motion_),
-    initialPoints_(ptf.initialPoints_),
-    rhoInf_(ptf.rhoInf_)
+    initialPoints_(ptf.initialPoints_)
 {}
 
 
@@ -182,8 +178,6 @@ void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::write
 {
     pointPatchField<vector>::write(os);
     motion_.write(os);
-    os.writeKeyword("rhoInf")
-        << rhoInf_ << token::END_STATEMENT << nl;
     initialPoints_.writeEntry("initialPoints", os);
     writeEntry("value", os);
 }
diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.H b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.H
index 631c732a9315fbaeb5eacadab9dd95151c442bd7..d5a17c09c776e9a6c192941653bb263750e04fe0 100644
--- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.H
+++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.H
@@ -59,11 +59,6 @@ class uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
         //- Initial positions of points on the patch
         pointField initialPoints_;
 
-        //- Reference density required by the forces object for
-        //  incompressible calculations.  Retained here to give
-        //  dictionary compatibility with other sixDoF patches.
-        scalar rhoInf_;
-
 
 public: