diff --git a/repository/src/main/java/org/apache/hadoop/metadata/services/DefaultMetadataService.java b/repository/src/main/java/org/apache/hadoop/metadata/services/DefaultMetadataService.java
index 69ce494..db7a67d 100755
--- a/repository/src/main/java/org/apache/hadoop/metadata/services/DefaultMetadataService.java
+++ b/repository/src/main/java/org/apache/hadoop/metadata/services/DefaultMetadataService.java
@@ -20,13 +20,20 @@ package org.apache.hadoop.metadata.services;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
+import com.google.inject.Guice;
 import com.google.inject.Injector;
+import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.hadoop.metadata.MetadataException;
 import org.apache.hadoop.metadata.MetadataServiceClient;
+import org.apache.hadoop.metadata.ParamChecker;
+import org.apache.hadoop.metadata.RepositoryMetadataModule;
 import org.apache.hadoop.metadata.discovery.SearchIndexer;
 import org.apache.hadoop.metadata.listener.EntityChangeListener;
 import org.apache.hadoop.metadata.listener.TypesChangeListener;
 import org.apache.hadoop.metadata.repository.MetadataRepository;
+import org.apache.hadoop.metadata.repository.graph.GraphBackedMetadataRepository;
+import org.apache.hadoop.metadata.repository.graph.GraphBackedSearchIndexer;
+import org.apache.hadoop.metadata.repository.typestore.GraphBackedTypeStore;
 import org.apache.hadoop.metadata.repository.typestore.ITypeStore;
 import org.apache.hadoop.metadata.typesystem.ITypedReferenceableInstance;
 import org.apache.hadoop.metadata.typesystem.ITypedStruct;
