diff --git a/catalog/src/main/java/org/apache/atlas/catalog/query/BaseQuery.java b/catalog/src/main/java/org/apache/atlas/catalog/query/BaseQuery.java
index 18d87ea..ff48020 100644
--- a/catalog/src/main/java/org/apache/atlas/catalog/query/BaseQuery.java
+++ b/catalog/src/main/java/org/apache/atlas/catalog/query/BaseQuery.java
@@ -20,8 +20,10 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.NoSuchElementException;
 
 import org.apache.atlas.catalog.Request;
 import org.apache.atlas.catalog.VertexWrapper;
@@ -31,7 +33,9 @@
 import org.apache.atlas.catalog.projection.ProjectionResult;
 import org.apache.atlas.repository.Constants;
 import org.apache.atlas.repository.graph.AtlasGraphProvider;
+import org.apache.atlas.repository.graphdb.AtlasElement;
 import org.apache.atlas.repository.graphdb.AtlasGraph;
+import org.apache.atlas.repository.graphdb.AtlasVertex;
 import org.apache.atlas.typesystem.persistence.Id;
 
 import com.tinkerpop.blueprints.Compare;
@@ -113,7 +117,42 @@
     protected abstract Pipe getQueryPipe();
 
     protected GremlinPipeline getRootVertexPipeline() {
-        return new GremlinPipeline(getGraph().getVertices());
+        return new GremlinPipeline(unWrapVertices());
+    }
+
+    protected Iterable<Object> unWrapVertices() {
+        final Iterable<AtlasVertex> vertices = getGraph().getVertices();
+
+        Iterable<Object> vertexIterable = new Iterable<Object>() {
+            Iterator<Object> iterator = new Iterator<Object>() {
+                Iterator<AtlasVertex> wrapperIterator = vertices.iterator();
+
+                @Override
+                public boolean hasNext() {
+                    return wrapperIterator.hasNext();
+                }
+
+                @Override
+                public Object next() {
+                    if (hasNext()) {
+                        return ((AtlasElement) wrapperIterator.next().getV()).getWrappedElement();
+                    } else {
+                        throw new NoSuchElementException();
+                    }
+                }
+
+                @Override
+                public void remove() {
+                    throw new UnsupportedOperationException("Remove not supported");
+                }
+            };
+
+            @Override
+            public Iterator<Object> iterator() {
+                return iterator;
+            }
+        };
+        return vertexIterable;
     }
 
     protected Pipe getNotDeletedPipe() {
diff --git a/graphdb/api/src/main/java/org/apache/atlas/repository/graphdb/AtlasElement.java b/graphdb/api/src/main/java/org/apache/atlas/repository/graphdb/AtlasElement.java
index 24f7a7d..42837f4 100644
--- a/graphdb/api/src/main/java/org/apache/atlas/repository/graphdb/AtlasElement.java
+++ b/graphdb/api/src/main/java/org/apache/atlas/repository/graphdb/AtlasElement.java
@@ -166,4 +166,6 @@
      * @return
      */
     boolean isIdAssigned();
+
+    <T> T getWrappedElement();
 }
diff --git a/graphdb/titan0/src/main/java/org/apache/atlas/repository/graphdb/titan0/Titan0Element.java b/graphdb/titan0/src/main/java/org/apache/atlas/repository/graphdb/titan0/Titan0Element.java
index 468c2a7..3b50633 100644
--- a/graphdb/titan0/src/main/java/org/apache/atlas/repository/graphdb/titan0/Titan0Element.java
+++ b/graphdb/titan0/src/main/java/org/apache/atlas/repository/graphdb/titan0/Titan0Element.java
@@ -17,6 +17,7 @@
  */
 package org.apache.atlas.repository.graphdb.titan0;
 
+import java.lang.Override;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -134,7 +135,7 @@
 
     }
 
-    // not in interface
+    @Override
     public T getWrappedElement() {
         return wrappedElement;
     }
diff --git a/graphdb/titan1/src/main/java/org/apache/atlas/repository/graphdb/titan1/Titan1Element.java b/graphdb/titan1/src/main/java/org/apache/atlas/repository/graphdb/titan1/Titan1Element.java
index 985294e..b1cd458 100644
--- a/graphdb/titan1/src/main/java/org/apache/atlas/repository/graphdb/titan1/Titan1Element.java
+++ b/graphdb/titan1/src/main/java/org/apache/atlas/repository/graphdb/titan1/Titan1Element.java
@@ -48,7 +48,6 @@
  */
 public class Titan1Element<T extends Element> implements AtlasElement {
 
-
     private T element;
     protected Titan1Graph graph;
 
@@ -121,8 +120,7 @@
         return element.id();
     }
 
-
-    //not in interface
+    @Override
     public T getWrappedElement() {
         return element;
     }
diff --git a/webapp/src/main/java/org/apache/atlas/web/resources/BaseService.java b/webapp/src/main/java/org/apache/atlas/web/resources/BaseService.java
index 2e999fc..a013494 100644
--- a/webapp/src/main/java/org/apache/atlas/web/resources/BaseService.java
+++ b/webapp/src/main/java/org/apache/atlas/web/resources/BaseService.java
@@ -65,6 +65,7 @@
         try {
             return provider.getResources(request);
         } catch (RuntimeException e) {
+            LOG.error("Error while retrieving taxonomy ", e);
             throw wrapRuntimeException(e);
         }
     }
