Particle gravity doesn't rotate with parent node

I’ll post this here because it seems related.
I’m trying to use a ParticleEmitter with a custom EmitterShape that spawns particles at defined places all over a scene. I noticed that with setInWorldSpace(true) the particles don’t spawn at the expected position.

In the following test I spawn particles with totally random, uniformly distributed position inside a cube (white).
As a reference I added billboards (normal Geometries) that use the same code for positioning (red).

Result with world space = true (wrong distribution):

with world space = false (correct distribution):

It becomes more fancy when I align the particles in a pattern, like a grid.
With world space = true I get a star pattern where the particles are aligned to lines that meet in the center:

With world space = false I get the expected grid:

Don’t know what’s happening here. Probably something odd with the transformation.
The pattern does look a bit like a Box-Muller / Ziggurat transformation that could be used for nicer looking particle distributions - but I kinda doubt this would have been implemented in ParticleEmitter instead of an EmitterShape.

Here’s my test code if you want to check for yourself. It uses an image from the jme3-testdata lib.
I’m using the latest version from master.

import com.jme3.app.FlyCamAppState;
import com.jme3.app.SimpleApplication;
import com.jme3.effect.ParticleEmitter;
import com.jme3.effect.ParticleMesh.Type;
import com.jme3.effect.shapes.EmitterPointShape;
import com.jme3.effect.shapes.EmitterShape;
import com.jme3.material.Material;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Mesh;
import com.jme3.scene.control.BillboardControl;
import com.jme3.scene.shape.Quad;
import com.jme3.system.AppSettings;
import java.util.Random;

public class ParticlesEmitter extends SimpleApplication {
    private static class Sprite extends Geometry {
        private static final Mesh MESH = new Quad(1.0f, 1.0f);

        public Sprite() {
            setMesh(MESH);
            addControl(new BillboardControl());
        }
    }


    private class DebugShape extends EmitterPointShape {
        private static final float SIZE = 4.0f;
        private final Random rnd = new Random(System.currentTimeMillis());

        @Override
        public void getRandomPoint(Vector3f store) {
            store.x = (rnd.nextFloat() * SIZE) - (SIZE / 2);
            store.y = (rnd.nextFloat() * SIZE) - (SIZE / 2);
            store.z = (rnd.nextFloat() * SIZE) - (SIZE / 2);

            // Align particles in a grid
            store.x = Math.round(store.x);
            store.y = Math.round(store.y);
            store.z = Math.round(store.z);
        }

        @Override
        public void getRandomPointAndNormal(Vector3f store, Vector3f normal) {
            getRandomPoint(store);
            normal.set(0, 1, 0);
        }
    }


    private ParticlesEmitter() {
        super(new FlyCamAppState());
    }


    @Override
    public void simpleInitApp() {
        flyCam.setMoveSpeed(13);

        EmitterShape shape = new DebugShape();

        Material emMat = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md");
        emMat.setTexture("Texture", assetManager.loadTexture("Effects/Explosion/shockwave.png"));

        ParticleEmitter em = new ParticleEmitter("emitter", Type.Triangle, 50000);
        em.setShape(shape);
        em.setMaterial(emMat);
        em.setParticlesPerSec(1000);
        em.setLowLife(2);
        em.setHighLife(2);
        em.setStartSize(0.07f);
        em.setEndSize(0.005f);
        em.setGravity(0, 0, 0);
        em.setRandomAngle(false);

        ///////// Uncomment this to get the correct particle distribution
        //em.setInWorldSpace(false);

        rootNode.attachChild(em);

        Vector3f pos = new Vector3f();
        for(int i=0; i<800; ++i) {
            shape.getRandomPoint(pos);

            Sprite sprite = new Sprite();
            sprite.setMaterial(emMat);
            sprite.setLocalTranslation(pos.clone());
            sprite.setLocalScale(0.07f);
            rootNode.attachChild(sprite);
        }
    }


    public static void main(String[] args) {
        AppSettings settings = new AppSettings(true);
        settings.setResolution(1024, 768);

        ParticlesEmitter test = new ParticlesEmitter();
        test.setSettings(settings);
        test.setShowSettings(false);
        test.start();
    }
}