diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
index 6e8c8d4..610fe33 100644
--- a/jenkins.build.config.xml
+++ b/jenkins.build.config.xml
@@ -20,6 +20,7 @@
                 <jenkins.build.dependency>org.eclipse.osbp.ecview.addons</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.ecview.core</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.eventbroker</jenkins.build.dependency>
+                <jenkins.build.dependency>org.eclipse.osbp.fork.mihalis.opal.imageSelector.osgi</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.osgi.hybrid.api</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.preferences</jenkins.build.dependency>
                 <jenkins.build.dependency>org.eclipse.osbp.runtime</jenkins.build.dependency>
diff --git a/org.eclipse.osbp.xtext.reportdsl.feature/feature.xml b/org.eclipse.osbp.xtext.reportdsl.feature/feature.xml
index 45641c3..4d03451 100644
--- a/org.eclipse.osbp.xtext.reportdsl.feature/feature.xml
+++ b/org.eclipse.osbp.xtext.reportdsl.feature/feature.xml
@@ -15,7 +15,7 @@
       label="%featureName"
       version="0.9.0.qualifier"
       provider-name="%providerName"
-	  plugin="org.eclipse.osbp.xtext.reportdsl">
+	  plugin="org.eclipse.osbp.license">
 
    <description>
       %description
diff --git a/org.eclipse.osbp.xtext.reportdsl.ui/META-INF/MANIFEST.MF b/org.eclipse.osbp.xtext.reportdsl.ui/META-INF/MANIFEST.MF
index 4bada64..f1bbfc5 100644
--- a/org.eclipse.osbp.xtext.reportdsl.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.osbp.xtext.reportdsl.ui/META-INF/MANIFEST.MF
@@ -37,7 +37,8 @@
  org.eclipse.osbp.xtext.table.ui;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.xtext.oxtype;bundle-version="[0.9.0,0.10.0)",
  org.eclipse.osbp.xtext.oxtype.ui;bundle-version="[0.9.0,0.10.0)",
- org.eclipse.xtend.lib;resolution:=optional
+ org.eclipse.xtend.lib;resolution:=optional,
+ org.eclipse.osbp.fork.mihalis.opal.imageSelector.osgi;bundle-version="0.9.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.osbp.xtext.reportdsl.ui;version="0.9.0",
  org.eclipse.osbp.xtext.reportdsl.ui.contentassist;version="0.9.0",
diff --git a/org.eclipse.osbp.xtext.reportdsl.ui/src/org/eclipse/osbp/xtext/reportdsl/ui/contentassist/ReportDSLProposalProvider.xtend b/org.eclipse.osbp.xtext.reportdsl.ui/src/org/eclipse/osbp/xtext/reportdsl/ui/contentassist/ReportDSLProposalProvider.xtend
index b79b200..e5bd901 100644
--- a/org.eclipse.osbp.xtext.reportdsl.ui/src/org/eclipse/osbp/xtext/reportdsl/ui/contentassist/ReportDSLProposalProvider.xtend
+++ b/org.eclipse.osbp.xtext.reportdsl.ui/src/org/eclipse/osbp/xtext/reportdsl/ui/contentassist/ReportDSLProposalProvider.xtend
@@ -68,6 +68,32 @@
 import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor
 import org.eclipse.xtext.ui.editor.contentassist.ReplacementTextApplier
 import org.eclipse.osbp.xtext.reportdsl.Grid
