Index: docs/reference/pyglib-functions.xml
===================================================================
--- docs/reference/pyglib-functions.xml	(revision 976)
+++ docs/reference/pyglib-functions.xml	(working copy)
@@ -380,6 +380,7 @@
         <methodparam><parameter role="keyword">function</parameter></methodparam>
         <methodparam><parameter role="keyword">data</parameter><initializer>None</initializer></methodparam>
         <methodparam><parameter role="keyword">priority</parameter><initializer>glib.PRIORITY_DEFAULT</initializer></methodparam>
+        <methodparam><parameter role="keyword">include_stops</parameter><initializer>False</initializer></methodparam>
 	</methodsynopsis></programlisting>
       <variablelist role="params">
         <varlistentry>
@@ -400,6 +401,10 @@
 <xref linkend="glib-priority-constants"
 endterm="glib-priority-constants-title"></xref></simpara></listitem>
         </varlistentry>
+         <varlistentry>
+          <term><parameter role="keyword">include_stops</parameter>&nbsp;:</term>
+          <listitem><simpara>whether to report when the child process has stopped (e.g. from SIGSTOP) as well as when it has exited</simpara></listitem>
+        </varlistentry>
         <varlistentry>
           <term><emphasis>Returns</emphasis>&nbsp;:</term>
           <listitem><simpara>the id of event source.</simpara></listitem>
Index: tests/test_subprocess.py
===================================================================
--- tests/test_subprocess.py	(revision 976)
+++ tests/test_subprocess.py	(working copy)
@@ -1,5 +1,7 @@
 # -*- Mode: Python -*-
 
+import os
+import signal
 import sys
 import unittest
 
@@ -23,5 +25,59 @@
         self.loop.run()
         self.assertEqual(self.data, 12345)
 
+    def testChildWatchIgnoresStops(self):
+        loop = glib.MainLoop()
+        argv = [sys.executable, '-c', """
+import os
+import signal
+os.kill(os.getpid(), signal.SIGSTOP)
+"""]
+        pid, stdin, stdout, stderr = glib.spawn_async(
+            argv, flags=glib.SPAWN_DO_NOT_REAP_CHILD)
+        pid.close()
+
+        statuses = []
+        def on_wait_status(pid, condition):
+            statuses.append(condition)
+            if not os.WIFSTOPPED(condition):
+                loop.quit()
+        def on_timeout():
+            os.kill(pid, signal.SIGKILL)
+        glib.child_watch_add(pid, on_wait_status)
+        # We are checking that an event never occurs, so we need to
+        # sleep for a small period.
+        glib.timeout_add(100, on_timeout)
+        loop.run()
+        self.assertEquals(len(statuses), 1)
+        self.assertTrue(os.WIFSIGNALED(statuses[0]))
+        self.assertEquals(os.WTERMSIG(statuses[0]), signal.SIGKILL)
+
+    def testChildWatchWithStops(self):
+        loop = glib.MainLoop()
+        argv = [sys.executable, '-c', """
+import os
+import signal
+os.kill(os.getpid(), signal.SIGSTOP)
+"""]
+        pid, stdin, stdout, stderr = glib.spawn_async(
+            argv, flags=glib.SPAWN_DO_NOT_REAP_CHILD)
+        pid.close()
+
+        statuses = []
+        def on_wait_status(pid, condition):
+            statuses.append(condition)
+            if os.WIFSTOPPED(condition):
+                os.kill(pid, signal.SIGKILL)
+            else:
+                loop.quit()
+        glib.child_watch_add(pid, on_wait_status, include_stops=True)
+        loop.run()
+        self.assertEquals(len(statuses), 2)
+        self.assertTrue(os.WIFSTOPPED(statuses[0]))
+        self.assertEquals(os.WSTOPSIG(statuses[0]), signal.SIGSTOP)
+        self.assertTrue(os.WIFSIGNALED(statuses[1]))
+        self.assertEquals(os.WTERMSIG(statuses[1]), signal.SIGKILL)
+
+
 if __name__ == '__main__':
     unittest.main()
Index: glib/glibmodule.c
===================================================================
--- glib/glibmodule.c	(revision 976)
+++ glib/glibmodule.c	(working copy)
@@ -350,16 +350,20 @@
 static PyObject *
 pyglib_child_watch_add(PyObject *unused, PyObject *args, PyObject *kwargs)
 {
-    static char *kwlist[] = { "pid", "function", "data", "priority", NULL };
+    static char *kwlist[] = { "pid", "function", "data", "priority",
+			      "include_stops", NULL };
     guint id;
     gint priority = G_PRIORITY_DEFAULT;
+    int include_stops = 0;
     int pid;
     PyObject *func, *user_data = NULL;
     struct _PyGChildData *child_data;
+    GSource *source;
 
     if (!PyArg_ParseTupleAndKeywords(args, kwargs,
-				     "iO|Oi:glib.child_watch_add", kwlist,
-                                     &pid, &func, &user_data, &priority))
+				     "iO|Oii:glib.child_watch_add", kwlist,
+                                     &pid, &func, &user_data, &priority,
+				     &include_stops))
         return NULL;
     if (!PyCallable_Check(func)) {
         PyErr_SetString(PyExc_TypeError,
@@ -373,8 +377,14 @@
     Py_INCREF(child_data->func);
     if (child_data->data)
         Py_INCREF(child_data->data);
-    id = g_child_watch_add_full(priority, pid, child_watch_func,
-                                child_data, child_watch_dnotify);
+    source = g_child_watch_source_new(pid);
+    g_source_set_callback(source, child_watch_func, child_data,
+			  child_watch_dnotify);
+    g_source_set_priority(source, priority);
+    if(include_stops)
+	g_child_watch_source_include_stops(source);
+    id = g_source_attach(source, NULL);
+    g_source_unref(source);
     return _PyLong_FromLong(id);
 }
 
@@ -557,7 +567,7 @@
     { "child_watch_add",
       (PyCFunction)pyglib_child_watch_add, METH_VARARGS|METH_KEYWORDS,
       "child_watch_add(pid, callable, user_data=None,\n"
-                       "priority=None) -> source id\n"
+      "                priority=None, include_stops=False) -> source id\n"
       "  callable receives (pid, condition, user_data)\n"
       "Sets the function specified by function to be called with the user\n"
       "data specified by data when the child indicated by pid exits.\n"
