diff --git a/app/build.gradle b/app/build.gradle
index 8789739..e8062ef 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,8 +20,6 @@
         applicationId "masquerade.substratum"
         minSdkVersion 25
         targetSdkVersion 25
-        versionCode 23
-        versionName "twenty three"
     }
 
     defaultConfig {
diff --git a/app/src/main/java/masquerade/substratum/services/JobService.java b/app/src/main/java/masquerade/substratum/services/JobService.java
index 9e6ef3f..7ce5ebd 100644
--- a/app/src/main/java/masquerade/substratum/services/JobService.java
+++ b/app/src/main/java/masquerade/substratum/services/JobService.java
@@ -103,6 +103,7 @@
     public static final String COMMAND_VALUE_MOVE = "move";
     public static final String COMMAND_VALUE_DELETE = "delete";
     public static final String COMMAND_VALUE_PROFILE = "profile";
+    public static final String COMMAND_VALUE_MKDIR = "mkdir";
     private static final String TAG = JobService.class.getSimpleName();
     private static final boolean DEBUG = true;
     private static final String MASQUERADE_TOKEN = "masquerade_token";
@@ -227,6 +228,9 @@
             String source = intent.getStringExtra(SOURCE_FILE_KEY);
             String destination = intent.getStringExtra(DESTINATION_FILE_KEY);
             jobs_to_add.add(new MoveJob(source, destination));
+        } else if (TextUtils.equals(command, COMMAND_VALUE_MKDIR)) {
+            String destination = intent.getStringExtra(DESTINATION_FILE_KEY);
+            jobs_to_add.add(new MkdirJob(destination));
         } else if (TextUtils.equals(command, COMMAND_VALUE_DELETE)) {
             String dir = intent.getStringExtra(SOURCE_FILE_KEY);
             if (intent.getBooleanExtra(WITH_DELETE_PARENT_KEY, true)) {
@@ -656,6 +660,7 @@
     }
 
     private void copyBootAnimation(String fileName) {
+        IOUtils.createThemeDirIfNotExists();
         try {
             clearBootAnimation();
             File source = new File(fileName);
@@ -1098,6 +1103,24 @@
         }
     }
 
+    private class MkdirJob implements Runnable {
+        String mDestination;
+
+        public MkdirJob(String destination) {
+            mDestination = destination;
+        }
+
+        @Override
+        public void run() {
+            log("MkdirJob - creating \'" + mDestination + "\'...");
+            IOUtils.createDirIfNotExists(mDestination);
+
+            Message message = mJobHandler.obtainMessage(JobHandler.MESSAGE_DEQUEUE,
+                    MkdirJob.this);
+            mJobHandler.sendMessage(message);
+        }
+    }
+
     private class DeleteJob implements Runnable {
         String mFileOrDirectory;
 
diff --git a/app/src/main/java/masquerade/substratum/utils/IOUtils.java b/app/src/main/java/masquerade/substratum/utils/IOUtils.java
index 5c9d5c5..acbb0fc 100644
--- a/app/src/main/java/masquerade/substratum/utils/IOUtils.java
+++ b/app/src/main/java/masquerade/substratum/utils/IOUtils.java
@@ -56,7 +56,7 @@
         return dir.exists() && dir.isDirectory();
     }
 
-    private static void createDirIfNotExists(String dirPath) {
+    public static void createDirIfNotExists(String dirPath) {
         if (!dirExists(dirPath)) {
             File dir = new File(dirPath);
             if (dir.mkdir()) {
@@ -66,6 +66,10 @@
         }
     }
 
+    public static void createThemeDirIfNotExists() {
+        createDirIfNotExists(SYSTEM_THEME_PATH);
+    }
+
     public static void createFontDirIfNotExists() {
         createDirIfNotExists(SYSTEM_THEME_FONT_PATH);
     }
@@ -177,7 +181,8 @@
             BufferedOutputStream out = new BufferedOutputStream(dest);
             byte[] buff = new byte[32 * 1024];
             int len;
-            while ((len = in.read(buff)) > 0) {
+            // Let's bulletproof this a bit
+            while ((len = in.read(buff)) != -1) {
                 out.write(buff, 0, len);
             }
             in.close();