+import org.eclipse.osbp.fork.mihalis.opal.widgets.ImageSelectorDialog
+
+class IconNameTextApplier extends ReplacementTextApplier {
+	var ContentAssistContext context
+	var String[] extensions
+
+	def setContext(ContentAssistContext context) {
+		this.context = context
+	}
+
+	def setExtensions(String[] fileExtensions) {
+		extensions = fileExtensions
+	}
+
+	// this will inject a file dialog when selecting the file picker proposal 
+	override getActualReplacementString(ConfigurableCompletionProposal proposal) {
+		var display = context.getViewer().getTextWidget().getDisplay();
+		var shell = new Shell(display);
+		shell.setLayout(new FillLayout());
+		var imageSelectorDialog = new ImageSelectorDialog(shell, 16);
+		imageSelectorDialog.setFilterExtensions(extensions)
+		var imageFileName = imageSelectorDialog.open(true);
+		return "\"".concat(imageFileName).concat("\"");
+	}
+
+}
 
 class ColorTextApplier extends ReplacementTextApplier {
 	var ContentAssistContext context
@@ -129,7 +155,26 @@
 	
 	ICompletionProposal proposal
 
+	def iconPickerProposal(EObject model, Assignment assignment, ContentAssistContext context,
+		ICompletionProposalAcceptor acceptor, String fileExtensions) {
+		var fileName = createCompletionProposal("Select icon...", context) as ConfigurableCompletionProposal
+		if (fileName != null) {
+			var applier = new IconNameTextApplier()
+			applier.setExtensions(fileExtensions.split(","))
+			applier.setContext(context)
+			fileName.setTextApplier = applier
+		}
+		acceptor.accept(fileName)
+	}
 
+	override completeTableTrend_Icon(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		iconPickerProposal(model, assignment, context, acceptor, ".png")
+	}
+
+	override completeTableIcon_Icon(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		iconPickerProposal(model, assignment, context, acceptor, ".png")
+	}
+		
 	// overriding the completeKeyword method to filter the available proposals
 	override void completeKeyword(Keyword keyword, ContentAssistContext contentAssistContext,
 			ICompletionProposalAcceptor acceptor) {
@@ -674,10 +719,4 @@
 		ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		provider.complete_STRING(model, (assignment.getTerminal() as RuleCall), context, acceptor)
 	}
-
-	override public void completeTableIcon_Icon(EObject model, Assignment assignment, ContentAssistContext context,
-		ICompletionProposalAcceptor acceptor) {
-		provider.complete_STRING(model, (assignment.getTerminal() as RuleCall), context, acceptor)
-	}
-
 }
diff --git a/org.eclipse.osbp.xtext.reportdsl.ui/xtend-gen/org/eclipse/osbp/xtext/reportdsl/ui/contentassist/IconNameTextApplier.java b/org.eclipse.osbp.xtext.reportdsl.ui/xtend-gen/org/eclipse/osbp/xtext/reportdsl/ui/contentassist/IconNameTextApplier.java
new file mode 100644
index 0000000..32ebb28
--- /dev/null
+++ b/org.eclipse.osbp.xtext.reportdsl.ui/xtend-gen/org/eclipse/osbp/xtext/reportdsl/ui/contentassist/IconNameTextApplier.java
@@ -0,0 +1,52 @@
+/**
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ * 
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * Contributors:
+ * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ * 
+ * 
+ *  This copyright notice shows up in the generated Java code
+ */
+package org.eclipse.osbp.xtext.reportdsl.ui.contentassist;
+
+import org.eclipse.osbp.fork.mihalis.opal.widgets.ImageSelectorDialog;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
+import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
+import org.eclipse.xtext.ui.editor.contentassist.ReplacementTextApplier;
+
+@SuppressWarnings("all")
+public class IconNameTextApplier extends ReplacementTextApplier {
+  private ContentAssistContext context;
+  
+  private String[] extensions;
+  
+  public ContentAssistContext setContext(final ContentAssistContext context) {
+    return this.context = context;
+  }
+  
+  public String[] setExtensions(final String[] fileExtensions) {
+    return this.extensions = fileExtensions;
+  }
+  
+  @Override
+  public String getActualReplacementString(final ConfigurableCompletionProposal proposal) {
+    Display display = this.context.getViewer().getTextWidget().getDisplay();
+    Shell shell = new Shell(display);
+    FillLayout _fillLayout = new FillLayout();
+    shell.setLayout(_fillLayout);
+    ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(shell, 16);
+    imageSelectorDialog.setFilterExtensions(this.extensions);
+    String imageFileName = imageSelectorDialog.open(true);
+    return "\"".concat(imageFileName).concat("\"");
+  }
+}
diff --git a/org.eclipse.osbp.xtext.reportdsl.ui/xtend-gen/org/eclipse/osbp/xtext/reportdsl/ui/contentassist/ReportDSLProposalProvider.java b/org.eclipse.osbp.xtext.reportdsl.ui/xtend-gen/org/eclipse/osbp/xtext/reportdsl/ui/contentassist/ReportDSLProposalProvider.java
index e9a39e8..54cb488 100644
--- a/org.eclipse.osbp.xtext.reportdsl.ui/xtend-gen/org/eclipse/osbp/xtext/reportdsl/ui/contentassist/ReportDSLProposalProvider.java
+++ b/org.eclipse.osbp.xtext.reportdsl.ui/xtend-gen/org/eclipse/osbp/xtext/reportdsl/ui/contentassist/ReportDSLProposalProvider.java
@@ -16,6 +16,7 @@
  */
 package org.eclipse.osbp.xtext.reportdsl.ui.contentassist;
 
