diff --git a/kgb/agency.py b/kgb/agency.py
index d1cc18bef33b9a417e14bff44e05f714f420340a..b1e379f8774a0b9df7fddacb08bab6d1195145f7 100644
--- a/kgb/agency.py
+++ b/kgb/agency.py
@@ -8,6 +8,7 @@ from unittest.util import safe_repr
 from kgb.pycompat import iteritems
 from kgb.signature import _UNSET_ARG
 from kgb.spies import FunctionSpy, SpyCall
+from kgb.utils import format_spy_kwargs
 
 
 class SpyAgency(object):
@@ -290,7 +291,7 @@ class SpyAgency(object):
                     % (
                         self._format_spy_or_call(spy_or_call),
                         safe_repr(expected_args),
-                        self._format_spy_kwargs(expected_kwargs),
+                        format_spy_kwargs(expected_kwargs),
                         self._format_spy_call_args(spy_or_call),
                     ))
             else:
@@ -303,7 +304,7 @@ class SpyAgency(object):
                     % (
                         self._format_spy_or_call(spy_or_call),
                         safe_repr(expected_args),
-                        self._format_spy_kwargs(expected_kwargs),
+                        format_spy_kwargs(expected_kwargs),
                         self._format_spy_calls(
                             spy_or_call,
                             self._format_spy_call_args),
@@ -344,7 +345,7 @@ class SpyAgency(object):
                     % (
                         self._format_spy_or_call(spy_or_call),
                         safe_repr(expected_args),
-                        self._format_spy_kwargs(expected_kwargs),
+                        format_spy_kwargs(expected_kwargs),
                     ))
             else:
                 self._kgb_assert_fail(
@@ -357,7 +358,7 @@ class SpyAgency(object):
                     % (
                         self._format_spy_or_call(spy_or_call),
                         safe_repr(expected_args),
-                        self._format_spy_kwargs(expected_kwargs),
+                        format_spy_kwargs(expected_kwargs),
                         self._format_spy_calls(
                             spy_or_call,
                             self._format_spy_call_args),
@@ -394,7 +395,7 @@ class SpyAgency(object):
                 % (
                     self._format_spy_or_call(spy),
                     safe_repr(expected_args),
-                    self._format_spy_kwargs(expected_kwargs),
+                    format_spy_kwargs(expected_kwargs),
                     self._format_spy_call_args(spy.last_call),
                 ))
 
@@ -882,24 +883,3 @@ class SpyAgency(object):
             ]
 
         return '\n'.join(lines)
-
-    def _format_spy_kwargs(self, kwargs):
-        """Format keyword arguments.
-
-        This will convert all keys to native strings, to help with showing
-        more reasonable output that's consistent. The keys will also be
-        provided in sorted order.
-
-        Args:
-            kwargs (dict):
-                The dictionary of keyword arguments.
-
-        Returns:
-            unicode:
-            The formatted string representation.
-        """
-        return '{%s}' % ', '.join(
-            '%s: %s' % (safe_repr(str(key)), safe_repr(value))
-            for key, value in sorted(iteritems(kwargs),
-                                     key=lambda pair: pair[0])
-        )
diff --git a/kgb/calls.py b/kgb/calls.py
index d6555c1840284b5c3e289642c1c9a2a923d16b34..1abd8161dba603556c54bb0478fdcb62ec1595fc 100644
--- a/kgb/calls.py
+++ b/kgb/calls.py
@@ -4,6 +4,7 @@ from __future__ import unicode_literals
 
 from kgb.pycompat import iteritems, text_type
 from kgb.signature import FunctionSig
+from kgb.utils import format_spy_kwargs
 
 
 class SpyCall(object):
@@ -126,5 +127,6 @@ class SpyCall(object):
                 text_type(self.exception) == message)
 
     def __repr__(self):
-        return '<SpyCall(args=%r, kwargs=%r, returned=%r, raised=%r)>' % (
-            self.args, self.kwargs, self.return_value, self.exception)
+        return '<SpyCall(args=%r, kwargs=%s, returned=%r, raised=%r)>' % (
+            self.args, format_spy_kwargs(self.kwargs), self.return_value,
+            self.exception)
diff --git a/kgb/utils.py b/kgb/utils.py
index d6b550619a5f86ef825260683fb6f020a2a7b1ea..9feda6d9220b91e354eb6bc021a5b91fc7155702 100644
--- a/kgb/utils.py
+++ b/kgb/utils.py
@@ -3,6 +3,9 @@
 from __future__ import unicode_literals
 
 import inspect
+from unittest.util import safe_repr
+
+from kgb.pycompat import iteritems
 
 
 def get_defined_attr_value(owner, name, ancestors_only=False):
@@ -69,3 +72,25 @@ def is_attr_defined_on_ancestor(cls, name):
         return True
     except AttributeError:
         return False
+
+
+def format_spy_kwargs(kwargs):
+    """Format keyword arguments.
+
+    This will convert all keys to native strings, to help with showing
+    more reasonable output that's consistent. The keys will also be
+    provided in sorted order.
+
+    Args:
+        kwargs (dict):
+            The dictionary of keyword arguments.
+
+    Returns:
+        unicode:
+        The formatted string representation.
+    """
+    return '{%s}' % ', '.join(
+        '%s: %s' % (safe_repr(str(key)), safe_repr(value))
+        for key, value in sorted(iteritems(kwargs),
+                                 key=lambda pair: pair[0])
+    )
