protected void update() {
		
		//Arc lenght angle
		double arcAngleLengthInRadians = Math.toRadians(getLength());

        //Angle rotation of the item
		double startAngleInRadians = Math.toRadians(getStartAngle() + ANGLE_TO_START_AT_ZERO_DEGREE);

		moveTo.setX(getInnerRadius() * Math.cos(startAngleInRadians));
		moveTo.setY(getInnerRadius() * Math.sin(startAngleInRadians));
		
		lineTo.setX(getOuterRadius() * Math.cos(startAngleInRadians));
		lineTo.setY(getOuterRadius() * Math.sin(startAngleInRadians));
		
		arcTo.setX(getOuterRadius() * Math.cos(startAngleInRadians+arcAngleLengthInRadians - Math.asin(getGap() / getOuterRadius())));
		arcTo.setY(getOuterRadius() * Math.sin(startAngleInRadians+arcAngleLengthInRadians - Math.asin(getGap() / getOuterRadius())));
		arcTo.setRadiusX(getOuterRadius());
		arcTo.setRadiusY(getOuterRadius());
		arcTo.setSweepFlag(true);
		arcTo.setLargeArcFlag(getLength() > 180);
		
		lineTo2.setX(getInnerRadius() * Math.cos(startAngleInRadians+arcAngleLengthInRadians - Math.asin(getGap() / getInnerRadius())));
		lineTo2.setY(getInnerRadius() * Math.sin(startAngleInRadians+arcAngleLengthInRadians - Math.asin(getGap() / getInnerRadius())));
		
		arcToInner.setX(getInnerRadius() * Math.cos(startAngleInRadians));
		arcToInner.setY(getInnerRadius() * Math.sin(startAngleInRadians));
		arcToInner.setRadiusX(getInnerRadius());
		arcToInner.setRadiusY(getInnerRadius());
		arcToInner.setSweepFlag(false);
		arcToInner.setLargeArcFlag(getLength() > 180);
		
		double centerRadius = (getOuterRadius() + getInnerRadius()) / 2;
		Point2D centerOfPath = new Point2D(centerRadius*Math.cos(startAngleInRadians + arcAngleLengthInRadians/2),
				centerRadius*Math.sin(startAngleInRadians + arcAngleLengthInRadians/2));

		if(this.getImage() != null) {
            double width = this.getImage().getBoundsInLocal().getWidth();
            double height =this.getImage().getBoundsInLocal().getHeight();
            this.getImage().relocate(centerOfPath.getX() - width/2, centerOfPath.getY()-height/2);
		}


        if(this.getText() != null && !this.getText().isEmpty()) {
            double width = this.textShape.getBoundsInLocal().getWidth();
            double height =this.textShape.getBoundsInLocal().getHeight();
            this.textShape.relocate(centerOfPath.getX() - width / 2, centerOfPath.getY() - height / 2);

            double rotationAngle = getStartAngle() + ((getOuterRadius() - getInnerRadius()) / 2);
            if(getStartAngle() > 75 && getStartAngle() < 270) {
                rotationAngle += 180;
            }
            this.textShape.setRotate(rotationAngle);
        }
	}