+import com.google.common.base.Objects;
 import com.google.inject.Inject;
 import java.util.Collection;
 import org.eclipse.emf.common.util.EList;
@@ -59,6 +60,7 @@
 import org.eclipse.osbp.xtext.reportdsl.ui.contentassist.AbstractReportDSLProposalProvider;
 import org.eclipse.osbp.xtext.reportdsl.ui.contentassist.ColorTextApplier;
 import org.eclipse.osbp.xtext.reportdsl.ui.contentassist.FileNameTextApplier;
+import org.eclipse.osbp.xtext.reportdsl.ui.contentassist.IconNameTextApplier;
 import org.eclipse.xtext.AbstractElement;
 import org.eclipse.xtext.Assignment;
 import org.eclipse.xtext.EnumLiteralDeclaration;
@@ -84,6 +86,29 @@
   
   private ICompletionProposal proposal;
   
+  public void iconPickerProposal(final EObject model, final Assignment assignment, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor, final String fileExtensions) {
+    ICompletionProposal _createCompletionProposal = this.createCompletionProposal("Select icon...", context);
+    ConfigurableCompletionProposal fileName = ((ConfigurableCompletionProposal) _createCompletionProposal);
+    boolean _notEquals = (!Objects.equal(fileName, null));
+    if (_notEquals) {
+      IconNameTextApplier applier = new IconNameTextApplier();
+      applier.setExtensions(fileExtensions.split(","));
+      applier.setContext(context);
+      fileName.setTextApplier(applier);
+    }
+    acceptor.accept(fileName);
+  }
+  
+  @Override
+  public void completeTableTrend_Icon(final EObject model, final Assignment assignment, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) {
+    this.iconPickerProposal(model, assignment, context, acceptor, ".png");
+  }
+  
+  @Override
+  public void completeTableIcon_Icon(final EObject model, final Assignment assignment, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) {
+    this.iconPickerProposal(model, assignment, context, acceptor, ".png");
+  }
+  
   @Override
   public void completeKeyword(final Keyword keyword, final ContentAssistContext contentAssistContext, final ICompletionProposalAcceptor acceptor) {
     boolean _allowedKeyword = this.allowedKeyword(keyword, contentAssistContext, acceptor);
@@ -602,10 +627,4 @@
     AbstractElement _terminal = assignment.getTerminal();
     this.provider.complete_STRING(model, ((RuleCall) _terminal), context, acceptor);
   }
-  
-  @Override
-  public void completeTableIcon_Icon(final EObject model, final Assignment assignment, final ContentAssistContext context, final ICompletionProposalAcceptor acceptor) {
-    AbstractElement _terminal = assignment.getTerminal();
-    this.provider.complete_STRING(model, ((RuleCall) _terminal), context, acceptor);
-  }
 }
diff --git a/org.eclipse.osbp.xtext.reportdsl/emf-gen/org/eclipse/osbp/xtext/reportdsl/ReportDSLPackage.java b/org.eclipse.osbp.xtext.reportdsl/emf-gen/org/eclipse/osbp/xtext/reportdsl/ReportDSLPackage.java
index b5423d5..688e31f 100644
--- a/org.eclipse.osbp.xtext.reportdsl/emf-gen/org/eclipse/osbp/xtext/reportdsl/ReportDSLPackage.java
+++ b/org.eclipse.osbp.xtext.reportdsl/emf-gen/org/eclipse/osbp/xtext/reportdsl/ReportDSLPackage.java
@@ -54,7 +54,7 @@
  * <!-- end-model-doc -->
  * @see org.eclipse.osbp.xtext.reportdsl.ReportDSLFactory
  * @model kind="package"
