diff --git a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/signature/ITypeGenericMapping.java b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/signature/ITypeGenericMapping.java
index 5e1c8f1..3963742 100644
--- a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/signature/ITypeGenericMapping.java
+++ b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/signature/ITypeGenericMapping.java
@@ -13,26 +13,32 @@
 import java.util.Map;
 
 /**
- * <h3>{@link ITypeGenericMapping}</h3> ...
+ * <h3>{@link ITypeGenericMapping}</h3>
  * 
- *  @author Andreas Hoegger
+ * @author Andreas Hoegger
  * @since 3.9.0 04.04.2013
  */
 public interface ITypeGenericMapping {
 
   /**
-   * @return
+   * @return The fully qualified name of the class the generic mappings belong to.
    */
   String getFullyQualifiedName();
 
   /**
+   * Gets the signature of the generic parameter with the given name.
+   * 
    * @param paramName
-   * @return
+   *          The name of the generic parameter (e.g. "T" or "VALUE_TYPE")
+   * @return The signature of the generic type with the given name or null if the class that belongs to this instance
+   *         does not define a generic type with the given name.
    */
   String getParameterSignature(String paramName);
 
   /**
-   * @return
+   * Gets a unmodifiable map of all generic types with their corresponding signature.
+   * 
+   * @return The generic type to signature mapping.
    */
   Map<String, String> getParameters();
 
diff --git a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/signature/internal/TypeGenericMapping.java b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/signature/internal/TypeGenericMapping.java
index 9a23742..6fa9aff 100644
--- a/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/signature/internal/TypeGenericMapping.java
+++ b/org.eclipse.scout.sdk.util/src/org/eclipse/scout/sdk/util/signature/internal/TypeGenericMapping.java
@@ -11,8 +11,8 @@
 package org.eclipse.scout.sdk.util.signature.internal;
 
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
@@ -27,11 +27,11 @@
 public class TypeGenericMapping implements ITypeGenericMapping {
 
   private final String m_fullyQualifiedName;
-  private Map<String /*parameter name*/, String /*param signature*/> m_parameters;
+  private final Map<String /*parameter name*/, String /*param signature*/> m_parameters;
 
   public TypeGenericMapping(String fullyQualliefiedName) {
     m_fullyQualifiedName = fullyQualliefiedName;
-    m_parameters = new HashMap<String, String>();
+    m_parameters = new LinkedHashMap<String, String>();
   }
 
   @Override
@@ -66,10 +66,6 @@
         builder.append(" | ").append(e.getKey()).append(" -> ").append(e.getValue());
       }
     }
-
-//    for (Entry<String, String> e : m_parameters.entrySet()) {
-//      builder.append(" | ").append(e.getKey()).append(" -> ").append(e.getValue());
-//    }
     builder.append('}');
     return builder.toString();
   }
diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/internal/workspace/dto/AbstractTableSourceBuilder.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/internal/workspace/dto/AbstractTableSourceBuilder.java
index 8642644..38bb365 100644
--- a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/internal/workspace/dto/AbstractTableSourceBuilder.java
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/internal/workspace/dto/AbstractTableSourceBuilder.java
@@ -14,6 +14,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.Signature;
+import org.eclipse.scout.sdk.extensions.runtime.classes.IRuntimeClasses;
 import org.eclipse.scout.sdk.util.signature.SignatureUtility;
 import org.eclipse.scout.sdk.util.type.TypeUtility;
 import org.eclipse.scout.sdk.util.typecache.ITypeHierarchy;
@@ -36,9 +37,17 @@
   }
 
   protected String getColumnSignature(IType type, ITypeHierarchy columnHierarchy) throws IllegalArgumentException, CoreException {
-    if (type == null || Object.class.getName().equals(type.getFullyQualifiedName())) {
+    if (!TypeUtility.exists(type) || Object.class.getName().equals(type.getFullyQualifiedName())) {
       return null;
     }
+
+    // try IColumn first
+    String sig = SignatureUtility.resolveGenericParameterInSuperHierarchy(type, columnHierarchy.getJdtHierarchy(), IRuntimeClasses.IColumn, IRuntimeClasses.TYPE_PARAM_COLUMN_VALUE_TYPE);
+    if (sig != null) {
+      return sig;
+    }
+
+    // try other models
     IType superType = columnHierarchy.getSuperclass(type);
     if (TypeUtility.exists(superType)) {
       if (TypeUtility.isGenericType(superType)) {
diff --git a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
index 7a82482..57a2f77 100644
--- a/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
+++ b/org.eclipse.scout.sdk/src/org/eclipse/scout/sdk/workspace/type/ScoutTypeUtility.java
@@ -77,6 +77,7 @@
   private static final Pattern RETURN_TRUE_PATTERN = Pattern.compile("return\\s*true", Pattern.MULTILINE);
   private static final Pattern PREF_REGEX = Pattern.compile("^([\\+\\[]+)(.*)$");
   private static final Pattern SUFF_REGEX = Pattern.compile("(^.*)\\;$");
+
   private static final Pattern SUFF_CLASS_REGEX = Pattern.compile("\\.class$");
 
   private ScoutTypeUtility() {
@@ -1002,9 +1003,17 @@
   }
 
   public static String computeFormFieldGenericType(IType type, ITypeHierarchy formFieldHierarchy) throws CoreException {
-    if (type == null || type.getFullyQualifiedName().equals(Object.class.getName())) {
+    if (!TypeUtility.exists(type) || type.getFullyQualifiedName().equals(Object.class.getName())) {
       return null;
     }
+
+    // try value fields
+    String sig = SignatureUtility.resolveGenericParameterInSuperHierarchy(type, formFieldHierarchy.getJdtHierarchy(), IRuntimeClasses.IValueField, IRuntimeClasses.TYPE_PARAM_VALUEFIELD__VALUE_TYPE);
+    if (sig != null) {
+      return sig;
+    }
+
+    // for own models
     IType superType = formFieldHierarchy.getSuperclass(type);
     if (TypeUtility.exists(superType)) {
       if (TypeUtility.isGenericType(superType)) {
