diff --git a/src/main.c b/src/main.c
index de8c8a3301531649d803fbcf7a2acd30d775bd4f..754fc397acc927f2fa454327381f84d1a86fa996 100644
--- a/src/main.c
+++ b/src/main.c
@@ -30,6 +30,7 @@
 #include "delete.h"
 #include "browser.h"
 #include "help.h"
+#include "path.h"
 
 #include <stdlib.h>
 #include <string.h>
@@ -80,14 +81,11 @@ int input_handle(int wait) {
 
 
 /* parse command line */
-void argv_parse(int argc, char **argv, char *dir) {
+char *argv_parse(int argc, char **argv) {
   int i, j, len;
+  char *dir = NULL;
 
- /* load defaults */
-  memset(dir, 0, PATH_MAX);
-  getcwd(dir, PATH_MAX);
-
- /* read from commandline */
+  /* read from commandline */
   for(i=1; i<argc; i++) {
     if(argv[i][0] == '-') {
      /* flags requiring arguments */
@@ -128,24 +126,23 @@ void argv_parse(int argc, char **argv, char *dir) {
             printf("Unknown option: -%c\nSee '%s -h' for more information.\n", argv[i][j], argv[0]);
             exit(1);
         }
-    } else {
-      strncpy(dir, argv[i], PATH_MAX);
-      if(dir[PATH_MAX - 1] != 0) {
-        printf("Error: path length exceeds PATH_MAX\n");
-        exit(1);
-      }
-      dir[PATH_MAX - 1] = 0;
-    }
+    } else
+      dir = argv[i];
   }
+  return dir;
 }
 
 
 /* main program */
 int main(int argc, char **argv) {
-  char dir[PATH_MAX];
-  argv_parse(argc, argv, dir);
+  char *dir;
+
+  if((dir = argv_parse(argc, argv)) == NULL)
+    dir = path_real(".");
 
   calc_init(dir, NULL);
+  if(dir < argv[0] || dir > argv[argc])
+    free(dir);
 
   initscr();
   cbreak();