diff --git a/kgb/calls.py b/kgb/calls.py
index 77111f43f0829d696bd0c66e7999af9890c67e7f..d6555c1840284b5c3e289642c1c9a2a923d16b34 100644
--- a/kgb/calls.py
+++ b/kgb/calls.py
@@ -126,5 +126,5 @@ class SpyCall(object):
                 text_type(self.exception) == message)
 
     def __repr__(self):
-        return '<SpyCall(args=%r, kwargs=%r, returned=%r, raised=%r>' % (
+        return '<SpyCall(args=%r, kwargs=%r, returned=%r, raised=%r)>' % (
             self.args, self.kwargs, self.return_value, self.exception)
diff --git a/kgb/ops.py b/kgb/ops.py
index 94dae9e8eecff1784e71b19a84bde9f137a8e0d8..8ad4c7d0101a44adffb5568bd6b70a55d1208ab2 100644
--- a/kgb/ops.py
+++ b/kgb/ops.py
@@ -500,9 +500,11 @@ class SpyOpMatchInOrder(BaseMatchingSpyOperation):
         except IndexError:
             raise UnexpectedCallError(
                 '%(spy)s was called %(num_calls)s time(s), but only '
-                '%(expected_calls)s call(s) were expected.'
+                '%(expected_calls)s call(s) were expected. Latest call: '
+                '%(latest_call)s'
                 % {
                     'expected_calls': len(self._calls),
+                    'latest_call': spy_call,
                     'num_calls': i + 1,
                     'spy': self.spy.func_name,
                 })
diff --git a/kgb/tests/test_ops.py b/kgb/tests/test_ops.py
index 36d64df27482c87b182a7c54c569355fd55810b2..c0f4341e26a0b5b26b48a2de91db25f13e9c99de 100644
--- a/kgb/tests/test_ops.py
+++ b/kgb/tests/test_ops.py
@@ -548,7 +548,9 @@ class SpyOpMatchInOrderTests(TestCase):
         self.assertEqual(obj.do_math(a=4, b=7), 11)
 
         expected_message = re.escape(
-            'do_math was called 2 time(s), but only 1 call(s) were expected.'
+            "do_math was called 2 time(s), but only 1 call(s) were expected. "
+            "Latest call: <SpyCall(args=(), kwargs={'a': 4, 'b': 9}, "
+            "returned=None, raised=None)>"
         )
 
         with self.assertRaisesRegexp(UnexpectedCallError, expected_message):
