diff --git a/src/knot/main.c b/src/knot/main.c
index 963b0d8dc696cdf6a69302d960262061e25d896c..685d5f247658f5a795ca85e7349262c189d2372d 100644
--- a/src/knot/main.c
+++ b/src/knot/main.c
@@ -128,6 +128,15 @@ int main(int argc, char **argv)
 		case 'c':
 			config_fn = strdup(optarg);
 			break;
+#ifdef INTEGRITY_CHECK
+		case 'z':
+			if (optarg[strlen(optarg) - 1] != '.') {
+				zone = strcdup(optarg, ".");
+			} else {
+				zone = strdup(optarg);
+			}
+			break;
+#endif /* INTEGRITY_CHECK */
 		case 'd':
 			daemonize = 1;
 			break;
@@ -142,15 +151,6 @@ int main(int argc, char **argv)
 			free(config_fn);
 			help();
 			return 0;
-#ifdef INTEGRITY_CHECK
-		case 'z':
-			if (optarg[strlen(optarg) - 1] != '.') {
-				zone = strcdup(optarg, ".");
-			} else {
-				zone = strdup(optarg);
-			}
-			break;
-#endif /* INTEGRITY_CHECK */
 		default:
 			free(config_fn);
 			help();
@@ -319,6 +319,7 @@ int main(int argc, char **argv)
 		sigaction(SIGINT,  &sa, NULL);
 		sigaction(SIGTERM, &sa, NULL);
 		sigaction(SIGHUP,  &sa, NULL);
+		sigaction(SIGPIPE, &sa, NULL);
 #ifdef INTEGRITY_CHECK
 		sigaction(SIGUSR1, &sa, NULL);
 #endif /* INTEGRITY_CHECK */
@@ -428,6 +429,10 @@ int main(int argc, char **argv)
 		log_server_warning("Failed to remove PID file.\n");
 	do_cleanup(server, config_fn, pidf);
 
+#ifdef INTEGRITY_CHECK
+	free(zone);
+#endif /* INTEGRITY_CHECK */
+
 	if (!daemonize) {
 		fflush(stdout);
 		fflush(stderr);