diff --git a/arm/kvm.c b/arm/kvm.c
index d0e4a20..d795c5f 100644
--- a/arm/kvm.c
+++ b/arm/kvm.c
@@ -54,7 +54,7 @@ void kvm__arch_read_term(struct kvm *kvm)
 	}
 }
 
-void kvm__arch_set_cmdline(char *cmdline, bool video)
+void kvm__arch_set_cmdline(char *cmdline, bool video, bool earlyprintk)
 {
 }
 
diff --git a/builtin-run.c b/builtin-run.c
index 1ee75ad..d63fe4c 100644
--- a/builtin-run.c
+++ b/builtin-run.c
@@ -591,7 +591,8 @@ static struct kvm *kvm_cmd_run_init(int argc, const char **argv)
                 kvm->cfg.network = DEFAULT_NETWORK;
 
 	memset(real_cmdline, 0, sizeof(real_cmdline));
-	kvm__arch_set_cmdline(real_cmdline, kvm->cfg.vnc || kvm->cfg.sdl || kvm->cfg.gtk);
+	// rkt: do earlyprintk only when do_debug_print
+	kvm__arch_set_cmdline(real_cmdline, kvm->cfg.vnc || kvm->cfg.sdl || kvm->cfg.gtk, do_debug_print);
 
 	if (strlen(real_cmdline) > 0)
 		strcat(real_cmdline, " ");
@@ -640,10 +641,13 @@ static struct kvm *kvm_cmd_run_init(int argc, const char **argv)
 
 	kvm->cfg.real_cmdline = real_cmdline;
 
-	printf("  # %s run -k %s -m %Lu -c %d --name %s\n", KVM_BINARY_NAME,
-		kvm->cfg.kernel_filename,
-		(unsigned long long)kvm->cfg.ram_size / 1024 / 1024,
-		kvm->cfg.nrcpus, kvm->cfg.guest_name);
+	// rkt: debug print only when asked 
+	if (do_debug_print) {
+		printf("  # %s run -k %s -m %Lu -c %d --name %s\n", KVM_BINARY_NAME,
+			kvm->cfg.kernel_filename,
+			(unsigned long long)kvm->cfg.ram_size / 1024 / 1024,
+			kvm->cfg.nrcpus, kvm->cfg.guest_name);
+	}
 
 	if (init_list__init(kvm) < 0)
 		die ("Initialisation failed");
diff --git a/include/kvm/kvm.h b/include/kvm/kvm.h
index 37155db..70fb099 100644
--- a/include/kvm/kvm.h
+++ b/include/kvm/kvm.h
@@ -100,7 +100,7 @@ int kvm__get_sock_by_instance(const char *name);
 int kvm__enumerate_instances(int (*callback)(const char *name, int pid));
 void kvm__remove_socket(const char *name);
 
-void kvm__arch_set_cmdline(char *cmdline, bool video);
+void kvm__arch_set_cmdline(char *cmdline, bool video, bool earlyprintk);
 void kvm__arch_init(struct kvm *kvm, const char *hugetlbfs_path, u64 ram_size);
 void kvm__arch_delete_ram(struct kvm *kvm);
 int kvm__arch_setup_firmware(struct kvm *kvm);
diff --git a/mips/kvm.c b/mips/kvm.c
index 1925f38..028b0c3 100644
--- a/mips/kvm.c
+++ b/mips/kvm.c
@@ -51,7 +51,7 @@ void kvm__arch_delete_ram(struct kvm *kvm)
 	munmap(kvm->ram_start, kvm->ram_size);
 }
 
-void kvm__arch_set_cmdline(char *cmdline, bool video)
+void kvm__arch_set_cmdline(char *cmdline, bool video, bool earlyprintk)
 {
 
 }
diff --git a/powerpc/kvm.c b/powerpc/kvm.c
index b4c3310..e6c78d8 100644
--- a/powerpc/kvm.c
+++ b/powerpc/kvm.c
@@ -84,7 +84,7 @@ void kvm__init_ram(struct kvm *kvm)
 	kvm__register_mem(kvm, phys_start, phys_size, host_mem);
 }
 
-void kvm__arch_set_cmdline(char *cmdline, bool video)
+void kvm__arch_set_cmdline(char *cmdline, bool video, bool earlyprintk)
 {
 	/* We don't need anything unusual in here. */
 }
diff --git a/x86/kvm.c b/x86/kvm.c
index 512ad67..3cd783d 100644
--- a/x86/kvm.c
+++ b/x86/kvm.c
@@ -118,14 +118,19 @@ void kvm__init_ram(struct kvm *kvm)
 }
 
 /* Arch-specific commandline setup */
-void kvm__arch_set_cmdline(char *cmdline, bool video)
+void kvm__arch_set_cmdline(char *cmdline, bool video, bool earlyprintk)
 {
 	strcpy(cmdline, "noapic noacpi pci=conf1 reboot=k panic=1 i8042.direct=1 "
 				"i8042.dumbkbd=1 i8042.nopnp=1");
 	if (video)
 		strcat(cmdline, " video=vesafb console=tty0");
-	else
-		strcat(cmdline, " console=ttyS0 earlyprintk=serial i8042.noaux=1");
+	else {
+		// earlyprintk only when asked
+		strcat(cmdline, " console=ttyS0 i8042.noaux=1");
+		if (earlyprintk)
+			strcat(cmdline, " earlyprintk=serial");
+	}
+
 }
 
 /* Architecture-specific KVM init */
