Rotation Relative to Camera?

I’ve been scripting a plane which has a camera following it. The plane can pitch, roll, and yaw using code like the following:

Quaternion roll = Quaternion.AngleAxis( -Input.GetAxis( "Roll" ), Vector3.forward );
Quaternion yaw = Quaternion.AngleAxis( Input.GetAxis( "Yaw" ), Vector3.up );
Quaternion pitch = Quaternion.AngleAxis( Input.GetAxis( "Pitch" ), Vector3.right );

transform.rotation *= roll *pitch * yaw;

The camera following the plane adheres to the planes yaw and pitch, but ignores roll. I want to implement a form of mouse control for flying it, this worked quite well by replacing yaw and pitch axes with Mouse X and Mouse Y axes respectively. However, if the plane is upside down for example (ie it has rolled 180 degrees), and the player moves the mouse up, the plane angles downwards (as you’d expect from looking at the code). I want it so that the mouse moves the plane relative to the viewer, so moving the mouse up makes the plane angle upwards regardless of orientation.

I’ve tried:

Quaternion roll = Quaternion.AngleAxis( -Input.GetAxis( "Roll" ), Vector3.forward );
Quaternion yaw = Quaternion.AngleAxis( Input.GetAxis( "Mouse X" ), m_camera.transform.up );
Quaternion pitch = Quaternion.AngleAxis( Input.GetAxis( "Mouse Y" ), m_camera.transform.right );

transform.rotation *= roll *pitch * yaw;

But it has strange effects. I think this is getting a little bit outside what I understand about the usage of Quaternions!

Any help would be much appreciated =)

Cheers
Spec

Noone?