private void resize() {
        size = getSkinnable().getWidth() < getSkinnable().getHeight() ? getSkinnable().getWidth() : getSkinnable().getHeight();

        logoLayer.setWidth(size);
        logoLayer.setHeight(size);

        if (size > 0) {
            background.setPrefSize(size, size);

            // TODO: hourPointer and minutePointer have to be vice versa...wrong scaling here !!!

            if (Clock.Design.IOS6 == getSkinnable().getDesign()) {
                hourPointerWidthFactor    = 0.04;
                hourPointerHeightFactor   = 0.55;
                minutePointerWidthFactor  = 0.04;
                minutePointerHeightFactor = 0.4;
                secondPointerWidthFactor  = 0.075;
                secondPointerHeightFactor = 0.46;
                majorTickWidthFactor      = 0.04;
                majorTickHeightFactor     = 0.12;
                minorTickWidthFactor      = 0.01;
                minorTickHeightFactor     = 0.05;
                majorTickOffset           = 0.018;
                minorTickOffset           = 0.05;
                hourAngle.setPivotX(size * 0.5 * hourPointerWidthFactor);
                hourAngle.setPivotY(size * 0.76 * hourPointerHeightFactor);
                minuteAngle.setPivotX(size * 0.5 * minutePointerWidthFactor);
                minuteAngle.setPivotY(size * 0.66 * minutePointerHeightFactor);
                secondAngle.setPivotX(size * 0.5 * secondPointerWidthFactor);
                secondAngle.setPivotY(size * 0.7341040462 * secondPointerHeightFactor);
            } else if (Clock.Design.BRAUN == getSkinnable().getDesign()) {
                hourPointerWidthFactor    = 0.105;
                hourPointerHeightFactor   = 0.485;
                minutePointerWidthFactor  = 0.105;
                minutePointerHeightFactor = 0.4;
                secondPointerWidthFactor  = 0.09;
                secondPointerHeightFactor = 0.53;
                majorTickWidthFactor      = 0.015;
                majorTickHeightFactor     = 0.045;
                minorTickWidthFactor      = 0.0075;
                minorTickHeightFactor     = 0.0225;
                majorTickOffset           = 0.012;
                minorTickOffset           = 0.02;
                hourAngle.setPivotX(size * 0.5 * hourPointerWidthFactor);
                hourAngle.setPivotY(size * 0.895 * hourPointerHeightFactor);
                minuteAngle.setPivotX(size * 0.5 * minutePointerWidthFactor);
                minuteAngle.setPivotY(size * 0.87 * minutePointerHeightFactor);
                secondAngle.setPivotX(size * 0.5 * secondPointerWidthFactor);
                secondAngle.setPivotY(size * 0.8125 * secondPointerHeightFactor);
            } else if (Clock.Design.BOSCH == getSkinnable().getDesign()) {
                hourPointerWidthFactor    = 0.04;
                hourPointerHeightFactor   = 0.54;  // ToDo: switch with minutePointerHeightFactor
                minutePointerWidthFactor  = 0.04;
                minutePointerHeightFactor = 0.38;  // ToDo: switch with hourPointerHeightFactor
                secondPointerWidthFactor  = 0.09;
                secondPointerHeightFactor = 0.53;
                majorTickWidthFactor      = 0.02;
                majorTickHeightFactor     = 0.145;
                minorTickWidthFactor      = 0.006;
                minorTickHeightFactor     = 0.07;
                majorTickOffset           = 0.005;
                minorTickOffset           = 0.04;
                hourAngle.setPivotX(size * 0.5 * hourPointerWidthFactor);
                hourAngle.setPivotY(size * 0.8240740741 * hourPointerHeightFactor);
                minuteAngle.setPivotX(size * 0.5 * minutePointerWidthFactor);
                minuteAngle.setPivotY(size * 0.75 * minutePointerHeightFactor);
                secondAngle.setPivotX(size * 0.5 * secondPointerWidthFactor);
                secondAngle.setPivotY(size * 0.8125 * secondPointerHeightFactor);
            } else {
                hourPointerWidthFactor    = 0.04;
                hourPointerHeightFactor   = 0.47;
                minutePointerWidthFactor  = 0.055;
                minutePointerHeightFactor = 0.33;
                secondPointerWidthFactor  = 0.1;
                secondPointerHeightFactor = 0.455;
                majorTickWidthFactor      = 0.04;
                majorTickHeightFactor     = 0.12;
                minorTickWidthFactor      = 0.025;
                minorTickHeightFactor     = 0.04;
                majorTickOffset           = 0.018;
                minorTickOffset           = 0.06;
                hourAngle.setPivotX(size * 0.5 * hourPointerWidthFactor);
                hourAngle.setPivotY(size * hourPointerHeightFactor);
                minuteAngle.setPivotX(size * 0.5 * minutePointerWidthFactor);
                minuteAngle.setPivotY(size * minutePointerHeightFactor);
                secondAngle.setPivotX(size * 0.5 * secondPointerWidthFactor);
                secondAngle.setPivotY(size * secondPointerHeightFactor);
            }

            drawLogoLayer();

            double radius = 0.4;
            double sinValue;
            double cosValue;
            int index = 0;
            for (double angle = 0 ; angle < 360 ; angle += 6) {
                sinValue = Math.sin(Math.toRadians(angle));
                cosValue = Math.cos(Math.toRadians(angle));
                Region tick = ticks.get(index);
                if (angle % 30 == 0) {
                    tick.setPrefWidth(size * majorTickWidthFactor);
                    tick.setPrefHeight(size * majorTickHeightFactor);
                    tick.setTranslateX(size * 0.5 + ((size * (radius + majorTickOffset) * sinValue) - (size * (majorTickWidthFactor) * 0.5)));
                    tick.setTranslateY(size * 0.5 + ((size * (radius + majorTickOffset) * cosValue) - (size * (majorTickHeightFactor) * 0.5)));
                } else {
                    tick.setPrefWidth(size * minorTickWidthFactor);
                    tick.setPrefHeight(size * minorTickHeightFactor);
                    tick.setTranslateX(size * 0.5 + ((size * (radius + minorTickOffset) * sinValue) - (size * (minorTickWidthFactor) * 0.5)));
                    tick.setTranslateY(size * 0.5 + ((size * (radius + minorTickOffset) * cosValue) - (size * (minorTickHeightFactor) * 0.5)));
                }
                tick.setRotate(-angle);
                index++;
            }

            if (Clock.Design.BRAUN == getSkinnable().getDesign()) {
                int tickLabelCounter = 0;
                //tickLabelFont = Font.loadFont(getClass().getResourceAsStream("/eu/hansolo/enzo/fonts/helvetica.ttf"), (0.075 * size));
                tickLabelFont = Font.font("Bebas Neue", FontWeight.THIN, FontPosture.REGULAR, 0.09 * size);
                for (double angle = 0 ; angle < 360 ; angle += 30.0) {
                    double x = 0.34 * size * Math.sin(Math.toRadians(150 - angle));
                    double y = 0.34 * size * Math.cos(Math.toRadians(150 - angle));
                    tickLabels.get(tickLabelCounter).setFont(tickLabelFont);
                    tickLabels.get(tickLabelCounter).setX(size * 0.5 + x - tickLabels.get(tickLabelCounter).getLayoutBounds().getWidth() * 0.5);
                    tickLabels.get(tickLabelCounter).setY(size * 0.5 + y);
                    tickLabels.get(tickLabelCounter).setTextOrigin(VPos.CENTER);
                    tickLabels.get(tickLabelCounter).setTextAlignment(TextAlignment.CENTER);
                    tickLabelCounter++;
                }
            }

            hourPointer.setPrefSize(size * hourPointerWidthFactor, size * hourPointerHeightFactor);
            if (Clock.Design.IOS6 == getSkinnable().getDesign()) {
                hourPointer.setTranslateX(size * 0.5 - (hourPointer.getPrefWidth() * 0.5));
                hourPointer.setTranslateY(size * 0.5 - (hourPointer.getPrefHeight()) + (hourPointer.getPrefHeight() * 0.24));
            } else if (Clock.Design.BRAUN == getSkinnable().getDesign()) {
                hourPointer.setTranslateX(size * 0.5 - (hourPointer.getPrefWidth() * 0.5));
                hourPointer.setTranslateY(size * 0.5 - (hourPointer.getPrefHeight()) + (hourPointer.getPrefHeight() * 0.108));
                hourPointerFlour.setPrefSize(size * hourPointerWidthFactor, size * hourPointerHeightFactor);
                hourPointerFlour.setTranslateX(size * 0.5 - (hourPointer.getPrefWidth() * 0.5));
                hourPointerFlour.setTranslateY(size * 0.5 - (hourPointer.getPrefHeight()) + (hourPointer.getPrefHeight() * 0.108));
            } else if (Clock.Design.BOSCH == getSkinnable().getDesign()) {
                hourPointer.setTranslateX(size * 0.5 - (hourPointer.getPrefWidth() * 0.5));
                hourPointer.setTranslateY(size * 0.5 - (hourPointer.getPrefHeight()) + (hourPointer.getPrefHeight() * 0.1759259259));
            } else {
                hourPointer.setTranslateX(size * 0.5 - (hourPointer.getPrefWidth() * 0.5));
                hourPointer.setTranslateY(size * 0.5 - hourPointer.getPrefHeight());
            }

            minutePointer.setPrefSize(size * minutePointerWidthFactor, size * minutePointerHeightFactor);
            if (Clock.Design.IOS6 == getSkinnable().getDesign()) {
                minutePointer.setTranslateX(size * 0.5 - (minutePointer.getPrefWidth() * 0.5));
                minutePointer.setTranslateY(size * 0.5 - (minutePointer.getPrefHeight()) + (minutePointer.getPrefHeight() * 0.34));
            } else if (Clock.Design.BRAUN == getSkinnable().getDesign()) {
                minutePointer.setTranslateX(size * 0.5 - (minutePointer.getPrefWidth() * 0.5));
                minutePointer.setTranslateY(size * 0.5 - (minutePointer.getPrefHeight()) + (minutePointer.getPrefHeight() * 0.128));
                minutePointerFlour.setPrefSize(size * minutePointerWidthFactor, size * minutePointerHeightFactor);
                minutePointerFlour.setTranslateX(size * 0.5 - (minutePointer.getPrefWidth() * 0.5));
                minutePointerFlour.setTranslateY(size * 0.5 - (minutePointer.getPrefHeight()) + (minutePointer.getPrefHeight() * 0.128));
            } else if (Clock.Design.BOSCH == getSkinnable().getDesign()) {
                minutePointer.setTranslateX(size * 0.5 - (minutePointer.getPrefWidth() * 0.5));
                minutePointer.setTranslateY(size * 0.5 - (minutePointer.getPrefHeight()) + (minutePointer.getPrefHeight() * 0.25));
            } else {
                minutePointer.setTranslateX(size * 0.5 - (minutePointer.getPrefWidth() * 0.5));
                minutePointer.setTranslateY(size * 0.5 - minutePointer.getPrefHeight());
            }

            secondPointer.setPrefSize(size * secondPointerWidthFactor, size * secondPointerHeightFactor);
            if (Clock.Design.IOS6 == getSkinnable().getDesign()) {
                secondPointer.setTranslateX(size * 0.5 - (secondPointer.getPrefWidth() * 0.5));
                secondPointer.setTranslateY(size * 0.5 - (secondPointer.getPrefHeight()) + (secondPointer.getPrefHeight() * 0.2658959538));
            } else if (Clock.Design.BRAUN == getSkinnable().getDesign()) {
                secondPointer.setTranslateX(size * 0.5 - (secondPointer.getPrefWidth() * 0.5));
                secondPointer.setTranslateY(size * 0.5 - secondPointer.getPrefHeight() + (secondPointer.getPrefHeight() * 0.189));
            } else {
                secondPointer.setTranslateX(size * 0.5 - (secondPointer.getPrefWidth() * 0.5));
                secondPointer.setTranslateY(size * 0.5 - secondPointer.getPrefHeight());
            }

            if (Clock.Design.IOS6 == getSkinnable().getDesign()) {
                centerKnob.setPrefSize(size * 0.015, size * 0.015);
            } else if (Clock.Design.BRAUN == getSkinnable().getDesign()) {
                centerKnob.setPrefSize(size * 0.085, size * 0.085);
            } else if (Clock.Design.BOSCH == getSkinnable().getDesign()) {
                centerKnob.setPrefSize(size * 0.035, size * 0.035);
            } else {
                centerKnob.setPrefSize(size * 0.1, size * 0.1);
            }
            centerKnob.setTranslateX(size * 0.5 - (centerKnob.getPrefWidth() * 0.5));
            centerKnob.setTranslateY(size * 0.5 - (centerKnob.getPrefHeight() * 0.5));

            foreground.setPrefSize(size * 0.955, size * 0.495);
            foreground.setTranslateX(size * 0.5 - (foreground.getPrefWidth() * 0.5));
            foreground.setTranslateY(size * 0.01);
        }
    }