diff --git a/org.eclipse.osbp.ecview.extension.api/src/org/eclipse/osbp/ecview/extension/api/ILayoutingStrategy.java b/org.eclipse.osbp.ecview.extension.api/src/org/eclipse/osbp/ecview/extension/api/ILayoutingStrategy.java
index 8a3a96a..6791afb 100644
--- a/org.eclipse.osbp.ecview.extension.api/src/org/eclipse/osbp/ecview/extension/api/ILayoutingStrategy.java
+++ b/org.eclipse.osbp.ecview.extension.api/src/org/eclipse/osbp/ecview/extension/api/ILayoutingStrategy.java
@@ -123,6 +123,12 @@
 	/** The Constant TAG__GROUP. */
 	public static final String TAG__GROUP = "group";
 
+	/** The Constant TAG__BEAN. */
+	public static final String TAG__BEAN = "bean";
+	
+	/** The Constant TAG__BEANONTAB. */
+	public static final String TAG__BEANONTAB = "beanOnTab";
+	
 	/** The Constant TAG__CONSTRAINT. */
 	public static final String TAG__CONSTRAINT = "constraint";
 
@@ -155,9 +161,27 @@
 	 */
 	public static final String TAG__TO_BE_CLEANED = "strategylayout__toBeCleaned";
 
-	/** The Constant TAG__IMAGE_PICKER. */
+	/** The Constant TAG__IMAGE_PICKER. 
+	 * a combobox presentation with images is rendered*/
 	public static final String TAG__IMAGE_PICKER = "imagePicker";
 
