diff --git a/lib/daemon.py b/lib/daemon.py
index c843f0a0f06964b61d098043b2b259f3ea6925f4..06cd70c2c9aa51222b46498ffd311563cbd9e678 100644
--- a/lib/daemon.py
+++ b/lib/daemon.py
@@ -168,6 +168,7 @@ class Mainloop(object):
 
   @utils.SignalHandled([signal.SIGCHLD])
   @utils.SignalHandled([signal.SIGTERM])
+  @utils.SignalHandled([signal.SIGINT])
   def Run(self, signal_handlers=None):
     """Runs the mainloop.
 
@@ -194,7 +195,7 @@ class Mainloop(object):
         handler = signal_handlers[sig]
         if handler.called:
           self._CallSignalWaiters(sig)
-          running = (sig != signal.SIGTERM)
+          running = sig not in (signal.SIGTERM, signal.SIGINT)
           handler.Clear()
 
   def _CallSignalWaiters(self, signum):
diff --git a/test/ganeti.daemon_unittest.py b/test/ganeti.daemon_unittest.py
index ad5a12852904f2c68f7ae1f635afd833c4753a67..81912ee181af412eb3288b09010dc6191fd4c2b1 100755
--- a/test/ganeti.daemon_unittest.py
+++ b/test/ganeti.daemon_unittest.py
@@ -56,6 +56,16 @@ class TestMainloop(testutils.GanetiTestCase):
     self.mainloop.Run() # terminates by _SendSig being scheduled
     self.assertEquals(self.sendsig_events, [signal.SIGTERM])
 
+  def testTerminatingSignals(self):
+    self.mainloop.scheduler.enter(0.1, 1, self._SendSig, [signal.SIGCHLD])
+    self.mainloop.scheduler.enter(0.2, 1, self._SendSig, [signal.SIGINT])
+    self.mainloop.Run()
+    self.assertEquals(self.sendsig_events, [signal.SIGCHLD, signal.SIGINT])
+    self.mainloop.scheduler.enter(0.1, 1, self._SendSig, [signal.SIGTERM])
+    self.mainloop.Run()
+    self.assertEquals(self.sendsig_events, [signal.SIGCHLD, signal.SIGINT,
+                                            signal.SIGTERM])
+
   def testSchedulerCancel(self):
     handle = self.mainloop.scheduler.enter(0.1, 1, self._SendSig,
                                            [signal.SIGTERM])