diff --git a/include/commands.h b/include/commands.h
index 0afab8b78962ddae6d1e74b1c6561fd533965732..20e9287ca88a7f3cc986b78d1ff4736d7b7c75d1 100644
--- a/include/commands.h
+++ b/include/commands.h
@@ -1,6 +1,12 @@
 #ifndef MYSH_COMMANDS_H_
 #define MYSH_COMMANDS_H_
 
+struct single_command
+{
+  int argc;
+  char** argv;
+};
+
 /**
   do_cd(argc, argv)
 
diff --git a/include/utils.h b/include/utils.h
index a84b441cdf2d4b14b2463dad22055dec0165f270..6076d973189b24c1c8f916dd70b324acce9ff5c8 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -1,7 +1,13 @@
 #ifndef MYSH_UTILS_H_
 #define MYSH_UTILS_H_
 
+#include "commands.h"
+
 void mysh_parse_command(const char* command,
-                        int *argc, char*** argv);
+                        int* n_commands,
+                        struct single_command** commands);
+
+void parse_single_command(const char* command,
+                          int *argc, char*** argv);
 
 #endif // MYSH_UTILS_H_
diff --git a/src/utils.c b/src/utils.c
index 1785ed8e1838a79eb205328214787b7f90b3911f..1d1ad39d55729a9abda7cd82d26ce69f416aa9f0 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -4,15 +4,37 @@
 #include <string.h>
 
 void mysh_parse_command(const char* command,
-                        int *argc, char*** argv)
+                        int* n_commands,
+                        struct single_command** commands)
+{
+  const int kMaxPipes = 512;
+  *commands = (struct single_command*)malloc(sizeof(struct single_command) * kMaxPipes);
+
+  char buf[4096];
+  strcpy(buf, command);
+
+  char *saveptr = NULL;
+  char *tok = strtok_r(buf, "|", &saveptr);
+
+  int ti = 0;
+
+  while (tok != NULL) {
+  }
+
+  *n_commands = ti;
+}
+
+void parse_single_command(const char* command,
+                          int *argc, char*** argv)
 {
   const int kMaxArgc = 512;
-  *argv = (char**)malloc(kMaxArgc);
+  *argv = (char**)malloc(kMaxArgc * sizeof(char*));
 
   char buf[4096];
   strcpy(buf, command);
 
-  char *tok = strtok(buf, " \n\t");
+  char *saveptr = NULL;
+  char *tok = strtok_r(buf, " \n\t", &saveptr);
 
   int ti = 0;
 
@@ -22,7 +44,7 @@ void mysh_parse_command(const char* command,
 
     ++ti;
 
-    tok = strtok(NULL, " \n\t");
+    tok = strtok_r(NULL, " \n\t", &saveptr);
   }
 
   *argc = ti;