private void updateUI() {
    if (bubbleMode) {
      int margin = 20;
      if (models.size() > 10) {
        margin = 15;
      }
      if (models.size() > 15) {
        margin = 8;
      }
      if (models.size() > 20) {
        margin = 3;
      }
      if (models.size() > 25) {
        margin = 2;
        bubbleRadius = 8;
      }
      if (models.size() > 30) {
        margin = 2;
        bubbleRadius = 5;
      }
      box = new HBox(0);
      box.setAlignment(Pos.BASELINE_LEFT);
      bubbleBox = new HBox(margin);
      bubbleBox.setMinWidth(PaneUtil.WIDTH);
      bubbleBox.setAlignment(Pos.CENTER);
      for (IServiceModel model : models) {
        Circle selectorCircle = new Circle(bubbleRadius, bubbleRadius, bubbleRadius, Colors.COLOR_DARK_HEADER);
        selectorCircle.setStrokeWidth(STROKE_WIDTH);
        selectorCircle.setStroke(Colors.COLOR_DARK_HEADER);
        selectorCircle.setUserData(model);
        bubbleBox.getChildren().add(selectorCircle);
      }
      box.getChildren().add(bubbleBox);
    }
    else {
      bubbleRadius = 12;
      box = new HBox(0);
      box.setAlignment(Pos.BASELINE_LEFT);
      box.setPadding(new Insets(0,0,0,30));

      Canvas progress = new Canvas(PAGER_WIDTH, bubbleRadius*2+2);
      gc = progress.getGraphicsContext2D();
      gc.setFill(Paint.valueOf(Colors.HEX_COLOR_INACTIVE));
      gc.fillRoundRect(0, 0, PAGER_WIDTH, bubbleRadius*2+2, bubbleRadius*2+2, bubbleRadius*2+2);
      gc.setFill(Paint.valueOf(Colors.HEX_COLOR_DARK));
      gc.fillOval(2, 0, bubbleRadius*2, bubbleRadius*2);

      box.getChildren().add(progress);
    }

    if(root instanceof BorderPane) {
      ((BorderPane)root).setBottom(box);
    }
    else {
      root.getChildren().add(box);
    }

    updateActivity();
  }