diff --git a/epicardium/ble/filetransfer.c b/epicardium/ble/filetransfer.c
index 2e46d47faf52144e0edeaa7a5ca9063ff31ee102..875b070cbf12fb78e084b500b0cdfc9585bac2f5 100644
--- a/epicardium/ble/filetransfer.c
+++ b/epicardium/ble/filetransfer.c
@@ -237,8 +237,11 @@ static int bleFileCreateOrOpen(char *filepath)
 {
 	char *path;
 	char *fileName = NULL;
+	char filecreate[100];
 	int ret;
 
+	filecreate[0] = 0;
+
 	while (true) {
 		path     = strtok(filepath, "/");
 		filepath = NULL;
@@ -250,14 +253,23 @@ static int bleFileCreateOrOpen(char *filepath)
 			return -EINVAL;
 
 		if (fileName) {
-			ret = epic_file_mkdir(fileName);
-			if (ret)
-				return ret;
+			ret = epic_file_stat(filecreate, NULL);
+			if (ret) {
+				ret = epic_file_mkdir(filecreate);
+				if (ret) {
+					printf("mkdir failed: %s, ret: %i\n",
+					       filecreate,
+					       ret);
+					return ret;
+				}
+			}
 		}
 		fileName = path;
+		strncat(filecreate, "/", sizeof(filecreate) - 1);
+		strncat(filecreate, path, sizeof(filecreate) - 1);
 	}
 
-	return epic_file_open(filepath, "w");
+	return epic_file_open(filecreate, "w");
 }
 
 static uint8_t bleFileOpen(dmConnId_t connId, uint8_t *pValue, uint16_t len)