diff --git a/applications/test/rigidBodyDynamics/sphericalJoint/sphericalJoint.C b/applications/test/rigidBodyDynamics/sphericalJoint/sphericalJoint.C
index d69fdb54cad4858c82fa624b3cfd0b76129447d6..91a59104ed471933c459d48b687bd3e9737be8be 100644
--- a/applications/test/rigidBodyDynamics/sphericalJoint/sphericalJoint.C
+++ b/applications/test/rigidBodyDynamics/sphericalJoint/sphericalJoint.C
@@ -61,7 +61,7 @@ int main(int argc, char *argv[])
     Field<spatialVector> fx(sphericalJoint.nBodies(), Zero);
 
     // Set the angle of the pendulum to 0.3rad
-    sphericalJoint.joints()[1]
+    sphericalJoint.joints()[1].unitQuaternion
     (
         quaternion(quaternion::ZYX, vector(0.3, 0, 0)),
         sphericalJoint.state().q()
@@ -87,7 +87,7 @@ int main(int argc, char *argv[])
         // using 'gnuplot sphericalJoint.gnuplot'
         omegaFile
             << t << " "
-            << sphericalJoint.joints()[1]
+            << sphericalJoint.joints()[1].unitQuaternion
                (
                    sphericalJoint.state().q()
                ).eulerAngles(quaternion::ZYX).x()
diff --git a/src/rigidBodyDynamics/joints/Rs/Rs.C b/src/rigidBodyDynamics/joints/Rs/Rs.C
index e7b284ebedb3151be4986abcb91e56df72097e55..da4bd36183ee1a449d5c05a42a8627b59635eb04 100644
--- a/src/rigidBodyDynamics/joints/Rs/Rs.C
+++ b/src/rigidBodyDynamics/joints/Rs/Rs.C
@@ -84,9 +84,9 @@ Foam::RBD::joints::Rs::~Rs()
 
 // * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
 
-Foam::label Foam::RBD::joints::Rs::nw() const
+bool Foam::RBD::joints::Rs::unitQuaternion() const
 {
-    return 1;
+    return true;
 }
 
 
@@ -97,7 +97,7 @@ void Foam::RBD::joints::Rs::jcalc
     const scalarField& qDot
 ) const
 {
-    J.X.E() = operator()(q).R().T();
+    J.X.E() = joint::unitQuaternion(q).R().T();
     J.X.r() = Zero;
 
     J.S = Zero;
diff --git a/src/rigidBodyDynamics/joints/Rs/Rs.H b/src/rigidBodyDynamics/joints/Rs/Rs.H
index 9672168e8f488afc871f78a026a1239a907b38cc..f689869056c224c29652693912ca4f747ef11b11 100644
--- a/src/rigidBodyDynamics/joints/Rs/Rs.H
+++ b/src/rigidBodyDynamics/joints/Rs/Rs.H
@@ -88,9 +88,8 @@ public:
 
     // Member Functions
 
-        //- Return the number of additional state variable for this joint
-        //  For the quaternion this is 1 in addition to the 3 stored in q
-        virtual label nw() const;
+        //- Return true as this joint describes rotation using a quaternion
+        virtual bool unitQuaternion() const;
 
         //- Update the model state for this joint
         virtual void jcalc
diff --git a/src/rigidBodyDynamics/joints/composite/compositeJoint.C b/src/rigidBodyDynamics/joints/composite/compositeJoint.C
index 819d575962bccdd708da2f53d183f539bbe01ae3..a7d1fd887563ba401471323b05202352b9999547 100644
--- a/src/rigidBodyDynamics/joints/composite/compositeJoint.C
+++ b/src/rigidBodyDynamics/joints/composite/compositeJoint.C
@@ -86,12 +86,6 @@ Foam::RBD::joints::composite::~composite()
 
 // * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * * //
 
-Foam::label Foam::RBD::joints::composite::nw() const
-{
-    return last().nw();
-}
-
-
 void Foam::RBD::joints::composite::jcalc
 (
     joint::XSvc& J,
diff --git a/src/rigidBodyDynamics/joints/composite/compositeJoint.H b/src/rigidBodyDynamics/joints/composite/compositeJoint.H
index 80f3496fa7e67d9615f4f93105f04aaf8cfec8f8..5d12bf5025d70be05943b4fdaa16d0d7a6b6f7c3 100644
--- a/src/rigidBodyDynamics/joints/composite/compositeJoint.H
+++ b/src/rigidBodyDynamics/joints/composite/compositeJoint.H
@@ -101,9 +101,6 @@ public:
 
     // Member Functions
 
-        //- Return the number of additional state variables need by this joint
-        virtual label nw() const;
-
         //- Update the model state for this joint
         virtual void jcalc
         (
diff --git a/src/rigidBodyDynamics/joints/joint/joint.H b/src/rigidBodyDynamics/joints/joint/joint.H
index eb06419e938e8449760b2a58949b05d457b13bb8..0ea00b678bcd0699eaa16bd109caabcfd7ce40c2 100644
--- a/src/rigidBodyDynamics/joints/joint/joint.H
+++ b/src/rigidBodyDynamics/joints/joint/joint.H
@@ -93,9 +93,6 @@ protected:
     //- Index of this joints data in the rigidBodyModel state
     label qIndex_;
 
-    //- Index of this joints quaternion data in the rigidBodyModel state
-    label wIndex_;
-
 
 private:
 
@@ -113,12 +110,6 @@ private:
             return qIndex_;
         }
 
-        //- Allow the rigidBodyModel to set the wIndex for this joint
-        label& wIndex()
-        {
-            return wIndex_;
-        }
-
 
 public:
 
@@ -213,8 +204,8 @@ public:
         //- Return the number of degrees of freedom in this joint
         inline label nDoF() const;
 
-        //- Return the number of additional state variables need by this joint
-        inline virtual label nw() const;
+        //- Return true if this joint describes rotation using a quaternion
+        inline virtual bool unitQuaternion() const;
 
         //- Return the index of this joint in the model
         inline label index() const;
@@ -223,10 +214,6 @@ public:
         //  in the rigidBodyModel state fields
         inline label qIndex() const;
 
-        //- Return start index for the additional state variables for this joint
-        //  in the rigidBodyModel w state field
-        inline label wIndex() const;
-
         //- Return the joint motion sub-space
         inline const List<spatialVector>& S() const;
 
@@ -245,16 +232,16 @@ public:
 
     // Member Operators
 
-        //- Return the state quaternion for this joint
+        //- Return the unit quaternion for this joint
         //  if it uses a quaternion representation for rotation
-        inline quaternion operator()
+        inline quaternion unitQuaternion
         (
             const scalarField& q
         ) const;
 
-        //- Set the state quaternion for this joint
+        //- Set the unit quaternion for this joint
         //  if it uses a quaternion representation for rotation
-        inline void operator()
+        inline void unitQuaternion
         (
             const quaternion& quat,
             scalarField& q
diff --git a/src/rigidBodyDynamics/joints/joint/jointI.H b/src/rigidBodyDynamics/joints/joint/jointI.H
index 090adb18d285470cd873ced3512704e02f3ae204..eb6e36a2ca8408c1505eaad0a46f1a752cafa2bc 100644
--- a/src/rigidBodyDynamics/joints/joint/jointI.H
+++ b/src/rigidBodyDynamics/joints/joint/jointI.H
@@ -29,8 +29,7 @@ inline Foam::RBD::joint::joint(const label nDoF)
 :
     S_(nDoF),
     index_(0),
-    qIndex_(0),
-    wIndex_(0)
+    qIndex_(0)
 {}
 
 
@@ -41,9 +40,9 @@ inline Foam::label Foam::RBD::joint::nDoF() const
     return S_.size();
 }
 
-inline Foam::label Foam::RBD::joint::nw() const
+inline bool Foam::RBD::joint::unitQuaternion() const
 {
-    return 0;
+    return false;
 }
 
 inline Foam::label Foam::RBD::joint::index() const
@@ -56,11 +55,6 @@ inline Foam::label Foam::RBD::joint::qIndex() const
     return qIndex_;
 }
 
-inline Foam::label Foam::RBD::joint::wIndex() const
-{
-    return wIndex_;
-}
-
 inline const Foam::List<Foam::spatialVector>& Foam::RBD::joint::S() const
 {
     return S_;
@@ -69,12 +63,12 @@ inline const Foam::List<Foam::spatialVector>& Foam::RBD::joint::S() const
 
 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
 
-inline Foam::quaternion Foam::RBD::joint::operator()
+inline Foam::quaternion Foam::RBD::joint::unitQuaternion
 (
     const scalarField& q
 ) const
 {
-    if (nw() != 1)
+    if (!unitQuaternion())
     {
         FatalErrorInFunction
             << "Attempt to get the quaternion for a non-spherical joint"
@@ -85,13 +79,13 @@ inline Foam::quaternion Foam::RBD::joint::operator()
 }
 
 
-inline void Foam::RBD::joint::operator()
+inline void Foam::RBD::joint::unitQuaternion
 (
     const quaternion& quat,
     scalarField& q
 ) const
 {
-    if (nw() != 1)
+    if (!unitQuaternion())
     {
         FatalErrorInFunction
             << "Attempt to set quaternion for a non-spherical joint"
diff --git a/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.C b/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.C
index 9b2a32de71157eea4d6f15813e0ad269d1354bc9..aebfb762edcbea4e4b59df797da6c597ccee6b9a 100644
--- a/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.C
+++ b/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.C
@@ -52,7 +52,7 @@ void Foam::RBD::rigidBodyModel::initializeRootBody()
     XT_.append(spatialTransform());
 
     nDoF_ = 0;
-    nw_ = 0;
+    unitQuaternions_ = false;
 
     resizeState();
 }
@@ -204,11 +204,10 @@ Foam::label Foam::RBD::rigidBodyModel::join_
     joint& curJoint = joints_[joints_.size() - 1];
     curJoint.index() = joints_.size() - 1;
     curJoint.qIndex() = prevJoint.qIndex() + prevJoint.nDoF();
-    curJoint.wIndex() = prevJoint.wIndex() + prevJoint.nw();
 
     // Increment the degrees of freedom
     nDoF_ += curJoint.nDoF();
-    nw_ += curJoint.nw();
+    unitQuaternions_ = unitQuaternions_ || curJoint.unitQuaternion();
 
     resizeState();
 
diff --git a/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.H b/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.H
index 6357458f36d46208c1653e215860645c258ffe2b..8d6c604ca02eaf18a1ddc6bb51810a4e2bc5a2e7 100644
--- a/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.H
+++ b/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModel.H
@@ -123,11 +123,8 @@ protected:
         //  used to set the size of the of joint state fields q, qDot and qDdot.
         label nDoF_;
 
-        //- The number of additional state variable needed to describe the joint
-        //  states.  Typically this is the number of quaternion joints for which
-        //  the 'w' element is additional to the 3-degrees of freedom of the
-        //  joint.
-        label nw_;
+        //- True if any of the joints using quaternions
+        bool unitQuaternions_;
 
         //- Motion restraints
         PtrList<restraint> restraints_;
@@ -242,11 +239,8 @@ public:
         //  used to set the size of the of joint state fields q, qDot and qDdot.
         inline label nDoF() const;
 
-        //- Return the number of additional state variable needed to describe
-        //  the joint states.  Typically this is the number of quaternion
-        //  joints for which the 'w' element is additional to the 3-degrees of
-        //  freedom of the joint.
-        inline label nw() const;
+        //- Return true if any of the joints using quaternions
+        inline bool unitQuaternions() const;
 
         //- Return the acceleration due to gravity
         inline const vector& g() const;
diff --git a/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModelI.H b/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModelI.H
index 9cfab5e8cd959702b6ee072c130f5729c3beaa88..b2fc636ff5e090007db1979e11f8a837ecaa8878 100644
--- a/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModelI.H
+++ b/src/rigidBodyDynamics/rigidBodyModel/rigidBodyModelI.H
@@ -58,9 +58,9 @@ inline Foam::label Foam::RBD::rigidBodyModel::nDoF() const
 }
 
 
-inline Foam::label Foam::RBD::rigidBodyModel::nw() const
+inline bool Foam::RBD::rigidBodyModel::unitQuaternions() const
 {
-    return nw_;
+    return unitQuaternions_;
 }
 
 
diff --git a/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolver.C b/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolver.C
index 9156db842cded8b6a3b4edfbc27ab1864f8775db..d161e6f68110572ded89a812b5e2f38a024ce404 100644
--- a/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolver.C
+++ b/src/rigidBodyDynamics/rigidBodySolvers/rigidBodySolver/rigidBodySolver.C
@@ -56,13 +56,13 @@ Foam::RBD::rigidBodySolver::~rigidBodySolver()
 
 void Foam::RBD::rigidBodySolver::correctQuaternionJoints()
 {
-    if (model_.nw())
+    if (model_.unitQuaternions())
     {
         forAll (model_.joints(), i)
         {
             const label qi = model_.joints()[i].qIndex();
 
-            if (model_.joints()[i].nw() == 1)
+            if (model_.joints()[i].unitQuaternion())
             {
                 // Calculate the change in the normalized quaternion axis
                 vector dv((q().block<vector>(qi) - q0().block<vector>(qi)));
@@ -76,11 +76,11 @@ void Foam::RBD::rigidBodySolver::correctQuaternionJoints()
                     // Transform the previous time quaternion
                     quaternion quat
                     (
-                        normalize(model_.joints()[i](q0())*dQuat)
+                        normalize(model_.joints()[i].unitQuaternion(q0())*dQuat)
                     );
 
                     // Update the joint state
-                    model_.joints()[i](quat, q());
+                    model_.joints()[i].unitQuaternion(quat, q());
                 }
             }
         }