diff --git a/graphene_django_optimizer/query.py b/graphene_django_optimizer/query.py
index fec3f3d10ec3b8e8b2affd73d0ef7cd399163d4d..cafae4055b1f502c635d1f892175e8374090cefe 100644
--- a/graphene_django_optimizer/query.py
+++ b/graphene_django_optimizer/query.py
@@ -282,6 +282,8 @@ class QueryOptimizer(object):
                 resolver_fn = arg
             if isinstance(resolver_fn, functools.partial) and resolver_fn.func == default_resolver:
                 return resolver_fn.args[0]
+            if self._is_resolver_for_id_field(resolver_fn):
+                return 'id'
             return resolver_fn
 
     def _is_resolver_for_id_field(self, resolver):
diff --git a/tests/schema.py b/tests/schema.py
index dbe973c4bb0876940d4d6be7726213be8b3b8ffe..afbaa23d2701bf2872a67806758bc10c44a9faec 100644
--- a/tests/schema.py
+++ b/tests/schema.py
@@ -1,6 +1,6 @@
 from django.db.models import Prefetch
 import graphene
-from graphene import ConnectionField
+from graphene import ConnectionField, relay
 from graphene_django.fields import DjangoConnectionField
 import graphene_django_optimizer as gql_optimizer
 from graphene_django_optimizer import OptimizedDjangoObjectType
@@ -38,8 +38,8 @@ class ItemFilterInput(graphene.InputObjectType):
 
 
 class ItemInterface(graphene.Interface):
-    id = graphene.ID(required=True)
-    parent_id = graphene.ID()
+    id = relay.GlobalID()
+    parent_id = relay.GlobalID()
     foo = graphene.String()
     title = graphene.String()
     unoptimized_title = graphene.String()
diff --git a/tests/test_relay.py b/tests/test_relay.py
index a64de7db497849bef0c774d9e8de32285b07f5a8..1de193fb33470257ea580bcd6673e52b999e1cac 100644
--- a/tests/test_relay.py
+++ b/tests/test_relay.py
@@ -19,6 +19,7 @@ def test_should_return_valid_result_in_a_relay_query():
                 edges {
                     node {
                         id
+                        parentId
                         name
                     }
                 }
@@ -26,7 +27,8 @@ def test_should_return_valid_result_in_a_relay_query():
         }
     ''')
     assert not result.errors
-    assert result.data['relayItems']['edges'][0]['node']['id'] == '7'
+    assert result.data['relayItems']['edges'][0]['node']['id'] == 'SXRlbU5vZGU6Nw=='
+    assert result.data['relayItems']['edges'][0]['node']['parentId'] == 'SXRlbU5vZGU6Tm9uZQ=='
     assert result.data['relayItems']['edges'][0]['node']['name'] == 'foo'
 
 
@@ -161,6 +163,7 @@ def test_should_resolve_nested_variables():
                             edges {
                                 node {
                                     id
+                                    parentId
                                 }
                             }
                         }
@@ -174,4 +177,5 @@ def test_should_resolve_nested_variables():
     assert len(item_edges) == 1
     child_edges = item_edges[0]['node']['relayAllChildren']['edges'][0]
     assert len(child_edges) == 1
-    assert child_edges['node']['id'] == '8'
+    assert child_edges['node']['id'] == 'SXRlbU5vZGU6OA=='
+    assert child_edges['node']['parentId'] == 'SXRlbU5vZGU6Nw=='
diff --git a/tests/test_resolver.py b/tests/test_resolver.py
index c06c8312467482ad79809aa23064ad485c6b9f83..f55b108f69f122bbf6081192636188c0b1dced42 100644
--- a/tests/test_resolver.py
+++ b/tests/test_resolver.py
@@ -142,13 +142,15 @@ def test_should_return_valid_result_with_prefetch_related_as_a_function():
                 foo
                 filteredChildren(name: "bar") {
                     id
+                    parentId
                     foo
                 }
             }
         }
     ''')
     assert not result.errors
-    assert result.data['items'][0]['filteredChildren'][0]['id'] == '2'
+    assert result.data['items'][0]['filteredChildren'][0]['id'] == 'SXRlbVR5cGU6Mg=='
+    assert result.data['items'][0]['filteredChildren'][0]['parentId'] == 'SXRlbVR5cGU6MQ=='
 
 
 @pytest.mark.django_db
@@ -163,10 +165,12 @@ def test_should_return_valid_result_with_prefetch_related_as_a_function_using_va
                 foo
                 filteredChildren(name: $name) {
                     id
+                    parentId
                     foo
                 }
             }
         }
     ''', variables={'name': 'bar'})
     assert not result.errors
-    assert result.data['items'][0]['filteredChildren'][0]['id'] == '2'
+    assert result.data['items'][0]['filteredChildren'][0]['id'] == 'SXRlbVR5cGU6Mg=='
+    assert result.data['items'][0]['filteredChildren'][0]['parentId'] == 'SXRlbVR5cGU6MQ=='