http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmNavigationPropertyImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmNavigationPropertyImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmNavigationPropertyImpl.java
index 5c9e2c1..a8bb8d9 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmNavigationPropertyImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmNavigationPropertyImpl.java
@@ -18,25 +18,29 @@
  */
 package org.apache.olingo.commons.core.edm.provider;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
 import org.apache.olingo.commons.api.edm.EdmReferentialConstraint;
+import org.apache.olingo.commons.api.edm.EdmStructuredType;
 import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.provider.NavigationProperty;
 import org.apache.olingo.commons.api.edm.provider.ReferentialConstraint;
-import org.apache.olingo.commons.core.edm.AbstractEdmNavigationProperty;
-import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
-
-import java.util.ArrayList;
-import java.util.List;
 
-public class EdmNavigationPropertyImpl extends AbstractEdmNavigationProperty {
+public class EdmNavigationPropertyImpl extends EdmElementImpl implements 
EdmNavigationProperty {
 
   private final FullQualifiedName structuredTypeName;
   private final NavigationProperty navigationProperty;
   private List<EdmReferentialConstraint> referentialConstraints;
   private final EdmAnnotationHelper helper;
+  private EdmEntityType typeImpl;
+  private EdmNavigationProperty partnerNavigationProperty;
 
   public EdmNavigationPropertyImpl(
       final Edm edm, final FullQualifiedName structuredTypeName, final 
NavigationProperty navigationProperty) {
@@ -47,11 +51,6 @@ public class EdmNavigationPropertyImpl extends 
AbstractEdmNavigationProperty {
   }
 
   @Override
-  protected FullQualifiedName getTypeFQN() {
-    return navigationProperty.getTypeFQN();
-  }
-
-  @Override
   public boolean isCollection() {
     return navigationProperty.isCollection();
   }
@@ -67,8 +66,36 @@ public class EdmNavigationPropertyImpl extends 
AbstractEdmNavigationProperty {
   }
 
   @Override
-  protected String internatGetPartner() {
-    return navigationProperty.getPartner();
+  public EdmEntityType getType() {
+    if (typeImpl == null) {
+      typeImpl = edm.getEntityType(navigationProperty.getTypeFQN());
+      if (typeImpl == null) {
+        throw new EdmException("Cannot find type with name: " + 
navigationProperty.getTypeFQN());
+      }
+    }
+    return typeImpl;
+  }
+
+  @Override
+  public EdmNavigationProperty getPartner() {
+    if (partnerNavigationProperty == null) {
+      String partner = navigationProperty.getPartner();
+      if (partner != null) {
+        EdmStructuredType type = getType();
+        EdmNavigationProperty property = null;
+        final String[] split = partner.split("/");
+        for (String element : split) {
+          property = type.getNavigationProperty(element);
+          if (property == null) {
+            throw new EdmException("Cannot find navigation property with name: 
" + element
+                + " at type " + type.getName());
+          }
+          type = property.getType();
+        }
+        partnerNavigationProperty = property;
+      }
+    }
+    return partnerNavigationProperty;
   }
 
   @Override
@@ -91,8 +118,7 @@ public class EdmNavigationPropertyImpl extends 
AbstractEdmNavigationProperty {
       referentialConstraints = new ArrayList<EdmReferentialConstraint>();
       if (providerConstraints != null) {
         for (ReferentialConstraint constraint : providerConstraints) {
-          referentialConstraints.add(
-              new EdmReferentialConstraintImpl(edm, constraint));
+          referentialConstraints.add(new EdmReferentialConstraintImpl(edm, 
constraint));
         }
       }
     }
@@ -100,6 +126,16 @@ public class EdmNavigationPropertyImpl extends 
AbstractEdmNavigationProperty {
   }
 
   @Override
+  public TargetType getAnnotationsTargetType() {
+    return TargetType.NavigationProperty;
+  }
+
+  @Override
+  public String getAnnotationsTargetPath() {
+    return getName();
+  }
+
+  @Override
   public FullQualifiedName getAnnotationsTargetFQN() {
     return structuredTypeName;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmOperationImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmOperationImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmOperationImpl.java
index 009eadc..f8d69bf 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmOperationImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmOperationImpl.java
@@ -19,23 +19,33 @@
 package org.apache.olingo.commons.core.edm.provider;
 
 import java.util.ArrayList;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmBindingTarget;
+import org.apache.olingo.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmOperation;
 import org.apache.olingo.commons.api.edm.EdmParameter;
+import org.apache.olingo.commons.api.edm.EdmReturnType;
 import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 import org.apache.olingo.commons.api.edm.provider.Operation;
 import org.apache.olingo.commons.api.edm.provider.Parameter;
-import org.apache.olingo.commons.core.edm.AbstractEdmOperation;
-import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
 
-public abstract class EdmOperationImpl extends AbstractEdmOperation {
+public abstract class EdmOperationImpl extends EdmTypeImpl implements 
EdmOperation {
 
   protected final Operation operation;
   protected final EdmAnnotationHelper helper;
+  private final Map<String, EdmParameter> parameters = new 
LinkedHashMap<String, EdmParameter>();
+  private String entitySetPath;
+  private boolean isBound;
+  private EdmReturnType returnType;
+  private List<String> parameterNames;
 
   protected static <T extends EdmOperationImpl> T getInstance(final T 
instance) {
     final List<Parameter> providerParameters = 
instance.operation.getParameters();
@@ -68,6 +78,68 @@ public abstract class EdmOperationImpl extends 
AbstractEdmOperation {
     this.operation = operation;
     this.helper = new EdmAnnotationHelperImpl(edm, operation);
   }
+  
+  protected void setParameters(final List<EdmParameter> _parameters) {
+    for (EdmParameter parameter : _parameters) {
+      parameters.put(parameter.getName(), parameter);
+    }
+  }
+
+  protected void setEntitySetPath(final String entitySetPath) {
+    this.entitySetPath = entitySetPath;
+  }
+
+  protected void setIsBound(final boolean isBound) {
+    this.isBound = isBound;
+  }
+
+  protected void setReturnType(final EdmReturnType returnType) {
+    this.returnType = returnType;
+  }
+
+  @Override
+  public EdmParameter getParameter(final String name) {
+    return parameters.get(name);
+  }
+
+  @Override
+  public List<String> getParameterNames() {
+    if (parameterNames == null) {
+      parameterNames = new ArrayList<String>(parameters.size());
+      for (String parameterName : parameters.keySet()) {
+        parameterNames.add(parameterName);
+      }
+    }
+    return parameterNames;
+  }
+
+  @Override
+  public EdmEntitySet getReturnedEntitySet(final EdmEntitySet 
bindingParameterEntitySet) {
+    EdmEntitySet returnedEntitySet = null;
+    if (bindingParameterEntitySet != null && entitySetPath != null) {
+      final EdmBindingTarget relatedBindingTarget = 
bindingParameterEntitySet.getRelatedBindingTarget(entitySetPath);
+      if (relatedBindingTarget == null) {
+        throw new EdmException("Cannot find entity set with path: " + 
entitySetPath);
+      }
+      if (relatedBindingTarget instanceof EdmEntitySet) {
+        returnedEntitySet = (EdmEntitySet) relatedBindingTarget;
+      } else {
+        throw new EdmException("BindingTarget with name: " + 
relatedBindingTarget.getName()
+            + " must be an entity set");
+      }
+    }
+    return returnedEntitySet;
+  }
+
+  @Override
+  public EdmReturnType getReturnType() {
+    return returnType;
+  }
+
+  @Override
+  public boolean isBound() {
+    return isBound;
+  }
 
   @Override
   public FullQualifiedName getBindingParameterTypeFqn() {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmOperationImportImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmOperationImportImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmOperationImportImpl.java
index c55d525..ee5891d 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmOperationImportImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmOperationImportImpl.java
@@ -18,26 +18,67 @@
  */
 package org.apache.olingo.commons.core.edm.provider;
 
+import java.util.List;
+
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmOperationImport;
 import org.apache.olingo.commons.api.edm.EdmTerm;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.Target;
 import org.apache.olingo.commons.api.edm.provider.OperationImport;
-import org.apache.olingo.commons.core.edm.AbstractEdmOperationImport;
-import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
 
-import java.util.List;
-
-public abstract class EdmOperationImportImpl extends 
AbstractEdmOperationImport {
+public abstract class EdmOperationImportImpl extends EdmNamedImpl implements 
EdmOperationImport {
 
+  protected final EdmEntityContainer container;
+  private final Target entitySet;
+  private EdmEntitySet returnedEntitySet;
   private final EdmAnnotationHelper helper;
-  
+
   public EdmOperationImportImpl(final Edm edm, final EdmEntityContainer 
container,
       final OperationImport operationImport) {
-    super(edm, container, operationImport.getName(), new 
Target.Builder(operationImport.getEntitySet(), container
-        ).build());
+    super(edm, operationImport.getName());
+    this.container = container;
     this.helper = new EdmAnnotationHelperImpl(edm, operationImport);
+    this.entitySet = new Target.Builder(operationImport.getEntitySet(), 
container).build();
+  }
+
+  @Override
+  public FullQualifiedName getFullQualifiedName() {
+    return new FullQualifiedName(container.getNamespace(), getName());
+  }
+
+  @Override
+  public EdmEntitySet getReturnedEntitySet() {
+    if (entitySet != null && returnedEntitySet == null) {
+      EdmEntityContainer entityContainer = 
edm.getEntityContainer(entitySet.getEntityContainer());
+      if (entityContainer == null) {
+        throw new EdmException("Can´t find entity container with name: " + 
entitySet.getEntityContainer());
+      }
+      returnedEntitySet = 
entityContainer.getEntitySet(entitySet.getTargetName());
+      if (returnedEntitySet == null) {
+        throw new EdmException("Can´t find entity set with name: " + 
entitySet.getTargetName());
+      }
+    }
+    return returnedEntitySet;
+  }
+
+  @Override
+  public EdmEntityContainer getEntityContainer() {
+    return container;
+  }
+
+  @Override
+  public FullQualifiedName getAnnotationsTargetFQN() {
+    return container.getFullQualifiedName();
+  }
+
+  @Override
+  public String getAnnotationsTargetPath() {
+    return getName();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmParameterImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmParameterImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmParameterImpl.java
index e1d3229..f5a25fa 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmParameterImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmParameterImpl.java
@@ -22,22 +22,26 @@ import java.util.List;
 
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmException;
 import org.apache.olingo.commons.api.edm.EdmMapping;
+import org.apache.olingo.commons.api.edm.EdmParameter;
 import org.apache.olingo.commons.api.edm.EdmTerm;
+import org.apache.olingo.commons.api.edm.EdmType;
 import org.apache.olingo.commons.api.edm.geo.SRID;
 import org.apache.olingo.commons.api.edm.provider.Parameter;
-import org.apache.olingo.commons.core.edm.AbstractEdmParameter;
-import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
 
-public class EdmParameterImpl extends AbstractEdmParameter {
+public class EdmParameterImpl extends EdmElementImpl implements EdmParameter {
 
   private final Parameter parameter;
   private final EdmAnnotationHelper helper;
+  private final EdmTypeInfo typeInfo;
+  private EdmType typeImpl;
 
   public EdmParameterImpl(final Edm edm, final Parameter parameter) {
-    super(edm, parameter.getName(), parameter.getTypeFQN());
+    super(edm, parameter.getName());
     this.parameter = parameter;
     this.helper = new EdmAnnotationHelperImpl(edm, parameter);
+    this.typeInfo = new 
EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(parameter.getType()).build();
   }
 
   @Override
@@ -84,4 +88,16 @@ public class EdmParameterImpl extends AbstractEdmParameter {
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }
+  
+  @Override
+  public EdmType getType() {
+    if (typeImpl == null) {
+      typeImpl = typeInfo.getType();
+      if (typeImpl == null) {
+        throw new EdmException("Cannot find type with name: " + 
typeInfo.getFullQualifiedName());
+      }
+    }
+
+    return typeImpl;
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmPropertyImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmPropertyImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmPropertyImpl.java
index 9f14925..61b6a22 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmPropertyImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmPropertyImpl.java
@@ -22,21 +22,22 @@ import java.util.List;
 
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmException;
 import org.apache.olingo.commons.api.edm.EdmMapping;
+import org.apache.olingo.commons.api.edm.EdmProperty;
 import org.apache.olingo.commons.api.edm.EdmTerm;
+import org.apache.olingo.commons.api.edm.EdmType;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.geo.SRID;
 import org.apache.olingo.commons.api.edm.provider.Property;
-import org.apache.olingo.commons.core.edm.AbstractEdmProperty;
-import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 
-public class EdmPropertyImpl extends AbstractEdmProperty {
+public class EdmPropertyImpl extends EdmElementImpl implements EdmProperty {
 
   private final FullQualifiedName structuredTypeName;
   private final Property property;
   private final EdmTypeInfo typeInfo;
   private EdmAnnotationHelper helper;
+  private EdmType propertyType;
 
   public EdmPropertyImpl(final Edm edm, final FullQualifiedName 
structuredTypeName, final Property property) {
     super(edm, property.getName());
@@ -48,10 +49,17 @@ public class EdmPropertyImpl extends AbstractEdmProperty {
   }
 
   @Override
-  public EdmTypeInfo getTypeInfo() {
-    return typeInfo;
+  public EdmType getType() {
+    if (propertyType == null) {
+      propertyType = typeInfo.getType();
+      if (propertyType == null) {
+        throw new EdmException("Cannot find type with name: " + 
typeInfo.getFullQualifiedName());
+      }
+    }
+
+    return propertyType;
   }
-
+ 
   @Override
   public boolean isCollection() {
     return property.isCollection();
@@ -103,6 +111,16 @@ public class EdmPropertyImpl extends AbstractEdmProperty {
   }
 
   @Override
+  public TargetType getAnnotationsTargetType() {
+    return TargetType.Property;
+  }
+
+  @Override
+  public String getAnnotationsTargetPath() {
+    return getName();
+  }
+  
+  @Override
   public FullQualifiedName getAnnotationsTargetFQN() {
     return structuredTypeName;
   }
@@ -116,4 +134,9 @@ public class EdmPropertyImpl extends AbstractEdmProperty {
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }
+
+  @Override
+  public boolean isPrimitive() {
+    return typeInfo.isPrimitiveType();
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmReferentialConstraintImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmReferentialConstraintImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmReferentialConstraintImpl.java
index 9cf07ab..e8dbc23 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmReferentialConstraintImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmReferentialConstraintImpl.java
@@ -22,21 +22,32 @@ import java.util.List;
 
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
+import org.apache.olingo.commons.api.edm.EdmReferentialConstraint;
 import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.provider.ReferentialConstraint;
-import org.apache.olingo.commons.core.edm.AbstractEdmReferentialConstraint;
-import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
 
-public class EdmReferentialConstraintImpl extends 
AbstractEdmReferentialConstraint {
+public class EdmReferentialConstraintImpl implements EdmReferentialConstraint {
 
   private final EdmAnnotationHelper helper;
+  private final ReferentialConstraint constraint;
+  
   
   public EdmReferentialConstraintImpl(final Edm edm, final 
ReferentialConstraint constraint) {
-    super(constraint.getProperty(), constraint.getReferencedProperty());
+    this.constraint = constraint;
     this.helper = new EdmAnnotationHelperImpl(edm, constraint);
   }
 
   @Override
+  public String getPropertyName() {
+    return constraint.getProperty();
+  }
+
+  @Override
+  public String getReferencedPropertyName() {
+    return constraint.getReferencedProperty();
+  }
+  
+  @Override
   public EdmAnnotation getAnnotation(final EdmTerm term) {
     return helper.getAnnotation(term);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmReturnTypeImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmReturnTypeImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmReturnTypeImpl.java
index 80eef43..e2d9331 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmReturnTypeImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmReturnTypeImpl.java
@@ -19,17 +19,22 @@
 package org.apache.olingo.commons.core.edm.provider;
 
 import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmReturnType;
+import org.apache.olingo.commons.api.edm.EdmType;
 import org.apache.olingo.commons.api.edm.geo.SRID;
 import org.apache.olingo.commons.api.edm.provider.ReturnType;
-import org.apache.olingo.commons.core.edm.AbstractEdmReturnType;
 
-public class EdmReturnTypeImpl extends AbstractEdmReturnType {
+public class EdmReturnTypeImpl implements EdmReturnType {
 
   private final ReturnType returnType;
-
+  private final EdmTypeInfo typeInfo;
+  private EdmType typeImpl;
+  
+  
   public EdmReturnTypeImpl(final Edm edm, final ReturnType returnType) {
-    super(edm, returnType.getTypeFQN());
     this.returnType = returnType;
+    this.typeInfo = new 
EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(returnType.getType()).build();
   }
 
   @Override
@@ -61,4 +66,16 @@ public class EdmReturnTypeImpl extends AbstractEdmReturnType 
{
   public SRID getSrid() {
     return returnType.getSrid();
   }
+  
+  @Override
+  public EdmType getType() {
+    if (typeImpl == null) {
+      typeImpl = typeInfo.getType();
+      if (typeImpl == null) {
+        throw new EdmException("Cannot find type with name: " + 
typeInfo.getFullQualifiedName());
+      }
+    }
+
+    return typeImpl;
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmSchemaImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmSchemaImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmSchemaImpl.java
index 2ef1c27..f31d5d8 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmSchemaImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmSchemaImpl.java
@@ -19,6 +19,7 @@
 package org.apache.olingo.commons.core.edm.provider;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.olingo.commons.api.edm.Edm;
@@ -30,6 +31,7 @@ import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmEntityType;
 import org.apache.olingo.commons.api.edm.EdmEnumType;
 import org.apache.olingo.commons.api.edm.EdmFunction;
+import org.apache.olingo.commons.api.edm.EdmSchema;
 import org.apache.olingo.commons.api.edm.EdmTerm;
 import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
@@ -44,22 +46,144 @@ import org.apache.olingo.commons.api.edm.provider.Function;
 import org.apache.olingo.commons.api.edm.provider.Schema;
 import org.apache.olingo.commons.api.edm.provider.Term;
 import org.apache.olingo.commons.api.edm.provider.TypeDefinition;
-import org.apache.olingo.commons.core.edm.AbstractEdmSchema;
 
-public class EdmSchemaImpl extends AbstractEdmSchema {
+public class EdmSchemaImpl implements EdmSchema {
 
   private final Schema schema;
   private final Edm edm;
   private final EdmProvider provider;
+  
+  protected final String namespace;
+  private final String alias;
+  private List<EdmEnumType> enumTypes;
+  private List<EdmEntityType> entityTypes;
+  private List<EdmComplexType> complexTypes;
+  private List<EdmAction> actions;
+  private List<EdmFunction> functions;
+  private List<EdmTypeDefinition> typeDefinitions;
+  private List<EdmTerm> terms;
+  private List<EdmAnnotations> annotationGroups;
+  private List<EdmAnnotation> annotations;
+  private EdmEntityContainer entityContainer;
 
   public EdmSchemaImpl(final Edm edm, final EdmProvider provider, final Schema 
schema) {
-    super(schema.getNamespace(), schema.getAlias());
     this.edm = edm;
     this.provider = provider;
     this.schema = schema;
+    this.namespace = schema.getNamespace();
+    this.alias = schema.getAlias();
   }
 
   @Override
+  public List<EdmEnumType> getEnumTypes() {
+    if (enumTypes == null) {
+      enumTypes = createEnumTypes();
+    }
+    return enumTypes;
+  }
+
+  @Override
+  public List<EdmEntityType> getEntityTypes() {
+    if (entityTypes == null) {
+      entityTypes = createEntityTypes();
+    }
+    return entityTypes;
+  }
+
+  @Override
+  public List<EdmComplexType> getComplexTypes() {
+    if (complexTypes == null) {
+      complexTypes = createComplexTypes();
+    }
+    return complexTypes;
+  }
+
+  @Override
+  public List<EdmAction> getActions() {
+    if (actions == null) {
+      actions = createActions();
+    }
+    return actions;
+  }
+
+  @Override
+  public List<EdmFunction> getFunctions() {
+    if (functions == null) {
+      functions = createFunctions();
+    }
+    return functions;
+  }
+
+  @Override
+  public List<EdmTypeDefinition> getTypeDefinitions() {
+    if (typeDefinitions == null) {
+      typeDefinitions = createTypeDefinitions();
+    }
+    return typeDefinitions;
+  }
+
+  @Override
+  public List<EdmTerm> getTerms() {
+    if (terms == null) {
+      terms = createTerms();
+    }
+    return terms;
+  }
+
+  @Override
+  public List<EdmAnnotations> getAnnotationGroups() {
+    if (annotationGroups == null) {
+      annotationGroups = createAnnotationGroups();
+    }
+    return annotationGroups;
+  }
+
+  @Override
+  public List<EdmAnnotation> getAnnotations() {
+    if (annotations == null) {
+      annotations = createAnnotations();
+    }
+    return annotations;
+  }
+
+  @Override
+  public EdmEntityContainer getEntityContainer() {
+    if (entityContainer == null) {
+      entityContainer = createEntityContainer();
+    }
+    return entityContainer;
+  }
+
+  @Override
+  public List<EdmEntityContainer> getEntityContainers() {
+    if (getEntityContainer() == null) {
+      return Collections.<EdmEntityContainer> emptyList();
+    } else {
+      return Collections.singletonList(getEntityContainer());
+    }
+  }
+
+  @Override
+  public EdmEntityContainer getEntityContainer(final FullQualifiedName name) {
+    return getEntityContainer() == null
+        ? null
+        : name == null
+            ? getEntityContainer()
+            : name.equals(getEntityContainer().getFullQualifiedName())
+                ? getEntityContainer()
+                : null;
+  }
+
+  @Override
+  public String getNamespace() {
+    return namespace;
+  }
+
+  @Override
+  public String getAlias() {
+    return alias;
+  }
+  
   protected EdmEntityContainer createEntityContainer() {
     if (schema.getEntityContainer() != null) {
       FullQualifiedName containerFQN = new FullQualifiedName(namespace, 
schema.getEntityContainer().getName());
@@ -68,7 +192,6 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
     return null;
   }
 
-  @Override
   protected List<EdmTypeDefinition> createTypeDefinitions() {
     final List<EdmTypeDefinition> typeDefinitions = new 
ArrayList<EdmTypeDefinition>();
     final List<TypeDefinition> providerTypeDefinitions = 
schema.getTypeDefinitions();
@@ -80,7 +203,6 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
     return typeDefinitions;
   }
 
-  @Override
   protected List<EdmEnumType> createEnumTypes() {
     final List<EdmEnumType> enumTypes = new ArrayList<EdmEnumType>();
     final List<EnumType> providerEnumTypes = schema.getEnumTypes();
@@ -92,7 +214,6 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
     return enumTypes;
   }
 
-  @Override
   protected List<EdmEntityType> createEntityTypes() {
     final List<EdmEntityType> entityTypes = new ArrayList<EdmEntityType>();
     final List<EntityType> providerEntityTypes = schema.getEntityTypes();
@@ -105,7 +226,6 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
     return entityTypes;
   }
 
-  @Override
   protected List<EdmComplexType> createComplexTypes() {
     final List<EdmComplexType> complexTypes = new ArrayList<EdmComplexType>();
     final List<ComplexType> providerComplexTypes = schema.getComplexTypes();
@@ -118,7 +238,6 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
     return complexTypes;
   }
 
-  @Override
   protected List<EdmAction> createActions() {
     final List<EdmAction> actions = new ArrayList<EdmAction>();
     final List<Action> providerActions = schema.getActions();
@@ -130,7 +249,6 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
     return actions;
   }
 
-  @Override
   protected List<EdmFunction> createFunctions() {
     final List<EdmFunction> functions = new ArrayList<EdmFunction>();
     final List<Function> providerFunctions = schema.getFunctions();
@@ -142,7 +260,6 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
     return functions;
   }
 
-  @Override
   protected List<EdmTerm> createTerms() {
     final List<EdmTerm> terms = new ArrayList<EdmTerm>();
     final List<Term> providerTerms = schema.getTerms();
@@ -154,7 +271,6 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
     return terms;
   }
 
-  @Override
   protected List<EdmAnnotations> createAnnotationGroups() {
     final List<EdmAnnotations> annotationGroups = new 
ArrayList<EdmAnnotations>();
     final List<Annotations> providerAnnotations =
@@ -167,7 +283,6 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
     return annotationGroups;
   }
 
-  @Override
   protected List<EdmAnnotation> createAnnotations() {
     final List<EdmAnnotation> annotations = new ArrayList<EdmAnnotation>();
     final List<Annotation> providerAnnotations =

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeHelper.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeHelper.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeHelper.java
new file mode 100644
index 0000000..e00a28b
--- /dev/null
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeHelper.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.commons.core.edm.provider;
+
+import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
+import org.apache.olingo.commons.api.edm.EdmProperty;
+
+import java.util.Map;
+
+public interface EdmStructuredTypeHelper {
+
+  Map<String, EdmProperty> getProperties();
+
+  Map<String, EdmNavigationProperty> getNavigationProperties();
+
+  boolean isOpenType();
+
+  boolean isAbstract();
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeHelperImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeHelperImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeHelperImpl.java
index 1ec265d..f72eef1 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeHelperImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeHelperImpl.java
@@ -25,7 +25,6 @@ import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.provider.NavigationProperty;
 import org.apache.olingo.commons.api.edm.provider.Property;
 import org.apache.olingo.commons.api.edm.provider.StructuralType;
-import org.apache.olingo.commons.core.edm.EdmStructuredTypeHelper;
 
 import java.util.LinkedHashMap;
 import java.util.Map;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeImpl.java
new file mode 100644
index 0000000..893f3dc
--- /dev/null
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmStructuredTypeImpl.java
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.commons.core.edm.provider;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmElement;
+import org.apache.olingo.commons.api.edm.EdmException;
+import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
+import org.apache.olingo.commons.api.edm.EdmProperty;
+import org.apache.olingo.commons.api.edm.EdmStructuredType;
+import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public abstract class EdmStructuredTypeImpl extends EdmTypeImpl implements 
EdmStructuredType {
+
+  protected EdmStructuredType baseType;
+
+  protected FullQualifiedName baseTypeName;
+
+  private List<String> propertyNames;
+
+  private List<String> navigationPropertyNames;
+
+  public EdmStructuredTypeImpl(
+      final Edm edm,
+      final FullQualifiedName typeName,
+      final EdmTypeKind kind,
+      final FullQualifiedName baseTypeName) {
+
+    super(edm, typeName, kind);
+    this.baseTypeName = baseTypeName;
+  }
+
+  protected abstract EdmStructuredType buildBaseType(FullQualifiedName 
baseTypeName);
+
+  protected abstract Map<String, EdmProperty> getProperties();
+
+  protected abstract Map<String, EdmNavigationProperty> 
getNavigationProperties();
+
+  protected abstract void checkBaseType();
+
+  @Override
+  public List<String> getPropertyNames() {
+    if (propertyNames == null) {
+      propertyNames = new ArrayList<String>();
+      checkBaseType();
+      if (baseType != null) {
+        propertyNames.addAll(baseType.getPropertyNames());
+      }
+      propertyNames.addAll(getProperties().keySet());
+    }
+    return propertyNames;
+  }
+
+  @Override
+  public List<String> getNavigationPropertyNames() {
+    if (navigationPropertyNames == null) {
+      navigationPropertyNames = new ArrayList<String>();
+      checkBaseType();
+      if (baseType != null) {
+        navigationPropertyNames.addAll(baseType.getNavigationPropertyNames());
+      }
+      navigationPropertyNames.addAll(getNavigationProperties().keySet());
+    }
+    return navigationPropertyNames;
+  }
+
+  @Override
+  public EdmElement getProperty(final String name) {
+    EdmElement property = getStructuralProperty(name);
+    if (property == null) {
+      property = getNavigationProperty(name);
+    }
+    return property;
+  }
+
+  @Override
+  public EdmProperty getStructuralProperty(final String name) {
+    EdmProperty property = null;
+    checkBaseType();
+    if (baseType != null) {
+      property = baseType.getStructuralProperty(name);
+    }
+    if (property == null) {
+      property = getProperties().get(name);
+    }
+    return property;
+  }
+
+  @Override
+  public EdmNavigationProperty getNavigationProperty(final String name) {
+    EdmNavigationProperty property = null;
+    checkBaseType();
+    if (baseType != null) {
+      property = baseType.getNavigationProperty(name);
+    }
+    if (property == null) {
+      property = getNavigationProperties().get(name);
+    }
+    return property;
+  }
+
+  @Override
+  public boolean compatibleTo(final EdmType targetType) {
+    EdmStructuredType sourceType = this;
+    if (targetType == null) {
+      throw new EdmException("Target type must not be null");
+    }
+    while (!sourceType.getName().equals(targetType.getName())
+        || !sourceType.getNamespace().equals(targetType.getNamespace())) {
+
+      sourceType = sourceType.getBaseType();
+      if (sourceType == null) {
+        return false;
+      }
+    }
+
+    return true;
+  }
+
+  @Override
+  public String getAnnotationsTargetPath() {
+    return null;
+  }
+
+  @Override
+  public FullQualifiedName getAnnotationsTargetFQN() {
+    return getFullQualifiedName();
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTermImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTermImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTermImpl.java
index e2b34a5..cc3f11f 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTermImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTermImpl.java
@@ -30,9 +30,6 @@ import org.apache.olingo.commons.api.edm.EdmType;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.geo.SRID;
 import org.apache.olingo.commons.api.edm.provider.Term;
-import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
-import org.apache.olingo.commons.core.edm.EdmNamedImpl;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 import 
org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeDefinitionImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeDefinitionImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeDefinitionImpl.java
index 1e81179..d04f6dd 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeDefinitionImpl.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeDefinitionImpl.java
@@ -24,24 +24,27 @@ import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAnnotation;
 import org.apache.olingo.commons.api.edm.EdmException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.EdmTerm;
+import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 import org.apache.olingo.commons.api.edm.geo.SRID;
 import org.apache.olingo.commons.api.edm.provider.TypeDefinition;
-import org.apache.olingo.commons.core.edm.AbstractEdmTypeDefinition;
-import org.apache.olingo.commons.core.edm.EdmAnnotationHelper;
 import 
org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
 
-public class EdmTypeDefinitionImpl extends AbstractEdmTypeDefinition {
+public class EdmTypeDefinitionImpl extends EdmNamedImpl implements 
EdmTypeDefinition {
 
   private TypeDefinition typeDefinition;
-  private EdmPrimitiveType edmPrimitiveTypeInstance;
+  private final EdmPrimitiveType edmPrimitiveTypeInstance;
   private final EdmAnnotationHelper helper;
+  private FullQualifiedName typeDefinitionName;
 
   public EdmTypeDefinitionImpl(final Edm edm, final FullQualifiedName 
typeDefinitionName,
       final TypeDefinition typeDefinition) {
-    super(edm, typeDefinitionName);
+    super(edm, typeDefinitionName.getName());
+    this.typeDefinitionName = typeDefinitionName;
     this.typeDefinition = typeDefinition;
     try {
       if (typeDefinition.getUnderlyingType() == null) {
@@ -57,15 +60,22 @@ public class EdmTypeDefinitionImpl extends 
AbstractEdmTypeDefinition {
   }
 
   @Override
+  public FullQualifiedName getFullQualifiedName() {
+    return typeDefinitionName;
+  }
+
+  @Override
+  public String getNamespace() {
+    return typeDefinitionName.getNamespace();
+  }
+
+  @Override
+  public EdmTypeKind getKind() {
+    return EdmTypeKind.DEFINITION;
+  }
+  
+  @Override
   public EdmPrimitiveType getUnderlyingType() {
-    if (edmPrimitiveTypeInstance == null) {
-      try {
-        edmPrimitiveTypeInstance = EdmPrimitiveTypeFactory.getInstance(
-            
EdmPrimitiveTypeKind.valueOfFQN(typeDefinition.getUnderlyingType()));
-      } catch (IllegalArgumentException e) {
-        throw new EdmException("Invalid underlying type: " + 
typeDefinition.getUnderlyingType(), e);
-      }
-    }
     return edmPrimitiveTypeInstance;
   }
 
@@ -93,8 +103,64 @@ public class EdmTypeDefinitionImpl extends 
AbstractEdmTypeDefinition {
   public Boolean isUnicode() {
     return typeDefinition.isUnicode();
   }
+  
+  @Override
+  public boolean isCompatible(final EdmPrimitiveType primitiveType) {
+    return getUnderlyingType().isCompatible(primitiveType);
+  }
+
+  @Override
+  public Class<?> getDefaultType() {
+    return getUnderlyingType().getDefaultType();
+  }
+
+  @Override
+  public boolean validate(final String value, final Boolean isNullable, final 
Integer maxLength,
+      final Integer precision, final Integer scale,
+      final Boolean isUnicode) {
+
+    return getUnderlyingType().validate(value, isNullable, maxLength, 
precision, scale, isUnicode);
+  }
 
   @Override
+  public <T> T valueOfString(final String value, final Boolean isNullable, 
final Integer maxLength,
+      final Integer precision, final Integer scale,
+      final Boolean isUnicode, final Class<T> returnType) throws 
EdmPrimitiveTypeException {
+
+    return getUnderlyingType().
+        valueOfString(value, isNullable, maxLength, precision, scale, 
isUnicode, returnType);
+  }
+
+  @Override
+  public String valueToString(final Object value, final Boolean isNullable, 
final Integer maxLength,
+      final Integer precision, final Integer scale,
+      final Boolean isUnicode) throws EdmPrimitiveTypeException {
+
+    return getUnderlyingType().valueToString(value, isNullable, maxLength, 
precision, scale, isUnicode);
+  }
+
+  @Override
+  public String toUriLiteral(final String literal) {
+    return getUnderlyingType().toUriLiteral(literal);
+  }
+
+  @Override
+  public String fromUriLiteral(final String literal) throws 
EdmPrimitiveTypeException {
+    return getUnderlyingType().fromUriLiteral(literal);
+  }
+
+
+  @Override
+  public TargetType getAnnotationsTargetType() {
+    return TargetType.TypeDefinition;
+  }
+
+  @Override
+  public FullQualifiedName getAnnotationsTargetFQN() {
+    return getFullQualifiedName();
+  }
+  
+  @Override
   public EdmAnnotation getAnnotation(final EdmTerm term) {
     return helper.getAnnotation(term);
   }
@@ -103,5 +169,10 @@ public class EdmTypeDefinitionImpl extends 
AbstractEdmTypeDefinition {
   public List<EdmAnnotation> getAnnotations() {
     return helper.getAnnotations();
   }
+  
+  @Override
+  public String getAnnotationsTargetPath() {
+    return getName();
+  }
 
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeImpl.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeImpl.java
new file mode 100644
index 0000000..ea05c24
--- /dev/null
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeImpl.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.commons.core.edm.provider;
+
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
+
+public class EdmTypeImpl extends EdmNamedImpl implements EdmType {
+
+  protected final FullQualifiedName typeName;
+
+  protected final EdmTypeKind kind;
+
+  public EdmTypeImpl(final Edm edm, final FullQualifiedName typeName, final 
EdmTypeKind kind) {
+    super(edm, typeName.getName());
+    this.typeName = typeName;
+    this.kind = kind;
+  }
+
+  @Override
+  public FullQualifiedName getFullQualifiedName() {
+    return typeName;
+  }
+
+  @Override
+  public String getNamespace() {
+    return typeName.getNamespace();
+  }
+
+  @Override
+  public EdmTypeKind getKind() {
+    return kind;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeInfo.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeInfo.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeInfo.java
new file mode 100644
index 0000000..768ec00
--- /dev/null
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/provider/EdmTypeInfo.java
@@ -0,0 +1,244 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.commons.core.edm.provider;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmComplexType;
+import org.apache.olingo.commons.api.edm.EdmEntityType;
+import org.apache.olingo.commons.api.edm.EdmEnumType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import 
org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
+
+public class EdmTypeInfo {
+
+  public static class Builder {
+
+    private String typeExpression;
+
+    private String defaultNamespace;
+
+    private Edm edm;
+
+    public Builder setTypeExpression(final String typeExpression) {
+      this.typeExpression = typeExpression;
+      return this;
+    }
+
+    public Builder setDefaultNamespace(final String defaultNamespace) {
+      this.defaultNamespace = defaultNamespace;
+      return this;
+    }
+
+    public Builder setEdm(final Edm edm) {
+      this.edm = edm;
+      return this;
+    }
+
+    public EdmTypeInfo build() {
+      return new EdmTypeInfo(edm, typeExpression.indexOf('.') == -1 && 
StringUtils.isNotBlank(defaultNamespace)
+          ? defaultNamespace + "." + typeExpression
+          : typeExpression);
+    }
+  }
+
+  private final Edm edm;
+
+  private final boolean collection;
+
+  private final FullQualifiedName fullQualifiedName;
+
+  private EdmPrimitiveTypeKind primitiveType;
+
+  private EdmTypeDefinition typeDefinition;
+
+  private EdmEnumType enumType;
+
+  private EdmComplexType complexType;
+
+  private EdmEntityType entityType;
+
+  private EdmTypeInfo(final Edm edm, final String typeExpression) {
+    this.edm = edm;
+
+    String baseType;
+    final int collStartIdx = typeExpression.indexOf("Collection(");
+    final int collEndIdx = typeExpression.lastIndexOf(')');
+    if (collStartIdx == -1) {
+      baseType = typeExpression;
+      collection = false;
+    } else {
+      if (collEndIdx == -1) {
+        throw new IllegalArgumentException("Malformed type: " + 
typeExpression);
+      }
+
+      collection = true;
+      baseType = typeExpression.substring(collStartIdx + 11, collEndIdx);
+    }
+
+    baseType = baseType.replaceAll("^#", "");
+
+    final String typeName;
+    final String namespace;
+
+    final int lastDotIdx = baseType.lastIndexOf('.');
+    if (lastDotIdx == -1) {
+      namespace = EdmPrimitiveType.EDM_NAMESPACE;
+      typeName = baseType;
+      baseType = new FullQualifiedName(EdmPrimitiveType.EDM_NAMESPACE, 
baseType).toString();
+    } else {
+      namespace = baseType.substring(0, lastDotIdx);
+      typeName = baseType.substring(lastDotIdx + 1);
+    }
+
+    if (StringUtils.isBlank(typeName)) {
+      throw new IllegalArgumentException("Null or empty type name in " + 
typeExpression);
+    }
+
+    final StringBuilder exp = new StringBuilder();
+    exp.append(baseType);
+
+    fullQualifiedName = new FullQualifiedName(namespace, typeName);
+
+    try {
+      primitiveType = 
EdmPrimitiveTypeKind.valueOf(fullQualifiedName.getName());
+    } catch (final IllegalArgumentException e) {
+      primitiveType = null;
+    }
+    if (primitiveType == null && this.edm != null) {
+      typeDefinition = this.edm.getTypeDefinition(fullQualifiedName);
+      if (typeDefinition == null) {
+        enumType = this.edm.getEnumType(fullQualifiedName);
+        if (enumType == null) {
+          complexType = this.edm.getComplexType(fullQualifiedName);
+          if (complexType == null) {
+            entityType = this.edm.getEntityType(fullQualifiedName);
+          }
+        }
+      }
+    }
+  }
+
+  public String internal() {
+    final StringBuilder deserialize = new StringBuilder();
+
+    if (isCollection()) {
+      deserialize.append("Collection(");
+    }
+
+    deserialize.append(getFullQualifiedName().toString());
+
+    if (isCollection()) {
+      deserialize.append(")");
+    }
+
+    return deserialize.toString();
+  }
+
+  public String external() {
+    final StringBuilder serialize = new StringBuilder();
+
+    if (isCollection()) {
+      serialize.append('#');
+      serialize.append("Collection(");
+    }
+
+    if (isPrimitiveType()) {
+      serialize.append(getFullQualifiedName().getName());
+    }else{
+      serialize.append(getFullQualifiedName().toString());
+    }
+
+    if (isCollection()) {
+      serialize.append(")");
+    }
+
+    if (!isPrimitiveType() && !isCollection()) {
+      serialize.insert(0, '#');
+    }
+
+    return serialize.toString();
+  }
+
+  public boolean isCollection() {
+    return collection;
+  }
+
+  public FullQualifiedName getFullQualifiedName() {
+    return fullQualifiedName;
+  }
+
+  public boolean isPrimitiveType() {
+    return primitiveType != null;
+  }
+
+  public EdmPrimitiveTypeKind getPrimitiveTypeKind() {
+    return primitiveType;
+  }
+
+  public boolean isTypeDefinition() {
+    return typeDefinition != null;
+  }
+
+  public EdmTypeDefinition getTypeDefinition() {
+    return typeDefinition;
+  }
+
+  public boolean isEnumType() {
+    return enumType != null;
+  }
+
+  public EdmEnumType getEnumType() {
+    return enumType;
+  }
+
+  public boolean isComplexType() {
+    return complexType != null;
+  }
+
+  public EdmComplexType getComplexType() {
+    return complexType;
+  }
+
+  public boolean isEntityType() {
+    return entityType != null;
+  }
+
+  public EdmEntityType getEntityType() {
+    return entityType;
+  }
+
+  public EdmType getType() {
+    return isPrimitiveType()
+        ? EdmPrimitiveTypeFactory.getInstance(getPrimitiveTypeKind())
+        : isTypeDefinition()
+            ? getTypeDefinition()
+            : isEnumType()
+                ? getEnumType()
+                : isComplexType()
+                    ? getComplexType()
+                    : isEntityType()
+                        ? getEntityType()
+                        : null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomDeserializer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomDeserializer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomDeserializer.java
index dcfb328..1a50c26 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomDeserializer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomDeserializer.java
@@ -66,7 +66,7 @@ import org.apache.olingo.commons.core.data.EntityImpl;
 import org.apache.olingo.commons.core.data.EntitySetImpl;
 import org.apache.olingo.commons.core.data.LinkImpl;
 import org.apache.olingo.commons.core.data.PropertyImpl;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+import org.apache.olingo.commons.core.edm.provider.EdmTypeInfo;
 
 import com.fasterxml.aalto.stax.InputFactoryImpl;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java
index 6c36116..b6d9a74 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/AtomSerializer.java
@@ -50,8 +50,8 @@ import 
org.apache.olingo.commons.core.data.AbstractODataObject;
 import org.apache.olingo.commons.core.data.EntityImpl;
 import org.apache.olingo.commons.core.data.EntitySetImpl;
 import org.apache.olingo.commons.core.data.LinkImpl;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 import 
org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
+import org.apache.olingo.commons.core.edm.provider.EdmTypeInfo;
 
 import com.fasterxml.aalto.stax.OutputFactoryImpl;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java
index 929ad95..fc7e4f8 100755
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java
@@ -56,7 +56,7 @@ import org.apache.olingo.commons.core.data.ComplexValueImpl;
 import org.apache.olingo.commons.core.data.EntitySetImpl;
 import org.apache.olingo.commons.core.data.LinkImpl;
 import org.apache.olingo.commons.core.data.PropertyImpl;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+import org.apache.olingo.commons.core.edm.provider.EdmTypeInfo;
 
 import com.fasterxml.jackson.core.JsonFactory;
 import com.fasterxml.jackson.core.JsonParser;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntityDeserializer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntityDeserializer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntityDeserializer.java
index 5596fb3..b63950b 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntityDeserializer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntityDeserializer.java
@@ -41,7 +41,7 @@ import 
org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.core.data.AnnotationImpl;
 import org.apache.olingo.commons.core.data.EntityImpl;
 import org.apache.olingo.commons.core.data.LinkImpl;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+import org.apache.olingo.commons.core.edm.provider.EdmTypeInfo;
 
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.core.JsonParser;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
index b6a32ef..b0fce7c 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
@@ -30,7 +30,7 @@ import org.apache.olingo.commons.api.data.ResWrap;
 import org.apache.olingo.commons.api.domain.ODataOperation;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.format.ODataFormat;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+import org.apache.olingo.commons.core.edm.provider.EdmTypeInfo;
 
 import com.fasterxml.jackson.core.JsonGenerator;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonGeoValueDeserializer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonGeoValueDeserializer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonGeoValueDeserializer.java
index 8c439f7..355f321 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonGeoValueDeserializer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonGeoValueDeserializer.java
@@ -36,8 +36,8 @@ import org.apache.olingo.commons.api.edm.geo.MultiPolygon;
 import org.apache.olingo.commons.api.edm.geo.Point;
 import org.apache.olingo.commons.api.edm.geo.Polygon;
 import org.apache.olingo.commons.api.edm.geo.SRID;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 import org.apache.olingo.commons.core.edm.primitivetype.EdmDouble;
+import org.apache.olingo.commons.core.edm.provider.EdmTypeInfo;
 
 import com.fasterxml.jackson.databind.JsonNode;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertyDeserializer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertyDeserializer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertyDeserializer.java
index ade76ed..9a9498e 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertyDeserializer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertyDeserializer.java
@@ -32,7 +32,7 @@ import org.apache.olingo.commons.api.data.ValueType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.core.data.AnnotationImpl;
 import org.apache.olingo.commons.core.data.PropertyImpl;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+import org.apache.olingo.commons.core.edm.provider.EdmTypeInfo;
 
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.databind.JsonNode;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertySerializer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertySerializer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertySerializer.java
index da28791..f6ddd58 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertySerializer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonPropertySerializer.java
@@ -27,7 +27,7 @@ import org.apache.olingo.commons.api.data.Annotation;
 import org.apache.olingo.commons.api.data.Property;
 import org.apache.olingo.commons.api.data.ResWrap;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+import org.apache.olingo.commons.core.edm.provider.EdmTypeInfo;
 
 import com.fasterxml.jackson.core.JsonGenerator;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
index f054be5..012d3a3 100755
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
@@ -47,8 +47,8 @@ import org.apache.olingo.commons.api.edm.geo.Geospatial;
 import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.commons.api.serialization.ODataSerializer;
 import org.apache.olingo.commons.api.serialization.ODataSerializerException;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 import 
org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
+import org.apache.olingo.commons.core.edm.provider.EdmTypeInfo;
 
 import com.fasterxml.jackson.core.JsonFactory;
 import com.fasterxml.jackson.core.JsonGenerator;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmNamedImplTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmNamedImplTest.java
 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmNamedImplTest.java
index e5f364f..60897c1 100644
--- 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmNamedImplTest.java
+++ 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmNamedImplTest.java
@@ -19,7 +19,7 @@
 package org.apache.olingo.server.core.edm.provider;
 
 import org.apache.olingo.commons.api.edm.EdmNamed;
-import org.apache.olingo.commons.core.edm.EdmNamedImpl;
+import org.apache.olingo.commons.core.edm.provider.EdmNamedImpl;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3a6293b6/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmTypeImplTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmTypeImplTest.java
 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmTypeImplTest.java
index 141ff32..38938fd 100644
--- 
a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmTypeImplTest.java
+++ 
b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmTypeImplTest.java
@@ -21,7 +21,7 @@ package org.apache.olingo.server.core.edm.provider;
 import org.apache.olingo.commons.api.edm.EdmType;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
-import org.apache.olingo.commons.core.edm.EdmTypeImpl;
+import org.apache.olingo.commons.core.edm.provider.EdmTypeImpl;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;

Reply via email to