- *        annotation="http://www.eclipse.org/emf/2002/GenModel fileExtensions='report' modelName='ReportDSL' prefix='ReportDSL' updateClasspath='false' loadInitialization='false' literalsInterface='true' copyrightText='Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)\r\n All rights reserved. This program and the accompanying materials \r\n are made available under the terms of the Eclipse Public License 2.0  \r\n which accompanies this distribution, and is available at \r\n https://www.eclipse.org/legal/epl-2.0/ \r\n \r\n SPDX-License-Identifier: EPL-2.0 \r\n\r\n Based on ideas from Xtext, Xtend, Xcore\r\n  \r\n Contributors:  \r\n \t\tChristophe Loetz  (Loetz GmbH&Co.KG) - Initial implementation \r\n ' basePackage='org.eclipse.osbp.xtext'"
+ *        annotation="http://www.eclipse.org/emf/2002/GenModel fileExtensions='report' modelName='ReportDSL' prefix='ReportDSL' updateClasspath='false' loadInitialization='false' literalsInterface='true' copyrightText='Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)\n All rights reserved. This program and the accompanying materials \n are made available under the terms of the Eclipse Public License 2.0  \n which accompanies this distribution, and is available at \n https://www.eclipse.org/legal/epl-2.0/ \n \n SPDX-License-Identifier: EPL-2.0 \n\n Based on ideas from Xtext, Xtend, Xcore\n  \n Contributors:  \n \t\tChristophe Loetz  (Loetz GmbH&Co.KG) - Initial implementation \n ' basePackage='org.eclipse.osbp.xtext'"
  *        annotation="http://www.eclipse.org/emf/2002/Ecore rootPackage='reportdsl'"
  * @generated
  */
diff --git a/org.eclipse.osbp.xtext.reportdsl/src-gen/org/eclipse/osbp/xtext/reportdsl/parser/antlr/internal/InternalReportDSLLexer.java b/org.eclipse.osbp.xtext.reportdsl/src-gen/org/eclipse/osbp/xtext/reportdsl/parser/antlr/internal/InternalReportDSLLexer.java
index 9e24e2d..c6e029f 100644
--- a/org.eclipse.osbp.xtext.reportdsl/src-gen/org/eclipse/osbp/xtext/reportdsl/parser/antlr/internal/InternalReportDSLLexer.java
+++ b/org.eclipse.osbp.xtext.reportdsl/src-gen/org/eclipse/osbp/xtext/reportdsl/parser/antlr/internal/InternalReportDSLLexer.java
@@ -1,3 +1,17 @@
+/**
+ *                                                                            
+ *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
+ *                                                                            
+ *  All rights reserved. This program and the accompanying materials           
+ *  are made available under the terms of the Eclipse Public License v1.0       
+ *  which accompanies this distribution, and is available at                  
+ *  http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ *  Contributors:                                                      
+ * 	   Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
+ * 
+ */
+
 package org.eclipse.osbp.xtext.reportdsl.parser.antlr.internal;
 
 // Hack: Use our own Lexer superclass by means of import. 
@@ -9964,4 +9978,4 @@
     }
  
 
-}
\ No newline at end of file
+}
diff --git a/org.eclipse.osbp.xtext.reportdsl/src/org/eclipse/osbp/xtext/reportdsl/common/BaseReport.java b/org.eclipse.osbp.xtext.reportdsl/src/org/eclipse/osbp/xtext/reportdsl/common/BaseReport.java
index 0c7add9..db81354 100644
--- a/org.eclipse.osbp.xtext.reportdsl/src/org/eclipse/osbp/xtext/reportdsl/common/BaseReport.java
+++ b/org.eclipse.osbp.xtext.reportdsl/src/org/eclipse/osbp/xtext/reportdsl/common/BaseReport.java
@@ -58,7 +58,6 @@
 import org.eclipse.osbp.runtime.common.event.IEventDispatcher;
 import org.eclipse.osbp.ui.api.customfields.IBlobService;
 import org.eclipse.osbp.ui.api.datamart.DatamartFilter;
