private void initOverviewView() {
    final IOverviewCategory creationOverview =
        view.createOverview(resources.getString("Intimacies.Overview.BorderLabel"));
    final ILabelledAlotmentView freeIntimaciesView =
        creationOverview.addAlotmentView(resources.getString("Intimacies.Overview.Free"), 2);
    final ILabelledAlotmentView totalIntimaciesView =
        creationOverview.addAlotmentView(resources.getString("Intimacies.Overview.Maximum"), 2);
    final IValueView<Integer> bonusPointsView =
        creationOverview.addIntegerValueView(
            resources.getString("Intimacies.Overview.BonusPoints"), 2);
    final IOverviewCategory experienceOverview =
        view.createOverview(resources.getString("Intimacies.Overview.BorderLabel"));
    final ILabelledAlotmentView experienceMaximumView =
        experienceOverview.addAlotmentView(resources.getString("Intimacies.Overview.Maximum"), 2);
    model.addModelChangeListener(
        new IChangeListener() {
          @Override
          public void changeOccurred() {
            recalculateOverview(
                freeIntimaciesView, totalIntimaciesView, bonusPointsView, experienceMaximumView);
          }
        });
    model.addModelChangeListener(
        new IRemovableEntryListener<IIntimacy>() {
          @Override
          public void entryAdded(IIntimacy entry) {
            recalculateOverview(
                freeIntimaciesView, totalIntimaciesView, bonusPointsView, experienceMaximumView);
          }

          @Override
          public void entryAllowed(boolean complete) {
            // Nothing to do
          }

          @Override
          public void entryRemoved(IIntimacy entry) {
            recalculateOverview(
                freeIntimaciesView, totalIntimaciesView, bonusPointsView, experienceMaximumView);
          }
        });
    model.addCharacterChangeListener(
        new DedicatedCharacterChangeAdapter() {
          @Override
          public void experiencedChanged(boolean experienced) {
            setOverview(experienced, experienceOverview, creationOverview);
          }
        });
    setOverview(model.isCharacterExperienced(), experienceOverview, creationOverview);
    recalculateOverview(
        freeIntimaciesView, totalIntimaciesView, bonusPointsView, experienceMaximumView);
  }
 @Override
 protected IRemovableTraitView<?> createSubView(BasicUi basicUi, final IIntimacy intimacy) {
   final IRemovableTraitView<IToggleButtonTraitView<?>> intimacyView =
       view.addEntryView(basicUi.getRemoveIcon(), null, intimacy.getName());
   intimacyView.setMaximum(model.getCompletionValue());
   intimacyView.setValue(intimacy.getTrait().getCurrentValue());
   new TraitPresenter(intimacy.getTrait(), intimacyView).initPresentation();
   intimacyView.addButtonListener(
       new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent e) {
           model.removeEntry(intimacy);
         }
       });
   intimacyView
       .getInnerView()
       .addButtonSelectedListener(
           new IBooleanValueChangedListener() {
             @Override
             public void valueChanged(boolean newValue) {
               intimacy.setComplete(newValue);
             }
           });
   intimacy.addCompletionListener(
       new IBooleanValueChangedListener() {
         @Override
         public void valueChanged(boolean newValue) {
           intimacyView.getInnerView().setButtonState(newValue, true);
         }
       });
   intimacyView.getInnerView().setButtonState(intimacy.isComplete(), true);
   return intimacyView;
 }
 @Override
 public void initPresentation() {
   String labelText = resources.getString("Intimacies.SelectionLabel");
   BasicUi basicUi = new BasicUi();
   IStringSelectionView selectionView = view.addSelectionView(labelText, basicUi.getAddIcon());
   initSelectionViewListening(selectionView);
   initOverviewView();
   initModelListening(basicUi, selectionView);
   for (IIntimacy intimacy : model.getEntries()) {
     addSubView(basicUi, intimacy);
   }
   reset(selectionView);
 }
 private void recalculateOverview(
     ILabelledAlotmentView freeIntimaciesView,
     ILabelledAlotmentView totalIntimaciesView,
     IValueView<Integer> bonusPointsView,
     ILabelledAlotmentView experienceMaximumView) {
   adjustBonusPointsOverview(
       freeIntimaciesView, model.getEntries().size(), model.getFreeIntimacies());
   adjustTotalOverview(totalIntimaciesView, model.getEntries().size(), model.getIntimaciesLimit());
   adjustTotalOverview(
       experienceMaximumView, model.getEntries().size(), model.getIntimaciesLimit());
   adjustOverview(bonusPointsView);
 }