@@ -45,10 +52,13 @@ import scala.tools.cmd.Meta;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 /**
  * Simple wrapper over TypeSystem and MetadataRepository services with hooks
@@ -101,8 +111,7 @@ public class DefaultMetadataService implements MetadataService {
     @Override
     public JSONObject createType(String typeDefinition) throws MetadataException {
         try {
-            Preconditions.checkNotNull(typeDefinition, "type definition cannot be null");
-            Preconditions.checkArgument(!typeDefinition.equals(""), "type definition cannot be an empty string");
+            ParamChecker.notEmpty(typeDefinition, "type definition cannot be empty");
 
             TypesDef typesDef = TypesSerialization.fromJson(typeDefinition);
             if(typesDef.isEmpty())
@@ -164,8 +173,8 @@ public class DefaultMetadataService implements MetadataService {
      */
     @Override
     public String createEntity(String entityInstanceDefinition) throws MetadataException {
-        Preconditions.checkNotNull(entityInstanceDefinition,
-                "entity instance definition cannot be null");
+        ParamChecker.notEmpty(entityInstanceDefinition,
+                "Entity instance definition cannot be empty");
 
         ITypedReferenceableInstance entityTypedInstance =
                 deserializeClassInstance(entityInstanceDefinition);
@@ -179,17 +188,14 @@ public class DefaultMetadataService implements MetadataService {
     private ITypedReferenceableInstance deserializeClassInstance(
             String entityInstanceDefinition) throws MetadataException {
 
-        try {
-            final Referenceable entityInstance = InstanceSerialization.fromJsonReferenceable(
-                    entityInstanceDefinition, true);
-            final String entityTypeName = entityInstance.getTypeName();
-            Preconditions.checkNotNull(entityTypeName, "entity type cannot be null");
+        final Referenceable entityInstance = InstanceSerialization.fromJsonReferenceable(
+            entityInstanceDefinition, true);
+        final String entityTypeName = entityInstance.getTypeName();
+        ParamChecker.notEmpty(entityTypeName, "Entity type cannot be null");
+
+        ClassType entityType = typeSystem.getDataType(ClassType.class, entityTypeName);
+        return entityType.convert(entityInstance, Multiplicity.REQUIRED);
 
-            ClassType entityType = typeSystem.getDataType(ClassType.class, entityTypeName);
-            return entityType.convert(entityInstance, Multiplicity.REQUIRED);
-        } catch (Exception e) {
-            throw new MetadataException("Error deserializing class instance", e);
-        }
     }
 
     /**
@@ -200,7 +206,7 @@ public class DefaultMetadataService implements MetadataService {
      */
     @Override
     public String getEntityDefinition(String guid) throws MetadataException {
-        Preconditions.checkNotNull(guid, "guid cannot be null");
+        ParamChecker.notEmpty(guid, "guid cannot be null");
 
         final ITypedReferenceableInstance instance = repository.getEntityDefinition(guid);
         return InstanceSerialization.toJson(instance, true);
@@ -221,15 +227,15 @@ public class DefaultMetadataService implements MetadataService {
 
     @Override
     public void updateEntity(String guid, String property, String value) throws MetadataException {
-        Preconditions.checkNotNull(guid, "guid cannot be null");
-        Preconditions.checkNotNull(property, "property cannot be null");
-        Preconditions.checkNotNull(value, "property value cannot be null");
+        ParamChecker.notEmpty(guid, "guid cannot be null");
+        ParamChecker.notEmpty(property, "property cannot be null");
+        ParamChecker.notEmpty(value, "property value cannot be null");
 
         repository.updateEntity(guid, property, value);
     }
 
     private void validateTypeExists(String entityType) throws MetadataException {
-        Preconditions.checkNotNull(entityType, "entity type cannot be null");
+        ParamChecker.notEmpty(entityType, "entity type cannot be null");
 
         // verify if the type exists
         if (!typeSystem.isRegistered(entityType)) {
@@ -246,7 +252,7 @@ public class DefaultMetadataService implements MetadataService {
      */
     @Override
     public List<String> getTraitNames(String guid) throws MetadataException {
-        Preconditions.checkNotNull(guid, "entity GUID cannot be null");
+        ParamChecker.notEmpty(guid, "entity GUID cannot be null");
         return repository.getTraitNames(guid);
     }
 
@@ -260,8 +266,8 @@ public class DefaultMetadataService implements MetadataService {
     @Override
     public void addTrait(String guid,
                          String traitInstanceDefinition) throws MetadataException {
-        Preconditions.checkNotNull(guid, "entity GUID cannot be null");
-        Preconditions.checkNotNull(traitInstanceDefinition, "Trait instance cannot be null");
+        ParamChecker.notEmpty(guid, "entity GUID cannot be null");
+        ParamChecker.notEmpty(traitInstanceDefinition, "Trait instance cannot be null");
 
         ITypedStruct traitInstance = deserializeTraitInstance(traitInstanceDefinition);
         final String traitName = traitInstance.getTypeName();
@@ -282,7 +288,7 @@ public class DefaultMetadataService implements MetadataService {
             Struct traitInstance = InstanceSerialization.fromJsonStruct(
                     traitInstanceDefinition, true);
             final String entityTypeName = traitInstance.getTypeName();
-            Preconditions.checkNotNull(entityTypeName, "entity type cannot be null");
+            ParamChecker.notEmpty(entityTypeName, "entity type cannot be null");
 
             TraitType traitType = typeSystem.getDataType(TraitType.class, entityTypeName);
             return traitType.convert(
@@ -302,8 +308,8 @@ public class DefaultMetadataService implements MetadataService {
     @Override
     public void deleteTrait(String guid,
                             String traitNameToBeDeleted) throws MetadataException {
-        Preconditions.checkNotNull(guid, "entity GUID cannot be null");
-        Preconditions.checkNotNull(traitNameToBeDeleted, "Trait name cannot be null");
+        ParamChecker.notEmpty(guid, "entity GUID cannot be null");
+        ParamChecker.notEmpty(traitNameToBeDeleted, "Trait name cannot be null");
 
         // ensure trait type is already registered with the TS
         Preconditions.checkArgument(typeSystem.isRegistered(traitNameToBeDeleted),