diff --git a/Makefile.am b/Makefile.am
index 103975faa..75106ac71 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1424,6 +1424,7 @@ endif
 if ENABLE_INOTIFY
 noinst_PROGRAMS += test/run_inotify
 test_run_inotify_SOURCES = test/run_inotify.cxx \
+	test/ShutdownHandler.cxx test/ShutdownHandler.hxx \
 	src/Log.cxx \
 	src/InotifyDomain.cxx \
 	src/InotifySource.cxx
diff --git a/test/ShutdownHandler.cxx b/test/ShutdownHandler.cxx
new file mode 100644
index 000000000..341a92939
--- /dev/null
+++ b/test/ShutdownHandler.cxx
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2003-2011 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+#include "ShutdownHandler.hxx"
+
+#ifndef WIN32
+#include "event/SignalMonitor.hxx"
+#include "event/Loop.hxx"
+
+#include <signal.h>
+
+static void
+HandleShutdownSignal()
+{
+	SignalMonitorGetEventLoop().Break();
+}
+
+ShutdownHandler::ShutdownHandler(EventLoop &loop)
+{
+	SignalMonitorInit(loop);
+
+	SignalMonitorRegister(SIGINT, HandleShutdownSignal);
+	SignalMonitorRegister(SIGTERM, HandleShutdownSignal);
+}
+
+ShutdownHandler::~ShutdownHandler()
+{
+	SignalMonitorFinish();
+}
+
+#endif
diff --git a/test/ShutdownHandler.hxx b/test/ShutdownHandler.hxx
new file mode 100644
index 000000000..0a84ed63f
--- /dev/null
+++ b/test/ShutdownHandler.hxx
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2003-2013 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPD_TEST_SHUTDOWN_HANDLER_HXX
+#define MPD_TEST_SHUTDOWN_HANDLER_HXX
+
+class EventLoop;
+
+class ShutdownHandler {
+public:
+	ShutdownHandler(EventLoop &loop);
+	~ShutdownHandler();
+};
+
+#ifdef WIN32
+ShutdownHandler::ShutdownHandler(EventLoop &loop) {}
+ShutdownHandler::~ShutdownHandler() {}
+#endif
+
+#endif
diff --git a/test/run_inotify.cxx b/test/run_inotify.cxx
index 6796480e5..fb614432e 100644
--- a/test/run_inotify.cxx
+++ b/test/run_inotify.cxx
@@ -18,6 +18,7 @@
  */
 
 #include "config.h"
+#include "ShutdownHandler.hxx"
 #include "InotifySource.hxx"
 #include "event/Loop.hxx"
 #include "util/Error.hxx"
@@ -26,15 +27,6 @@
 #include <glib.h>
 
 #include <sys/inotify.h>
-#include <signal.h>
-
-static EventLoop *event_loop;
-
-static void
-exit_signal_handler(gcc_unused int signum)
-{
-	event_loop->Break();
-}
 
 enum {
 	IN_MASK = IN_ATTRIB|IN_CLOSE_WRITE|IN_CREATE|IN_DELETE|IN_DELETE_SELF
@@ -62,10 +54,11 @@ int main(int argc, char **argv)
 
 	path = argv[1];
 
-	event_loop = new EventLoop(EventLoop::Default());
+	EventLoop event_loop((EventLoop::Default()));
+	const ShutdownHandler shutdown_handler(event_loop);
 
 	Error error;
-	InotifySource *source = InotifySource::Create(*event_loop,
+	InotifySource *source = InotifySource::Create(event_loop,
 						      my_inotify_callback,
 						      nullptr, error);
 	if (source == NULL) {
@@ -80,15 +73,7 @@ int main(int argc, char **argv)
 		return 2;
 	}
 
-	struct sigaction sa;
-	sa.sa_flags = 0;
-	sigemptyset(&sa.sa_mask);
-	sa.sa_handler = exit_signal_handler;
-	sigaction(SIGINT, &sa, NULL);
-	sigaction(SIGTERM, &sa, NULL);
-
-	event_loop->Run();
+	event_loop.Run();
 
 	delete source;
-	delete event_loop;
 }