diff --git a/gi/pygi-argument.c b/gi/pygi-argument.c
index 79a0ec5..38af25b 100644
--- a/gi/pygi-argument.c
+++ b/gi/pygi-argument.c
@@ -1833,6 +1833,11 @@ _pygi_argument_to_object (GIArgument  *arg,
                         break;
                     }
 
+                    if (G_IS_PARAM_SPEC (arg->v_pointer)) {
+                      object = pyg_param_spec_new (arg->v_pointer);
+                      break;
+                    }
+
                     /* since we will unref the object when the
                      * wrapper is destroyed and we don't want
                      * GTK removing the object while the
@@ -2051,7 +2056,10 @@ _pygi_argument_from_g_value(const GValue *value,
                     break;
                 case GI_INFO_TYPE_INTERFACE:
                 case GI_INFO_TYPE_OBJECT:
-                    arg.v_pointer = g_value_get_object (value);
+                    if (G_VALUE_HOLDS_PARAM (value))
+                      arg.v_pointer = g_value_get_param (value);
+                    else
+                      arg.v_pointer = g_value_get_object (value);
                     break;
                 case GI_INFO_TYPE_BOXED:
                 case GI_INFO_TYPE_STRUCT:
diff --git a/tests/test_signal.py b/tests/test_signal.py
index 02e3b96..5a18f81 100644
--- a/tests/test_signal.py
+++ b/tests/test_signal.py
@@ -358,6 +358,7 @@ class CM(GObject.GObject):
         test_double=(l, double, (double, )),
         test_string=(l, str, (str, )),
         test_object=(l, object, (object, )),
+        test_paramspec=(l, GObject.ParamSpec, ()),
     )
 
 
@@ -395,6 +396,12 @@ class _TestCMarshaller:
         rv = self.obj.emit("test-object", self)
         self.assertEqual(rv, self)
 
+    def testTestReturnParamSpec(self):
+        rv = self.obj.emit("test-paramspec")
+        print('rv', rv)
+        self.assertEqual(rv.name, "test-param")
+        self.assertEqual(rv.nick, "test")
+
 if 'generic-c-marshaller' in GObject.features:
     class TestCMarshaller(_TestCMarshaller, unittest.TestCase):
         pass
diff --git a/tests/testhelpermodule.c b/tests/testhelpermodule.c
index d26ec9f..cd178a1 100644
--- a/tests/testhelpermodule.c
+++ b/tests/testhelpermodule.c
@@ -339,6 +339,14 @@ test_object_callback (GObject *object, GObject *o)
   return o;
 }
 
+static GParamSpec *
+test_paramspec_callback (GObject *object)
+{
+  g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+
+  return g_param_spec_boolean ("test-param", "test", "test boolean", TRUE, G_PARAM_READABLE);
+}
+
 static void
 connectcallbacks (GObject *object)
 {
@@ -381,6 +389,10 @@ connectcallbacks (GObject *object)
                     "test_object",
                     G_CALLBACK (test_object_callback), 
                     NULL);
+  g_signal_connect (G_OBJECT (object),
+                    "test_paramspec",
+                    G_CALLBACK (test_paramspec_callback), 
+                    NULL);
 }
 
 static PyObject *
