 int aprsIndex = 0;
 boolean aprsRdy, aprsChkFlg, aprsErrFlg, aprsBufCurrent, aprsValid;
 boolean aprsFlg, aprsNewFlg;
-long aprsTime, lastAprsTime; // standard time in seconds with decimal fraction to ms
-float aprsLat, aprsLon, aprsAlt, aprsVg, aprsHdg;
-float lastAprsAlt; // needed to keep track of prior value to calculate Vz
+float aprsLat, aprsLon, aprsVg, aprsHdg;
+double aprsAlt;
+
+// Derived aprs parameters
+double aprsTime, lastAprsTime;
+float aprsVlon, aprsVlat, aprsValt; // Derived from aprsVg, aprsHdg 
+double lastAprsAlt = -1; // needed to keep track of prior value to calculate Vz
 
 char term[TERMLEN], aprsfiBuf[APRSFILEN], cmdBuf[CMDLEN];
 int termIndex = 0;

    long temp = targetTime; // old time, same as lastAprsTime??
    targetTime = now(); 
    temp = targetTime - temp; // delta t
    targetPosX += ( targetVelX * temp );
    targetPosY += ( targetVelY * temp );
    targetPosZ += ( targetVelZ * temp );
  }

  //FOR DEBUG PURPOSES

    }
    if ( gpsPosValid ) {
      // Get position, velocity data
      String latStr = getField( gpsTF, 6, ',' );
      gpsLat = latStr.substring( 0,2 ).toFloat();      
      gpsLat = ( gpsLat + latStr.substring( 2 ).toFloat() / 60.0 ) * deg2rad;
      if ( getField( gpsTF, 7, ',' ) == 'S' ) gpsLat *= -1.0;
      String lonStr = getField( gpsTF, 8, ',' );
      gpsLon = lonStr.substring( 0,3 ).toFloat();
      gpsLon = ( gpsLon + lonStr.substring( 3 ).toFloat() / 60.0 ) * deg2rad;
      if ( getField( gpsTF, 9, ',' ) == 'W' ) gpsLon *= -1.0;
      gpsAlt = getField( gpsTF, 10, ',' ).toFloat();
    }