+	/** The Constant TAG__READONLY. 
+	 * the tagged item is read only. */
+	public static final String TAG__READONLY = "readonly";
+
+	/** The Constant TAG__ONKANBANCARD. 
+	 * the tagged item is displayed on a kanban card*/
+	public static final String TAG__ONKANBANCARD = "onKanbanCard";
+
+	/** The Constant TAG__NUMBER_TO_UOMO. 
+	 * the tagged item has Units Of Measurement functionality */
+	public static final String TAG__NUMBER_TO_UOMO = "NumberToUomo";
+	
+	/**
+	 * The possibility to create owners for bean references 
+	 */
+	public static final String TAG__SIDEKICK = "sideKick";
+
 	/**
 	 * Does the layouting for model.
 	 *
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/ctool16/CreateCxGridBlobImageRenderer_lastClickEvent_CxGridRendererClickEvent.gif b/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/ctool16/CreateCxGridBlobImageRenderer_lastClickEvent_CxGridRendererClickEvent.gif
new file mode 100644
index 0000000..f3fb35e
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/ctool16/CreateCxGridBlobImageRenderer_lastClickEvent_CxGridRendererClickEvent.gif
Binary files differ
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/obj16/CxGridBlobImageRenderer.gif b/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/obj16/CxGridBlobImageRenderer.gif
new file mode 100644
index 0000000..d3dc5a9
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/obj16/CxGridBlobImageRenderer.gif
Binary files differ
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/obj16/GridMementoFooterRow.gif b/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/obj16/GridMementoFooterRow.gif
new file mode 100644
index 0000000..c673a52
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/obj16/GridMementoFooterRow.gif
Binary files differ
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/obj16/GridMementoHeaderRow.gif b/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/obj16/GridMementoHeaderRow.gif
new file mode 100644
index 0000000..be22463
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.grid.model.edit/icons/full/obj16/GridMementoHeaderRow.gif
Binary files differ
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.edit/plugin.properties b/org.eclipse.osbp.ecview.extension.grid.model.edit/plugin.properties
index bd277f4..ae50a0d 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.edit/plugin.properties
+++ b/org.eclipse.osbp.ecview.extension.grid.model.edit/plugin.properties
@@ -162,3 +162,9 @@
 _UI_CxGridNestedConverter_nestedType_feature = Nested Type
 _UI_CxGridNestedConverter_nestedTypeQualifiedName_feature = Nested Type Qualified Name
 _UI_CxGridNestedConverter_nestedTypeConverter_feature = Nested Type Converter
+_UI_CxGridBlobImageRenderer_type = Cx Grid Blob Image Renderer
+_UI_CxGridColumn_editsDto_feature = Edits Dto
+_UI_CxGridColumn_filterPropertyPathForEditsDto_feature = Filter Property Path For Edits Dto
+_UI_CxGridColumn_sourceType_feature = Source Type
+_UI_CxGridBlobImageRenderer_lastClickEvent_feature = Last Click Event
+_UI_CxGridBlobImageRenderer_eventTopic_feature = Event Topic
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/provider/CxGridColumnItemProvider.java b/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/provider/CxGridColumnItemProvider.java
index 100e15f..717c897 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/provider/CxGridColumnItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/provider/CxGridColumnItemProvider.java
@@ -88,6 +88,9 @@
 			addUsedInMetaCellsPropertyDescriptor(object);
 			addTypePropertyDescriptor(object);
 			addTypeQualifiedNamePropertyDescriptor(object);
+			addEditsDtoPropertyDescriptor(object);
+			addFilterPropertyPathForEditsDtoPropertyDescriptor(object);
+			addSourceTypePropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -568,6 +571,72 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Edits Dto feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEditsDtoPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_CxGridColumn_editsDto_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_CxGridColumn_editsDto_feature", "_UI_CxGridColumn_type"),
+				 CxGridPackage.Literals.CX_GRID_COLUMN__EDITS_DTO,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.BOOLEAN_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Filter Property Path For Edits Dto feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addFilterPropertyPathForEditsDtoPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_CxGridColumn_filterPropertyPathForEditsDto_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_CxGridColumn_filterPropertyPathForEditsDto_feature", "_UI_CxGridColumn_type"),
+				 CxGridPackage.Literals.CX_GRID_COLUMN__FILTER_PROPERTY_PATH_FOR_EDITS_DTO,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Source Type feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSourceTypePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_CxGridColumn_sourceType_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_CxGridColumn_sourceType_feature", "_UI_CxGridColumn_type"),
+				 CxGridPackage.Literals.CX_GRID_COLUMN__SOURCE_TYPE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
 	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
 	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
 	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
@@ -658,6 +727,9 @@
 			case CxGridPackage.CX_GRID_COLUMN__MAX_WIDTH_PIXELS:
 			case CxGridPackage.CX_GRID_COLUMN__TYPE:
 			case CxGridPackage.CX_GRID_COLUMN__TYPE_QUALIFIED_NAME:
+			case CxGridPackage.CX_GRID_COLUMN__EDITS_DTO:
+			case CxGridPackage.CX_GRID_COLUMN__FILTER_PROPERTY_PATH_FOR_EDITS_DTO:
+			case CxGridPackage.CX_GRID_COLUMN__SOURCE_TYPE:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case CxGridPackage.CX_GRID_COLUMN__SEARCH_FIELD:
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/provider/CxGridMetaCellItemProvider.java b/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/provider/CxGridMetaCellItemProvider.java
index b72d5fd..b608f90 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/provider/CxGridMetaCellItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/provider/CxGridMetaCellItemProvider.java
@@ -563,12 +563,12 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CxGridPackage.Literals.CX_GRID_META_CELL__ELEMENT,
-				 ExtensionModelFactory.eINSTANCE.createYEnumList()));
+				 ExtensionModelFactory.eINSTANCE.createYEnumComboBox()));
 
 		newChildDescriptors.add
 			(createChildParameter
 				(CxGridPackage.Literals.CX_GRID_META_CELL__ELEMENT,
-				 ExtensionModelFactory.eINSTANCE.createYEnumComboBox()));
+				 ExtensionModelFactory.eINSTANCE.createYEnumList()));
 
 		newChildDescriptors.add
 			(createChildParameter
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/renderer/provider/CxGridBlobImageRendererItemProvider.java b/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/renderer/provider/CxGridBlobImageRendererItemProvider.java
new file mode 100644
index 0000000..dfb83e8
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/renderer/provider/CxGridBlobImageRendererItemProvider.java
@@ -0,0 +1,173 @@
+/**
+ */
+package org.eclipse.osbp.ecview.extension.grid.renderer.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridBlobImageRenderer;
+import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridRendererFactory;
+import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridRendererPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.ecview.extension.grid.renderer.CxGridBlobImageRenderer} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CxGridBlobImageRendererItemProvider extends CxGridRendererItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CxGridBlobImageRendererItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addEventTopicPropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Event Topic feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addEventTopicPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_CxGridBlobImageRenderer_eventTopic_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_CxGridBlobImageRenderer_eventTopic_feature", "_UI_CxGridBlobImageRenderer_type"),
+				 CxGridRendererPackage.Literals.CX_GRID_BLOB_IMAGE_RENDERER__EVENT_TOPIC,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(CxGridRendererPackage.Literals.CX_GRID_BLOB_IMAGE_RENDERER__LAST_CLICK_EVENT);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns CxGridBlobImageRenderer.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/CxGridBlobImageRenderer"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((CxGridBlobImageRenderer)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_CxGridBlobImageRenderer_type") :
+			getString("_UI_CxGridBlobImageRenderer_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(CxGridBlobImageRenderer.class)) {
+			case CxGridRendererPackage.CX_GRID_BLOB_IMAGE_RENDERER__EVENT_TOPIC:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case CxGridRendererPackage.CX_GRID_BLOB_IMAGE_RENDERER__LAST_CLICK_EVENT:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CxGridRendererPackage.Literals.CX_GRID_BLOB_IMAGE_RENDERER__LAST_CLICK_EVENT,
+				 CxGridRendererFactory.eINSTANCE.createCxGridRendererClickEvent()));
+	}
+
+}
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/renderer/provider/CxGridRendererItemProviderAdapterFactory.java b/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/renderer/provider/CxGridRendererItemProviderAdapterFactory.java
index 5cab01f..16fb3e4 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/renderer/provider/CxGridRendererItemProviderAdapterFactory.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.edit/src/org/eclipse/osbp/ecview/extension/grid/renderer/provider/CxGridRendererItemProviderAdapterFactory.java
@@ -240,6 +240,29 @@
 	}
 
 	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.ecview.extension.grid.renderer.CxGridBlobImageRenderer} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CxGridBlobImageRendererItemProvider cxGridBlobImageRendererItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.ecview.extension.grid.renderer.CxGridBlobImageRenderer}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createCxGridBlobImageRendererAdapter() {
+		if (cxGridBlobImageRendererItemProvider == null) {
+			cxGridBlobImageRendererItemProvider = new CxGridBlobImageRendererItemProvider(this);
+		}
+
+		return cxGridBlobImageRendererItemProvider;
+	}
+
+	/**
 	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.ecview.extension.grid.renderer.CxGridImageRenderer} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -512,6 +535,7 @@
 		if (cxGridProgressBarRendererItemProvider != null) cxGridProgressBarRendererItemProvider.dispose();
 		if (cxGridTextRendererItemProvider != null) cxGridTextRendererItemProvider.dispose();
 		if (cxGridButtonRendererItemProvider != null) cxGridButtonRendererItemProvider.dispose();
+		if (cxGridBlobImageRendererItemProvider != null) cxGridBlobImageRendererItemProvider.dispose();
 		if (cxGridImageRendererItemProvider != null) cxGridImageRendererItemProvider.dispose();
 		if (cxGridRendererClickEventItemProvider != null) cxGridRendererClickEventItemProvider.dispose();
 		if (cxGridBooleanRendererItemProvider != null) cxGridBooleanRendererItemProvider.dispose();
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.tests/src/org/eclipse/osbp/ecview/extension/grid/renderer/tests/CxGridBlobImageRendererTest.java b/org.eclipse.osbp.ecview.extension.grid.model.tests/src/org/eclipse/osbp/ecview/extension/grid/renderer/tests/CxGridBlobImageRendererTest.java
new file mode 100644
index 0000000..6fc2cc4
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.grid.model.tests/src/org/eclipse/osbp/ecview/extension/grid/renderer/tests/CxGridBlobImageRendererTest.java
@@ -0,0 +1,89 @@
+/**
+ */
+package org.eclipse.osbp.ecview.extension.grid.renderer.tests;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridBlobImageRenderer;
+import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridRendererFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Cx Grid Blob Image Renderer</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.osbp.ecview.extension.grid.renderer.CxGridBlobImageRenderer#createLastClickEventEndpoint() <em>Create Last Click Event Endpoint</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public class CxGridBlobImageRendererTest extends CxGridRendererTest {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(CxGridBlobImageRendererTest.class);
+	}
+
+	/**
+	 * Constructs a new Cx Grid Blob Image Renderer test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CxGridBlobImageRendererTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Returns the fixture for this Cx Grid Blob Image Renderer test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected CxGridBlobImageRenderer getFixture() {
+		return (CxGridBlobImageRenderer)fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(CxGridRendererFactory.eINSTANCE.createCxGridBlobImageRenderer());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.osbp.ecview.extension.grid.renderer.CxGridBlobImageRenderer#createLastClickEventEndpoint() <em>Create Last Click Event Endpoint</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.osbp.ecview.extension.grid.renderer.CxGridBlobImageRenderer#createLastClickEventEndpoint()
+	 * @generated
+	 */
+	public void testCreateLastClickEventEndpoint() {
+		// TODO: implement this operation test method
+		// Ensure that you remove @generated or mark it @generated NOT
+		fail();
+	}
+
+} //CxGridBlobImageRendererTest
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.tests/src/org/eclipse/osbp/ecview/extension/grid/renderer/tests/CxGridNestedConverterTest.java b/org.eclipse.osbp.ecview.extension.grid.model.tests/src/org/eclipse/osbp/ecview/extension/grid/renderer/tests/CxGridNestedConverterTest.java
new file mode 100644
index 0000000..2fe726e
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.grid.model.tests/src/org/eclipse/osbp/ecview/extension/grid/renderer/tests/CxGridNestedConverterTest.java
@@ -0,0 +1,89 @@
+/**
+ */
+package org.eclipse.osbp.ecview.extension.grid.renderer.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridNestedConverter;
+import org.eclipse.osbp.ecview.extension.grid.renderer.CxGridRendererFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>Cx Grid Nested Converter</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class CxGridNestedConverterTest extends TestCase {
+
+	/**
+	 * The fixture for this Cx Grid Nested Converter test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CxGridNestedConverter fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(CxGridNestedConverterTest.class);
+	}
+
+	/**
+	 * Constructs a new Cx Grid Nested Converter test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public CxGridNestedConverterTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this Cx Grid Nested Converter test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(CxGridNestedConverter fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this Cx Grid Nested Converter test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected CxGridNestedConverter getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(CxGridRendererFactory.eINSTANCE.createCxGridNestedConverter());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //CxGridNestedConverterTest
diff --git a/org.eclipse.osbp.ecview.extension.grid.model.tests/src/org/eclipse/osbp/ecview/extension/grid/renderer/tests/CxGridRendererTests.java b/org.eclipse.osbp.ecview.extension.grid.model.tests/src/org/eclipse/osbp/ecview/extension/grid/renderer/tests/CxGridRendererTests.java
index 91260b5..8b44813 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model.tests/src/org/eclipse/osbp/ecview/extension/grid/renderer/tests/CxGridRendererTests.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model.tests/src/org/eclipse/osbp/ecview/extension/grid/renderer/tests/CxGridRendererTests.java
@@ -32,6 +32,7 @@
 	public static Test suite() {
 		TestSuite suite = new CxGridRendererTests("renderer Tests");
 		suite.addTestSuite(CxGridButtonRendererTest.class);
+		suite.addTestSuite(CxGridBlobImageRendererTest.class);
 		suite.addTestSuite(CxGridImageRendererTest.class);
 		return suite;
 	}
diff --git a/org.eclipse.osbp.ecview.extension.grid.model/model/cxgrid.ecore b/org.eclipse.osbp.ecview.extension.grid.model/model/cxgrid.ecore
index 2c7dc5d..165ed2f 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model/model/cxgrid.ecore
+++ b/org.eclipse.osbp.ecview.extension.grid.model/model/cxgrid.ecore
@@ -117,6 +117,11 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="editsDto" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="filterPropertyPathForEditsDto"
         eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sourceType">
+      <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaClass">
+        <eTypeArguments/>
+      </eGenericType>
+    </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="CxGridCellStyleGenerator" abstract="true"
       eSuperTypes="../../org.eclipse.osbp.ecview.core.common.model/model/core.ecore#//YElement #//CxGridProvider"/>
diff --git a/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/CxGridColumn.java b/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/CxGridColumn.java
index 142970b..a97fd4e 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/CxGridColumn.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/CxGridColumn.java
@@ -55,6 +55,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.extension.grid.CxGridColumn#getTypeQualifiedName <em>Type Qualified Name</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.extension.grid.CxGridColumn#isEditsDto <em>Edits Dto</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.extension.grid.CxGridColumn#getFilterPropertyPathForEditsDto <em>Filter Property Path For Edits Dto</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.extension.grid.CxGridColumn#getSourceType <em>Source Type</em>}</li>
  * </ul>
  *
  * @see org.eclipse.osbp.ecview.extension.grid.CxGridPackage#getCxGridColumn()
@@ -660,4 +661,30 @@
 	 */
 	void setFilterPropertyPathForEditsDto(String value);
 
+	/**
+	 * Returns the value of the '<em><b>Source Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Source Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Source Type</em>' attribute.
+	 * @see #setSourceType(Class)
+	 * @see org.eclipse.osbp.ecview.extension.grid.CxGridPackage#getCxGridColumn_SourceType()
+	 * @model
+	 * @generated
+	 */
+	Class<?> getSourceType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.osbp.ecview.extension.grid.CxGridColumn#getSourceType <em>Source Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Source Type</em>' attribute.
+	 * @see #getSourceType()
+	 * @generated
+	 */
+	void setSourceType(Class<?> value);
+
 }
