diff --git a/gi/_gobject/pygenum.c b/gi/_gobject/pygenum.c
index c0a51a9..8af7130 100644
--- a/gi/_gobject/pygenum.c
+++ b/gi/_gobject/pygenum.c
@@ -72,7 +72,7 @@ pyg_enum_richcompare(PyGEnum *self, PyObject *other, int op)
 }
 
 static PyObject *
-pyg_enum_repr(PyGEnum *self)
+pyg_enum_str(PyGEnum *self)
 {
   GEnumClass *enum_class;
   const char *value;
@@ -100,6 +100,39 @@ pyg_enum_repr(PyGEnum *self)
 }
 
 static PyObject *
+pyg_enum_repr(PyGEnum *self)
+{
+  GEnumClass *enum_class;
+  const char *value;
+  guint index;
+  static char tmp[256];
+  long l;
+
+  enum_class = g_type_class_ref(self->gtype);
+  g_assert(G_IS_ENUM_CLASS(enum_class));
+
+  l = PYGLIB_PyLong_AS_LONG(self);
+  for (index = 0; index < enum_class->n_values; index++) 
+      if (l == enum_class->values[index].value)
+          break;
+
+  value = enum_class->values[index].value_nick;
+  if (value) {
+      PyObject *module = PyObject_GetAttrString(self, "__module__");
+      snprintf(tmp, sizeof (tmp), "%s.%s.%s",
+              PYGLIB_PyUnicode_AsString(module), 
+              g_type_name(self->gtype),
+              value);
+      Py_DECREF (module);
+  } else
+      snprintf(tmp, sizeof (tmp), "%ld", PYGLIB_PyLong_AS_LONG(self));
+
+  g_type_class_unref(enum_class);
+
+  return PYGLIB_PyUnicode_FromString(tmp);
+}
+
+static PyObject *
 pyg_enum_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
 {
     static char *kwlist[] = { "value", NULL };
@@ -357,7 +390,7 @@ pygobject_enum_register_types(PyObject *d)
     PyGEnum_Type.tp_hash = PyLong_Type.tp_hash;    
 #endif
     PyGEnum_Type.tp_repr = (reprfunc)pyg_enum_repr;
-    PyGEnum_Type.tp_str = (reprfunc)pyg_enum_repr;
+    PyGEnum_Type.tp_str = (reprfunc)pyg_enum_str;
     PyGEnum_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;
     PyGEnum_Type.tp_richcompare = (richcmpfunc)pyg_enum_richcompare;
     PyGEnum_Type.tp_methods = pyg_enum_methods;
diff --git a/tests/test_gi.py b/tests/test_gi.py
index 2b5b5a1..dcb9b64 100644
--- a/tests/test_gi.py
+++ b/tests/test_gi.py
@@ -1113,6 +1113,13 @@ class TestEnum(unittest.TestCase):
         self.assertEqual(GIMarshallingTests.Enum.VALUE2.value_name, 'GI_MARSHALLING_TESTS_ENUM_VALUE2')
         self.assertEqual(GIMarshallingTests.Enum.VALUE3.value_name, 'GI_MARSHALLING_TESTS_ENUM_VALUE3')
 
+    def test_str_repr(self):
+        self.assertEqual(str(GIMarshallingTests.Enum.VALUE1),
+                '<enum GI_MARSHALLING_TESTS_ENUM_VALUE1 of type Enum>')
+
+        self.assertEqual(repr(GIMarshallingTests.Enum.VALUE1),
+                'GIMarshallingTests.Enum.VALUE1')
+
     def test_enum_in(self):
         GIMarshallingTests.enum_in(GIMarshallingTests.Enum.VALUE3)
         GIMarshallingTests.enum_in(42)
