diff --git a/src/main.c b/src/main.c
index 77e9edc866ae06c6401ac9f0e556082422754274..8f6284137523dc1d027c141285e7a896479083fc 100644
--- a/src/main.c
+++ b/src/main.c
@@ -28,18 +28,18 @@
 /* check ncdu.h what these are for */
 struct dir *dat;
 int winrows, wincols;
-char sdir[PATH_MAX];
 int sflags, bflags, sdelay, bgraph;
 int subwinc, subwinr;
+struct state pstate;
 
 
 /* parse command line */
-void parseCli(int argc, char **argv) {
+void argv_parse(int argc, char **argv, char *dir) {
   int i, j;
 
  /* load defaults */
-  memset(sdir, 0, PATH_MAX);
-  getcwd(sdir, PATH_MAX);
+  memset(dir, 0, PATH_MAX);
+  getcwd(dir, PATH_MAX);
   sflags = 0;
   sdelay = 100;
   bflags = BF_SIZE | BF_DESC;
@@ -85,9 +85,9 @@ void parseCli(int argc, char **argv) {
             exit(1);
         }
     } else {
-      sdir[PATH_MAX - 1] = 0;
-      strncpy(sdir, argv[i], PATH_MAX);
-      if(sdir[PATH_MAX - 1] != 0) {
+      dir[PATH_MAX - 1] = 0;
+      strncpy(dir, argv[i], PATH_MAX);
+      if(dir[PATH_MAX - 1] != 0) {
         printf("Error: path length exceeds PATH_MAX\n");
         exit(1);
       }
@@ -100,7 +100,8 @@ void parseCli(int argc, char **argv) {
 int main(int argc, char **argv) {
   dat = NULL;
 
-  parseCli(argc, argv);
+  argv_parse(argc, argv, pstate.calc.root);
+  pstate.st = ST_CALC;
 
   initscr();
   cbreak();
@@ -108,14 +109,14 @@ int main(int argc, char **argv) {
   curs_set(0);
   keypad(stdscr, TRUE);
   ncresize();
-  
-  if((dat = showCalc(sdir)) != NULL)
+
+  if((dat = showCalc(pstate.calc.root)) != NULL)
     showBrowser();
 
   erase();
   refresh();
   endwin();
 
-  return(0);
+  return 0;
 }
 
diff --git a/src/ncdu.h b/src/ncdu.h
index ab6f8d91ca0f47f055e10f867205365db8f5d0f3..f07a446f624651c453afbcd32e3bc9ea0b5531bb 100644
--- a/src/ncdu.h
+++ b/src/ncdu.h
@@ -137,7 +137,10 @@ struct dir {
 
 struct state {
   int st;  /* SC_x */
-  /* TODO: information structs for the states */
+  struct {
+    char root[PATH_MAX];
+  } calc;
+  /* TODO: information structs for the other states */
 };
 
 
@@ -156,6 +159,8 @@ extern char sdir[PATH_MAX];
 extern int sflags, bflags, sdelay, bgraph;
 /* used for creating windows */
 extern int subwinr, subwinc;
+/* program state */
+extern struct state pstate;
 
 
 /*