\ No newline at end of file
diff --git a/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/CxGridPackage.java b/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/CxGridPackage.java
index dd80947..1fefb2c 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/CxGridPackage.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/CxGridPackage.java
@@ -236,6 +236,15 @@
 	int CX_GRID__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CX_GRID__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1388,13 +1397,22 @@
 	int CX_GRID_COLUMN__FILTER_PROPERTY_PATH_FOR_EDITS_DTO = CX_GRID_GROUPABLE_FEATURE_COUNT + 22;
 
 	/**
+	 * The feature id for the '<em><b>Source Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CX_GRID_COLUMN__SOURCE_TYPE = CX_GRID_GROUPABLE_FEATURE_COUNT + 23;
+
+	/**
 	 * The number of structural features of the '<em>Column</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int CX_GRID_COLUMN_FEATURE_COUNT = CX_GRID_GROUPABLE_FEATURE_COUNT + 23;
+	int CX_GRID_COLUMN_FEATURE_COUNT = CX_GRID_GROUPABLE_FEATURE_COUNT + 24;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.osbp.ecview.extension.grid.impl.CxGridCellStyleGeneratorImpl <em>Cell Style Generator</em>}' class.
@@ -2316,6 +2334,17 @@
 	EAttribute getCxGridColumn_FilterPropertyPathForEditsDto();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.osbp.ecview.extension.grid.CxGridColumn#getSourceType <em>Source Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Source Type</em>'.
+	 * @see org.eclipse.osbp.ecview.extension.grid.CxGridColumn#getSourceType()
+	 * @see #getCxGridColumn()
+	 * @generated
+	 */
+	EAttribute getCxGridColumn_SourceType();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.osbp.ecview.extension.grid.CxGridCellStyleGenerator <em>Cell Style Generator</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2958,6 +2987,14 @@
 		EAttribute CX_GRID_COLUMN__FILTER_PROPERTY_PATH_FOR_EDITS_DTO = eINSTANCE.getCxGridColumn_FilterPropertyPathForEditsDto();
 
 		/**
+		 * The meta object literal for the '<em><b>Source Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute CX_GRID_COLUMN__SOURCE_TYPE = eINSTANCE.getCxGridColumn_SourceType();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.osbp.ecview.extension.grid.impl.CxGridCellStyleGeneratorImpl <em>Cell Style Generator</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/impl/CxGridColumnImpl.java b/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/impl/CxGridColumnImpl.java
index 32c0e33..3b6844b 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/impl/CxGridColumnImpl.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/impl/CxGridColumnImpl.java
@@ -66,6 +66,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.extension.grid.impl.CxGridColumnImpl#getTypeQualifiedName <em>Type Qualified Name</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.extension.grid.impl.CxGridColumnImpl#isEditsDto <em>Edits Dto</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.extension.grid.impl.CxGridColumnImpl#getFilterPropertyPathForEditsDto <em>Filter Property Path For Edits Dto</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.extension.grid.impl.CxGridColumnImpl#getSourceType <em>Source Type</em>}</li>
  * </ul>
  *
  * @generated
@@ -453,6 +454,16 @@
 	protected String filterPropertyPathForEditsDto = FILTER_PROPERTY_PATH_FOR_EDITS_DTO_EDEFAULT;
 
 	/**
+	 * The cached value of the '{@link #getSourceType() <em>Source Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSourceType()
+	 * @generated
+	 * @ordered
+	 */
+	protected Class<?> sourceType;
+
+	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->.
 	 *
 	 * @generated
