diff --git a/duck/duck.c b/duck/duck.c
index 8c8f8565c03ee7e3a7a77467ccd5010e181bc5f4..c72638c9cdbf33a169c6272feb95a4f75f24f2a9 100644
--- a/duck/duck.c
+++ b/duck/duck.c
@@ -94,9 +94,8 @@ int main(int argc, char **argv)
 	  }
      }
      if (read_mode) {
-	  while (1) {
-	       char c;
-	       if (read(duckfd, &c, 1) != 1) err(
+	  read_duck_to_stdout();
+     }
      close_duck();
      return 0;
 }
diff --git a/libduck/libduck.c b/libduck/libduck.c
index 8fdee78b8e87e585c6b62b46787abe7a3393b6de..cb4e3ece9d11d8cc2db3e1d63050024e54c7ff64 100644
--- a/libduck/libduck.c
+++ b/libduck/libduck.c
@@ -88,6 +88,15 @@ int duck_set_velocity(int motor, int deg_per_sec, int ms)
      return duck_printf("v %d %d %d\n", motor, deg_per_sec, ms);
 }
 
+void read_duck_to_stdout(void)
+{
+     while (1) {
+	  char c;
+	  if (read(duckfd, &c, 1) != 1) err(EXIT_FAILURE, "Read failed\n");
+	  putchar(c);
+     }
+}
+
 void close_duck(void)
 {
      if (duck_debug_mode) {
diff --git a/libduck/libduck.h b/libduck/libduck.h
index bea82bd7cba1534fd1c65d0736aaa2bc590d199e..68e17cbc11998d5a582fb4c3b132529114e33a5a 100644
--- a/libduck/libduck.h
+++ b/libduck/libduck.h
@@ -16,6 +16,7 @@ void configure_duck(void);
 int duck_set_position(int motor, int angle);
 int duck_delay(int ms);
 int duck_set_velocity(int motor, int deg_per_sec, int ms);
+void read_duck_to_stdout(void);
 void close_duck(void);
 
 #endif /* _LIBDUCK_H */