diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/ScoutTypeDecorators.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/ScoutTypeDecorators.java
deleted file mode 100644
index 0fbc103..0000000
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/internal/extensions/ScoutTypeDecorators.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 BSI Business Systems Integration AG.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     BSI Business Systems Integration AG - initial API and implementation
- ******************************************************************************/
-///*******************************************************************************
-// * Copyright (c) 2010 BSI Business Systems Integration AG.
-// * All rights reserved. This program and the accompanying materials
-// * are made available under the terms of the Eclipse Public License v1.0
-// * which accompanies this distribution, and is available at
-// * http://www.eclipse.org/legal/epl-v10.html
-// *
-// * Contributors:
-// *     BSI Business Systems Integration AG - initial API and implementation
-// ******************************************************************************/
-//package org.eclipse.scout.sdk.ui.internal.extensions;
-//
-//import java.security.BasicPermission;
-//import java.util.ArrayList;
-//import java.util.HashMap;
-//
-//import org.eclipse.scout.sdk.RuntimeClasses;
-//import org.eclipse.scout.sdk.ui.ScoutSdkUi;
-//
-///**
-// * <h3>BCTypeNameUtility</h3> ...
-// */
-//public class ScoutTypeDecorators {
-//
-//  public static final String PHANTOM_CLASS_NAME_RANGE_BOX_DOUBLE = RuntimeClasses.AbstractSequenceBox + "#double";
-//  public static final String PHANTOM_CLASS_NAME_RANGE_BOX_BIG_DECIMAL = RuntimeClasses.AbstractSequenceBox + "#bigDecimal";
-//  public static final String PHANTOM_CLASS_NAME_RANGE_BOX_DATE = RuntimeClasses.AbstractSequenceBox + "#date";
-//  public static final String PHANTOM_CLASS_NAME_RANGE_BOX_INTEGER = RuntimeClasses.AbstractSequenceBox + "#integer";
-//  public static final String PHANTOM_CLASS_NAME_RANGE_BOX_LONG = RuntimeClasses.AbstractSequenceBox + "#long";
-//  public static final String PHANTOM_CLASS_NAME_RANGE_BOX_TIME = RuntimeClasses.AbstractSequenceBox + "#time";
-//  public static final String PHANTOM_CLASS_NAME_RANGE_BOX_DATE_TIME = RuntimeClasses.AbstractSequenceBox + "#dateTime";
-//  public static final String PHANTOM_CLASS_NAME_DATE_TIME_FIELD = RuntimeClasses.AbstractDateField + "#dateTime";
-//  public static final String PHANTOM_CLASS_NAME_MAIN_BOX = RuntimeClasses.AbstractGroupBox + "#main";
-//
-//  public static final int INDEX_BOOLEAN_FIELD = 1;
-//  public static final int INDEX_BUTTON = 2;
-//  public static final int INDEX_BACK_BUTTON = 3;
-//  public static final int INDEX_CANCEL_BUTTON = 4;
-//  public static final int INDEX_CLOSE_BUTTON = 5;
-//  public static final int INDEX_FINISH_BUTTON = 6;
-//  public static final int INDEX_NEXT_BUTTON = 7;
-//  public static final int INDEX_OK_BUTTON = 8;
-//  public static final int INDEX_RESET_BUTTON = 9;
-//  public static final int INDEX_SAVE_BUTTON = 10;
-//  public static final int INDEX_SEARCH_BUTTON = 11;
-//  public static final int INDEX_CALENDAR_FIELD = 12;
-//  public static final int INDEX_CHART_BOX = 13;
-//  public static final int INDEX_CHECK_BOX = 14;
-//  public static final int INDEX_COMPOSER_FIELD = 15;
-//  public static final int INDEX_CUSTOM_FIELD = 16;
-//  public static final int INDEX_DATE_FIELD = 17;
-//  public static final int INDEX_DOUBLE_FIELD = 18;
-//  public static final int INDEX_BIG_DECIMAL_FIELD = 122;
-//  public static final int INDEX_FILE_CHOOSER_FIELD = 19;
-//  public static final int INDEX_FORM = 20;
-//  public static final int INDEX_GROUP_BOX = 21;
-//  public static final int INDEX_HTML_FIELD = 22;
-//  public static final int INDEX_IMAGE_FIELD = 23;
-//  public static final int INDEX_INTEGER_FIELD = 27;
-//  public static final int INDEX_LABEL_FIELD = 24;
-//  public static final int INDEX_LIST_BOX = 25;
-//  public static final int INDEX_LONG_FIELD = 26;
-//  public static final int INDEX_MATRIX_FIELD = 28;
-//  public static final int INDEX_PLANNER_FIELD = 29;
-//  public static final int INDEX_RADIO_BUTTON_GROUP = 30;
-//  public static final int INDEX_SEQUENCE_BOX = 31;
-//  public static final int INDEX_SMART_FIELD = 32;
-//  public static final int INDEX_STRING_FIELD = 33;
-//  public static final int INDEX_TAB_BOX = 34;
-//  public static final int INDEX_TABLE_FIELD = 35;
-//  public static final int INDEX_TIME_FIELD = 36;
-//  public static final int INDEX_TREE_BOX = 37;
-//  public static final int INDEX_TREE_FIELD = 38;
-//  // NOT REAL TYPES
-//  public static final int INDEX_SEQUENCE_BOX_DOUBLE = 39;
-//  public static final int INDEX_SEQUENCE_BOX_DATE = 40;
-//  public static final int INDEX_SEQUENCE_BOX_LONG = 41;
-//  public static final int INDEX_RANGE_BOX_TIME = 42;
-//  public static final int INDEX_SEQUENCE_BOX_DATE_TIME = 43;
-//  public static final int INDEX_DATE_TIME_FIELD = 44;
-//  public static final int INDEX_SEQUENCE_BOX_INTEGER = 45;
-//  public static final int INDEX_SEQUENCE_BOX_BIG_DECIMAL = 123;
-//
-//  public static final int INDEX_OUTLINE = 46;
-//  public static final int INDEX_PAGE_WITH_TABLE = 47;
-//  public static final int INDEX_PAGE_WITH_NODES = 48;
-//  public static final int INDEX_WORKFLOW_PAGE = 49;
-//  public static final int INDEX_MENU = 50;
-//  public static final int INDEX_MENU_BOOKMARK = 51;
-//  public static final int INDEX_MENU_CHECKBOX = 52;
-//  public static final int INDEX_COLUMN_STRING = 53;
-//  public static final int INDEX_COLUMN_LONG = 54;
-//  public static final int INDEX_COLUMN_INTEGER = 55;
-//  public static final int INDEX_COLUMN_DOUBLE = 56;
-//  public static final int INDEX_COLUMN_DATE = 57;
-//  public static final int INDEX_COLUMN_TIME = 58;
-//  public static final int INDEX_MAIN_BOX = 59;
-//  public static final int INDEX_COLUMN_BIG_DECIMAL = 60;
-//  public static final int INDEX_COLUMN_SMART = 61;
-//
-//  public static final int INDEX_CALENDAR_ITEM = 100;
-//  public static final int INDEX_CALENDAR = 101;
-//  public static final int INDEX_CODE = 102;
-//  public static final int INDEX_CODE_TYPE = 103;
-//  public static final int INDEX_COLUMN = 104;
-//  public static final int INDEX_DESKTOP = 105;
-//  public static final int INDEX_KEY_STROKE = 106;
-//  public static final int INDEX_PERMISSION = 107;
-//  public static final int INDEX_SERVICE = 108;
-//  public static final int INDEX_LOOKUP_SERVICE = 109;
-//  public static final int INDEX_TABLE = 111;
-//  public static final int INDEX_TOOL = 112;
-//  public static final int INDEX_TREE = 113;
-//
-//  public static final int INDEX_WIZARD = 116;
-//  public static final int INDEX_WIZARD_STEP = 117;
-//  public static final int INDEX_WORKFLOW = 118;
-//  public static final int INDEX_WORKFLOW_STEP = 119;
-//
-//  public static final int INDEX_LOOKUP_CALL = 121;
-//
-//  // next number is 124
-//
-//  private static ScoutTypeDecorators instance = new ScoutTypeDecorators();
-//  private HashMap<String, ScoutTypeDecorator> m_qualifiedNameCache;
-//  private HashMap<Integer, ScoutTypeDecorator> m_indexedNameCache;
-//
-//  private ScoutTypeDecorators() {
-//    init();
-//  }
-//
-//  private void init() {
-//    ArrayList<ScoutTypeDecorator> list = new ArrayList<ScoutTypeDecorator>();
-//    list.add(new ScoutTypeDecorator(INDEX_BOOLEAN_FIELD, RuntimeClasses.AbstractBooleanField, "Boolean Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_BUTTON, RuntimeClasses.AbstractButton, "Button"));
-//    list.add(new ScoutTypeDecorator(INDEX_CANCEL_BUTTON, RuntimeClasses.AbstractCancelButton, "Button Cancel"));
-//    list.add(new ScoutTypeDecorator(INDEX_CLOSE_BUTTON, RuntimeClasses.AbstractCloseButton, "Button Close"));
-//    list.add(new ScoutTypeDecorator(INDEX_OK_BUTTON, RuntimeClasses.AbstractOkButton, "Button Ok"));
-//    list.add(new ScoutTypeDecorator(INDEX_RESET_BUTTON, RuntimeClasses.AbstractResetButton, "Button Reset"));
-//    list.add(new ScoutTypeDecorator(INDEX_SAVE_BUTTON, RuntimeClasses.AbstractSaveButton, "Button Save"));
-//    list.add(new ScoutTypeDecorator(INDEX_SEARCH_BUTTON, RuntimeClasses.AbstractSearchButton, "Button Search"));
-//    list.add(new ScoutTypeDecorator(INDEX_CALENDAR_FIELD, RuntimeClasses.AbstractCalendarField, "Calendar Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_CHART_BOX, RuntimeClasses.AbstractChartBox, "Chart Box"));
-//    list.add(new ScoutTypeDecorator(INDEX_CHECK_BOX, RuntimeClasses.AbstractCheckBox, "Check Box"));
-//    list.add(new ScoutTypeDecorator(INDEX_COMPOSER_FIELD, RuntimeClasses.AbstractComposerField, "Composer Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_CUSTOM_FIELD, RuntimeClasses.AbstractCustomField, "Custom Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_DATE_FIELD, RuntimeClasses.AbstractDateField, "Date Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_DOUBLE_FIELD, RuntimeClasses.AbstractDoubleField, "Double Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_BIG_DECIMAL_FIELD, RuntimeClasses.AbstractBigDecimalField, "BigDecimal Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_FILE_CHOOSER_FIELD, RuntimeClasses.AbstractFileChooserField, "FileChooser Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_GROUP_BOX, RuntimeClasses.AbstractGroupBox, "Group Box"));
-//    list.add(new ScoutTypeDecorator(INDEX_HTML_FIELD, RuntimeClasses.AbstractHtmlField, "Html Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_IMAGE_FIELD, RuntimeClasses.AbstractImageField, "Image Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_INTEGER_FIELD, RuntimeClasses.AbstractIntegerField, "Integer Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_LABEL_FIELD, RuntimeClasses.AbstractLabelField, "Label Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_LIST_BOX, RuntimeClasses.AbstractListBox, "List Box"));
-//    list.add(new ScoutTypeDecorator(INDEX_LONG_FIELD, RuntimeClasses.AbstractLongField, "Long Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_OUTLINE, RuntimeClasses.AbstractOutline, "Outline"));
-//    list.add(new ScoutTypeDecorator(INDEX_PAGE_WITH_NODES, RuntimeClasses.AbstractPageWithNodes, "Page with Nodes"));
-//    list.add(new ScoutTypeDecorator(INDEX_PAGE_WITH_TABLE, RuntimeClasses.AbstractPageWithTable, "Page with Table"));
-//    list.add(new ScoutTypeDecorator(INDEX_WORKFLOW_PAGE, RuntimeClasses.ExampleWorkflowTablePage, "Workflow Page"));
-//    list.add(new ScoutTypeDecorator(INDEX_PLANNER_FIELD, RuntimeClasses.AbstractPlannerField, "Planner Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_RADIO_BUTTON_GROUP, RuntimeClasses.AbstractRadioButtonGroup, "RadioButton Group"));
-//    list.add(new ScoutTypeDecorator(INDEX_SEQUENCE_BOX, RuntimeClasses.AbstractSequenceBox, "Range Box"));
-//    list.add(new ScoutTypeDecorator(INDEX_SMART_FIELD, RuntimeClasses.AbstractSmartField, "Smart Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_STRING_FIELD, RuntimeClasses.AbstractStringField, "String Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_TAB_BOX, RuntimeClasses.AbstractTabBox, "Tab Box"));
-//    list.add(new ScoutTypeDecorator(INDEX_TABLE_FIELD, RuntimeClasses.AbstractTableField, "Table Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_TIME_FIELD, RuntimeClasses.AbstractTimeField, "Time Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_TREE_BOX, RuntimeClasses.AbstractTreeBox, "Tree Box"));
-//    list.add(new ScoutTypeDecorator(INDEX_TREE_FIELD, RuntimeClasses.AbstractTreeField, "Tree Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_MENU, RuntimeClasses.AbstractMenu, "Menu"));
-//    list.add(new ScoutTypeDecorator(INDEX_MENU_BOOKMARK, RuntimeClasses.AbstractBookmarkMenu, "Bookmark menu"));
-//    list.add(new ScoutTypeDecorator(INDEX_MENU_CHECKBOX, RuntimeClasses.AbstractCheckBoxMenu, "Checkbox menu"));
-//    list.add(new ScoutTypeDecorator(INDEX_COLUMN_STRING, RuntimeClasses.AbstractStringColumn, "String Column"));
-//    list.add(new ScoutTypeDecorator(INDEX_COLUMN_SMART, RuntimeClasses.AbstractSmartColumn, "Smart Column"));
-//    list.add(new ScoutTypeDecorator(INDEX_COLUMN_LONG, RuntimeClasses.AbstractLongColumn, "Long Column"));
-//    list.add(new ScoutTypeDecorator(INDEX_COLUMN_INTEGER, RuntimeClasses.AbstractIntegerColumn, "Integer Column"));
-//    list.add(new ScoutTypeDecorator(INDEX_COLUMN_DOUBLE, RuntimeClasses.AbstractDoubleColumn, "Double Column"));
-//    list.add(new ScoutTypeDecorator(INDEX_COLUMN_BIG_DECIMAL, RuntimeClasses.AbstractBigDecimalColumn, "BigDecimal Column"));
-//    list.add(new ScoutTypeDecorator(INDEX_COLUMN_DATE, RuntimeClasses.AbstractDateColumn, "Date Column"));
-//    list.add(new ScoutTypeDecorator(INDEX_COLUMN_TIME, RuntimeClasses.AbstractTimeColumn, "Time Column"));
-//    list.add(new ScoutTypeDecorator(INDEX_FORM, RuntimeClasses.AbstractForm, "Form"));
-//
-//    list.add(new ScoutTypeDecorator(INDEX_CALENDAR_ITEM, RuntimeClasses.AbstractCalendarItem, "Calendar Item"));
-//    list.add(new ScoutTypeDecorator(INDEX_CALENDAR, RuntimeClasses.AbstractCalendar, "Calendar"));
-//    list.add(new ScoutTypeDecorator(INDEX_CODE, RuntimeClasses.AbstractCode, "Code"));
-//    list.add(new ScoutTypeDecorator(INDEX_CODE_TYPE, RuntimeClasses.AbstractCodeType, "Code Type"));
-//    list.add(new ScoutTypeDecorator(INDEX_COLUMN, RuntimeClasses.AbstractColumn, "Column"));
-//    list.add(new ScoutTypeDecorator(INDEX_DESKTOP, RuntimeClasses.AbstractDesktop, "Desktop"));
-//    list.add(new ScoutTypeDecorator(INDEX_KEY_STROKE, RuntimeClasses.AbstractKeyStroke, "Key Stroke"));
-//    list.add(new ScoutTypeDecorator(INDEX_PERMISSION, BasicPermission.class, "Permission"));
-//    list.add(new ScoutTypeDecorator(INDEX_SERVICE, RuntimeClasses.AbstractService, "Service"));
-//    list.add(new ScoutTypeDecorator(INDEX_LOOKUP_SERVICE, RuntimeClasses.AbstractLookupService, "Lookup Service"));
-//    list.add(new ScoutTypeDecorator(INDEX_LOOKUP_CALL, RuntimeClasses.LookupCall, "Lookup Call"));
-//    list.add(new ScoutTypeDecorator(INDEX_TABLE, RuntimeClasses.AbstractTable, "Table"));
-//    list.add(new ScoutTypeDecorator(INDEX_TOOL, RuntimeClasses.AbstractToolButton, "Tool Button"));
-//    list.add(new ScoutTypeDecorator(INDEX_TREE, RuntimeClasses.AbstractTree, "Tree"));
-//    list.add(new ScoutTypeDecorator(INDEX_WIZARD, RuntimeClasses.AbstractWizard, "Wizard"));
-//    list.add(new ScoutTypeDecorator(INDEX_WIZARD_STEP, RuntimeClasses.AbstractWizardStep, "Wizard Step"));
-//
-//    list.add(new ScoutTypeDecorator(INDEX_SEQUENCE_BOX_DOUBLE, PHANTOM_CLASS_NAME_RANGE_BOX_DOUBLE, "Sequence Box Double"));
-//    list.add(new ScoutTypeDecorator(INDEX_SEQUENCE_BOX_BIG_DECIMAL, PHANTOM_CLASS_NAME_RANGE_BOX_BIG_DECIMAL, "Sequence Box BigDecimal"));
-//    list.add(new ScoutTypeDecorator(INDEX_SEQUENCE_BOX_DATE, PHANTOM_CLASS_NAME_RANGE_BOX_DATE, "Sequence Box Date"));
-//    list.add(new ScoutTypeDecorator(INDEX_SEQUENCE_BOX_INTEGER, PHANTOM_CLASS_NAME_RANGE_BOX_INTEGER, "Sequence Box Integer"));
-//    list.add(new ScoutTypeDecorator(INDEX_SEQUENCE_BOX_LONG, PHANTOM_CLASS_NAME_RANGE_BOX_LONG, "Sequence Box Long"));
-//    list.add(new ScoutTypeDecorator(INDEX_RANGE_BOX_TIME, PHANTOM_CLASS_NAME_RANGE_BOX_TIME, "Sequence Box Time"));
-//    list.add(new ScoutTypeDecorator(INDEX_SEQUENCE_BOX_DATE_TIME, PHANTOM_CLASS_NAME_RANGE_BOX_DATE_TIME, "Sequence Box Date-Time"));
-//    list.add(new ScoutTypeDecorator(INDEX_DATE_TIME_FIELD, PHANTOM_CLASS_NAME_DATE_TIME_FIELD, "Date-Time Field"));
-//    list.add(new ScoutTypeDecorator(INDEX_MAIN_BOX, PHANTOM_CLASS_NAME_MAIN_BOX, "Main Box"));
-//
-//    //
-//    m_indexedNameCache = new HashMap<Integer, ScoutTypeDecorator>(list.size());
-//    m_qualifiedNameCache = new HashMap<String, ScoutTypeDecorator>(list.size());
-//    for (ScoutTypeDecorator tuple : list) {
-//      m_indexedNameCache.put(tuple.getIndex(), tuple);
-//      m_qualifiedNameCache.put(tuple.getFullyQualifiedName(), tuple);
-//    }
-//    list.clear();
-//    list = null;
-//  }
-//
-//  public static String getText(String fullyQualifiedClassName) {
-//    return instance.getTextImpl(fullyQualifiedClassName);
-//  }
-//
-//  private String getTextImpl(String fullyQualifiedClassName) {
-//    ScoutTypeDecorator tuple = null;//m_qualifiedNameCache.get(fullyQualifiedClassName);
-//    if (tuple != null) {
-//      return tuple.getText();
-//    }
-//    else {
-//      // ScoutSdkUi.logInfo("could not find simple name for class '"+fullyQualifiedClassName+"'");
-//      // build simple name
-//      int i = fullyQualifiedClassName.lastIndexOf('.');
-//      if (i > 0) {
-//        return fullyQualifiedClassName.substring(i + 1);
-//      }
-//      return fullyQualifiedClassName;
-//    }
-//
-//  }
-//
-//  public static String getText(int decoratorIndex) {
-//    return instance.getTextImpl(decoratorIndex);
-//  }
-//
-//  private String getTextImpl(int decoratorIndex) {
-//    ScoutTypeDecorator tuple = m_indexedNameCache.get(decoratorIndex);
-//    if (tuple != null) {
-//      return tuple.getText();
-//    }
-//    else {
-//      ScoutSdkUi.logInfo("could not find simple name for index '" + decoratorIndex + "'");
-//      return "no name for index '" + decoratorIndex + "'";
-//    }
-//  }
-//
-//  public static ScoutTypeDecorator get(int decoratorIndex) {
-//    return instance.getDecoratorImpl(decoratorIndex);
-//  }
-//
-//  private ScoutTypeDecorator getDecoratorImpl(int decoratorIndex) {
-//    return m_indexedNameCache.get(decoratorIndex);
-//  }
-//
-//}
