Como usar Drag and Drop no JavaFX 2.0?

Boa Tarde pessoal,

Estou testando o javafx 2.0 e estou fazendo um joguinho de damas, me baseio em um exemplo em javafx 1.3 (http://goo.gl/PuMfS), como faço a parte de drag and drop dos circulos ???

Segue classes:

package org.damas;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import org.damas.componentes.Pecas;
import org.damas.componentes.Quadros;

/**
 *
 * @author mpolverini
 */
public class Main extends Application{

    /**
     * @param args the command line arguments
     */
    private Group root = new Group();
    private final int SIZE = 40;
    private final int WIDTH = 320;
    private final int HEIGHT = 320;

    public static void main(String[] args) {
        Application.launch(Main.class, args); //Inicia a aplicação!
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Damas JavaFX2.0 BETA 42"); // Titulo da janela
        Scene tabuleiro = new Scene( //cria a cena
                root,
                WIDTH,
                HEIGHT,
                Color.WHITE);
        Quadros.adicionaQuadros(root, SIZE); //Chama método para criar os quadros cinzas e brancos
        new Pecas().adicionaPecas(root, SIZE, 12);
        primaryStage.setScene(tabuleiro); //Insere a cena !
        primaryStage.setResizable(false);//Impede alteração no tamanho da tela !
        primaryStage.show(); //Mostra a cena !
    }
}
package org.damas.componentes;

import javafx.scene.Group;
import javafx.scene.effect.InnerShadow;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;

/**
 *
 * @author mpolverini
 */
public class Pecas {

    private Circle[] brancas = new Circle[12];
    private Circle[] pretas = new Circle[12];
    //Sombreado Preto para as peças brancas
    private final InnerShadow BLACK = new InnerShadow(10, 1, 1, Color.BLACK);
    //Sombreado Branco para as peças pretas
    private final InnerShadow WHITE = new InnerShadow(14, 1, 1, Color.LIGHTGRAY);

    public Pecas() {
    }

    public void adicionaPecas(Group root, int SIZE, int RAIO) {
        int posX = 0; // começa na primeira linha
        int posY = 0; // começa na primeira coluna
        //Peças Brancas
        /**
         * É adiciona o valor SIZE/2 (tamanho do quadro) para que o circulo fique no centro
         */
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 4; y++) {
                brancas[y] = new Circle((posX * 2 + (SIZE / 2)), (posY + SIZE / 2), RAIO, Color.WHITE);
                brancas[y].setEffect(BLACK);
                
                root.getChildren().add(brancas[y]);
                posX += SIZE;
            }
            posY += SIZE;
            posX = 0;
            if (x % 2 == 0) {
                posX += SIZE / 2;
            }
        }
        //Peças pretas
        posY = SIZE * 5; //Começa na sexta linha
        posX = 0; //Começa na primeira coluna
        for (int x = 0; x < 3; x++) {
            for (int y = 0; y < 4; y++) {
                pretas[y] = new Circle((posX * 2 + (SIZE / 2)), (posY + SIZE / 2), RAIO, Color.BLACK);
                pretas[y].setEffect(WHITE);
                root.getChildren().add(pretas[y]);
                posX += SIZE;
            }
            posX = 0;
            posY += SIZE;
            if (x % 2 == 0) {
                posX += SIZE / 2;
            }
        }
    }

    public Circle[] getBrancas() {
        return brancas;
    }

    public void setBrancas(Circle[] brancas) {
        this.brancas = brancas;
    }

    public Circle[] getPretas() {
        return pretas;
    }

    public void setPretas(Circle[] pretas) {
        this.pretas = pretas;
    }   
}
package org.damas.componentes;

import javafx.scene.Group;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;

/**
 *
 * @author mpolverini
 */
public class Quadros {

    public static void adicionaQuadros(Group root, int SIZE) {
        //Cria os quadros cinzas e brancos 
        Rectangle[][] quadros = new Rectangle[8][8];
        int posX = 0;
        int posY = 0;
        boolean branco = false;
        //Posiciona e colore os quadros
        for (int x = 0; x < 8; x++) {
            for (int y = 0; y < 8; y++) {
                quadros[x][y] = new Rectangle(posX, posY, SIZE, SIZE);
                if (branco) {
                    quadros[x][y].setFill(Color.WHITE);
                    branco = false;
                } else {
                    quadros[x][y].setFill(Color.GRAY);
                    branco = true;
                }
                root.getChildren().add(quadros[x][y]); //Adiciona no grupo
                posX += 40;
            }
            posY += 40;
            posX = 0;
            branco = !branco;
        }

    }
}

Já tentei usar :

tabuleiro.startDragAndDrop(TransferMode.MOVE);

mas da isso:

Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:378)
	at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:27)
	at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:97)
	at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
	at javafx.scene.Scene$DnDGesture.access$6100(Scene.java:1904)
	at javafx.scene.Scene.impl_startDragAndDrop(Scene.java:3734)
	at javafx.scene.Scene.startDragAndDrop(Scene.java:3723)
	at org.damas.Main.start(Main.java:40)
	at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:298)
	at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:136)
	at com.sun.javafx.application.PlatformImpl$3.run(PlatformImpl.java:108)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
	at com.sun.glass.ui.win.WinApplication$2$1.run(WinApplication.java:62)
	... 1 more
Java Result: 1

Ninguem ???