How to X rotate object using other object as reference?

I found another topic with similar problem :

and the solution and conclusion they get as far as I understood is that toAngles dosent work. The solution was to store all rotations in variables in order to retrieve when it is needed, so I wrote:

package mygame;

import com.jme3.app.SimpleApplication;
import com.jme3.input.KeyInput;
import com.jme3.input.controls.AnalogListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.FastMath;
import com.jme3.math.Matrix3f;
import com.jme3.math.Vector3f;
import com.jme3.post.FilterPostProcessor;
import com.jme3.post.filters.CartoonEdgeFilter;
import com.jme3.renderer.RenderManager;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.debug.Arrow;
import com.jme3.scene.shape.Box;
import javax.vecmath.Matrix3d;
import javax.vecmath.Vector3d;

public class Main extends SimpleApplication {
Geometry geom_master,geomX,geomY,geomZ;

float storedrotationX,storedrotationY,storedrotationZ;

public static void main(String[] args) { Main app = new Main(); app.start(); }
public Main() { super(null); }

@Override public void simpleInitApp() {               
    Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
    mat.getAdditionalRenderState().setWireframe(true); mat.setColor("Color", ColorRGBA.White);                
    Box b = new Box(1, 1, 1); geom_master = new Geometry("Box", b); geom_master.setLocalTranslation(0,2,0);
    geomX = new Geometry("Box", b); geomX.setLocalTranslation(-3.5f,-1,0);
    geomY = new Geometry("Box", b); geomY.setLocalTranslation(0,-1,0);
    geomZ = new Geometry("Box", b); geomZ.setLocalTranslation(3.5f,-1,0);        
    geom_master.setMaterial(mat); geomX.setMaterial(mat); geomY.setMaterial(mat); geomZ.setMaterial(mat);                
    rootNode.attachChild(geom_master); rootNode.attachChild(geomX); rootNode.attachChild(geomY); rootNode.attachChild(geomZ);
    inputManager.addMapping("RotateXup",  new KeyTrigger(KeyInput.KEY_Q)); inputManager.addMapping("RotateXdown",  new KeyTrigger(KeyInput.KEY_W));
    inputManager.addMapping("RotateYup",  new KeyTrigger(KeyInput.KEY_A)); inputManager.addMapping("RotateYdown",  new KeyTrigger(KeyInput.KEY_S));
    inputManager.addMapping("RotateZup",  new KeyTrigger(KeyInput.KEY_Z)); inputManager.addMapping("RotateZdown",  new KeyTrigger(KeyInput.KEY_X));
    inputManager.addMapping("RefreshRot", new KeyTrigger(KeyInput.KEY_SPACE)); 
    inputManager.addListener(analogListener,"RotateXup", "RotateYup", "RotateZup","RotateXdown","RotateYdown","RotateZdown","RefreshRot");
}

private AnalogListener analogListener = new AnalogListener() {
    public void onAnalog(String name, float value, float tpf) {  
        float anguletorotate = FastMath.DEG_TO_RAD * 0.1f;
        if(name.equals("RotateXup"))   { geom_master.rotate(anguletorotate, 0, 0);  storedrotationX=storedrotationX+anguletorotate; } 
        if(name.equals("RotateXdown")) { geom_master.rotate(-anguletorotate, 0, 0); storedrotationX=storedrotationX-anguletorotate; }
        if(name.equals("RotateYup"))   { geom_master.rotate(0, anguletorotate, 0);  storedrotationY=storedrotationY+anguletorotate; } 
        if(name.equals("RotateYdown")) { geom_master.rotate(0, -anguletorotate, 0); storedrotationY=storedrotationY-anguletorotate; }
        if(name.equals("RotateZup"))   { geom_master.rotate(0, 0, anguletorotate);  storedrotationZ=storedrotationZ+anguletorotate; } 
        if(name.equals("RotateZdown")) { geom_master.rotate(0, 0, -anguletorotate); storedrotationZ=storedrotationZ-anguletorotate; }
        if(name.equals("RefreshRot")) {
            if(storedrotationX!=0) geomX.rotate(storedrotationX,0,0); storedrotationX=0;
            if(storedrotationY!=0) geomY.rotate(0,storedrotationY,0); storedrotationY=0;
            if(storedrotationZ!=0) geomZ.rotate(0,0,storedrotationZ); storedrotationZ=0;
        }
    }
};

}

Now its working as expected, but same as this guy “system” in this “Spartial Rotation Problems”, I fell that its strange that there is no bether way to manipulate the rotations in JMonkey, there is some nice functions on other engines for this, even some engines that use Quaternions like Unit3d can handle it well.
Is storing the rotation the only way to retreive the rotations in separated axix right now ?