Index: exec/main.c
===================================================================
--- exec/main.c	(revision 2509)
+++ exec/main.c	(working copy)
@@ -820,6 +820,7 @@
 	(void)signal (SIGSEGV, sigsegv_handler);
 	(void)signal (SIGABRT, sigabrt_handler);
 	(void)signal (SIGQUIT, sigquit_handler);
+	(void)signal (SIGTERM, sigquit_handler);
 #if MSG_NOSIGNAL != 0
 	(void)signal (SIGPIPE, SIG_IGN);
 #endif
Index: init/redhat
===================================================================
--- init/redhat	(revision 2509)
+++ init/redhat	(working copy)
@@ -27,11 +27,23 @@
 
 stop() {
     echo -n $"Stopping Corosync Cluster Engine ($prog): "
-    killproc $prog
-    retval=$?
-    [ "$retval" -eq 0 ] && rm -f "$lockfile"
+    # If no signal is specified, -TERM is used but _also_ -KILL 3s later
+    # This is far too aggressive for a cluster resource manager running on top of Corosync
+    killproc $prog -QUIT
     echo
-    return $retval
+
+    echo -n $"Waiting for services to unload:"
+    while
+        pidofproc $prog > /dev/null 2>&1
+    do
+        sleep 2
+    done
+
+    success $"$base shutdown"
+    echo
+
+    rm -f "$lockfile"
+    return 0
 }
 
 restart() {