@@ -1162,6 +1173,27 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Class<?> getSourceType() {
+		return sourceType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSourceType(Class<?> newSourceType) {
+		Class<?> oldSourceType = sourceType;
+		sourceType = newSourceType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, CxGridPackage.CX_GRID_COLUMN__SOURCE_TYPE, oldSourceType, sourceType));
+	}
+
+	/**
 	 * <!-- begin-user-doc --> Returns the layout which contains the editor
 	 * fields. <!-- end-user-doc -->
 	 *
@@ -1285,6 +1317,8 @@
 				return isEditsDto();
 			case CxGridPackage.CX_GRID_COLUMN__FILTER_PROPERTY_PATH_FOR_EDITS_DTO:
 				return getFilterPropertyPathForEditsDto();
+			case CxGridPackage.CX_GRID_COLUMN__SOURCE_TYPE:
+				return getSourceType();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -1372,6 +1406,9 @@
 			case CxGridPackage.CX_GRID_COLUMN__FILTER_PROPERTY_PATH_FOR_EDITS_DTO:
 				setFilterPropertyPathForEditsDto((String)newValue);
 				return;
+			case CxGridPackage.CX_GRID_COLUMN__SOURCE_TYPE:
+				setSourceType((Class<?>)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -1455,6 +1492,9 @@
 			case CxGridPackage.CX_GRID_COLUMN__FILTER_PROPERTY_PATH_FOR_EDITS_DTO:
 				setFilterPropertyPathForEditsDto(FILTER_PROPERTY_PATH_FOR_EDITS_DTO_EDEFAULT);
 				return;
+			case CxGridPackage.CX_GRID_COLUMN__SOURCE_TYPE:
+				setSourceType((Class<?>)null);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -1516,6 +1556,8 @@
 				return editsDto != EDITS_DTO_EDEFAULT;
 			case CxGridPackage.CX_GRID_COLUMN__FILTER_PROPERTY_PATH_FOR_EDITS_DTO:
 				return FILTER_PROPERTY_PATH_FOR_EDITS_DTO_EDEFAULT == null ? filterPropertyPathForEditsDto != null : !FILTER_PROPERTY_PATH_FOR_EDITS_DTO_EDEFAULT.equals(filterPropertyPathForEditsDto);
+			case CxGridPackage.CX_GRID_COLUMN__SOURCE_TYPE:
+				return sourceType != null;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -1567,6 +1609,8 @@
 		result.append(editsDto);
 		result.append(", filterPropertyPathForEditsDto: ");
 		result.append(filterPropertyPathForEditsDto);
+		result.append(", sourceType: ");
+		result.append(sourceType);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/impl/CxGridPackageImpl.java b/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/impl/CxGridPackageImpl.java
index ed81bad..2ed9fc3 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/impl/CxGridPackageImpl.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/impl/CxGridPackageImpl.java
@@ -889,6 +889,15 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public EAttribute getCxGridColumn_SourceType() {
+		return (EAttribute)cxGridColumnEClass.getEStructuralFeatures().get(23);
+	}
+
+	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->.
 	 *
 	 * @return the cx grid cell style generator
@@ -1053,6 +1062,7 @@
 		createEAttribute(cxGridColumnEClass, CX_GRID_COLUMN__TYPE_QUALIFIED_NAME);
 		createEAttribute(cxGridColumnEClass, CX_GRID_COLUMN__EDITS_DTO);
 		createEAttribute(cxGridColumnEClass, CX_GRID_COLUMN__FILTER_PROPERTY_PATH_FOR_EDITS_DTO);
+		createEAttribute(cxGridColumnEClass, CX_GRID_COLUMN__SOURCE_TYPE);
 
 		cxGridCellStyleGeneratorEClass = createEClass(CX_GRID_CELL_STYLE_GENERATOR);
 
@@ -1209,6 +1219,10 @@
 		initEAttribute(getCxGridColumn_TypeQualifiedName(), ecorePackage.getEString(), "typeQualifiedName", null, 0, 1, CxGridColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getCxGridColumn_EditsDto(), ecorePackage.getEBoolean(), "editsDto", null, 0, 1, CxGridColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getCxGridColumn_FilterPropertyPathForEditsDto(), ecorePackage.getEString(), "filterPropertyPathForEditsDto", null, 0, 1, CxGridColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		g1 = createEGenericType(ecorePackage.getEJavaClass());
+		g2 = createEGenericType();
+		g1.getETypeArguments().add(g2);
+		initEAttribute(getCxGridColumn_SourceType(), g1, "sourceType", null, 0, 1, CxGridColumn.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(cxGridCellStyleGeneratorEClass, CxGridCellStyleGenerator.class, "CxGridCellStyleGenerator", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
diff --git a/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/util/CxGridUtil.java b/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/util/CxGridUtil.java
index d3839f2..5aab933 100644
--- a/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/util/CxGridUtil.java
+++ b/org.eclipse.osbp.ecview.extension.grid.model/src/org/eclipse/osbp/ecview/extension/grid/util/CxGridUtil.java
@@ -64,6 +64,9 @@
 			Class<?> dtoObjectClass = grid.getType();
 			for (CxGridColumn column : grid.getColumns()) {
 				String dtoProperty = column.getPropertyId();
+				if (column.getSourceType() != null) {
+					dtoObjectClass = column.getSourceType();
+				}
 				columnPermission(userAccessService, dtoObjectClass, column, dtoProperty);
 			}
 		}
@@ -75,6 +78,7 @@
 		if (dtoProperty.split("\\.").length > 1) {
 			String refName = dtoProperty.split("\\.")[0];
 			String newDtoProperty = dtoProperty.substring(dtoProperty.indexOf(".") + 1);
+			columnPermission(userAccessService, dtoObjectClass, column, newDtoProperty);
 			for (Field ref : DtoUtils.getOwnerDomainReferences(dtoObjectClass)){
 				if (refName.equals(ref.getName())){
 					Class<?> newDtoObjectClass = ref.getType();
@@ -99,6 +103,8 @@
 						column.setHidden(columnHidden);
 					}
 				}
+			} else {
+				column.setHidden(true);
 			}
 		}
 	}
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/icons/full/ctool16/CreateYLayoutingInfo_content_YDialogComponent.gif b/org.eclipse.osbp.ecview.extension.model.edit/icons/full/ctool16/CreateYLayoutingInfo_content_YDialogComponent.gif
new file mode 100644
index 0000000..63e7a6f
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.model.edit/icons/full/ctool16/CreateYLayoutingInfo_content_YDialogComponent.gif
Binary files differ
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/icons/full/obj16/YStringToByteArrayConverter.gif b/org.eclipse.osbp.ecview.extension.model.edit/icons/full/obj16/YStringToByteArrayConverter.gif
new file mode 100644
index 0000000..1e5345f
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.model.edit/icons/full/obj16/YStringToByteArrayConverter.gif
Binary files differ
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/plugin.properties b/org.eclipse.osbp.ecview.extension.model.edit/plugin.properties
index 0fc21ca..84dd696 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/plugin.properties
+++ b/org.eclipse.osbp.ecview.extension.model.edit/plugin.properties
@@ -198,3 +198,6 @@
 _UI_YStrategyLayout_layoutColumns_feature = Layout Columns
 _UI_YStrategyLayout_numberColumns_feature = Number Columns
 _UI_YSuspect_groupName_feature = Group Name
+_UI_YStringToByteArrayConverter_type = YString To Byte Array Converter
+_UI_YTypedCompoundSuspect_onTab_feature = On Tab
+_UI_YColumnInfo_sourceType_feature = Source Type
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/converter/provider/YConverterItemProviderAdapterFactory.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/converter/provider/YConverterItemProviderAdapterFactory.java
index e7551b8..d8807ac 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/converter/provider/YConverterItemProviderAdapterFactory.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/converter/provider/YConverterItemProviderAdapterFactory.java
@@ -116,6 +116,29 @@
 	}
 
 	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.ecview.extension.model.converter.YStringToByteArrayConverter} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected YStringToByteArrayConverterItemProvider yStringToByteArrayConverterItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.osbp.ecview.extension.model.converter.YStringToByteArrayConverter}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createYStringToByteArrayConverterAdapter() {
+		if (yStringToByteArrayConverterItemProvider == null) {
+			yStringToByteArrayConverterItemProvider = new YStringToByteArrayConverterItemProvider(this);
+		}
+
+		return yStringToByteArrayConverterItemProvider;
+	}
+
+	/**
 	 * This keeps track of the one adapter used for all {@link org.eclipse.osbp.ecview.extension.model.converter.YCustomDecimalConverter} instances.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -470,6 +493,7 @@
 	 */
 	public void dispose() {
 		if (yObjectToStringConverterItemProvider != null) yObjectToStringConverterItemProvider.dispose();
+		if (yStringToByteArrayConverterItemProvider != null) yStringToByteArrayConverterItemProvider.dispose();
 		if (yCustomDecimalConverterItemProvider != null) yCustomDecimalConverterItemProvider.dispose();
 		if (yNumericToResourceConverterItemProvider != null) yNumericToResourceConverterItemProvider.dispose();
 		if (yStringToResourceConverterItemProvider != null) yStringToResourceConverterItemProvider.dispose();
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/converter/provider/YStringToByteArrayConverterItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/converter/provider/YStringToByteArrayConverterItemProvider.java
new file mode 100644
index 0000000..c42416a
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/converter/provider/YStringToByteArrayConverterItemProvider.java
@@ -0,0 +1,262 @@
+/**
+ * All rights reserved by Loetz GmbH und CoKG Heidelberg 2015.
+ * 
+ * Contributors:
+ *       Florian Pirchner - initial API and implementation
+ */
+package org.eclipse.osbp.ecview.extension.model.converter.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelFactory;
+import org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage;
+
+import org.eclipse.osbp.ecview.extension.model.converter.YConverterPackage;
+import org.eclipse.osbp.ecview.extension.model.converter.YStringToByteArrayConverter;
+
+import org.eclipse.osbp.ecview.extension.model.provider.ecviewEditPlugin;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.osbp.ecview.extension.model.converter.YStringToByteArrayConverter} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class YStringToByteArrayConverterItemProvider 
+	extends ItemProviderAdapter
+	implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "All rights reserved by Loetz GmbH und CoKG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
+
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public YStringToByteArrayConverterItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTagsPropertyDescriptor(object);
+			addIdPropertyDescriptor(object);
+			addNamePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Tags feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addTagsPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YTaggable_tags_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YTaggable_tags_feature", "_UI_YTaggable_type"),
+				 CoreModelPackage.Literals.YTAGGABLE__TAGS,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Id feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addIdPropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YElement_id_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YElement_id_feature", "_UI_YElement_type"),
+				 CoreModelPackage.Literals.YELEMENT__ID,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This adds a property descriptor for the Name feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addNamePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YElement_name_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YElement_name_feature", "_UI_YElement_type"),
+				 CoreModelPackage.Literals.YELEMENT__NAME,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
+	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+		if (childrenFeatures == null) {
+			super.getChildrenFeatures(object);
+			childrenFeatures.add(CoreModelPackage.Literals.YELEMENT__PROPERTIES);
+		}
+		return childrenFeatures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EStructuralFeature getChildFeature(Object object, Object child) {
+		// Check the type of the specified child object and return the proper feature to use for
+		// adding (see {@link AddCommand}) it as a child.
+
+		return super.getChildFeature(object, child);
+	}
+
+	/**
+	 * This returns YStringToByteArrayConverter.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/YStringToByteArrayConverter"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((YStringToByteArrayConverter)object).getName();
+		return label == null || label.length() == 0 ?
+			getString("_UI_YStringToByteArrayConverter_type") :
+			getString("_UI_YStringToByteArrayConverter_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(YStringToByteArrayConverter.class)) {
+			case YConverterPackage.YSTRING_TO_BYTE_ARRAY_CONVERTER__TAGS:
+			case YConverterPackage.YSTRING_TO_BYTE_ARRAY_CONVERTER__ID:
+			case YConverterPackage.YSTRING_TO_BYTE_ARRAY_CONVERTER__NAME:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+				return;
+			case YConverterPackage.YSTRING_TO_BYTE_ARRAY_CONVERTER__PROPERTIES:
+				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+				return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YELEMENT__PROPERTIES,
+				 CoreModelFactory.eINSTANCE.create(CoreModelPackage.Literals.YSTRING_TO_STRING_MAP)));
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ecviewEditPlugin.INSTANCE;
+	}
+
+}
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YBlobUploadComponentItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YBlobUploadComponentItemProvider.java
index 6377920..69d09a4 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YBlobUploadComponentItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YBlobUploadComponentItemProvider.java
@@ -264,6 +264,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CoreModelPackage.Literals.YFIELD__CONVERTER,
+				 YConverterFactory.eINSTANCE.createYStringToByteArrayConverter()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YFIELD__CONVERTER,
 				 YConverterFactory.eINSTANCE.createYCustomDecimalConverter()));
 
 		newChildDescriptors.add
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YColumnInfoItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YColumnInfoItemProvider.java
index 0d263b9..1fd3b6b 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YColumnInfoItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YColumnInfoItemProvider.java
@@ -99,6 +99,7 @@
 			addTypePropertyDescriptor(object);
 			addTypeQualifiedNamePropertyDescriptor(object);
 			addLabelI18nKeyPropertyDescriptor(object);
+			addSourceTypePropertyDescriptor(object);
 		}
 		return itemPropertyDescriptors;
 	}
@@ -196,6 +197,28 @@
 	}
 
 	/**
+	 * This adds a property descriptor for the Source Type feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void addSourceTypePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add
+			(createItemPropertyDescriptor
+				(((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+				 getResourceLocator(),
+				 getString("_UI_YColumnInfo_sourceType_feature"),
+				 getString("_UI_PropertyDescriptor_description", "_UI_YColumnInfo_sourceType_feature", "_UI_YColumnInfo_type"),
+				 YECviewPackage.Literals.YCOLUMN_INFO__SOURCE_TYPE,
+				 true,
+				 false,
+				 false,
+				 ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				 null,
+				 null));
+	}
+
+	/**
 	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
 	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
 	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
@@ -274,6 +297,7 @@
 			case YECviewPackage.YCOLUMN_INFO__TYPE:
 			case YECviewPackage.YCOLUMN_INFO__TYPE_QUALIFIED_NAME:
 			case YECviewPackage.YCOLUMN_INFO__LABEL_I1_8N_KEY:
+			case YECviewPackage.YCOLUMN_INFO__SOURCE_TYPE:
 				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
 				return;
 			case YECviewPackage.YCOLUMN_INFO__PROPERTIES:
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YCustomDecimalFieldItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YCustomDecimalFieldItemProvider.java
index 74a1f38..b1aa18e 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YCustomDecimalFieldItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YCustomDecimalFieldItemProvider.java
@@ -243,6 +243,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CoreModelPackage.Literals.YFIELD__CONVERTER,
+				 YConverterFactory.eINSTANCE.createYStringToByteArrayConverter()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YFIELD__CONVERTER,
 				 YConverterFactory.eINSTANCE.createYCustomDecimalConverter()));
 
 		newChildDescriptors.add
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YI18nComboBoxItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YI18nComboBoxItemProvider.java
index 3ab52f0..546ee75 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YI18nComboBoxItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YI18nComboBoxItemProvider.java
@@ -326,6 +326,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CoreModelPackage.Literals.YFIELD__CONVERTER,
+				 YConverterFactory.eINSTANCE.createYStringToByteArrayConverter()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YFIELD__CONVERTER,
 				 YConverterFactory.eINSTANCE.createYCustomDecimalConverter()));
 
 		newChildDescriptors.add
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YIconComboBoxItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YIconComboBoxItemProvider.java
index fa09a59..2534fa7 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YIconComboBoxItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YIconComboBoxItemProvider.java
@@ -479,6 +479,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CoreModelPackage.Literals.YFIELD__CONVERTER,
+				 YConverterFactory.eINSTANCE.createYStringToByteArrayConverter()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YFIELD__CONVERTER,
 				 YConverterFactory.eINSTANCE.createYCustomDecimalConverter()));
 
 		newChildDescriptors.add
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedDecimalFieldItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedDecimalFieldItemProvider.java
index f2c2286..d637d30 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedDecimalFieldItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedDecimalFieldItemProvider.java
@@ -280,6 +280,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CoreModelPackage.Literals.YFIELD__CONVERTER,
+				 YConverterFactory.eINSTANCE.createYStringToByteArrayConverter()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YFIELD__CONVERTER,
 				 YConverterFactory.eINSTANCE.createYCustomDecimalConverter()));
 
 		newChildDescriptors.add
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedNumericFieldItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedNumericFieldItemProvider.java
index eeb0fff..ca82190 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedNumericFieldItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedNumericFieldItemProvider.java
@@ -232,6 +232,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CoreModelPackage.Literals.YFIELD__CONVERTER,
+				 YConverterFactory.eINSTANCE.createYStringToByteArrayConverter()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YFIELD__CONVERTER,
 				 YConverterFactory.eINSTANCE.createYCustomDecimalConverter()));
 
 		newChildDescriptors.add
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedTextFieldItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedTextFieldItemProvider.java
index b929a3f..682bd3d 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedTextFieldItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YMaskedTextFieldItemProvider.java
@@ -232,6 +232,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CoreModelPackage.Literals.YFIELD__CONVERTER,
+				 YConverterFactory.eINSTANCE.createYStringToByteArrayConverter()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YFIELD__CONVERTER,
 				 YConverterFactory.eINSTANCE.createYCustomDecimalConverter()));
 
 		newChildDescriptors.add
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YPairComboBoxItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YPairComboBoxItemProvider.java
index 2534dbc..a1d06d3 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YPairComboBoxItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YPairComboBoxItemProvider.java
@@ -472,6 +472,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CoreModelPackage.Literals.YFIELD__CONVERTER,
+				 YConverterFactory.eINSTANCE.createYStringToByteArrayConverter()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YFIELD__CONVERTER,
 				 YConverterFactory.eINSTANCE.createYCustomDecimalConverter()));
 
 		newChildDescriptors.add
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YPrefixedMaskedTextFieldItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YPrefixedMaskedTextFieldItemProvider.java
index 9485d7a..feb96a6 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YPrefixedMaskedTextFieldItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YPrefixedMaskedTextFieldItemProvider.java
@@ -268,6 +268,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CoreModelPackage.Literals.YFIELD__CONVERTER,
+				 YConverterFactory.eINSTANCE.createYStringToByteArrayConverter()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YFIELD__CONVERTER,
 				 YConverterFactory.eINSTANCE.createYCustomDecimalConverter()));
 
 		newChildDescriptors.add
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YQuantityTextFieldItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YQuantityTextFieldItemProvider.java
index 225a256..a6daa8e 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YQuantityTextFieldItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YQuantityTextFieldItemProvider.java
@@ -218,6 +218,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CoreModelPackage.Literals.YFIELD__CONVERTER,
+				 YConverterFactory.eINSTANCE.createYStringToByteArrayConverter()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YFIELD__CONVERTER,
 				 YConverterFactory.eINSTANCE.createYCustomDecimalConverter()));
 
 		newChildDescriptors.add
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YRichTextAreaItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YRichTextAreaItemProvider.java
index 85f7877..fbbd31c 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YRichTextAreaItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YRichTextAreaItemProvider.java
@@ -256,6 +256,11 @@
 		newChildDescriptors.add
 			(createChildParameter
 				(CoreModelPackage.Literals.YFIELD__CONVERTER,
+				 YConverterFactory.eINSTANCE.createYStringToByteArrayConverter()));
+
+		newChildDescriptors.add
+			(createChildParameter
+				(CoreModelPackage.Literals.YFIELD__CONVERTER,
 				 YConverterFactory.eINSTANCE.createYCustomDecimalConverter()));
 
 		newChildDescriptors.add
diff --git a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YTypedCompoundSuspectItemProvider.java b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YTypedCompoundSuspectItemProvider.java
index 79c8e79..42eb703 100644
--- a/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YTypedCompoundSuspectItemProvider.java
+++ b/org.eclipse.osbp.ecview.extension.model.edit/src/org/eclipse/osbp/ecview/extension/model/provider/YTypedCompoundSuspectItemProvider.java
@@ -27,7 +27,6 @@
 import org.eclipse.emf.common.notify.Notification;
 
 import org.eclipse.emf.ecore.EStructuralFeature;
-
 import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
 import org.eclipse.emf.edit.provider.ViewerNotification;
 
diff --git a/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/converter/tests/YStringToByteArrayConverterTest.java b/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/converter/tests/YStringToByteArrayConverterTest.java
new file mode 100644
index 0000000..8404cc5
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/converter/tests/YStringToByteArrayConverterTest.java
@@ -0,0 +1,100 @@
+/**
+ * All rights reserved by Loetz GmbH und CoKG Heidelberg 2015.
+ * 
+ * Contributors:
+ *       Florian Pirchner - initial API and implementation
+ */
+package org.eclipse.osbp.ecview.extension.model.converter.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.osbp.ecview.extension.model.converter.YConverterFactory;
+import org.eclipse.osbp.ecview.extension.model.converter.YStringToByteArrayConverter;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>YString To Byte Array Converter</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class YStringToByteArrayConverterTest extends TestCase {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "All rights reserved by Loetz GmbH und CoKG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
+
+	/**
+	 * The fixture for this YString To Byte Array Converter test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected YStringToByteArrayConverter fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(YStringToByteArrayConverterTest.class);
+	}
+
+	/**
+	 * Constructs a new YString To Byte Array Converter test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public YStringToByteArrayConverterTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this YString To Byte Array Converter test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(YStringToByteArrayConverter fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this YString To Byte Array Converter test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected YStringToByteArrayConverter getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(YConverterFactory.eINSTANCE.createYStringToByteArrayConverter());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //YStringToByteArrayConverterTest
diff --git a/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/converter/tests/YVaaclipseUiThemeToStringConverterTest.java b/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/converter/tests/YVaaclipseUiThemeToStringConverterTest.java
new file mode 100644
index 0000000..577f5ee
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/converter/tests/YVaaclipseUiThemeToStringConverterTest.java
@@ -0,0 +1,100 @@
+/**
+ * All rights reserved by Loetz GmbH und CoKG Heidelberg 2015.
+ * 
+ * Contributors:
+ *       Florian Pirchner - initial API and implementation
+ */
+package org.eclipse.osbp.ecview.extension.model.converter.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.osbp.ecview.extension.model.converter.YConverterFactory;
+import org.eclipse.osbp.ecview.extension.model.converter.YVaaclipseUiThemeToStringConverter;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>YVaaclipse Ui Theme To String Converter</b></em>'.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class YVaaclipseUiThemeToStringConverterTest extends TestCase {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "All rights reserved by Loetz GmbH und CoKG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
+
+	/**
+	 * The fixture for this YVaaclipse Ui Theme To String Converter test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected YVaaclipseUiThemeToStringConverter fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(YVaaclipseUiThemeToStringConverterTest.class);
+	}
+
+	/**
+	 * Constructs a new YVaaclipse Ui Theme To String Converter test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public YVaaclipseUiThemeToStringConverterTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this YVaaclipse Ui Theme To String Converter test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(YVaaclipseUiThemeToStringConverter fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this YVaaclipse Ui Theme To String Converter test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected YVaaclipseUiThemeToStringConverter getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(YConverterFactory.eINSTANCE.createYVaaclipseUiThemeToStringConverter());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+} //YVaaclipseUiThemeToStringConverterTest
diff --git a/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/tests/YECviewTests.java b/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/tests/YECviewTests.java
index f787001..43b058b 100644
--- a/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/tests/YECviewTests.java
+++ b/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/tests/YECviewTests.java
@@ -59,6 +59,7 @@
 		suite.addTestSuite(YDelegatingFocusingStrategyTest.class);
 		suite.addTestSuite(YBlobUploadComponentTest.class);
 		suite.addTestSuite(YCustomDecimalFieldTest.class);
+		suite.addTestSuite(YI18nComboBoxTest.class);
 		suite.addTestSuite(YIconComboBoxTest.class);
 		suite.addTestSuite(YQuantityTextFieldTest.class);
 		suite.addTestSuite(YContentSensitiveLayoutTest.class);
diff --git a/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/tests/YI18nComboBoxTest.java b/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/tests/YI18nComboBoxTest.java
new file mode 100644
index 0000000..8e9f219
--- /dev/null
+++ b/org.eclipse.osbp.ecview.extension.model.tests/src/org/eclipse/osbp/ecview/extension/model/tests/YI18nComboBoxTest.java
@@ -0,0 +1,133 @@
+/**
+ * All rights reserved by Loetz GmbH und CoKG Heidelberg 2015.
+ * 
+ * Contributors:
+ *       Florian Pirchner - initial API and implementation
+ */
+package org.eclipse.osbp.ecview.extension.model.tests;
+
+import junit.framework.TestCase;
+
+import junit.textui.TestRunner;
+
+import org.eclipse.osbp.ecview.extension.model.YECviewFactory;
+import org.eclipse.osbp.ecview.extension.model.YI18nComboBox;
+
+/**
+ * <!-- begin-user-doc -->
+ * A test case for the model object '<em><b>YI1 8n Combo Box</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following operations are tested:
+ * <ul>
+ *   <li>{@link org.eclipse.osbp.ecview.core.common.model.core.YSelectionBindable#createSelectionEndpoint() <em>Create Selection Endpoint</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.core.common.model.core.YCollectionBindable#createCollectionEndpoint() <em>Create Collection Endpoint</em>}</li>
+ * </ul>
+ * </p>
+ * @generated
+ */
+public class YI18nComboBoxTest extends TestCase {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static final String copyright = "All rights reserved by Loetz GmbH und CoKG Heidelberg 2015.\n\nContributors:\n      Florian Pirchner - initial API and implementation";
+
+	/**
+	 * The fixture for this YI1 8n Combo Box test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected YI18nComboBox fixture = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public static void main(String[] args) {
+		TestRunner.run(YI18nComboBoxTest.class);
+	}
+
+	/**
+	 * Constructs a new YI1 8n Combo Box test case with the given name.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public YI18nComboBoxTest(String name) {
+		super(name);
+	}
+
+	/**
+	 * Sets the fixture for this YI1 8n Combo Box test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected void setFixture(YI18nComboBox fixture) {
+		this.fixture = fixture;
+	}
+
+	/**
+	 * Returns the fixture for this YI1 8n Combo Box test case.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected YI18nComboBox getFixture() {
+		return fixture;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#setUp()
+	 * @generated
+	 */
+	@Override
+	protected void setUp() throws Exception {
+		setFixture(YECviewFactory.eINSTANCE.createYI18nComboBox());
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see junit.framework.TestCase#tearDown()
+	 * @generated
+	 */
+	@Override
+	protected void tearDown() throws Exception {
+		setFixture(null);
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.osbp.ecview.core.common.model.core.YSelectionBindable#createSelectionEndpoint() <em>Create Selection Endpoint</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.osbp.ecview.core.common.model.core.YSelectionBindable#createSelectionEndpoint()
+	 * @generated
+	 */
+	public void testCreateSelectionEndpoint() {
+		// TODO: implement this operation test method
+		// Ensure that you remove @generated or mark it @generated NOT
+		fail();
+	}
+
+	/**
+	 * Tests the '{@link org.eclipse.osbp.ecview.core.common.model.core.YCollectionBindable#createCollectionEndpoint() <em>Create Collection Endpoint</em>}' operation.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.osbp.ecview.core.common.model.core.YCollectionBindable#createCollectionEndpoint()
+	 * @generated
+	 */
+	public void testCreateCollectionEndpoint() {
+		// TODO: implement this operation test method
+		// Ensure that you remove @generated or mark it @generated NOT
+		fail();
+	}
+
+} //YI18nComboBoxTest
diff --git a/org.eclipse.osbp.ecview.extension.model/model/ecview.ecore b/org.eclipse.osbp.ecview.extension.model/model/ecview.ecore
index fba4790..0da26ef 100644
--- a/org.eclipse.osbp.ecview.extension.model/model/ecview.ecore
+++ b/org.eclipse.osbp.ecview.extension.model/model/ecview.ecore
@@ -161,6 +161,11 @@
         eType="ecore:EClass ../../org.eclipse.osbp.ecview.core.common.model/model/core.ecore#//YStringToStringMap"
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="labelI18nKey" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sourceType">
+      <eGenericType eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaClass">
+        <eTypeArguments/>
+      </eGenericType>
+    </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="YContentSensitiveLayout" eSuperTypes="../../org.eclipse.osbp.ecview.core.common.model/model/core.ecore#//YLayout ../../org.eclipse.osbp.ecview.core.common.model/model/core.ecore#//YSpacingable ../../org.eclipse.osbp.ecview.core.common.model/model/core.ecore#//YMarginable"/>
   <eClassifiers xsi:type="ecore:EClass" name="YRichTextArea" eSuperTypes="../../org.eclipse.osbp.ecview.core.extension.model/model/extension.ecore#//YInput ../../org.eclipse.osbp.ecview.core.common.model/model/core.ecore#//YValueBindable">
diff --git a/org.eclipse.osbp.ecview.extension.model/model/ecview.genmodel b/org.eclipse.osbp.ecview.extension.model/model/ecview.genmodel
index 32d71ec..05bac38 100644
--- a/org.eclipse.osbp.ecview.extension.model/model/ecview.genmodel
+++ b/org.eclipse.osbp.ecview.extension.model/model/ecview.genmodel
@@ -115,6 +115,7 @@
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ecview.ecore#//YColumnInfo/typeQualifiedName"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference ecview.ecore#//YColumnInfo/properties"/>
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ecview.ecore#//YColumnInfo/labelI18nKey"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ecview.ecore#//YColumnInfo/sourceType"/>
     </genClasses>
     <genClasses ecoreClass="ecview.ecore#//YContentSensitiveLayout"/>
     <genClasses ecoreClass="ecview.ecore#//YRichTextArea">
@@ -162,6 +163,7 @@
     <nestedGenPackages prefix="YConverter" basePackage="org.eclipse.osbp.ecview.extension.model"
         disposableProviderFactory="true" ecorePackage="ecview.ecore#//converter">
       <genClasses ecoreClass="ecview.ecore#//converter/YObjectToStringConverter"/>
+      <genClasses ecoreClass="ecview.ecore#//converter/YStringToByteArrayConverter"/>
       <genClasses ecoreClass="ecview.ecore#//converter/YCustomDecimalConverter">
         <genFeatures createChild="false" ecoreFeature="ecore:EAttribute ecview.ecore#//converter/YCustomDecimalConverter/baseUnit"/>
       </genClasses>
diff --git a/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/YColumnInfo.java b/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/YColumnInfo.java
index 27d8370..cfac86b 100644
--- a/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/YColumnInfo.java
+++ b/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/YColumnInfo.java
@@ -32,6 +32,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.extension.model.YColumnInfo#getTypeQualifiedName <em>Type Qualified Name</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.extension.model.YColumnInfo#getProperties <em>Properties</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.extension.model.YColumnInfo#getLabelI18nKey <em>Label I1 8n Key</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.extension.model.YColumnInfo#getSourceType <em>Source Type</em>}</li>
  * </ul>
  *
  * @see org.eclipse.osbp.ecview.extension.model.YECviewPackage#getYColumnInfo()
@@ -168,4 +169,30 @@
 	 */
 	void setLabelI18nKey(String value);
 
+	/**
+	 * Returns the value of the '<em><b>Source Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Source Type</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Source Type</em>' attribute.
+	 * @see #setSourceType(Class)
+	 * @see org.eclipse.osbp.ecview.extension.model.YECviewPackage#getYColumnInfo_SourceType()
+	 * @model
+	 * @generated
+	 */
+	Class<?> getSourceType();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.osbp.ecview.extension.model.YColumnInfo#getSourceType <em>Source Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Source Type</em>' attribute.
+	 * @see #getSourceType()
+	 * @generated
+	 */
+	void setSourceType(Class<?> value);
+
 }
diff --git a/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/YECviewPackage.java b/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/YECviewPackage.java
index 03c7f04..9d10141 100644
--- a/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/YECviewPackage.java
+++ b/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/YECviewPackage.java
@@ -243,6 +243,15 @@
 	int YSTRATEGY_LAYOUT__LAST_CONTEXT_CLICK = CoreModelPackage.YEMBEDDABLE__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YSTRATEGY_LAYOUT__READONLY = CoreModelPackage.YEMBEDDABLE__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Layouting Strategy</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1948,6 +1957,15 @@
 	int YBLOB_UPLOAD_COMPONENT__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YBLOB_UPLOAD_COMPONENT__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2255,6 +2273,15 @@
 	int YCUSTOM_DECIMAL_FIELD__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YCUSTOM_DECIMAL_FIELD__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2554,6 +2581,15 @@
 	int YI1_8N_COMBO_BOX__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YI1_8N_COMBO_BOX__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2888,6 +2924,15 @@
 	int YICON_COMBO_BOX__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YICON_COMBO_BOX__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3267,6 +3312,15 @@
 	int YQUANTITY_TEXT_FIELD__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YQUANTITY_TEXT_FIELD__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3638,13 +3692,22 @@
 	int YCOLUMN_INFO__LABEL_I1_8N_KEY = 4;
 
 	/**
+	 * The feature id for the '<em><b>Source Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YCOLUMN_INFO__SOURCE_TYPE = 5;
+
+	/**
 	 * The number of structural features of the '<em>YColumn Info</em>' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int YCOLUMN_INFO_FEATURE_COUNT = 5;
+	int YCOLUMN_INFO_FEATURE_COUNT = 6;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.osbp.ecview.extension.model.impl.YContentSensitiveLayoutImpl <em>YContent Sensitive Layout</em>}' class.
@@ -3810,6 +3873,15 @@
 	int YCONTENT_SENSITIVE_LAYOUT__LAST_CONTEXT_CLICK = CoreModelPackage.YLAYOUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YCONTENT_SENSITIVE_LAYOUT__READONLY = CoreModelPackage.YLAYOUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4072,6 +4144,15 @@
 	int YRICH_TEXT_AREA__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YRICH_TEXT_AREA__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4389,6 +4470,15 @@
 	int YMASKED_TEXT_FIELD__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YMASKED_TEXT_FIELD__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4687,6 +4777,15 @@
 	int YPREFIXED_MASKED_TEXT_FIELD__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YPREFIXED_MASKED_TEXT_FIELD__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -4994,6 +5093,15 @@
 	int YMASKED_NUMERIC_FIELD__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YMASKED_NUMERIC_FIELD__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -5292,6 +5400,15 @@
 	int YMASKED_DECIMAL_FIELD__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YMASKED_DECIMAL_FIELD__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -5598,6 +5715,15 @@
 	int YPAIR_COMBO_BOX__LAST_CONTEXT_CLICK = ExtensionModelPackage.YINPUT__LAST_CONTEXT_CLICK;
 
 	/**
+	 * The feature id for the '<em><b>Readonly</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int YPAIR_COMBO_BOX__READONLY = ExtensionModelPackage.YINPUT__READONLY;
+
+	/**
 	 * The feature id for the '<em><b>Initial Editable</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -6759,6 +6885,17 @@
 	EAttribute getYColumnInfo_LabelI18nKey();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.osbp.ecview.extension.model.YColumnInfo#getSourceType <em>Source Type</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Source Type</em>'.
+	 * @see org.eclipse.osbp.ecview.extension.model.YColumnInfo#getSourceType()
+	 * @see #getYColumnInfo()
+	 * @generated
+	 */
+	EAttribute getYColumnInfo_SourceType();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.osbp.ecview.extension.model.YContentSensitiveLayout <em>YContent Sensitive Layout</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -7920,6 +8057,14 @@
 		EAttribute YCOLUMN_INFO__LABEL_I1_8N_KEY = eINSTANCE.getYColumnInfo_LabelI18nKey();
 
 		/**
+		 * The meta object literal for the '<em><b>Source Type</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute YCOLUMN_INFO__SOURCE_TYPE = eINSTANCE.getYColumnInfo_SourceType();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.osbp.ecview.extension.model.impl.YContentSensitiveLayoutImpl <em>YContent Sensitive Layout</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YColumnInfoImpl.java b/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YColumnInfoImpl.java
index 77fd5ae..d569bb6 100644
--- a/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YColumnInfoImpl.java
+++ b/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YColumnInfoImpl.java
@@ -43,6 +43,7 @@
  *   <li>{@link org.eclipse.osbp.ecview.extension.model.impl.YColumnInfoImpl#getTypeQualifiedName <em>Type Qualified Name</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.extension.model.impl.YColumnInfoImpl#getProperties <em>Properties</em>}</li>
  *   <li>{@link org.eclipse.osbp.ecview.extension.model.impl.YColumnInfoImpl#getLabelI18nKey <em>Label I1 8n Key</em>}</li>
+ *   <li>{@link org.eclipse.osbp.ecview.extension.model.impl.YColumnInfoImpl#getSourceType <em>Source Type</em>}</li>
  * </ul>
  *
  * @generated
@@ -137,6 +138,16 @@
 	protected String labelI18nKey = LABEL_I1_8N_KEY_EDEFAULT;
 
 	/**
+	 * The cached value of the '{@link #getSourceType() <em>Source Type</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getSourceType()
+	 * @generated
+	 * @ordered
+	 */
+	protected Class<?> sourceType;
+
+	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->.
 	 *
 	 * @generated
@@ -275,6 +286,27 @@
 	}
 
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public Class<?> getSourceType() {
+		return sourceType;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setSourceType(Class<?> newSourceType) {
+		Class<?> oldSourceType = sourceType;
+		sourceType = newSourceType;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, YECviewPackage.YCOLUMN_INFO__SOURCE_TYPE, oldSourceType, sourceType));
+	}
+
+	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->.
 	 *
 	 * @param otherEnd
