Yes this is the method I am using to make my character stand up straight, I posted the pseudo code in another thread recently. Since maroxe could not quite get it working, I made an entry for the testbed so there could be no doubt about how it works, and the real code (not pseudo) could be studied.
I thought maroxe could use the testbed entry and plug in the values of his character to try it out.
Boris thankyou for the pointers. I should put my code up for proof-reading more often

Fixing those has cured the 'explosion' problem I was talking about. Here is what the code should be:
Code:
//correct rotation of character main body
float desiredCharacterBodyAngle = m_desiredAngle * b2_pi / 180.0f;
float angleNow = m_characterBody->GetXForm().R.GetAngle();
float changeExpected = m_characterBody->GetAngularVelocity() / settings->hz;
float angleNextStep = angleNow + changeExpected;
float changeRequiredInNextStep = desiredCharacterBodyAngle - angleNextStep;
while ( changeRequiredInNextStep > b2_pi )
changeRequiredInNextStep -= 2 * b2_pi;
while ( changeRequiredInNextStep < -b2_pi )
changeRequiredInNextStep += 2 * b2_pi;
float rotationalAcceleration = settings->hz * changeRequiredInNextStep;
float torque = m_characterBody->GetMass() * rotationalAcceleration * m_correctionSpeed;
if ( torque > m_correctionTorqueMax )
torque = m_correctionTorqueMax;
else if ( torque < -m_correctionTorqueMax )
torque = -m_correctionTorqueMax;
m_characterBody->ApplyTorque(torque);
I have updated the download above.