diff --git a/src/FDM/JSBSim.cxx b/src/FDM/JSBSim.cxx
index b952113c1..d37caa6e7 100644
--- a/src/FDM/JSBSim.cxx
+++ b/src/FDM/JSBSim.cxx
@@ -263,7 +263,7 @@ bool FGJSBsim::update( int multiloop ) {
         fdmex->Run();
     }
 
-    struct FGJSBBase::Message* msg;
+    FGJSBBase::Message* msg;
     while (fdmex->ReadMessage()) {
       msg = fdmex->ProcessMessage();
       switch (msg->type) {
diff --git a/src/FDM/JSBSim/FGAerodynamics.cpp b/src/FDM/JSBSim/FGAerodynamics.cpp
index 523c73fc2..10e0b18ba 100644
--- a/src/FDM/JSBSim/FGAerodynamics.cpp
+++ b/src/FDM/JSBSim/FGAerodynamics.cpp
@@ -48,12 +48,7 @@ CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 
-FGAerodynamics::FGAerodynamics(FGFDMExec* FDMExec) : FGModel(FDMExec),
-    vFs(3),
-    vForces(3),
-    vMoments(3),
-    vLastFs(3),
-    vDXYZcg(3)
+FGAerodynamics::FGAerodynamics(FGFDMExec* FDMExec) : FGModel(FDMExec)
 {
   Name = "FGAerodynamics";
 
diff --git a/src/FDM/JSBSim/FGAircraft.cpp b/src/FDM/JSBSim/FGAircraft.cpp
index 214dd8446..52c8ef5ab 100644
--- a/src/FDM/JSBSim/FGAircraft.cpp
+++ b/src/FDM/JSBSim/FGAircraft.cpp
@@ -98,15 +98,7 @@ static const char *IdHdr = ID_AIRCRAFT;
 CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-FGAircraft::FGAircraft(FGFDMExec* fdmex) : FGModel(fdmex),
-    vMoments(3),
-    vForces(3),
-    vXYZrp(3),
-    vXYZep(3),
-    vDXYZcg(3),
-    vBodyAccel(3),
-    vNcg(3),
-    vNwcg(3)
+FGAircraft::FGAircraft(FGFDMExec* fdmex) : FGModel(fdmex)
 {
   Name = "FGAircraft";
   alphaclmin = alphaclmax = 0;
@@ -237,8 +229,9 @@ bool FGAircraft::ReadMetrics(FGConfigFile* AC_cfg)
 {
   string token = "";
   string parameter;
-  double EW, bixx, biyy, bizz, bixz, biyz;
-  FGColumnVector3 vbaseXYZcg(3);
+  double EW, bixx, biyy, bizz, bixy, bixz;
+  double pmWt, pmX, pmY, pmZ;
+  FGColumnVector3 vbaseXYZcg;
 
   AC_cfg->GetNextConfigLine();
 
@@ -280,14 +273,14 @@ bool FGAircraft::ReadMetrics(FGConfigFile* AC_cfg)
       *AC_cfg >> bizz;
       if (debug_lvl > 0) cout << "    baseIzz: " << bizz << endl;
       MassBalance->SetBaseIzz(bizz);
+    } else if (parameter == "AC_IXY") {
+      *AC_cfg >> bixy;
+      if (debug_lvl > 0) cout << "    baseIxy: " << bixy  << endl;
+      MassBalance->SetBaseIxy(bixy);
     } else if (parameter == "AC_IXZ") {
       *AC_cfg >> bixz;
       if (debug_lvl > 0) cout << "    baseIxz: " << bixz  << endl;
       MassBalance->SetBaseIxz(bixz);
-    } else if (parameter == "AC_IYZ") {
-      *AC_cfg >> biyz;
-      if (debug_lvl > 0) cout << "    baseIyz: " << biyz  << endl;
-      MassBalance->SetBaseIyz(biyz);
     } else if (parameter == "AC_EMPTYWT") {
       *AC_cfg >> EW;
       MassBalance->SetEmptyWeight(EW);
@@ -307,6 +300,11 @@ bool FGAircraft::ReadMetrics(FGConfigFile* AC_cfg)
       if (debug_lvl > 0) cout << "    Maximum Alpha: " << alphaclmax
              << "    Minimum Alpha: " << alphaclmin
              << endl;
+    } else if (parameter == "AC_POINTMASS") {
+      *AC_cfg >> pmWt >> pmX >> pmY >> pmZ;
+      if (debug_lvl > 0) cout << "    Point Mass Object: " << pmWt << " lbs. at "
+                         << "X, Y, Z (in.): " << pmX << "  " << pmY << "  " << pmZ
+                         << endl;
     }
   }
   
diff --git a/src/FDM/JSBSim/FGAtmosphere.cpp b/src/FDM/JSBSim/FGAtmosphere.cpp
index 9d677b55e..318516a5f 100644
--- a/src/FDM/JSBSim/FGAtmosphere.cpp
+++ b/src/FDM/JSBSim/FGAtmosphere.cpp
@@ -68,15 +68,7 @@ CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 
-FGAtmosphere::FGAtmosphere(FGFDMExec* fdmex) : FGModel(fdmex),
-                                               vDirectiondAccelDt(3),
-                                               vDirectionAccel(3),
-                                               vDirection(3),
-                                               vTurbulence(3),
-                                               vTurbulenceGrad(3),
-                                               vBodyTurbGrad(3),
-                                               vTurbPQR(3),
-                                               vWindNED(3)
+FGAtmosphere::FGAtmosphere(FGFDMExec* fdmex) : FGModel(fdmex)
 {
   Name = "FGAtmosphere";
   lastIndex=0;
diff --git a/src/FDM/JSBSim/FGAuxiliary.cpp b/src/FDM/JSBSim/FGAuxiliary.cpp
index 46f157545..65c9fd755 100644
--- a/src/FDM/JSBSim/FGAuxiliary.cpp
+++ b/src/FDM/JSBSim/FGAuxiliary.cpp
@@ -63,9 +63,7 @@ CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 
-FGAuxiliary::FGAuxiliary(FGFDMExec* fdmex) : FGModel(fdmex),
-  vPilotAccel(3),
-  vToEyePt(3)
+FGAuxiliary::FGAuxiliary(FGFDMExec* fdmex) : FGModel(fdmex)
 {
   Name = "FGAuxiliary";
   vcas = veas = mach = qbar = pt = 0;
diff --git a/src/FDM/JSBSim/FGColumnVector3.cpp b/src/FDM/JSBSim/FGColumnVector3.cpp
index 0c27fa4d0..b974bea86 100644
--- a/src/FDM/JSBSim/FGColumnVector3.cpp
+++ b/src/FDM/JSBSim/FGColumnVector3.cpp
@@ -1,9 +1,9 @@
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-Module: FGMatrix33.cpp
+Module: FGColumnVector3.cpp
 Author: Originally by Tony Peden [formatted here (and broken??) by JSB]
 Date started: 1998
-Purpose: FGMatrix33 class
+Purpose: FGColumnVector3 class
 Called by: Various
 
 FUNCTIONAL DESCRIPTION
@@ -19,8 +19,6 @@ INCLUDES
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 #include "FGColumnVector3.h"
-#include "FGMatrix33.h"
-
 
 static const char *IdSrc = "$Id$";
 static const char *IdHdr = ID_COLUMNVECTOR3;
@@ -39,10 +37,10 @@ FGColumnVector3::FGColumnVector3(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-FGColumnVector3::FGColumnVector3(int m)
+FGColumnVector3::FGColumnVector3(double X, double Y, double Z)
 {
   rowCtr = 1;
-  data[0]=0; data[1]=0; data[2]=0; data[3]=0;
+  data[0] = 0; data[eX] = X; data[eY] = Y; data[eZ] = Z;
 
   if (debug_lvl & 2) cout << "Instantiated: FGColumnVector3" << endl;
 }
@@ -81,29 +79,6 @@ FGColumnVector3 FGColumnVector3::operator=(const FGColumnVector3& b)
   return *this;
 }
 
-
-/* //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-double& FGColumnVector3::operator()(int m) const
-{
-  return data[m];
-}
- */
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-/* FGColumnVector3 operator*(const FGMatrix33& Mat, FGColumnVector3& Col)
-{
-  FGColumnVector3 Product;
-
-  Product(1) = Col(1)*Mat(1,1) + Col(2)*Mat(1,2) + Col(3)*Mat(1,3);
-  Product(2) = Col(1)*Mat(2,1) + Col(2)*Mat(2,2) + Col(3)*Mat(2,3);
-  Product(3) = Col(1)*Mat(3,1) + Col(2)*Mat(3,2) + Col(3)*Mat(3,3);
-
-  return Product;
-}
- */
-
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 FGColumnVector3 FGColumnVector3::operator+(const FGColumnVector3& C)
@@ -292,13 +267,6 @@ FGColumnVector3 FGColumnVector3::multElementWise(const FGColumnVector3& V)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGColumnVector3::Debug(void)
-{
-    //TODO: Add your source code here
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
 ostream& operator<<(ostream& os, const FGColumnVector3& col)
 {
   os << col(1) << " , " << col(2) << " , " << col(3);
@@ -314,3 +282,11 @@ FGColumnVector3& FGColumnVector3::operator<<(const double ff)
       rowCtr = 1;
   return *this;
 }
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+void FGColumnVector3::Debug(void)
+{
+    //TODO: Add your source code here
+}
+
diff --git a/src/FDM/JSBSim/FGColumnVector3.h b/src/FDM/JSBSim/FGColumnVector3.h
index 6c61b3ec6..20572e427 100644
--- a/src/FDM/JSBSim/FGColumnVector3.h
+++ b/src/FDM/JSBSim/FGColumnVector3.h
@@ -1,13 +1,11 @@
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-Header: FGMatrix33.h
+Header: FGColumnVector3.h
 Author: Originally by Tony Peden [formatted and adapted here by Jon Berndt]
 Date started: Unknown
 
 HISTORY
 --------------------------------------------------------------------------------
-??/??/??   TP   Created
-03/16/2000 JSB  Added exception throwing
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 SENTRY
@@ -54,7 +52,6 @@ INCLUDES
    using std::string;
 #endif
 
-#include "FGMatrix33.h"
 #include "FGJSBBase.h"
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -67,8 +64,6 @@ DEFINITIONS
 FORWARD DECLARATIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-class FGMatrix33;
-
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 DECLARATION: FGColumnVector3
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
@@ -77,7 +72,7 @@ class FGColumnVector3 : public FGJSBBase
 {
 public:
   FGColumnVector3(void);
-  FGColumnVector3(int m);
+  FGColumnVector3(double X, double Y, double Z);
   FGColumnVector3(const FGColumnVector3& b);
   ~FGColumnVector3(void);
   
@@ -104,7 +99,6 @@ public:
   FGColumnVector3 Normalize(void);
 
   friend FGColumnVector3 operator*(const double scalar, const FGColumnVector3& A);
-  //friend FGColumnVector3 operator*(const FGMatrix33& M, FGColumnVector3& V);
 
   friend ostream& operator<<(ostream& os, const FGColumnVector3& col);
 
diff --git a/src/FDM/JSBSim/FGColumnVector4.cpp b/src/FDM/JSBSim/FGColumnVector4.cpp
index 1a1b6f26c..6f76cdc24 100644
--- a/src/FDM/JSBSim/FGColumnVector4.cpp
+++ b/src/FDM/JSBSim/FGColumnVector4.cpp
@@ -30,17 +30,18 @@ CLASS IMPLEMENTATION
 FGColumnVector4::FGColumnVector4(void)
 {
   rowCtr = 1;
-  //cout << "Allocated: " <<  data << endl;
+  data[1]=0;data[2]=0;data[3]=0;data[4]=0;
+
   if (debug_lvl & 2) cout << "Instantiated: FGColumnVector4" << endl;
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-FGColumnVector4::FGColumnVector4(int m)
+FGColumnVector4::FGColumnVector4(double A, double B, double C, double D)
 {
   rowCtr = 1;
   data[1]=0;data[2]=0;data[3]=0;data[4]=0;
-  //cout << "Allocated: " <<  data << endl;
+
   if (debug_lvl & 2) cout << "Instantiated: FGColumnVector4" << endl;
 }
 
@@ -48,7 +49,6 @@ FGColumnVector4::FGColumnVector4(int m)
 
 FGColumnVector4::~FGColumnVector4(void)
 {
-  //cout << "Freed: " << data << endl;
   if (debug_lvl & 2) cout << "Destroyed:    FGColumnVector4" << endl;
 }
 
@@ -240,34 +240,6 @@ FGColumnVector4 FGColumnVector4::Normalize(void)
   return *this;
 }
 
-/* //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGColumnVector4 FGColumnVector4::operator*(const FGColumnVector4& V)
-{
-  FGColumnVector4 Product;
-  
-  Product(1) = data[2] * V(3) - data[3] * V(2);
-  Product(2) = data[3] * V(1) - data[1] * V(3);
-  Product(3) = data[1] * V(2) - data[2] * V(1);
-
-  return Product;
-} */
-
-
-/* //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGColumnVector4::operator*=(const FGColumnVector4& V)
-{
-  double a,b,c;
-  a = data[1]; b=data[2]; c=data[3];
-  
-  data[1] = b * V(3) - c * V(2);
-  data[2] = c * V(1) - a * V(3);
-  data[3] = a * V(2) - b * V(1);
-
-}
- */
-
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 FGColumnVector4 FGColumnVector4::multElementWise(const FGColumnVector4& V)
@@ -284,13 +256,6 @@ FGColumnVector4 FGColumnVector4::multElementWise(const FGColumnVector4& V)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGColumnVector4::Debug(void)
-{
-    //TODO: Add your source code here
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
 ostream& operator<<(ostream& os, FGColumnVector4& col)
 {
   os << col(1) << " , " << col(2) << " , " << col(3) << " , " << col(4);
@@ -302,8 +267,14 @@ ostream& operator<<(ostream& os, FGColumnVector4& col)
 FGColumnVector4& FGColumnVector4::operator<<(const double ff)
 {
   data[rowCtr] = ff;
-  if (++rowCtr > 4 )
-      rowCtr = 1;
+  if (++rowCtr > 4) rowCtr = 1;
   return *this;
 }
 
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+void FGColumnVector4::Debug(void)
+{
+    //TODO: Add your source code here
+}
+
diff --git a/src/FDM/JSBSim/FGColumnVector4.h b/src/FDM/JSBSim/FGColumnVector4.h
index 1a47539d1..db311dfcb 100644
--- a/src/FDM/JSBSim/FGColumnVector4.h
+++ b/src/FDM/JSBSim/FGColumnVector4.h
@@ -1,13 +1,11 @@
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-Header: FGMatrix33.h
+Header: FGColumnVector4.h
 Author: Originally by Tony Peden [formatted and adapted here by Jon Berndt]
 Date started: Unknown
 
 HISTORY
 --------------------------------------------------------------------------------
-??/??/??   TP   Created
-03/16/2000 JSB  Added exception throwing
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 SENTRY
@@ -74,21 +72,19 @@ class FGColumnVector4 : public FGJSBBase
 {
 public:
   FGColumnVector4(void);
-  FGColumnVector4(int m);
+  FGColumnVector4(double A, double B, double C, double D);
   FGColumnVector4(const FGColumnVector4& b);
   ~FGColumnVector4(void);
   
   FGColumnVector4 operator=(const FGColumnVector4& b);
   
   FGColumnVector4 operator*(const double scalar);
-  //FGColumnVector4 operator*(const FGColumnVector4& V);   // Cross product operator
   FGColumnVector4 operator/(const double scalar);
   FGColumnVector4 operator+(const FGColumnVector4& B); // must not return reference
   FGColumnVector4 operator-(const FGColumnVector4& B);
   
   void operator-=(const FGColumnVector4 &B);
   void operator+=(const FGColumnVector4 &B);
-  //void operator*=(const FGColumnVector4 &B);
   void operator*=(const double scalar);
   void operator/=(const double scalar);
   
@@ -97,8 +93,8 @@ public:
   
   FGColumnVector4& operator<<(const double ff);
 
-  inline void InitMatrix(void) { data[1]=0; data[2]=0; data[3]=0; }
-  inline void InitMatrix(double ff) { data[1]=ff; data[2]=ff; data[3]=ff; }
+  inline void InitMatrix(void) { data[1]=0; data[2]=0; data[3]=0; data[4]=0; }
+  inline void InitMatrix(double ff) { data[1]=ff; data[2]=ff; data[3]=ff; data[4]=ff;}
 
   double Magnitude(void);
   FGColumnVector4 Normalize(void);
@@ -118,3 +114,4 @@ private:
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 #endif
+
diff --git a/src/FDM/JSBSim/FGFDMExec.cpp b/src/FDM/JSBSim/FGFDMExec.cpp
index a2fdd683e..5666b2ef0 100644
--- a/src/FDM/JSBSim/FGFDMExec.cpp
+++ b/src/FDM/JSBSim/FGFDMExec.cpp
@@ -583,8 +583,6 @@ bool FGFDMExec::LoadScript(string script)
     cerr << "Aircraft file " << aircraft << " was not found" << endl;
 	  exit(-1);
   }
-  if ( ! State->Reset("aircraft", aircraft, initialize))
-                 State->Initialize(2000,0,0,0,0,0,0.5,0.5,40000,0,0,0);
 
   return true;
 }
@@ -640,6 +638,7 @@ void FGFDMExec::RunScript(void)
             iC->newValue[i] = iC->OriginalValue[i] + iC->SetValue[i];
             break;
           case FG_BOOL:
+            iC->newValue[i] = iC->SetValue[i];
             break;
           default:
             cerr << "Invalid Type specified" << endl;
@@ -651,7 +650,7 @@ void FGFDMExec::RunScript(void)
 
         switch (iC->Action[i]) {
         case FG_RAMP:
-          newSetValue = (currentTime - iC->StartTime[i])/(iC->TC[i])
+        newSetValue = (currentTime - iC->StartTime[i])/(iC->TC[i])
                       * (iC->newValue[i] - iC->OriginalValue[i]) + iC->OriginalValue[i];
           if (newSetValue > iC->newValue[i]) newSetValue = iC->newValue[i];
           break;
@@ -667,9 +666,6 @@ void FGFDMExec::RunScript(void)
           break;
         }
         State->SetParameter(iC->SetParam[i], newSetValue);
-        if ((unsigned long int)Propulsion->GetTank(0) == 0) {
-          cout << "Param # getting set: " << iC->SetParam[i] << " Value: " << newSetValue << endl;
-        }
       }
     }
     iC++;
diff --git a/src/FDM/JSBSim/FGFDMExec.h b/src/FDM/JSBSim/FGFDMExec.h
index 3125e7936..9fde7b6a9 100644
--- a/src/FDM/JSBSim/FGFDMExec.h
+++ b/src/FDM/JSBSim/FGFDMExec.h
@@ -294,18 +294,18 @@ private:
   struct condition {
     vector <eParam>  TestParam;
     vector <eParam>  SetParam;
-    vector <double>   TestValue;
-    vector <double>   SetValue;
+    vector <double>  TestValue;
+    vector <double>  SetValue;
     vector <string>  Comparison;
-    vector <double>   TC;
+    vector <double>  TC;
     vector <bool>    Persistent;
     vector <eAction> Action;
     vector <eType>   Type;
     vector <bool>    Triggered;
-    vector <double>   newValue;
-    vector <double>   OriginalValue;
-    vector <double>   StartTime;
-    vector <double>   EndTime;
+    vector <double>  newValue;
+    vector <double>  OriginalValue;
+    vector <double>  StartTime;
+    vector <double>  EndTime;
 
     condition() {
     }
diff --git a/src/FDM/JSBSim/FGForce.cpp b/src/FDM/JSBSim/FGForce.cpp
index b3352851b..a1bd2172f 100644
--- a/src/FDM/JSBSim/FGForce.cpp
+++ b/src/FDM/JSBSim/FGForce.cpp
@@ -54,18 +54,8 @@ static const char *IdHdr = ID_FORCE;
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 FGForce::FGForce(FGFDMExec *FDMExec) :
-    ttype(tNone),
-    fdmex(FDMExec),
-    vFn(3),
-    vMn(3),
-    vH(3),
-    vFb(3),
-    vM(3),
-    vXYZn(3),
-    vDXYZ(3),
-    vSense(3),
-    mT(3,3)
-    
+                 ttype(tNone),
+                 fdmex(FDMExec)
 {
   mT(1,1) = 1; //identity matrix
   mT(2,2) = 1;
@@ -83,15 +73,17 @@ FGForce::~FGForce()
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-FGColumnVector3& FGForce::GetBodyForces(void) {
-
+FGColumnVector3& FGForce::GetBodyForces(void)
+{
   vFb = Transform()*(vFn.multElementWise(vSense));
 
-  //find the distance from this vector's location to the cg
-  //needs to be done like this to convert from structural to body coords
-  vDXYZ(1) = -(vXYZn(1) - fdmex->GetMassBalance()->GetXYZcg(1))*inchtoft;
-  vDXYZ(2) =  (vXYZn(2) - fdmex->GetMassBalance()->GetXYZcg(2))*inchtoft;  //cg and rp values are in inches
-  vDXYZ(3) = -(vXYZn(3) - fdmex->GetMassBalance()->GetXYZcg(3))*inchtoft;
+  // Find the distance from this vector's acting location to the cg; this
+  // needs to be done like this to convert from structural to body coords.
+  // CG and RP values are in inches
+
+  vDXYZ(eX) = -(vActingXYZn(eX) - fdmex->GetMassBalance()->GetXYZcg(eX))*inchtoft;
+  vDXYZ(eY) =  (vActingXYZn(eY) - fdmex->GetMassBalance()->GetXYZcg(eY))*inchtoft;
+  vDXYZ(eZ) = -(vActingXYZn(eZ) - fdmex->GetMassBalance()->GetXYZcg(eZ))*inchtoft;
 
   vM = vMn + vDXYZ*vFb;
 
@@ -100,7 +92,8 @@ FGColumnVector3& FGForce::GetBodyForces(void) {
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-FGMatrix33 FGForce::Transform(void) {
+FGMatrix33 FGForce::Transform(void)
+{
   switch(ttype) {
   case tWindBody:
     return fdmex->GetState()->GetTs2b();
@@ -118,9 +111,9 @@ FGMatrix33 FGForce::Transform(void) {
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGForce::SetAnglesToBody(double broll, double bpitch, double byaw) {
-
-  if(ttype == tCustom) {
+void FGForce::SetAnglesToBody(double broll, double bpitch, double byaw)
+{
+  if (ttype == tCustom) {
     double cp,sp,cr,sr,cy,sy;
 
     cp=cos(bpitch); sp=sin(bpitch);
@@ -139,7 +132,6 @@ void FGForce::SetAnglesToBody(double broll, double bpitch, double byaw) {
     mT(3,2)=cr*sp*sy-sr*cy;
     mT(3,3)=cr*cp;
   }
-
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/src/FDM/JSBSim/FGForce.h b/src/FDM/JSBSim/FGForce.h
index 661434480..595667574 100644
--- a/src/FDM/JSBSim/FGForce.h
+++ b/src/FDM/JSBSim/FGForce.h
@@ -244,27 +244,49 @@ public:
   inline FGColumnVector3& GetNativeForces(void) { return vFn; }
   inline FGColumnVector3& GetNativeMoments(void) { return vMn; }
 
-
   FGColumnVector3& GetBodyForces(void);
 
   inline FGColumnVector3& GetMoments(void) { return vM; }
 
-  //point of application, JSBsim structural coords
-  //(inches, x +back, y +right, z +up)
+  // Normal point of application, JSBsim structural coords
+  // (inches, x +back, y +right, z +up)
   inline void SetLocation(double x, double y, double z) {
-    vXYZn(1) = x;
-    vXYZn(2) = y;
-    vXYZn(3) = z;
+    vXYZn(eX) = x;
+    vXYZn(eY) = y;
+    vXYZn(eZ) = z;
+    SetActingLocation(x, y, z);
   }
-  inline void SetLocationX(double x) {vXYZn(1) = x;}
-  inline void SetLocationY(double y) {vXYZn(2) = y;}
-  inline void SetLocationZ(double z) {vXYZn(3) = z;}
-  inline void SetLocation(FGColumnVector3 vv) { vXYZn = vv; }
   
-  inline double GetLocationX( void ) { return vXYZn(1);}
-  inline double GetLocationY( void ) { return vXYZn(2);}
-  inline double GetLocationZ( void ) { return vXYZn(3);}
+  /** Acting point of application.
+      JSBsim structural coords used (inches, x +back, y +right, z +up).
+      This function sets the point at which the force acts - this may
+      not be the same as where the object resides. One area where this
+      is true is P-Factor modeling.
+      @param x acting location of force
+      @param y acting location of force
+      @param z acting location of force    */
+  inline void SetActingLocation(double x, double y, double z) {
+    vActingXYZn(eX) = x;
+    vActingXYZn(eY) = y;
+    vActingXYZn(eZ) = z;
+  }
+  inline void SetLocationX(double x) {vXYZn(eX) = x; vActingXYZn(eX) = x;}
+  inline void SetLocationY(double y) {vXYZn(eY) = y; vActingXYZn(eY) = y;}
+  inline void SetLocationZ(double z) {vXYZn(eZ) = z; vActingXYZn(eZ) = z;}
+  inline double SetActingLocationX(double x) {vActingXYZn(eX) = x; return x;}
+  inline double SetActingLocationY(double y) {vActingXYZn(eY) = y; return y;}
+  inline double SetActingLocationZ(double z) {vActingXYZn(eZ) = z; return z;}
+  inline void SetLocation(FGColumnVector3 vv) { vXYZn = vv; SetActingLocation(vv);}
+  inline void SetActingLocation(FGColumnVector3 vv) { vActingXYZn = vv; }
+  
+  inline double GetLocationX( void ) { return vXYZn(eX);}
+  inline double GetLocationY( void ) { return vXYZn(eY);}
+  inline double GetLocationZ( void ) { return vXYZn(eZ);}
+  inline double GetActingLocationX( void ) { return vActingXYZn(eX);}
+  inline double GetActingLocationY( void ) { return vActingXYZn(eY);}
+  inline double GetActingLocationZ( void ) { return vActingXYZn(eZ);}
   FGColumnVector3& GetLocation(void) { return vXYZn; }
+  FGColumnVector3& GetActingLocation(void) { return vActingXYZn; }
 
   //these angles are relative to body axes, not earth!!!!!
   //I'm using these because pitch, roll, and yaw are easy to visualize,
@@ -274,9 +296,11 @@ public:
   //They are in radians.
 
   void SetAnglesToBody(double broll, double bpitch, double byaw);
-  inline void  SetAnglesToBody(FGColumnVector3 vv) { SetAnglesToBody(vv(1), vv(2), vv(3));}
+  inline void  SetAnglesToBody(FGColumnVector3 vv) {
+    SetAnglesToBody(vv(eRoll), vv(ePitch), vv(eYaw));
+  }
 
-  inline void SetSense(double x, double y, double z) { vSense(1)=x, vSense(2)=y, vSense(3)=z; }
+  inline void SetSense(double x, double y, double z) { vSense(eX)=x, vSense(eY)=y, vSense(eZ)=z; }
   inline void SetSense(FGColumnVector3 vv) { vSense=vv; }
 
   inline FGColumnVector3& GetSense(void) { return vSense; }
@@ -298,6 +322,7 @@ private:
   FGColumnVector3 vFb;
   FGColumnVector3 vM;
   FGColumnVector3 vXYZn;
+  FGColumnVector3 vActingXYZn;
   FGColumnVector3 vDXYZ;
   FGColumnVector3 vSense;
 
diff --git a/src/FDM/JSBSim/FGGroundReactions.cpp b/src/FDM/JSBSim/FGGroundReactions.cpp
index 794225aa9..9156f28e4 100644
--- a/src/FDM/JSBSim/FGGroundReactions.cpp
+++ b/src/FDM/JSBSim/FGGroundReactions.cpp
@@ -45,11 +45,7 @@ CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 
-FGGroundReactions::FGGroundReactions(FGFDMExec* fgex) : FGModel(fgex),
-                                                        vForces(3),
-                                                        vMoments(3),
-                                                        vMaxStaticGrip(3),
-                                                        vMaxMomentResist(3)
+FGGroundReactions::FGGroundReactions(FGFDMExec* fgex) : FGModel(fgex)
 {
   Name = "FGGroundReactions";
 
diff --git a/src/FDM/JSBSim/FGInertial.cpp b/src/FDM/JSBSim/FGInertial.cpp
index c2632e3d5..f5189108f 100644
--- a/src/FDM/JSBSim/FGInertial.cpp
+++ b/src/FDM/JSBSim/FGInertial.cpp
@@ -47,11 +47,7 @@ CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 
-FGInertial::FGInertial(FGFDMExec* fgex) : FGModel(fgex),
-    vOmegaLocal(3),
-    vForces(3),
-    vRadius(3),
-    vGravity(3)
+FGInertial::FGInertial(FGFDMExec* fgex) : FGModel(fgex)
 {
   Name = "FGInertial";
 
diff --git a/src/FDM/JSBSim/FGLGear.cpp b/src/FDM/JSBSim/FGLGear.cpp
index 4826990de..eb42ff08a 100644
--- a/src/FDM/JSBSim/FGLGear.cpp
+++ b/src/FDM/JSBSim/FGLGear.cpp
@@ -57,13 +57,7 @@ static const char *IdHdr = ID_LGEAR;
 CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-FGLGear::FGLGear(FGConfigFile* AC_cfg, FGFDMExec* fdmex) : vXYZ(3),
-                                                           vMoment(3),
-                                                           vWhlBodyVec(3),
-                                                           vForce(3),
-                                                           vLocalForce(3),
-                                                           vWhlVelVec(3),
-                                                           Exec(fdmex)
+FGLGear::FGLGear(FGConfigFile* AC_cfg, FGFDMExec* fdmex) : Exec(fdmex)
 {
   string tmp;
   string Retractable;
@@ -202,19 +196,24 @@ FGColumnVector3& FGLGear::Force(void)
 {
   vForce.InitMatrix();
   vMoment.InitMatrix();
-  if(isRetractable ) {
-    if( FCS->GetGearPos() < 0.01 ) {
-      GearUp=true;GearDown=false;
-     } else if(FCS->GetGearPos() > 0.99) {
-      GearDown=true;GearUp=false;
+
+  if (isRetractable) {
+    if (FCS->GetGearPos() < 0.01) {
+      GearUp   = true;
+      GearDown = false;
+     } else if (FCS->GetGearPos() > 0.99) {
+      GearDown = true;
+      GearUp   = false;
      } else {
-      GearUp=false; GearDown=false;
+      GearUp   = false;
+      GearDown = false;
      }
   } else {
-      GearUp=false; GearDown=true;
+      GearUp   = false;
+      GearDown = true;
   }         
       
-  if( GearDown ) {
+  if (GearDown) {
     double SteerGain = 0;
     double SinWheel, CosWheel, SideWhlVel, RollingWhlVel;
     double RollingForce, SideForce, FCoeff;
diff --git a/src/FDM/JSBSim/FGMassBalance.cpp b/src/FDM/JSBSim/FGMassBalance.cpp
index f6f87391d..a7f2eb93b 100644
--- a/src/FDM/JSBSim/FGMassBalance.cpp
+++ b/src/FDM/JSBSim/FGMassBalance.cpp
@@ -68,20 +68,22 @@ bool FGMassBalance::Run(void)
 {
   if (!FGModel::Run()) {
 
-    Weight = EmptyWeight + Propulsion->GetTanksWeight();
+    Weight = EmptyWeight + Propulsion->GetTanksWeight() + GetPointMassWeight();
 
     Mass = Weight / Inertial->gravity();
 
 // Calculate new CG here.
 
-    vXYZcg = (Propulsion->GetTanksCG() + EmptyWeight*vbaseXYZcg) / Weight;
+    vXYZcg = (Propulsion->GetTanksCG() + EmptyWeight*vbaseXYZcg
+                                       + GetPointMassCG()       ) / Weight;
 
 // Calculate new moments of inertia here
 
-    Ixx = baseIxx + Propulsion->GetTanksIxx(vXYZcg);
-    Iyy = baseIyy + Propulsion->GetTanksIyy(vXYZcg);
-    Izz = baseIzz + Propulsion->GetTanksIzz(vXYZcg);
-    Ixz = baseIxz + Propulsion->GetTanksIxz(vXYZcg);
+    Ixx = baseIxx + Propulsion->GetTanksIxx(vXYZcg) + GetPMIxx();
+    Iyy = baseIyy + Propulsion->GetTanksIyy(vXYZcg) + GetPMIyy();
+    Izz = baseIzz + Propulsion->GetTanksIzz(vXYZcg) + GetPMIzz();
+    Ixy = baseIxy + Propulsion->GetTanksIxy(vXYZcg) + GetPMIxy();
+    Ixz = baseIxz + Propulsion->GetTanksIxz(vXYZcg) + GetPMIxz();
 
     if (debug_lvl > 1) Debug();
 
@@ -93,6 +95,98 @@ bool FGMassBalance::Run(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
+void FGMassBalance::AddPointMass(double weight, double X, double Y, double Z)
+{
+  PointMassLoc.push_back(*(new FGColumnVector3(X, Y, Z)));
+  PointMassWeight.push_back(weight);
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+double FGMassBalance::GetPointMassWeight(void)
+{
+  double PM_total_weight = 0.0;
+
+  for (unsigned int i=0; i<PointMassWeight.size(); i++) {
+    PM_total_weight += PointMassWeight[i];
+  }
+  return PM_total_weight;
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FGColumnVector3& FGMassBalance::GetPointMassCG(void)
+{
+  PointMassCG.InitMatrix();
+
+  for (unsigned int i=0; i<PointMassLoc.size(); i++) {
+    PointMassCG += PointMassWeight[i]*PointMassLoc[i];
+  }
+  return PointMassCG;
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+double FGMassBalance::GetPMIxx(void)
+{
+  double I = 0.0;
+  for (unsigned int i=0; i<PointMassLoc.size(); i++) {
+    I += PointMassLoc[i](eX)*PointMassLoc[i](eX)*PointMassWeight[i];
+  }
+  I /= (144.0*Inertial->gravity());
+  return I;
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+double FGMassBalance::GetPMIyy(void)
+{
+  double I = 0.0;
+  for (unsigned int i=0; i<PointMassLoc.size(); i++) {
+    I += PointMassLoc[i](eY)*PointMassLoc[i](eY)*PointMassWeight[i];
+  }
+  I /= (144.0*Inertial->gravity());
+  return I;
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+double FGMassBalance::GetPMIzz(void)
+{
+  double I = 0.0;
+  for (unsigned int i=0; i<PointMassLoc.size(); i++) {
+    I += PointMassLoc[i](eZ)*PointMassLoc[i](eZ)*PointMassWeight[i];
+  }
+  I /= (144.0*Inertial->gravity());
+  return I;
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+double FGMassBalance::GetPMIxy(void)
+{
+  double I = 0.0;
+  for (unsigned int i=0; i<PointMassLoc.size(); i++) {
+    I += PointMassLoc[i](eX)*PointMassLoc[i](eY)*PointMassWeight[i];
+  }
+  I /= (144.0*Inertial->gravity());
+  return I;
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+double FGMassBalance::GetPMIxz(void)
+{
+  double I = 0.0;
+  for (unsigned int i=0; i<PointMassLoc.size(); i++) {
+    I += PointMassLoc[i](eX)*PointMassLoc[i](eZ)*PointMassWeight[i];
+  }
+  I /= (144.0*Inertial->gravity());
+  return I;
+}
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
 void FGMassBalance::Debug(void)
 {
   if (debug_lvl & 16) { // Sanity check variables
diff --git a/src/FDM/JSBSim/FGMassBalance.h b/src/FDM/JSBSim/FGMassBalance.h
index d59fbb16e..5efda6698 100644
--- a/src/FDM/JSBSim/FGMassBalance.h
+++ b/src/FDM/JSBSim/FGMassBalance.h
@@ -44,6 +44,7 @@ INCLUDES
 
 #include "FGModel.h"
 #include "FGPropulsion.h"
+#include <vector>
 
 #define ID_MASSBALANCE "$Id$"
 
@@ -65,8 +66,8 @@ public:
   inline double GetIxx(void) {return Ixx;}
   inline double GetIyy(void) {return Iyy;}
   inline double GetIzz(void) {return Izz;}
+  inline double GetIxy(void) {return Ixy;}
   inline double GetIxz(void) {return Ixz;}
-  inline double GetIyz(void) {return Iyz;}
   inline FGColumnVector3& GetXYZcg(void) {return vXYZcg;}
   inline double GetXYZcg(int axis) {return vXYZcg(axis);}
 
@@ -74,9 +75,18 @@ public:
   inline void SetBaseIxx(double bixx)   { baseIxx = bixx;}
   inline void SetBaseIyy(double biyy)   { baseIyy = biyy;}
   inline void SetBaseIzz(double bizz)   { baseIzz = bizz;}
+  inline void SetBaseIxy(double bixy)   { baseIxy = bixy;}
   inline void SetBaseIxz(double bixz)   { baseIxz = bixz;}
-  inline void SetBaseIyz(double biyz)   { baseIyz = biyz;}
   inline void SetBaseCG(const FGColumnVector3& CG) {vbaseXYZcg = CG;}
+  
+  void AddPointMass(double weight, double X, double Y, double Z);
+  double GetPointMassWeight(void);
+  FGColumnVector3& GetPointMassCG(void);
+  double GetPMIxx(void);
+  double GetPMIyy(void);
+  double GetPMIzz(void);
+  double GetPMIxy(void);
+  double GetPMIxz(void);
 
 private:
   double Weight;
@@ -85,16 +95,19 @@ private:
   double Ixx;
   double Iyy;
   double Izz;
+  double Ixy;
   double Ixz;
-  double Iyz;
   double baseIxx;
   double baseIyy;
   double baseIzz;
+  double baseIxy;
   double baseIxz;
-  double baseIyz;
   FGColumnVector3 vXYZcg;
   FGColumnVector3 vXYZtank;
   FGColumnVector3 vbaseXYZcg;
+  vector <FGColumnVector3> PointMassLoc;
+  vector <double> PointMassWeight;
+  FGColumnVector3 PointMassCG;
   void Debug(void);
 };
 
diff --git a/src/FDM/JSBSim/FGOutput.cpp b/src/FDM/JSBSim/FGOutput.cpp
index 19bf7236a..aff96cc48 100644
--- a/src/FDM/JSBSim/FGOutput.cpp
+++ b/src/FDM/JSBSim/FGOutput.cpp
@@ -195,6 +195,7 @@ void FGOutput::DelimitedOutput(string fname)
       outstream << "Altitude, ";
       outstream << "Phi, Tht, Psi, ";
       outstream << "Alpha, ";
+      outstream << "Beta, ";
       outstream << "Latitude, ";
       outstream << "Longitude, ";
       outstream << "Distance AGL, ";
@@ -269,6 +270,7 @@ void FGOutput::DelimitedOutput(string fname)
     outstream << Position->Geth() << ", ";
     outstream << Rotation->GetEuler() << ", ";
     outstream << Translation->Getalpha() << ", ";
+    outstream << Translation->Getbeta() << ", ";
     outstream << Position->GetLatitude() << ", ";
     outstream << Position->GetLongitude() << ", ";
     outstream << Position->GetDistanceAGL() << ", ";
diff --git a/src/FDM/JSBSim/FGPiston.cpp b/src/FDM/JSBSim/FGPiston.cpp
index 58485a2e4..de5b7db5f 100644
--- a/src/FDM/JSBSim/FGPiston.cpp
+++ b/src/FDM/JSBSim/FGPiston.cpp
@@ -68,9 +68,7 @@ FGPiston::FGPiston(FGFDMExec* exec, FGConfigFile* Eng_cfg)
   Cycles=2;
   IdleRPM=600;
   // Set constants
- 
-  
-  
+
   Name = Eng_cfg->GetValue("NAME");
   Eng_cfg->GetNextConfigLine();
   while (Eng_cfg->GetValue() != string("/FG_PISTON")) {
diff --git a/src/FDM/JSBSim/FGPosition.cpp b/src/FDM/JSBSim/FGPosition.cpp
index 1b30295f5..cc3a95cef 100644
--- a/src/FDM/JSBSim/FGPosition.cpp
+++ b/src/FDM/JSBSim/FGPosition.cpp
@@ -95,10 +95,7 @@ extern double globalTriNormal[3];
 extern double globalSceneryAltitude;
 extern double globalSeaLevelRadius;
 
-FGPosition::FGPosition(FGFDMExec* fdmex) : FGModel(fdmex),
-    vVel(3),
-    vVelDot(3),
-    vRunwayNormal(3)
+FGPosition::FGPosition(FGFDMExec* fdmex) : FGModel(fdmex)
 {
   Name = "FGPosition";
   LongitudeDot = LatitudeDot = RadiusDot = 0.0;
diff --git a/src/FDM/JSBSim/FGPropeller.cpp b/src/FDM/JSBSim/FGPropeller.cpp
index f5dad334f..9ae5abcdd 100644
--- a/src/FDM/JSBSim/FGPropeller.cpp
+++ b/src/FDM/JSBSim/FGPropeller.cpp
@@ -105,6 +105,7 @@ FGPropeller::FGPropeller(FGFDMExec* exec, FGConfigFile* Prop_cfg) : FGThruster(e
 
   Type = ttPropeller;
   RPM = 0;
+  vTorque.InitMatrix();
 
   if (debug_lvl & 2) cout << "Instantiated: FGPropeller" << endl;
 }
@@ -155,8 +156,8 @@ double FGPropeller::Calculate(double PowerAvailable)
   if (P_Factor > 0.0001) {
     alpha = fdmex->GetTranslation()->Getalpha();
     beta  = fdmex->GetTranslation()->Getbeta();
-    SetLocationY( GetLocationY() + P_Factor*alpha*fabs(Sense)/Sense);
-    SetLocationZ( GetLocationZ() + P_Factor*beta*fabs(Sense)/Sense);
+    SetActingLocationY( GetLocationY() + P_Factor*alpha*fabs(Sense)/Sense);
+    SetActingLocationZ( GetLocationZ() + P_Factor*beta*fabs(Sense)/Sense);
   } else if (P_Factor < 0.000) {
     cerr << "P-Factor value in config file must be greater than zero" << endl;
   }
@@ -175,10 +176,10 @@ double FGPropeller::Calculate(double PowerAvailable)
 
   if (omega <= 5) omega = 1.0;
 
-  Torque = PowerAvailable / omega;
-  RPM = (RPS + ((Torque / Ixx) / (2.0 * M_PI)) * deltaT) * 60.0;
+  ExcessTorque = PowerAvailable / omega;
+  RPM = (RPS + ((ExcessTorque / Ixx) / (2.0 * M_PI)) * deltaT) * 60.0;
 
-  vMn = fdmex->GetRotation()->GetPQR()*vH + Torque*Sense;
+  vMn = fdmex->GetRotation()->GetPQR()*vH + vTorque*Sense;
 
   return Thrust; // return thrust in pounds
 }
@@ -216,6 +217,8 @@ double FGPropeller::GetPowerRequired(void)
 
   PowerRequired = cPReq*RPS*RPS*RPS*Diameter*Diameter*Diameter*Diameter
                                                        *Diameter*rho;
+  vTorque(eX) = PowerRequired / ((RPM/60)*2.0*M_PI);
+
   return PowerRequired;
 }
 
diff --git a/src/FDM/JSBSim/FGPropeller.h b/src/FDM/JSBSim/FGPropeller.h
index 3c0d92f0a..23c9aaadc 100644
--- a/src/FDM/JSBSim/FGPropeller.h
+++ b/src/FDM/JSBSim/FGPropeller.h
@@ -1,170 +1,171 @@
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- Header:       FGPropeller.h
- Author:       Jon S. Berndt
- Date started: 08/24/00
-
- ------------- Copyright (C) 2000  Jon S. Berndt (jsb@hal-pc.org) -------------
-
- This program 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.
-
- This program 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
- this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- Place - Suite 330, Boston, MA  02111-1307, USA.
-
- Further information about the GNU General Public License can also be found on
- the world wide web at http://www.gnu.org.
-
-HISTORY
---------------------------------------------------------------------------------
-08/24/00  JSB  Created
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-SENTRY
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-#ifndef FGPROPELLER_H
-#define FGPROPELLER_H
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-INCLUDES
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-#include "FGThruster.h"
-#include "FGTable.h"
-#include "FGTranslation.h"
-#include "FGRotation.h"
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-DEFINITIONS
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-#define ID_PROPELLER "$Id$"
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-FORWARD DECLARATIONS
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-CLASS DOCUMENTATION
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-/** Propeller modeling class.
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ Header:       FGPropeller.h
+ Author:       Jon S. Berndt
+ Date started: 08/24/00
+
+ ------------- Copyright (C) 2000  Jon S. Berndt (jsb@hal-pc.org) -------------
+
+ This program 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.
+
+ This program 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
+ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+ Place - Suite 330, Boston, MA  02111-1307, USA.
+
+ Further information about the GNU General Public License can also be found on
+ the world wide web at http://www.gnu.org.
+
+HISTORY
+--------------------------------------------------------------------------------
+08/24/00  JSB  Created
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+SENTRY
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+#ifndef FGPROPELLER_H
+#define FGPROPELLER_H
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+INCLUDES
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+#include "FGThruster.h"
+#include "FGTable.h"
+#include "FGTranslation.h"
+#include "FGRotation.h"
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+DEFINITIONS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+#define ID_PROPELLER "$Id$"
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+FORWARD DECLARATIONS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+CLASS DOCUMENTATION
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/** Propeller modeling class.
     FGPropeller models a propeller given the tabular data for Ct and Cp
     indexed by advance ratio "J". The data for the propeller is
-    stored in a config file named "prop_name.xml". The propeller config file
-    is referenced from the main aircraft config file in the "Propulsion" section.
-    See the constructor for FGPropeller to see what is read in and what should
-    be stored in the config file.<br>
-    Several references were helpful, here:<ul>
-    <li>Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
-     Wiley & Sons, 1979 ISBN 0-471-03032-5</li>
-    <li>Edwin Hartman, David Biermann, "The Aerodynamic Characteristics of
-    Full Scale Propellers Having 2, 3, and 4 Blades of Clark Y and R.A.F. 6
-    Airfoil Sections", NACA Report TN-640, 1938 (?)</li>
-    <li>Various NACA Technical Notes and Reports</li>
-    <ul>
-    @author Jon S. Berndt
-    @version $Id$
-    @see FGEngine
-    @see FGThruster
-    @see FGTable
-*/
-
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-CLASS DECLARATION
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-class FGPropeller : public FGThruster {
-
-public:
-  /** Constructor for FGPropeller.
-      @param exec a pointer to the main executive object
-      @param AC_cfg a pointer to the main aircraft config file object */
-  FGPropeller(FGFDMExec* exec, FGConfigFile* AC_cfg);
-
-  /// Destructor for FGPropeller - deletes the FGTable objects
-  ~FGPropeller();
-
-  /** Sets the Revolutions Per Minute for the propeller. Normally the propeller
-      instance will calculate its own rotational velocity, given the Torque
-      produced by the engine and integrating over time using the standard
-      equation for rotational acceleration "a": a = Q/I , where Q is Torque and
-      I is moment of inertia for the propeller.
-      @param rpm the rotational velocity of the propeller */
-  void SetRPM(double rpm) {RPM = rpm;}
-
-  /** This commands the pitch of the blade to change to the value supplied.
-      This call is meant to be issued either from the cockpit or by the flight
-      control system (perhaps to maintain constant RPM for a constant-speed
-      propeller). This value will be limited to be within whatever is specified
-      in the config file for Max and Min pitch. It is also one of the lookup
+    stored in a config file named "prop_name.xml". The propeller config file
+    is referenced from the main aircraft config file in the "Propulsion" section.
+    See the constructor for FGPropeller to see what is read in and what should
+    be stored in the config file.<br>
+    Several references were helpful, here:<ul>
+    <li>Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
+     Wiley & Sons, 1979 ISBN 0-471-03032-5</li>
+    <li>Edwin Hartman, David Biermann, "The Aerodynamic Characteristics of
+    Full Scale Propellers Having 2, 3, and 4 Blades of Clark Y and R.A.F. 6
+    Airfoil Sections", NACA Report TN-640, 1938 (?)</li>
+    <li>Various NACA Technical Notes and Reports</li>
+    <ul>
+    @author Jon S. Berndt
+    @version $Id$
+    @see FGEngine
+    @see FGThruster
+    @see FGTable
+*/
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+CLASS DECLARATION
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+class FGPropeller : public FGThruster {
+
+public:
+  /** Constructor for FGPropeller.
+      @param exec a pointer to the main executive object
+      @param AC_cfg a pointer to the main aircraft config file object */
+  FGPropeller(FGFDMExec* exec, FGConfigFile* AC_cfg);
+
+  /// Destructor for FGPropeller - deletes the FGTable objects
+  ~FGPropeller();
+
+  /** Sets the Revolutions Per Minute for the propeller. Normally the propeller
+      instance will calculate its own rotational velocity, given the Torque
+      produced by the engine and integrating over time using the standard
+      equation for rotational acceleration "a": a = Q/I , where Q is Torque and
+      I is moment of inertia for the propeller.
+      @param rpm the rotational velocity of the propeller */
+  void SetRPM(double rpm) {RPM = rpm;}
+
+  /** This commands the pitch of the blade to change to the value supplied.
+      This call is meant to be issued either from the cockpit or by the flight
+      control system (perhaps to maintain constant RPM for a constant-speed
+      propeller). This value will be limited to be within whatever is specified
+      in the config file for Max and Min pitch. It is also one of the lookup
       indices to the power and thrust tables for variable-pitch propellers.
-      @param pitch the pitch of the blade in degrees. */
-  void SetPitch(double pitch) {Pitch = pitch;}
-  
-  void SetPFactor(double pf) {P_Factor = pf;}
-  
-  void SetSense(double s) { Sense = s;}
-
-  /// Retrieves the pitch of the propeller in degrees.
-  double GetPitch(void)         { return Pitch;         }
-  
-  /// Retrieves the RPMs of the propeller
-  double GetRPM(void)           { return RPM;           }
-  
-  /// Retrieves the propeller moment of inertia
-  double GetIxx(void)           { return Ixx;           }
-  
-  /// Retrieves the Torque in foot-pounds (Don't you love the English system?)
-  double GetTorque(void)        { return Torque;        }
-  
-  /** Retrieves the power required (or "absorbed") by the propeller -
-      i.e. the power required to keep spinning the propeller at the current
-      velocity, air density,  and rotational rate. */
-  double GetPowerRequired(void);
-  
-  /** Calculates and returns the thrust produced by this propeller.
-      Given the excess power available from the engine (in foot-pounds), the thrust is
-      calculated, as well as the current RPM. The RPM is calculated by integrating
-      the torque provided by the engine over what the propeller "absorbs"
-      (essentially the "drag" of the propeller).
-      @param PowerAvailable this is the excess power provided by the engine to
-      accelerate the prop. It could be negative, dictating that the propeller
-      would be slowed.
-      @return the thrust in pounds */
-  double Calculate(double PowerAvailable);
-
-private:
-  int   numBlades;
-  double RPM;
-  double Ixx;
-  double Diameter;
-  double MaxPitch;
-  double MinPitch;
-  double MinRPM;
-  double MaxRPM;
-  double P_Factor;
-  double Sense;
-  double Pitch;
-  double Torque;
-  FGTable *cThrust;
-  FGTable *cPower;
-  void Debug(void);
-};
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-#endif
-
+      @param pitch the pitch of the blade in degrees. */
+  void SetPitch(double pitch) {Pitch = pitch;}
+  
+  void SetPFactor(double pf) {P_Factor = pf;}
+  
+  void SetSense(double s) { Sense = s;}
+
+  /// Retrieves the pitch of the propeller in degrees.
+  double GetPitch(void)         { return Pitch;         }
+  
+  /// Retrieves the RPMs of the propeller
+  double GetRPM(void)           { return RPM;           }
+  
+  /// Retrieves the propeller moment of inertia
+  double GetIxx(void)           { return Ixx;           }
+  
+  /// Retrieves the Torque in foot-pounds (Don't you love the English system?)
+  double GetTorque(void)        { return vTorque(eX);    }
+  
+  /** Retrieves the power required (or "absorbed") by the propeller -
+      i.e. the power required to keep spinning the propeller at the current
+      velocity, air density,  and rotational rate. */
+  double GetPowerRequired(void);
+  
+  /** Calculates and returns the thrust produced by this propeller.
+      Given the excess power available from the engine (in foot-pounds), the thrust is
+      calculated, as well as the current RPM. The RPM is calculated by integrating
+      the torque provided by the engine over what the propeller "absorbs"
+      (essentially the "drag" of the propeller).
+      @param PowerAvailable this is the excess power provided by the engine to
+      accelerate the prop. It could be negative, dictating that the propeller
+      would be slowed.
+      @return the thrust in pounds */
+  double Calculate(double PowerAvailable);
+
+private:
+  int   numBlades;
+  double RPM;
+  double Ixx;
+  double Diameter;
+  double MaxPitch;
+  double MinPitch;
+  double MinRPM;
+  double MaxRPM;
+  double P_Factor;
+  double Sense;
+  double Pitch;
+  double ExcessTorque;
+  FGColumnVector3 vTorque;
+  FGTable *cThrust;
+  FGTable *cPower;
+  void Debug(void);
+};
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+#endif
+
diff --git a/src/FDM/JSBSim/FGPropulsion.cpp b/src/FDM/JSBSim/FGPropulsion.cpp
index 9dcc78e69..e8a148e1f 100644
--- a/src/FDM/JSBSim/FGPropulsion.cpp
+++ b/src/FDM/JSBSim/FGPropulsion.cpp
@@ -62,9 +62,7 @@ CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 
-FGPropulsion::FGPropulsion(FGFDMExec* exec) : FGModel(exec),
-                                              Forces(3),
-                                              Moments(3)
+FGPropulsion::FGPropulsion(FGFDMExec* exec) : FGModel(exec)
 {
   Name = "FGPropulsion";
   numSelectedFuelTanks = numSelectedOxiTanks = 0;
@@ -90,16 +88,16 @@ bool FGPropulsion::Run(void)
   double PowerAvailable;
   dt = State->Getdt();
 
-  Forces.InitMatrix();
-  Moments.InitMatrix();
+  vForces.InitMatrix();
+  vMoments.InitMatrix();
 
   if (!FGModel::Run()) {
     for (unsigned int i=0; i<numEngines; i++) {
       Thrusters[i]->SetdeltaT(dt*rate);
       PowerAvailable = Engines[i]->Calculate(Thrusters[i]->GetPowerRequired());
       Thrusters[i]->Calculate(PowerAvailable);
-      Forces  += Thrusters[i]->GetBodyForces();  // sum body frame forces
-      Moments += Thrusters[i]->GetMoments();     // sum body frame moments
+      vForces  += Thrusters[i]->GetBodyForces();  // sum body frame forces
+      vMoments += Thrusters[i]->GetMoments();     // sum body frame moments
     }
     return false;
   } else {
@@ -117,8 +115,8 @@ bool FGPropulsion::GetSteadyState(void)
   int steady_count,j=0;
   bool steady=false;
 
-  Forces.InitMatrix();
-  Moments.InitMatrix();
+  vForces.InitMatrix();
+  vMoments.InitMatrix();
 
   if (!FGModel::Run()) {
     for (unsigned int i=0; i<numEngines; i++) {
@@ -138,8 +136,8 @@ bool FGPropulsion::GetSteadyState(void)
         }
         j++;    
       }
-      Forces  += Thrusters[i]->GetBodyForces();  // sum body frame forces
-      Moments += Thrusters[i]->GetMoments();     // sum body frame moments
+      vForces  += Thrusters[i]->GetBodyForces();  // sum body frame forces
+      vMoments += Thrusters[i]->GetMoments();     // sum body frame moments
       Engines[i]->SetTrimMode(false);
     }
 
@@ -158,8 +156,8 @@ bool FGPropulsion::ICEngineStart(void)
   int j;
   dt = State->Getdt();
 
-  Forces.InitMatrix();
-  Moments.InitMatrix();
+  vForces.InitMatrix();
+  vMoments.InitMatrix();
     
   for (unsigned int i=0; i<numEngines; i++) {
     Engines[i]->SetTrimMode(true);
@@ -170,8 +168,8 @@ bool FGPropulsion::ICEngineStart(void)
       Thrusters[i]->Calculate(PowerAvailable);
       j++;    
     }
-    Forces  += Thrusters[i]->GetBodyForces();  // sum body frame forces
-    Moments += Thrusters[i]->GetMoments();     // sum body frame moments
+    vForces  += Thrusters[i]->GetBodyForces();  // sum body frame forces
+    vMoments += Thrusters[i]->GetMoments();     // sum body frame moments
     Engines[i]->SetTrimMode(false);
   }
   return true;
diff --git a/src/FDM/JSBSim/FGPropulsion.h b/src/FDM/JSBSim/FGPropulsion.h
index 0d41af38a..6cb2342a8 100644
--- a/src/FDM/JSBSim/FGPropulsion.h
+++ b/src/FDM/JSBSim/FGPropulsion.h
@@ -168,10 +168,10 @@ public:
   string GetPropulsionStrings(void);
   string GetPropulsionValues(void);
 
-  inline FGColumnVector3& GetForces(void)  {return Forces; }
-  inline double GetForces(int n) { return Forces(n);}
-  inline FGColumnVector3& GetMoments(void) {return Moments;}
-  inline double GetMoments(int n) {return Moments(n);}
+  inline FGColumnVector3& GetForces(void)  {return vForces; }
+  inline double GetForces(int n) { return vForces(n);}
+  inline FGColumnVector3& GetMoments(void) {return vMoments;}
+  inline double GetMoments(int n) {return vMoments(n);}
   
   FGColumnVector3& GetTanksCG(void);
   double GetTanksWeight(void);
@@ -195,8 +195,8 @@ private:
   unsigned int numTanks;
   unsigned int numThrusters;
   double dt;
-  FGColumnVector3 Forces;
-  FGColumnVector3 Moments;
+  FGColumnVector3 vForces;
+  FGColumnVector3 vMoments;
   FGColumnVector3 vXYZtank;
   void Debug(void);
 };
diff --git a/src/FDM/JSBSim/FGRotation.cpp b/src/FDM/JSBSim/FGRotation.cpp
index bd6c8d2c7..d7a440040 100644
--- a/src/FDM/JSBSim/FGRotation.cpp
+++ b/src/FDM/JSBSim/FGRotation.cpp
@@ -75,14 +75,7 @@ CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 
-FGRotation::FGRotation(FGFDMExec* fdmex) : FGModel(fdmex),
-        vPQR(3),
-        vAeroPQR(3),
-        vPQRdot(3),
-        vMoments(3),
-        vEuler(3),
-        vEulerRates(3),
-        vlastPQRdot(3)
+FGRotation::FGRotation(FGFDMExec* fdmex) : FGModel(fdmex)
 {
   Name = "FGRotation";
   cTht=cPhi=cPsi=1.0;
diff --git a/src/FDM/JSBSim/FGState.cpp b/src/FDM/JSBSim/FGState.cpp
index 5adfb8757..5e3996a19 100644
--- a/src/FDM/JSBSim/FGState.cpp
+++ b/src/FDM/JSBSim/FGState.cpp
@@ -73,19 +73,7 @@ CLASS IMPLEMENTATION
 // entry in the enum eParam definition in FGJSBBase.h. The ID is what must be used
 // in any config file entry which references that item.
 
-FGState::FGState(FGFDMExec* fdex) : 
-    mTb2l(3,3),
-    mTl2b(3,3),
-    mTs2b(3,3),
-    mTb2s(3,3),
-    vQtrn(4),
-    vlastQdot(4),
-    vQdot(4),
-    vUVW(3),
-    vLocalVelNED(3),
-    vLocalEuler(3),
-    vTmp(4),
-    vEuler(3)
+FGState::FGState(FGFDMExec* fdex)
 {
   FDMExec = fdex;
 
@@ -323,13 +311,17 @@ double FGState::GetParameter(string val_string) {
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-eParam FGState::GetParameterIndex(string val_string) {
+eParam FGState::GetParameterIndex(string val_string)
+{
   return coeffdef[val_string];
 }
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGState::SetParameter(eParam val_idx, double val) {
+void FGState::SetParameter(eParam val_idx, double val)
+{
+  int i;
+
   switch(val_idx) {
   case FG_ELEVATOR_POS:
     FCS->SetDePos(val);
@@ -350,10 +342,22 @@ void FGState::SetParameter(eParam val_idx, double val) {
     FCS->SetDfPos(val);
     break;
   case FG_THROTTLE_POS:
-    FCS->SetThrottlePos(ActiveEngine,val);
+    if (ActiveEngine == -1) {
+      for (i=0; i<Propulsion->GetNumEngines(); i++) {
+        FCS->SetThrottlePos(i,val);
+	    }
+	  } else {
+      FCS->SetThrottlePos(ActiveEngine,val);
+	  }
     break;
   case FG_MIXTURE_POS:
-    FCS->SetMixturePos(ActiveEngine,val);
+    if (ActiveEngine == -1) {
+      for (i=0; i<Propulsion->GetNumEngines(); i++) {
+        FCS->SetMixturePos(i,val);
+	    }
+	  } else {
+      FCS->SetMixturePos(ActiveEngine,val);
+	  }
     break;
 
   case FG_ELEVATOR_CMD:
@@ -375,19 +379,43 @@ void FGState::SetParameter(eParam val_idx, double val) {
     FCS->SetDfCmd(val);
     break;
   case FG_THROTTLE_CMD:
-    FCS->SetThrottleCmd(ActiveEngine,val);
+    if (ActiveEngine == -1) {
+      for (i=0; i<Propulsion->GetNumEngines(); i++) {
+        FCS->SetThrottleCmd(i,val);
+	    }
+	  } else {
+      FCS->SetThrottleCmd(ActiveEngine,val);
+	  }
     break;
   case FG_MIXTURE_CMD:
-    FCS->SetMixtureCmd(ActiveEngine,val);
+    if (ActiveEngine == -1) {
+      for (i=0; i<Propulsion->GetNumEngines(); i++) {
+        FCS->SetMixtureCmd(i,val);
+	    }
+	  } else {
+      FCS->SetMixtureCmd(ActiveEngine,val);
+	  }
     break;
   case FG_MAGNETO_CMD:
-    Propulsion->GetEngine(ActiveEngine)->SetMagnetos((int)val); // need to account for -1
+    if (ActiveEngine == -1) {
+      for (i=0; i<Propulsion->GetNumEngines(); i++) {
+        Propulsion->GetEngine(i)->SetMagnetos((int)val);
+      }
+    } else {
+      Propulsion->GetEngine(ActiveEngine)->SetMagnetos((int)val);
+    }
     break;
   case FG_STARTER_CMD:
-    if      (val < 0.001) 
-      Propulsion->GetEngine(ActiveEngine)->SetStarter(false); // need to account for -1
-    else if (val >=  0.001)
-      Propulsion->GetEngine(ActiveEngine)->SetStarter(true); // need to account for -1
+    if (ActiveEngine == -1) {
+      for (i=0; i<Propulsion->GetNumEngines(); i++) {
+        if (val < 0.001) 
+          Propulsion->GetEngine(i)->SetStarter(false);
+        else if (val >=  0.001)
+          Propulsion->GetEngine(i)->SetStarter(true);
+      }
+    } else {
+      Propulsion->GetEngine(ActiveEngine)->SetStarter(true);
+    }
     break;
   case FG_ACTIVE_ENGINE:
     ActiveEngine = (int)val;
diff --git a/src/FDM/JSBSim/FGTranslation.cpp b/src/FDM/JSBSim/FGTranslation.cpp
index f56da337c..5c76642f8 100644
--- a/src/FDM/JSBSim/FGTranslation.cpp
+++ b/src/FDM/JSBSim/FGTranslation.cpp
@@ -77,12 +77,7 @@ CLASS IMPLEMENTATION
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
 
-FGTranslation::FGTranslation(FGFDMExec* fdmex) : FGModel(fdmex),
-    vUVW(3),
-    vUVWdot(3),
-    vlastUVWdot(3),
-    mVel(3,3),
-    vAeroUVW(3)
+FGTranslation::FGTranslation(FGFDMExec* fdmex) : FGModel(fdmex)
 {
   Name = "FGTranslation";
   qbar = 0;