diff --git a/goblin/properties.py b/goblin/properties.py
index 2b372396641a244ee0f93b04c26cc99a93e1c794..bc49bdf942a57c4508c8630595d6262167ea9245 100644
--- a/goblin/properties.py
+++ b/goblin/properties.py
@@ -21,7 +21,7 @@ import logging
 
 from goblin import abc, exception
 
-from gremlin_python.structure.io.graphson import long
+from gremlin_python.statics import long
 
 
 logger = logging.getLogger(__name__)
diff --git a/goblin/session.py b/goblin/session.py
index 4c0a880692c26257d6840761618b2e9124266a75..b2aa5ee7931ef6adb510f5b08548771a8d4655c7 100644
--- a/goblin/session.py
+++ b/goblin/session.py
@@ -27,7 +27,8 @@ from goblin.driver import connection, graph
 from goblin.element import GenericVertex
 
 from gremlin_python.driver.remote_connection import RemoteStrategy
-from gremlin_python.process.traversal import Cardinality, Traverser
+from gremlin_python.process.graph_traversal import __
+from gremlin_python.process.traversal import Cardinality, Traverser, Binding
 
 
 
@@ -268,7 +269,7 @@ class Session(connection.AbstractConnection):
 
         :param goblin.element.Vertex vertex: Vertex to be removed
         """
-        traversal = self._g.V(vertex.id).drop()
+        traversal = self._g.V(Binding('vid', vertex.id)).drop()
         result = await self._simple_traversal(traversal, vertex)
         hashable_id = self._get_hashable_id(vertex.id)
         vertex = self.current.pop(hashable_id)
@@ -281,7 +282,7 @@ class Session(connection.AbstractConnection):
 
         :param goblin.element.Edge edge: Element to be removed
         """
-        traversal = self._g.E(edge.id).drop()
+        traversal = self._g.E(Binding('eid', edge.id)).drop()
         result = await self._simple_traversal(traversal, edge)
         hashable_id = self._get_hashable_id(edge.id)
         edge = self.current.pop(hashable_id)
@@ -348,7 +349,7 @@ class Session(connection.AbstractConnection):
 
         :returns: :py:class:`Vertex<goblin.element.Vertex>` | None
         """
-        return await self.g.V(vertex.id).oneOrNone()
+        return await self.g.V(Binding('vid', vertex.id)).oneOrNone()
 
     async def get_edge(self, edge):
         """
@@ -358,7 +359,9 @@ class Session(connection.AbstractConnection):
 
         :returns: :py:class:`Edge<goblin.element.Edge>` | None
         """
-        return await self.g.E(edge.id).oneOrNone()
+        result = await self.g.E(Binding('eid', edge.id)).oneOrNone()
+
+        return result
 
     async def update_vertex(self, vertex):
         """
@@ -369,8 +372,7 @@ class Session(connection.AbstractConnection):
         :returns: :py:class:`Vertex<goblin.element.Vertex>` object
         """
         props = mapper.map_props_to_db(vertex, vertex.__mapping__)
-        # vert_props = mapper.map_vert_props_to_db
-        traversal = self._g.V(vertex.id)
+        traversal = self._g.V(Binding('vid', vertex.id))
         return await self._update_vertex_properties(vertex, traversal, props)
 
     async def update_edge(self, edge):
@@ -382,7 +384,7 @@ class Session(connection.AbstractConnection):
         :returns: :py:class:`Edge<goblin.element.Edge>` object
         """
         props = mapper.map_props_to_db(edge, edge.__mapping__)
-        traversal = self._g.E(edge.id)
+        traversal = self._g.E(Binding('eid', edge.id))
         return await self._update_edge_properties(edge, traversal, props)
 
     # Transaction support
@@ -430,49 +432,49 @@ class Session(connection.AbstractConnection):
         result = await self._simple_traversal(traversal, vertex)
         if metaprops:
             await self._add_metaprops(result, metaprops)
-            traversal = self._g.V(vertex.id)
+            traversal = self._g.V(Binding('vid', vertex.id))
             result = await self._simple_traversal(traversal, vertex)
         return result
 
     async def _add_edge(self, edge):
         """Convenience function for generating crud traversals."""
         props = mapper.map_props_to_db(edge, edge.__mapping__)
-        traversal = self._g.V(edge.source.id)
+        traversal = self._g.V(Binding('sid', edge.source.id))
         traversal = traversal.addE(edge.__mapping__._label)
-        traversal = traversal.to(
-            self._g.V(edge.target.id))
+        traversal = traversal.to(__.V(Binding('tid', edge.target.id)))
         traversal, _, _ = self._add_properties(
             traversal, props)
-        return await self._simple_traversal(traversal, edge)
+        result = await self._simple_traversal(traversal, edge)
+        return result
 
     async def _check_vertex(self, vertex):
         """Used to check for existence, does not update session vertex"""
-        msg = await self._g.V(vertex.id).oneOrNone()
+        msg = await self._g.V(Binding('vid', vertex.id)).oneOrNone()
         return msg
 
     async def _check_edge(self, edge):
         """Used to check for existence, does not update session edge"""
