private void calcLoads() {
		Vector3D Fb = new Vector3D();			// stores the sum of forces
		Vector3D Mb = new Vector3D();			// stores the sum of moments
		Vector3D Thrust = new Vector3D();		// thrust vector
		
		// reset forces and moments:
		vForces.reset();
		vMoment.reset();
		
		// Define the thrust vector, which acts through the craft's CG
		Thrust = new Vector3D(0.0f, 1.0f, 0.0f);
		Thrust.multiply(driveThrust);
		
		// Calculate forces and moments in body space:
		// Calculate the aerodynamic drag force:
		// Calculate local velocity:
		// The local velocity includes the velocity due to linear motion of the craft, 
		// plus the velocity at each element due to the rotation of the craft.
		Vector3D vLocalVelocity = Vector3D.add(vVelocityBody, Vector3D.crossProduct(vAngularVelocity, centerOfDrag));

		// Calculate local air speed
		float fLocalSpeed = vLocalVelocity.getMagnitude();

		// Find the direction in which drag will act.
		// Drag always acts in line with the relative velocity but in the opposing direction
		if (fLocalSpeed > Utility.nearZero)  {
			vLocalVelocity.normalise();
			Vector3D vDragVector = vLocalVelocity.conjugate();		

			// Determine the resultant force on the element.
			double f;
			if (Vector3D.dotProduct(Thrust, vLocalVelocity) / (Thrust.getMagnitude() * vLocalVelocity.getMagnitude()) > 0)
				f = 2;	
			else
				f = 1;

			float tmp = 0.5f * Utility.rho * fLocalSpeed * fLocalSpeed * fProjectedArea * (float)f;
			Vector3D vResultant = Vector3D.multiply(Vector3D.multiply(vDragVector, _LINEARDRAGCOEFFICIENT), tmp); // simulate fuselage drag

			// Keep a running total of these resultant forces (total force)
			Fb.add(vResultant);
			
			// Calculate the moment about the CG of this element's force
			// and keep a running total of these moments (total moment)
			Mb.add(Vector3D.crossProduct(centerOfDrag, vResultant));
		}

		// Calculate the Port & Starboard bow thruster forces:
		// Keep a running total of these resultant forces (total force)
		Fb.add(Vector3D.multiply(3, portThrust));

		// Calculate the moment about the CG of this element's force
		// and keep a running total of these moments (total moment)
		Mb.add(Vector3D.crossProduct(centerPortSteeringThruster, portThrust));

		// Keep a running total of these resultant forces (total force)
		Fb.add(Vector3D.multiply(3, starboardThrust));

		// Calculate the moment about the CG of this element's force
		// and keep a running total of these moments (total moment)
		Mb.add(Vector3D.crossProduct(centerStarboardSteeringThruster, starboardThrust));

		// do other applied forces here
		Fb.add(Fa);
		Mb.add(Vector3D.crossProduct(Pa, Fa));

		// Calculate rotational drag
		if (vAngularVelocity.getMagnitude() > Utility.nearZero) {
			Vector3D vtmp = new Vector3D();	
			vtmp.setX(0);
			vtmp.setY(0);
			float tmp = 0.5f * Utility.rho * vAngularVelocity.getZ() * vAngularVelocity.getZ() * fProjectedArea;
			if (vAngularVelocity.getZ() > 0.0)
				vtmp.setZ(-_ANGULARDRAGCOEFFICIENT * tmp);		
			else
				vtmp.setZ(_ANGULARDRAGCOEFFICIENT * tmp);		
			Mb.add(vtmp);
		}

		// Now add the propulsion thrust
		Fb.add(Thrust); 	// no moment since line of action is through CG

		// Convert forces from model space to world space
		vForces = Vector3D.vRotate2D(fOrientation, Fb);
		vMoment.add(Mb);			
	}