Index: uspace/app/bdsh/compl.c
===================================================================
--- uspace/app/bdsh/compl.c	(revision c56a3ebdb2a5624e5822b0cbe6bb93a15f81f7d3)
+++ uspace/app/bdsh/compl.c	(revision 1c481ee1a24160bdb7b80e6d69f853de47fc639c)
@@ -40,4 +40,5 @@
 #include "exec.h"
 #include "tok.h"
+#include "util.h"
 
 static errno_t compl_init(wchar_t *text, size_t pos, size_t *cstart, void **state);
@@ -209,6 +210,4 @@
 		}
 		*cstart += rpath_sep + 1 - prefix;
-		free(prefix);
-		prefix = NULL;
 
 		cs->path_list = malloc(sizeof(char *) * 2);
@@ -217,5 +216,16 @@
 			goto error;
 		}
-		cs->path_list[0] = dirname;
+
+		if (!is_path(prefix) && cs->is_command) {
+			cs->path_list[0] = malloc(sizeof(char) * PATH_MAX);
+			int ret = snprintf(cs->path_list[0], PATH_MAX, "%s/%s", search_dir[0], dirname);
+			if (ret < 0 || ret >= PATH_MAX) {
+				retval = ENOMEM;
+				goto error;
+			}
+		} else {
+			cs->path_list[0] = dirname;
+		}
+
 		cs->path_list[1] = NULL;
 		/*
Index: uspace/app/bdsh/exec.c
===================================================================
--- uspace/app/bdsh/exec.c	(revision c56a3ebdb2a5624e5822b0cbe6bb93a15f81f7d3)
+++ uspace/app/bdsh/exec.c	(revision 1c481ee1a24160bdb7b80e6d69f853de47fc639c)
@@ -72,6 +72,8 @@
 {
 	/* The user has specified a full or relative path, just give it back. */
-	if (-1 != try_access(cmd)) {
-		return str_dup(cmd);
+	if (is_path(cmd)) {
+		if (-1 != try_access(cmd)) {
+			return str_dup(cmd);
+		}
 	}
 
Index: uspace/app/bdsh/util.c
===================================================================
--- uspace/app/bdsh/util.c	(revision c56a3ebdb2a5624e5822b0cbe6bb93a15f81f7d3)
+++ uspace/app/bdsh/util.c	(revision 1c481ee1a24160bdb7b80e6d69f853de47fc639c)
@@ -74,2 +74,15 @@
 	return 0;
 }
+
+/*
+ * Returns true if the string is a relative or an absolute path
+ */
+bool is_path(const char *cmd)
+{
+
+	bool ret = str_lcmp(cmd, "/", 1) == 0;
+	ret = ret || str_lcmp(cmd, "./", 2) == 0;
+	ret = ret || str_lcmp(cmd, "../", 3) == 0;
+
+	return ret;
+}
Index: uspace/app/bdsh/util.h
===================================================================
--- uspace/app/bdsh/util.h	(revision c56a3ebdb2a5624e5822b0cbe6bb93a15f81f7d3)
+++ uspace/app/bdsh/util.h	(revision 1c481ee1a24160bdb7b80e6d69f853de47fc639c)
@@ -31,8 +31,10 @@
 
 #include "scli.h"
+#include <stdbool.h>
 
 /* Utility functions */
 extern unsigned int cli_count_args(char **);
 extern unsigned int cli_set_prompt(cliuser_t *usr);
+extern bool is_path(const char *cmd);
 
 #endif
