diff --git a/configure.in b/configure.in
index 9237b3adc0e9d2516611c15acf4c89322db2b31e..cc373395ef8197bab79419aff1ab07a43d97e487 100644
--- a/configure.in
+++ b/configure.in
@@ -1,10 +1,10 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT(JSBSim.cpp, 1.0.rc3-advtrim-5, jon@jsbsim.org)
+AC_INIT(JSBSim.cpp, 1.0.rc3-advtrim-6, jon@jsbsim.org)
 
 dnl set the $host variable based on local machine/os
 AC_CANONICAL_TARGET
 
-AM_INIT_AUTOMAKE(jsbsim, 1.0.rc3-advtrim-5)
+AM_INIT_AUTOMAKE(jsbsim, 1.0.rc3-advtrim-6)
 AC_CONFIG_MACRO_DIR([m4])
 
 # Before making a release, the LT_VERSION string should be modified.
diff --git a/src/math/FGStateSpace.h b/src/math/FGStateSpace.h
index ce57c458ed0f9da6a1a1c89e9d3f4d93d0c99e51..2a5308e20862f808835332bd8edcf4e3c2502f98 100644
--- a/src/math/FGStateSpace.h
+++ b/src/math/FGStateSpace.h
@@ -641,7 +641,7 @@ public:
         }
         double getDeriv() const
         {
-            return m_fdm->GetPropagate()->GetVel(2)/m_fdm->GetPropagate()->GetRadius();
+            return m_fdm->GetPropagate()->GetVel(2)/(cos(m_fdm->GetPropagate()->GetLatitude())*m_fdm->GetPropagate()->GetRadius());
         }
     };
 
@@ -659,9 +659,157 @@ public:
         }
         double getDeriv() const
         {
-            return m_fdm->GetPropagate()->GetVel(1)/m_fdm->GetPropagate()->GetRadius();
+            return m_fdm->GetPropagate()->GetVel(1)/(m_fdm->GetPropagate()->GetRadius());
         }
     };
+
+	class Pi : public Component
+    {
+    public:
+        Pi() : Component("P inertial","rad/s") {};
+        double get() const
+        {
+            return m_fdm->GetPropagate()->GetPQRi(1);
+        }
+        void set(double val)
+        {
+			//Set PQR from PQRi
+			//VState.vPQR = VState.vPQRi - Ti2b * vOmegaEarth;
+            m_fdm->GetIC()->SetQRadpsIC(val + \
+					(m_fdm->GetPropagate()->GetPQR(1) - m_fdm->GetPropagate()->GetPQRi(1)));
+        }
+        double getDeriv() const
+        {
+            return m_fdm->GetPropagate()->GetPQRdot(1);
+        }
+    };
+
+	class Qi : public Component
+    {
+    public:
+        Qi() : Component("Q inertial","rad/s") {};
+        double get() const
+        {
+            return m_fdm->GetPropagate()->GetPQRi(2);
+        }
+        void set(double val)
+        {
+			//Set PQR from PQRi
+			//VState.vPQR = VState.vPQRi - Ti2b * vOmegaEarth;
+            m_fdm->GetIC()->SetQRadpsIC(val + \
+					(m_fdm->GetPropagate()->GetPQR(2) - m_fdm->GetPropagate()->GetPQRi(2)));
+        }
+        double getDeriv() const
+        {
+            return m_fdm->GetPropagate()->GetPQRdot(2);
+        }
+    };
+
+	class Ri : public Component
+    {
+    public:
+        Ri() : Component("R inertial","rad/s") {};
+        double get() const
+        {
+            return m_fdm->GetPropagate()->GetPQRi(3);
+        }
+        void set(double val)
+        {
+			//Set PQR from PQRi
+			//VState.vPQR = VState.vPQRi - Ti2b * vOmegaEarth;
+            m_fdm->GetIC()->SetQRadpsIC(val + \
+					(m_fdm->GetPropagate()->GetPQR(3) - m_fdm->GetPropagate()->GetPQRi(3)));
+        }
+        double getDeriv() const
+        {
+            return m_fdm->GetPropagate()->GetPQRdot(3);
+        }
+    };
+
+	class Vn : public Component
+    {
+    public:
+        Vn() : Component("Vel north","feet/s") {};
+        double get() const
+        {
+            return m_fdm->GetPropagate()->GetVel(1);
+        }
+        void set(double val)
+        {
+            m_fdm->GetIC()->SetVNorthFpsIC(val);
+        }
+        double getDeriv() const
+        {
+			//get NED accel from body accel
+            return (m_fdm->GetPropagate()->GetTb2l()*m_fdm->GetPropagate()->GetUVWdot())(1);
+        }
+    };
+
+	class Ve : public Component
+    {
+    public:
+        Ve() : Component("Vel east","feet/s") {};
+        double get() const
+        {
+            return m_fdm->GetPropagate()->GetVel(2);
+        }
+        void set(double val)
+        {
+            m_fdm->GetIC()->SetVEastFpsIC(val);
+        }
+        double getDeriv() const
+        {
+			//get NED accel from body accel
+            return (m_fdm->GetPropagate()->GetTb2l()*m_fdm->GetPropagate()->GetUVWdot())(2);
+		}
+    };
+
+	class Vd : public Component
+    {
+    public:
+        Vd() : Component("Vel down","feet/s") {};
+        double get() const
+        {
+            return m_fdm->GetPropagate()->GetVel(3);
+        }
+        void set(double val)
+        {
+            m_fdm->GetIC()->SetVDownFpsIC(val);
+        }
+        double getDeriv() const
+        {
+			//get NED accel from body accel
+            return (m_fdm->GetPropagate()->GetTb2l()*m_fdm->GetPropagate()->GetUVWdot())(3);
+        }
+    };
+
+	class COG : public Component
+    {
+    public:
+        COG() : Component("Course Over Ground","rad") {};
+        double get() const
+        {
+			//cog = atan2(Ve,Vn)
+            return atan2(m_fdm->GetPropagate()->GetVel(2),m_fdm->GetPropagate()->GetVel(1));
+        }
+        void set(double val)
+        {
+			//set Vn and Ve according to vGround and COG
+			m_fdm->GetIC()->SetVNorthFpsIC(m_fdm->GetAuxiliary()->GetVground()*cos(val));
+			m_fdm->GetIC()->SetVEastFpsIC(m_fdm->GetAuxiliary()->GetVground()*sin(val));
+        }
+        double getDeriv() const
+        {
+			double Vn = m_fdm->GetPropagate()->GetVel(1);
+			double Vndot = (m_fdm->GetPropagate()->GetTb2l()*m_fdm->GetPropagate()->GetUVWdot())(1);
+			double Ve = m_fdm->GetPropagate()->GetVel(2);
+			double Vedot = (m_fdm->GetPropagate()->GetTb2l()*m_fdm->GetPropagate()->GetUVWdot())(2); 
+
+			//dCOG/dt = dCOG/dVe*dVe/dt + dCOG/dVn*dVn/dt
+			return Vn/(Vn*Vn+Ve*Ve)*Vedot - Ve/(Vn*Vn+Ve*Ve)*Vndot;
+        }
+    };
+
 };
 
 // stream output