-import org.eclipse.osbp.ui.api.datamart.DatamartPrimary;
 import org.eclipse.osbp.ui.api.datamart.IDataMart;
 import org.eclipse.osbp.ui.api.datamart.IDatamartFilterGenerator;
 import org.eclipse.osbp.ui.api.layout.IViewLayoutManager;
@@ -688,15 +687,11 @@
 	private void detectDeletion(final EventDispatcherEvent event, LEntity entity, String entityName) {
 		if (entityName.equals(event.getTopic())) {
 			for (IDataMart datamartInstance : datamartInstanceMap.values()){
-				List<DatamartPrimary<?>> primaryKeys = datamartInstance.getPrimaryList();
-				for (DatamartPrimary key : primaryKeys) {
-					if (entity.getPrimaryKeyAttribute() != null && entity.getPrimaryKeyAttribute().isId()
-							&& key.contains(event.getData().get(EventDispatcherDataTag.ID))) {
-						renderData();
-						for (IDatamartFilterGenerator filterGenerator : filterGeneratorMap.values()) {
-							if (filterGenerator != null) {
-								filterGenerator.updateFilter();
-							}
+				if(datamartInstance.contains(event.getData().get(EventDispatcherDataTag.ID))) {
+					renderData();
+					for (IDatamartFilterGenerator filterGenerator : filterGeneratorMap.values()) {
+						if (filterGenerator != null) {
+							filterGenerator.updateFilter();
 						}
 					}
 				}
diff --git a/org.eclipse.osbp.xtext.reportdsl/src/org/eclipse/osbp/xtext/reportdsl/scoping/ReportDSLScopeProvider.xtend b/org.eclipse.osbp.xtext.reportdsl/src/org/eclipse/osbp/xtext/reportdsl/scoping/ReportDSLScopeProvider.xtend
index 5ea7013..ba74620 100644
--- a/org.eclipse.osbp.xtext.reportdsl/src/org/eclipse/osbp/xtext/reportdsl/scoping/ReportDSLScopeProvider.xtend
+++ b/org.eclipse.osbp.xtext.reportdsl/src/org/eclipse/osbp/xtext/reportdsl/scoping/ReportDSLScopeProvider.xtend
@@ -19,10 +19,10 @@
 package org.eclipse.osbp.xtext.reportdsl.scoping
 
 import java.util.ArrayList
-import java.util.List
 import javax.inject.Inject
 import org.eclipse.emf.ecore.EObject
 import org.eclipse.emf.ecore.EReference
+import org.eclipse.osbp.dsl.common.xtext.extensions.ModelExtensions
 import org.eclipse.osbp.dsl.dto.xtext.jvmmodel.TypeHelper
 import org.eclipse.osbp.dsl.semantic.common.types.LDataType
 import org.eclipse.osbp.utils.entityhelper.DataType
@@ -31,7 +31,7 @@
 import org.eclipse.osbp.xtext.datamartdsl.DatamartMember
 import org.eclipse.osbp.xtext.datamartdsl.DatamartOwner
 import org.eclipse.osbp.xtext.datamartdsl.util.DatamartAttributeUtil
-import org.eclipse.osbp.xtext.reportdsl.Report
+import org.eclipse.osbp.xtext.reportdsl.DatamartContainer
 import org.eclipse.osbp.xtext.reportdsl.ReportDSLPackage
 import org.eclipse.osbp.xtext.reportdsl.TableUnaryAggregation
 import org.eclipse.xtext.common.types.JvmDeclaredType
@@ -41,8 +41,6 @@
 import org.eclipse.xtext.resource.IEObjectDescription
 import org.eclipse.xtext.scoping.IScope
 import org.eclipse.xtext.scoping.impl.MapBasedScope
-import org.eclipse.osbp.xtext.reportdsl.DatamartContainer
-import java.util.Collection
 
 /**
  * This class contains custom scoping description.
@@ -55,12 +53,11 @@
 
 	@Inject extension DataType
 	@Inject extension TypeHelper
+	@Inject extension ModelExtensions
 
 	override IScope getScope(EObject context, EReference reference) {
 		if (reference == ReportDSLPackage.Literals.DATAMART_TABLE_GROUP__GROUPING_REF) {
 			return context.getScope_DatamartProperty
-//		} else if (reference == ReportDSLPackage.Literals.DATAMART_TABLE__HEADER) {
-//			return context.getScope_DatamartProperty
 		} else if (reference == ReportDSLPackage.Literals.TABLE_ATTRIBUTE__VALUE_REF) {
 			return context.getScope_DatamartProperty
 		} else if (reference == ReportDSLPackage.Literals.VISIBILITY__VISIBILITY_ATTRIBUTE) {
@@ -83,10 +80,8 @@
 				var attribute = eObj as DatamartAttribute
 				var type = attribute.attributeRef.type
 				if (type instanceof LDataType) {
-					if (type.jvmTypeReference !== null) {
-						if (type.jvmTypeReference.type.containsSuperType(Number)) {
-							result.add(eObjDescription)
-						}
+					if(isNumericOrWrapperType(type)) {
+						result.add(eObjDescription)
 					}
 				}
 			}
@@ -160,7 +155,7 @@
 		}
 	}
 
-	def boolean containsSuperType(JvmType type, Class clazz) {
+	def boolean containsSuperType(JvmType type, Class<?> clazz) {
 		if (!(type instanceof JvmDeclaredType)) {
 			return false
 		}
diff --git a/org.eclipse.osbp.xtext.reportdsl/xtend-gen/org/eclipse/osbp/xtext/reportdsl/scoping/ReportDSLScopeProvider.java b/org.eclipse.osbp.xtext.reportdsl/xtend-gen/org/eclipse/osbp/xtext/reportdsl/scoping/ReportDSLScopeProvider.java
index c30dd7b..6d8beba 100644
--- a/org.eclipse.osbp.xtext.reportdsl/xtend-gen/org/eclipse/osbp/xtext/reportdsl/scoping/ReportDSLScopeProvider.java
+++ b/org.eclipse.osbp.xtext.reportdsl/xtend-gen/org/eclipse/osbp/xtext/reportdsl/scoping/ReportDSLScopeProvider.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EReference;
+import org.eclipse.osbp.dsl.common.xtext.extensions.ModelExtensions;
 import org.eclipse.osbp.dsl.dto.xtext.jvmmodel.TypeHelper;
 import org.eclipse.osbp.dsl.semantic.common.types.LDataType;
 import org.eclipse.osbp.dsl.semantic.common.types.LScalarType;
@@ -41,7 +42,6 @@
 import org.eclipse.osbp.xtext.reportdsl.scoping.AbstractReportDSLScopeProvider;
 import org.eclipse.xtext.common.types.JvmDeclaredType;
 import org.eclipse.xtext.common.types.JvmType;
-import org.eclipse.xtext.common.types.JvmTypeReference;
 import org.eclipse.xtext.common.types.util.RawSuperTypes;
 import org.eclipse.xtext.resource.EObjectDescription;
 import org.eclipse.xtext.resource.IEObjectDescription;
@@ -67,6 +67,10 @@
   @Extension
   private TypeHelper _typeHelper;
   
+  @Inject
+  @Extension
+  private ModelExtensions _modelExtensions;
+  
   @Override
   public IScope getScope(final EObject context, final EReference reference) {
     IScope _xblockexpression = null;
@@ -108,13 +112,9 @@
           DatamartAttribute attribute = ((DatamartAttribute) eObj);
           LScalarType type = attribute.getAttributeRef().getType();
           if ((type instanceof LDataType)) {
-            JvmTypeReference _jvmTypeReference = ((LDataType)type).getJvmTypeReference();
-            boolean _tripleNotEquals = (_jvmTypeReference != null);
-            if (_tripleNotEquals) {
-              boolean _containsSuperType = this.containsSuperType(((LDataType)type).getJvmTypeReference().getType(), Number.class);
-              if (_containsSuperType) {
-                result.add(eObjDescription);
-              }
+            boolean _isNumericOrWrapperType = this._modelExtensions.isNumericOrWrapperType(((LDataType)type));
+            if (_isNumericOrWrapperType) {
+              result.add(eObjDescription);
             }
           }
         }
@@ -206,7 +206,7 @@
     }
   }
   
-  public boolean containsSuperType(final JvmType type, final Class clazz) {
+  public boolean containsSuperType(final JvmType type, final Class<?> clazz) {
     if ((!(type instanceof JvmDeclaredType))) {
       return false;
     }
