diff --git a/src/lib/core/popen.c b/src/lib/core/popen.c
index 3ba1e2a48c2b4b0262780f820291ed69a1c3633c..089c848301d27ebc370edcc4f236b95eec9ab5c8 100644
--- a/src/lib/core/popen.c
+++ b/src/lib/core/popen.c
@@ -154,7 +154,7 @@ handle_new(struct popen_opts *opts)
 	for (i = 0; i < opts->nr_argv; i++) {
 		if (opts->argv[i] == NULL)
 			continue;
-		size += strlen(opts->argv[i]) + 1;
+		size += strlen(opts->argv[i]) + 3;
 	}
 
 	handle = malloc(sizeof(*handle) + size);
@@ -168,8 +168,13 @@ handle_new(struct popen_opts *opts)
 	for (i = 0; i < opts->nr_argv-1; i++) {
 		if (opts->argv[i] == NULL)
 			continue;
+		bool is_multiword = strchr(opts->argv[i], ' ') != NULL;
+		if (is_multiword)
+			*pos++ = '\'';
 		strcpy(pos, opts->argv[i]);
 		pos += strlen(opts->argv[i]);
+		if (is_multiword)
+			*pos++ = '\'';
 		*pos++ = ' ';
 	}
 	pos[-1] = '\0';