private Transition createOpenAnimation(final RadialMenuItem newSelectedItem) {

	// Children slide animation
	final List<RadialMenuItem> children = itemToValues.get(newSelectedItem);

	double startAngleEnd = 0;
	final double startAngleBegin = newSelectedItem.getStartAngle();
	final ParallelTransition transition = new ParallelTransition();

	itemToGroupValue.get(newSelectedItem).setVisible(true);
	int internalCounter = 1;
	for (int i = 0; i < children.size(); i++) {
	    final RadialMenuItem it = children.get(i);
	    if (i % 2 == 0) {
		startAngleEnd = startAngleBegin + internalCounter
			* it.getLength();
	    } else {
		startAngleEnd = startAngleBegin - internalCounter
			* it.getLength();
		internalCounter++;
	    }

	    final Animation itemTransition = new Timeline(new KeyFrame(
		    Duration.ZERO, new KeyValue(it.startAngleProperty(),
			    startAngleBegin)), new KeyFrame(
		    Duration.millis(400), new KeyValue(it.startAngleProperty(),
			    startAngleEnd)));

	    transition.getChildren().add(itemTransition);

	    final ImageView image = itemAndValueToIcon.get(it);
	    image.setOpacity(0.0);
	    final Timeline iconTransition = new Timeline(new KeyFrame(
		    Duration.millis(0),
		    new KeyValue(image.opacityProperty(), 0)), new KeyFrame(
		    Duration.millis(300), new KeyValue(image.opacityProperty(),
			    0)), new KeyFrame(Duration.millis(400),
		    new KeyValue(image.opacityProperty(), 1.0)));

	    transition.getChildren().add(iconTransition);
	}

	// Selected item background color change
	final DoubleProperty backgroundColorAnimValue = new SimpleDoubleProperty();
	final ChangeListener<? super Number> listener = new ChangeListener<Number>() {

	    @Override
	    public void changed(final ObservableValue<? extends Number> arg0,
		    final Number arg1, final Number arg2) {
		final Color c = hoverColor.interpolate(selectionColor,
			arg2.floatValue());

		newSelectedItem.setBackgroundFill(c);
		newSelectedItem.setStrokeFill(c);
		newSelectedItem.setBackgroundMouseOnFill(c);
		newSelectedItem.setStrokeMouseOnFill(c);
	    }
	};

	backgroundColorAnimValue.addListener(listener);

	final Animation itemTransition = new Timeline(new KeyFrame(
		Duration.ZERO, new KeyValue(backgroundColorAnimValue, 0)),
		new KeyFrame(Duration.millis(300), new KeyValue(
			backgroundColorAnimValue, 1.0)));
	transition.getChildren().add(itemTransition);

	// Selected item image icon color change
	final FadeTransition selectedItemImageBlackFade = FadeTransitionBuilder
		.create().node(itemAndValueToIcon.get(newSelectedItem))
		.duration(Duration.millis(400)).fromValue(1.0).toValue(0.0)
		.build();

	final FadeTransition selectedItemImageWhiteFade = FadeTransitionBuilder
		.create().node(itemAndValueToWhiteIcon.get(newSelectedItem))
		.duration(Duration.millis(400)).fromValue(0).toValue(1.0)
		.build();
	transition.getChildren().addAll(selectedItemImageBlackFade,
		selectedItemImageWhiteFade);

	// Unselected items fading
	final FadeTransition notSelectedTransition = FadeTransitionBuilder
		.create().node(notSelectedItemEffect)
		.duration(Duration.millis(200)).delay(Duration.millis(200))
		.fromValue(0).toValue(0.8).build();
	notSelectedItemEffect.setOpacity(0);
	notSelectedItemEffect.setVisible(true);

	transition.getChildren().add(notSelectedTransition);
	return transition;
    }