diff --git a/daemons/ganeti-masterd b/daemons/ganeti-masterd
index 00214ea50329d2598bc4108caedb98a8f7ac77f6..0f7f67ceba532c8b29bea96f098b1058d27b84d5 100755
--- a/daemons/ganeti-masterd
+++ b/daemons/ganeti-masterd
@@ -93,16 +93,12 @@ class IOServer(SocketServer.UnixStreamServer):
 
     """
     SocketServer.UnixStreamServer.__init__(self, address, rqhandler)
-    self.do_quit = False
     self.context = context
 
     # We'll only start threads once we've forked.
     self.jobqueue = None
     self.request_workers = None
 
-    signal.signal(signal.SIGINT, self.handle_quit_signals)
-    signal.signal(signal.SIGTERM, self.handle_quit_signals)
-
   def setup_queue(self):
     self.jobqueue = jqueue.JobQueue(self.context)
     self.request_workers = workerpool.WorkerPool(CLIENT_REQUEST_WORKERS,
@@ -114,15 +110,14 @@ class IOServer(SocketServer.UnixStreamServer):
     """
     self.request_workers.AddTask(self, request, client_address)
 
-  def handle_quit_signals(self, signum, frame):
-    print "received %s in %s" % (signum, frame)
-    self.do_quit = True
-
   def serve_forever(self):
     """Handle one request at a time until told to quit."""
-    while not self.do_quit:
-      self.handle_request()
-      print "served request, quit=%s" % (self.do_quit)
+    sighandler = utils.SignalHandler([signal.SIGINT, signal.SIGTERM])
+    try:
+      while not sighandler.called:
+        self.handle_request()
+    finally:
+      sighandler.Reset()
 
   def server_cleanup(self):
     """Cleanup the server.