-        msg = await self._g.E(edge.id).oneOrNone()
+        msg = await self._g.E(Binding('eid', edge.id)).oneOrNone()
         return msg
 
     async def _update_vertex_properties(self, vertex, traversal, props):
         traversal, removals, metaprops = self._add_properties(traversal, props)
         for k in removals:
-            await self._g.V(vertex.id).properties(k).drop().oneOrNone()
+            await self._g.V(Binding('vid', vertex.id)).properties(k).drop().oneOrNone()
         result = await self._simple_traversal(traversal, vertex)
         if metaprops:
             removals = await self._add_metaprops(result, metaprops)
             for db_name, key, value in removals:
-                await self._g.V(vertex.id).properties(
+                await self._g.V(Binding('vid', vertex.id)).properties(
                     db_name).has(key, value).drop().oneOrNone()
-            traversal = self._g.V(vertex.id)
+            traversal = self._g.V(Binding('vid', vertex.id))
             result = await self._simple_traversal(traversal, vertex)
         return result
 
     async def _update_edge_properties(self, edge, traversal, props):
         traversal, removals, _ = self._add_properties(traversal, props)
         for k in removals:
-            await self._g.E(edge.id).properties(k).drop().oneOrNone()
+            await self._g.E(Binding('eid', edge.id)).properties(k).drop().oneOrNone()
         return await self._simple_traversal(traversal, edge)
 
     async def _add_metaprops(self, result, metaprops):
@@ -481,7 +483,7 @@ class Session(connection.AbstractConnection):
             db_name, (binding, value), metaprops = metaprop
             for key, val in metaprops.items():
                 if val:
-                    traversal = self._g.V(result.id).properties(
+                    traversal = self._g.V(Binding('vid', result.id)).properties(
                         db_name).hasValue(value).property(key, val)
                     await traversal.oneOrNone()
                 else:
diff --git a/gremlin_python/process/translator.py b/gremlin_python/process/translator.py
index 024373b3e5eb6a5deaa066cd82520208fdd55920..d8a5e6ebc563c4a25939e41ac8363a20c6c42a90 100644
--- a/gremlin_python/process/translator.py
+++ b/gremlin_python/process/translator.py
@@ -22,8 +22,8 @@ under the License.
 from abc import abstractmethod
 from aenum import Enum
 
+from gremlin_python.statics import long
 from gremlin_python.process.traversal import P, Bytecode, Binding
-from gremlin_python.structure.io.graphson import long
 
 
 class RawExpression(object):
diff --git a/gremlin_python/process/traversal.py b/gremlin_python/process/traversal.py
index 233a66ba5a8c3381acec03be87d999077c92a5fe..9a94c1c9c0047cdac62295c0c432cff4268c19a3 100644
--- a/gremlin_python/process/traversal.py
+++ b/gremlin_python/process/traversal.py
@@ -308,6 +308,9 @@ class Bytecode(object):
         if isinstance(arg, Traversal):
             self.bindings.update(arg.bytecode.bindings)
             return arg.bytecode
+        elif isinstance(arg, Binding):
+            self.bindings[arg.key] = arg.value
+            return arg
         elif isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
             self.bindings[arg[0]] = arg[1]
             return Binding(arg[0],arg[1])
diff --git a/gremlin_python/statics.py b/gremlin_python/statics.py
index 293ff93a6200ac7084fea76ffae509d45bc4d6d1..5cb14c74043a87ac655988855f2461f9faf67026 100644
--- a/gremlin_python/statics.py
+++ b/gremlin_python/statics.py
@@ -23,6 +23,9 @@ staticEnums = {}
 default_lambda_language = "gremlin-python"
 
 
+class long(int): pass
+
+
 def add_static(key, value):
     if isinstance(value, Enum):
         staticEnums[key] = value
diff --git a/gremlin_python/structure/io/graphson.py b/gremlin_python/structure/io/graphson.py
index bc3ebfc237ef08f651ba8caea1aa737a9f580103..1dabe49e22921792fc7ba2dd6b1eb59b21d01a50 100644
--- a/gremlin_python/structure/io/graphson.py
+++ b/gremlin_python/structure/io/graphson.py
@@ -39,11 +39,9 @@ from gremlin_python.structure.graph import Property
 from gremlin_python.structure.graph import Vertex
 from gremlin_python.structure.graph import VertexProperty
 
-
-class long(int): pass
 FloatType = float
 IntType = int
-LongType = long
+LongType = statics.long
 
 
 
@@ -188,7 +186,7 @@ class NumberSerializer(GraphSONSerializer):
     def _dictify(self, number):
         if isinstance(number, bool):  # python thinks that 0/1 integers are booleans
             return number
-        elif isinstance(number, long):
+        elif isinstance(number, statics.long):
             return _SymbolHelper.objectify("Int64", number)
         elif isinstance(number, int):
             return _SymbolHelper.objectify("Int32", number)
@@ -222,7 +220,7 @@ class NumberDeserializer(GraphSONDeserializer):
         if type == "g:Int32":
             return int(value)
         elif type == "g:Int64":
-            return long(value)
+            return statics.long(value)
         else:
             return float(value)