@@ -321,6 +353,8 @@
 				else return getProperties().map();
 			case YECviewPackage.YCOLUMN_INFO__LABEL_I1_8N_KEY:
 				return getLabelI18nKey();
+			case YECviewPackage.YCOLUMN_INFO__SOURCE_TYPE:
+				return getSourceType();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -353,6 +387,9 @@
 			case YECviewPackage.YCOLUMN_INFO__LABEL_I1_8N_KEY:
 				setLabelI18nKey((String)newValue);
 				return;
+			case YECviewPackage.YCOLUMN_INFO__SOURCE_TYPE:
+				setSourceType((Class<?>)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -382,6 +419,9 @@
 			case YECviewPackage.YCOLUMN_INFO__LABEL_I1_8N_KEY:
 				setLabelI18nKey(LABEL_I1_8N_KEY_EDEFAULT);
 				return;
+			case YECviewPackage.YCOLUMN_INFO__SOURCE_TYPE:
+				setSourceType((Class<?>)null);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -407,6 +447,8 @@
 				return properties != null && !properties.isEmpty();
 			case YECviewPackage.YCOLUMN_INFO__LABEL_I1_8N_KEY:
 				return LABEL_I1_8N_KEY_EDEFAULT == null ? labelI18nKey != null : !LABEL_I1_8N_KEY_EDEFAULT.equals(labelI18nKey);
+			case YECviewPackage.YCOLUMN_INFO__SOURCE_TYPE:
+				return sourceType != null;
 		}
 		return super.eIsSet(featureID);
 	}
@@ -430,6 +472,8 @@
 		result.append(typeQualifiedName);
 		result.append(", labelI18nKey: ");
 		result.append(labelI18nKey);
+		result.append(", sourceType: ");
+		result.append(sourceType);
 		result.append(')');
 		return result.toString();
 	}
diff --git a/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YECviewPackageImpl.java b/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YECviewPackageImpl.java
index 85e1d59..d82347a 100644
--- a/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YECviewPackageImpl.java
+++ b/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YECviewPackageImpl.java
@@ -1201,6 +1201,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EAttribute getYColumnInfo_SourceType() {
+		return (EAttribute)yColumnInfoEClass.getEStructuralFeatures().get(5);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getYContentSensitiveLayout() {
 		return yContentSensitiveLayoutEClass;
 	}
@@ -1672,6 +1681,7 @@
 		createEAttribute(yColumnInfoEClass, YCOLUMN_INFO__TYPE_QUALIFIED_NAME);
 		createEReference(yColumnInfoEClass, YCOLUMN_INFO__PROPERTIES);
 		createEAttribute(yColumnInfoEClass, YCOLUMN_INFO__LABEL_I1_8N_KEY);
+		createEAttribute(yColumnInfoEClass, YCOLUMN_INFO__SOURCE_TYPE);
 
 		yContentSensitiveLayoutEClass = createEClass(YCONTENT_SENSITIVE_LAYOUT);
 
@@ -1931,6 +1941,10 @@
 		initEAttribute(getYColumnInfo_TypeQualifiedName(), ecorePackage.getEString(), "typeQualifiedName", null, 0, 1, YColumnInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getYColumnInfo_Properties(), theCoreModelPackage.getYStringToStringMap(), null, "properties", null, 0, -1, YColumnInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getYColumnInfo_LabelI18nKey(), ecorePackage.getEString(), "labelI18nKey", null, 0, 1, YColumnInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		g1 = createEGenericType(ecorePackage.getEJavaClass());
+		g2 = createEGenericType();
+		g1.getETypeArguments().add(g2);
+		initEAttribute(getYColumnInfo_SourceType(), g1, "sourceType", null, 0, 1, YColumnInfo.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(yContentSensitiveLayoutEClass, YContentSensitiveLayout.class, "YContentSensitiveLayout", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
diff --git a/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YTypedCompoundSuspectImpl.java b/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YTypedCompoundSuspectImpl.java
index fb3454f..70d8f9f 100644
--- a/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YTypedCompoundSuspectImpl.java
+++ b/org.eclipse.osbp.ecview.extension.model/src/org/eclipse/osbp/ecview/extension/model/impl/YTypedCompoundSuspectImpl.java
@@ -16,7 +16,6 @@
 package org.eclipse.osbp.ecview.extension.model.impl;
 
 import java.util.Collection;
-
 import org.eclipse.emf.common.notify.NotificationChain;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClass;
