diff --git a/android/build.gradle b/android/build.gradle
index 75a45e7b94adb91202efe5d2c85922e72e61a510..8d2fc9da206a60294daafdc8229a4cbb06e8bf63 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -111,17 +111,7 @@ tasks.whenTaskAdded { compileTask ->
                         File buildConfigFile = iter.next()
                         String buildConfigContent = buildConfigFile.getText(BUILD_CONFIG_ENCODING)
 
-                        /*
-                        String checksums = "";
-                        rootProject.ext.assetsChecksum.each {  key, value ->
-                            if (checksums.length() > 0) {
-                                checksums = checksums + ", ";
-                            }
-                            checksums = checksums + "\"${key}\", \"${value}\""
-                        }
-                        */
-
-                        buildConfigContent = buildConfigContent.replace(rootProject.ext.assetsChecksumPattern, '\"' + rootProject.ext.assetsChecksum.toString() + '\"')
+                        buildConfigContent = buildConfigContent.replace(rootProject.ext.assetsChecksumPattern, '\"' + getMapConvertedToString(rootProject.ext.assetsChecksum) + '\"')
                         buildConfigFile.write(buildConfigContent, BUILD_CONFIG_ENCODING)
                     }
                 }
diff --git a/android/src/cz/nic/tablexia/android/AndroidLauncher.java b/android/src/cz/nic/tablexia/android/AndroidLauncher.java
index 657703a6146c242090466cecaef483a4d3413347..b384eb2bd640342643ea9c8d5e56bb4e452634ef 100644
--- a/android/src/cz/nic/tablexia/android/AndroidLauncher.java
+++ b/android/src/cz/nic/tablexia/android/AndroidLauncher.java
@@ -21,7 +21,7 @@ public class AndroidLauncher extends AndroidApplication {
 								getResources().getConfiguration().locale,
 								BuildConfig.VERSION_NAME,
 								SQL_CONNECTION_TYPE,
-                                Utility.createChecksumMapFromString(BuildConfig.ASSETS_CHECKSUMS, ":"),
+                                Utility.createChecksumMapFromString(BuildConfig.ASSETS_CHECKSUMS),
 								savedInstanceState == null), config);
 	}
 }
diff --git a/build.gradle b/build.gradle
index a34f0a089afd6898feda305bdf84b39595dba5f4..48a3fdb701a2b5690c2e49c1a90c0b7519ea8312 100644
--- a/build.gradle
+++ b/build.gradle
@@ -68,6 +68,15 @@ def getVersionCodeFromGit() {
     return stdout.toString().trim().toInteger()
 }
 
+def getMapConvertedToString(Map map) {
+    String result = "";
+    map.each { key, value ->
+        if (result.size() > 0) result = result + ","
+        result = result + "$key:$value"
+    }
+    return result;
+}
+
 task zipAssets(type:Zip) {
     outputs.upToDateWhen { false }
 	new File(project(":core").projectDir.absolutePath + "/assets").eachDir() { dir ->
diff --git a/core/src/cz/nic/tablexia/TablexiaStorage.java b/core/src/cz/nic/tablexia/TablexiaStorage.java
index 3ee38a3ba210053eb79ce2331a786d6aa2d71532..addb3f1e3e56d75d26226899eb9f62b1bce8c796 100644
--- a/core/src/cz/nic/tablexia/TablexiaStorage.java
+++ b/core/src/cz/nic/tablexia/TablexiaStorage.java
@@ -1,13 +1,13 @@
 package cz.nic.tablexia;
 
-import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.files.FileHandle;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.SQLException;
 import java.sql.Statement;
 
-import cz.nic.tablexia.loader.TablexiaAssetManager;
+import cz.nic.tablexia.loader.TablexiaAbstractFileManager;
 import cz.nic.tablexia.util.Log;
 
 /**
@@ -15,8 +15,8 @@ import cz.nic.tablexia.util.Log;
  */
 public class TablexiaStorage {
 
-    public static final String DATABASE_DIRECTORY = Gdx.files.getExternalStoragePath() + TablexiaAssetManager.StorageType.EXTERNAL.getStoragePath();
-    public static final String DATABASE_NAME = "tablexia.db";
+    public static final FileHandle  DATABASE_DIRECTORY  = TablexiaAbstractFileManager.getFileStoragePathFileHandle(TablexiaAbstractFileManager.DataStorageType.EXTERNAL);
+    public static final String      DATABASE_NAME       = "tablexia.db";
 
     private static  TablexiaStorage instance = null;
     private         Connection      connection = null;
@@ -27,9 +27,12 @@ public class TablexiaStorage {
 
     static void init(Tablexia.SQLConnectionType connectionType) {
         if (instance == null) {
+            if (!DATABASE_DIRECTORY.exists()) {
+                DATABASE_DIRECTORY.mkdirs();
+            }
             try {
                 Class.forName(connectionType.getDriver());
-                Connection connection = DriverManager.getConnection(connectionType.getConnectionString() + DATABASE_DIRECTORY + "/" + DATABASE_NAME);
+                Connection connection = DriverManager.getConnection(connectionType.getConnectionString() + DATABASE_DIRECTORY.file().getAbsolutePath() + "/" + DATABASE_NAME);
                 instance = new TablexiaStorage(connection);
             } catch (ClassNotFoundException e) {
                 Log.err(TablexiaStorage.class, "Cannot find class for database driver!", e);
diff --git a/core/src/cz/nic/tablexia/loader/TablexiaAbstractFileManager.java b/core/src/cz/nic/tablexia/loader/TablexiaAbstractFileManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..fadf174d4164c6d2609d3e050788083c8d047407
--- /dev/null
+++ b/core/src/cz/nic/tablexia/loader/TablexiaAbstractFileManager.java
@@ -0,0 +1,124 @@
+package cz.nic.tablexia.loader;
+
+import com.badlogic.gdx.assets.AssetManager;
+import com.badlogic.gdx.assets.loaders.FileHandleResolver;
+import com.badlogic.gdx.assets.loaders.resolvers.ExternalFileHandleResolver;
+import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver;
+import com.badlogic.gdx.files.FileHandle;
+
+import cz.nic.tablexia.util.Log;
+
+public abstract class TablexiaAbstractFileManager extends AssetManager {
+
+    public interface StorageType {
+        String getStoragePath();
+        FileHandleResolver getResolver();
+    }
+
+    public enum RootStorageType implements StorageType {
+
+        INTERNAL("", new InternalFileHandleResolver()),
+        EXTERNAL(RootStorageType.TABLEXIA_DIRECTORY, new ExternalFileHandleResolver());
+
+        public static final String TABLEXIA_DIRECTORY = ".tablexia/";
+
+        private String storagePath;
+        private FileHandleResolver resolver;
+
+        RootStorageType(String storagePath, FileHandleResolver resolver) {
+            this.storagePath = storagePath;
+            this.resolver = resolver;
+        }
+
+        public String getStoragePath() {
+            return storagePath;
+        }
+
+        public FileHandleResolver getResolver() {
+            return resolver;
+        }
+    }
+
+    public enum AssetsStorageType implements StorageType {
+
+        INTERNAL(RootStorageType.INTERNAL, ""),
+        EXTERNAL(RootStorageType.EXTERNAL, AssetsStorageType.ASSETS_DIRECTORY);
+
+        public static final String ASSETS_DIRECTORY = "assets/";
+
+        private String storagePath;
+        private FileHandleResolver resolver;
+
+        AssetsStorageType(RootStorageType rootStorageType, String assetsPath) {
+            this.storagePath = rootStorageType.getStoragePath() + assetsPath;
+            this.resolver = rootStorageType.getResolver();
+        }
+
+        public String getStoragePath() {
+            return storagePath;
+        }
+
+        public FileHandleResolver getResolver() {
+            return resolver;
+        }
+    }
+
+    public enum DataStorageType implements StorageType {
+
+        INTERNAL(RootStorageType.INTERNAL, DataStorageType.DATA_DIRECTORY),
+        EXTERNAL(RootStorageType.EXTERNAL, DataStorageType.DATA_DIRECTORY);
+
+        public static final String DATA_DIRECTORY = "data/";
+
+        private String storagePath;
+        private FileHandleResolver resolver;
+
+        DataStorageType(RootStorageType rootStorageType, String assetsPath) {
+            this.storagePath = rootStorageType.getStoragePath() + assetsPath;
+            this.resolver = rootStorageType.getResolver();
+        }
+
+        public String getStoragePath() {
+            return storagePath;
+        }
+
+        public FileHandleResolver getResolver() {
+            return resolver;
+        }
+    }
+
+    public static FileHandle getFileStoragePathFileHandle(StorageType storageType, String additionalPath) {
+        return storageType.getResolver().resolve(storageType.getStoragePath() + additionalPath);
+    }
+
+    public static FileHandle getFileStoragePathFileHandle(StorageType storageType) {
+        return getFileStoragePathFileHandle(storageType, "");
+    }
+
+    public static String getFileStoragePath(StorageType storageType, String additionalPath) {
+        return getFileStoragePathFileHandle(storageType, additionalPath).file().getAbsolutePath();
+    }
+
+    public static String getFileStoragePath(StorageType storageType) {
+        return getFileStoragePathFileHandle(storageType).file().getAbsolutePath();
+    }
+
+    private final StorageType storageType;
+
+    public TablexiaAbstractFileManager(StorageType storageType) {
+        super(storageType.getResolver());
+        this.storageType = storageType;
+    }
+
+    public <T> void loadAsset(String assetFileName, Class<T> clazz) {
+        if (assetFileName != null) {
+            load(storageType.getStoragePath() + assetFileName, clazz);
+        } else {
+            Log.err(getClass(), "Asset file for name: " + assetFileName + " was not found!");
+        }
+    }
+
+    public <T> T getAsset(String assetName, Class<T> clazz) {
+        return get(storageType.getStoragePath() + assetName, clazz);
+    }
+}
diff --git a/core/src/cz/nic/tablexia/loader/TablexiaAssetManager.java b/core/src/cz/nic/tablexia/loader/TablexiaAssetManager.java
deleted file mode 100644
index 82f56fe1feb1f1a486b1ed7f866e01b62918ca0b..0000000000000000000000000000000000000000
--- a/core/src/cz/nic/tablexia/loader/TablexiaAssetManager.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package cz.nic.tablexia.loader;
-
-import com.badlogic.gdx.assets.AssetManager;
-import com.badlogic.gdx.assets.loaders.FileHandleResolver;
-import com.badlogic.gdx.assets.loaders.resolvers.ExternalFileHandleResolver;
-import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver;
-
-import cz.nic.tablexia.util.Log;
-
-public class TablexiaAssetManager extends AssetManager {
-
-    public enum StorageType {
-
-        INTERNAL("", new InternalFileHandleResolver()),
-        EXTERNAL(".tablexia/", new ExternalFileHandleResolver());
-
-        private String storagePath;
-        private FileHandleResolver resolver;
-
-        StorageType(String storagePath, FileHandleResolver resolver) {
-            this.storagePath = storagePath;
-            this.resolver = resolver;
-        }
-
-        public String getStoragePath() {
-            return storagePath;
-        }
-
-        public FileHandleResolver getResolver() {
-            return resolver;
-        }
-    }
-
-    private final StorageType   storageType;
-
-    protected TablexiaAssetManager(StorageType storageType) {
-        super(storageType.getResolver());
-        this.storageType = storageType;
-    }
-
-    public <T> void loadAsset(String assetFileName, Class<T> clazz) {
-        if (assetFileName != null) {
-            load(storageType.getStoragePath() + assetFileName, clazz);
-        } else {
-            Log.err(getClass(), "Asset file for name: " + assetFileName + " was not found!");
-        }
-    }
-
-    public <T> T getAsset(String assetName, Class<T> clazz) {
-        return get(storageType.getStoragePath() + assetName, clazz);
-    }
-}
diff --git a/core/src/cz/nic/tablexia/loader/TablexiaSoundManager.java b/core/src/cz/nic/tablexia/loader/TablexiaSoundManager.java
index 595e1a4767a8a7424421b1593eadcd916451ac99..807e00da7bf9124ad7e16146d56eb967a6023707 100644
--- a/core/src/cz/nic/tablexia/loader/TablexiaSoundManager.java
+++ b/core/src/cz/nic/tablexia/loader/TablexiaSoundManager.java
@@ -2,9 +2,13 @@ package cz.nic.tablexia.loader;
 
 import com.badlogic.gdx.audio.Sound;
 
-public class TablexiaSoundManager extends TablexiaAssetManager {
+public class TablexiaSoundManager extends TablexiaAbstractFileManager {
 
-    public TablexiaSoundManager(StorageType storageType) {
+    public TablexiaSoundManager() {
+        super(AssetsStorageType.EXTERNAL);
+    }
+
+    public TablexiaSoundManager(AssetsStorageType storageType) {
         super(storageType);
     }
 
diff --git a/core/src/cz/nic/tablexia/loader/TablexiaTextureManager.java b/core/src/cz/nic/tablexia/loader/TablexiaTextureManager.java
index b1c3952a8e4233c0ed48bb23f3257a3d9da1d4c7..36a26d1fa61008a1e5362a2934ce1bc158cbd8c5 100644
--- a/core/src/cz/nic/tablexia/loader/TablexiaTextureManager.java
+++ b/core/src/cz/nic/tablexia/loader/TablexiaTextureManager.java
@@ -2,9 +2,13 @@ package cz.nic.tablexia.loader;
 
 import com.badlogic.gdx.graphics.Texture;
 
-public class TablexiaTextureManager extends TablexiaAssetManager {
+public class TablexiaTextureManager extends TablexiaAbstractFileManager {
 
-    public TablexiaTextureManager(StorageType storageType) {
+    public TablexiaTextureManager() {
+        super(AssetsStorageType.EXTERNAL);
+    }
+
+    public TablexiaTextureManager(AssetsStorageType storageType) {
         super(storageType);
     }
 
diff --git a/core/src/cz/nic/tablexia/loader/application/ApplicationSoundManager.java b/core/src/cz/nic/tablexia/loader/application/ApplicationSoundManager.java
index 8b1dfbbad1bb42b7e41c36a67527a260a25d15ee..a9529aa38fc0b8d1ad298673aa08a4dc1add05ff 100644
--- a/core/src/cz/nic/tablexia/loader/application/ApplicationSoundManager.java
+++ b/core/src/cz/nic/tablexia/loader/application/ApplicationSoundManager.java
@@ -8,9 +8,7 @@ public class ApplicationSoundManager extends TablexiaSoundManager implements IAp
 
 	private static ApplicationSoundManager instance;
 
-	private ApplicationSoundManager() {
-        super(StorageType.EXTERNAL);
-    }
+	private ApplicationSoundManager() {}
 	
 	public static ApplicationSoundManager getInstance() {
 		if (instance == null) {
@@ -25,11 +23,11 @@ public class ApplicationSoundManager extends TablexiaSoundManager implements IAp
 		instance = null;
 	}
 
-	private	static final String APPLICATION_PATH				= "application/";
+	private	static final String APPLICATION_PATH	= "application/";
 	
-	private static final String MAINMENU_PATH 					= APPLICATION_PATH + "mainmenu/";
-	public 	static final String MAINMENU_OPEN				    = MAINMENU_PATH + "mainmenu_open.mp3";
-    public 	static final String MAINMENU_CLOSE				    = MAINMENU_PATH + "mainmenu_close.mp3";
+	private static final String MAINMENU_PATH 		= APPLICATION_PATH + "mainmenu/";
+	public 	static final String MAINMENU_OPEN		= MAINMENU_PATH + "mainmenu_open.mp3";
+    public 	static final String MAINMENU_CLOSE		= MAINMENU_PATH + "mainmenu_close.mp3";
 
     public void load() {
         loadSound(MAINMENU_OPEN);
diff --git a/core/src/cz/nic/tablexia/loader/application/ApplicationTextureManager.java b/core/src/cz/nic/tablexia/loader/application/ApplicationTextureManager.java
index 4f30cf7e5ec65ae96af6395ed5f0b47d50958e0a..aef903ffbc6518024e8f63f224b813dadb8e7300 100644
--- a/core/src/cz/nic/tablexia/loader/application/ApplicationTextureManager.java
+++ b/core/src/cz/nic/tablexia/loader/application/ApplicationTextureManager.java
@@ -8,9 +8,7 @@ public class ApplicationTextureManager extends TablexiaTextureManager implements
 	
 	private static ApplicationTextureManager instance;
 	
-	private ApplicationTextureManager() {
-        super(StorageType.EXTERNAL);
-    }
+	private ApplicationTextureManager() {}
 	
 	public static ApplicationTextureManager getInstance() {
 		if (instance == null) {
@@ -29,10 +27,10 @@ public class ApplicationTextureManager extends TablexiaTextureManager implements
         public static final String BACKGROUND_WOODEN = "universal/background_wooden.png";
     }
 
-	private	static final String APPLICATION_PATH				= "application/";
+	private	static final String APPLICATION_PATH		= "application/";
 	
-	private static final String MAINMENU_PATH 					= APPLICATION_PATH + "mainmenu/";
-	public 	static final String MAINMENU_BACKGROUND				= MAINMENU_PATH + "background.png";
+	private static final String MAINMENU_PATH 			= APPLICATION_PATH + "mainmenu/";
+	public 	static final String MAINMENU_BACKGROUND		= MAINMENU_PATH + "background.png";
 	
 	public void load() {
         loadTexture(MAINMENU_BACKGROUND);
diff --git a/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java b/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java
index cc64aca516562499fb2f3e314e4e6052e226582e..af23146cf11c00fe5bc4384d682809f9844d93b1 100644
--- a/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java
+++ b/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java
@@ -1,6 +1,5 @@
 package cz.nic.tablexia.loader.zip;
 
-import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.files.FileHandle;
 import com.badlogic.gdx.utils.async.AsyncTask;
 
@@ -17,7 +16,7 @@ import java.util.zip.ZipInputStream;
 
 import cz.nic.tablexia.checksum.Checksum;
 import cz.nic.tablexia.loader.IApplicationLoader;
-import cz.nic.tablexia.loader.TablexiaAssetManager;
+import cz.nic.tablexia.loader.TablexiaAbstractFileManager;
 import cz.nic.tablexia.loader.TablexiaDataManager;
 import cz.nic.tablexia.util.Log;
 
@@ -29,13 +28,13 @@ import cz.nic.tablexia.util.Log;
  */
 public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplicationLoader {
 
-    public static final TablexiaAssetManager.StorageType ZIP_FILES_STORAGE_TYPE = TablexiaAssetManager.StorageType.INTERNAL;
-    public static final String                           ZIP_FILE_EXTENSION     = ".zip";
-    public static final String                           COMMON_ZIP_FILE_NAME   = "common";
+    public static final TablexiaAbstractFileManager.RootStorageType ZIP_FILES_STORAGE_TYPE         = TablexiaAbstractFileManager.RootStorageType.INTERNAL;
+    public static final String                                      ZIP_FILE_EXTENSION             = ".zip";
+    public static final String                                      COMMON_ZIP_FILE_NAME           = "common";
 
     private static class ZipAssetLoaderTask implements AsyncTask<Void> {
 
-		private Locale locale;
+        private Locale locale;
         private Map<String, String> buildChecksum;
 
         public ZipAssetLoaderTask(Locale locale, Map<String, String> buildChecksum) {
@@ -66,14 +65,14 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
             String commonZipFile = COMMON_ZIP_FILE_NAME + ZIP_FILE_EXTENSION;
             String localisedZipFile = language + ZIP_FILE_EXTENSION;
 
-            String extractDestinationDirectory = Gdx.files.getExternalStoragePath() + TablexiaAssetManager.StorageType.EXTERNAL.getStoragePath();
+            String extractDestinationDirectory = TablexiaAbstractFileManager.getFileStoragePath(TablexiaAbstractFileManager.AssetsStorageType.EXTERNAL);
 
             if (buildChecksum == null || !checkAssets(buildChecksum.get(language), extractDestinationDirectory)) {
-                Log.info(getClass(), "Assets check FAILED! --> Extracting new assets");
+                Log.info(getClass(), "Assets check FAILED! --> Extracting new assets to: " + extractDestinationDirectory);
                 unzip(ZIP_FILES_STORAGE_TYPE.getResolver().resolve(ZIP_FILES_STORAGE_TYPE.getStoragePath() + commonZipFile), extractDestinationDirectory);
                 unzip(ZIP_FILES_STORAGE_TYPE.getResolver().resolve(ZIP_FILES_STORAGE_TYPE.getStoragePath() + localisedZipFile), extractDestinationDirectory);
             } else {
-                Log.info(getClass(), "Assets check OK!");
+                Log.info(getClass(), "Assets check OK! --> Continue to loading");
             }
 
 			return null;
diff --git a/core/src/cz/nic/tablexia/screen/AbstractAutoloadTablexiaScreen.java b/core/src/cz/nic/tablexia/screen/AbstractAutoloadTablexiaScreen.java
index d1fb37fcad54e915783ab702bb4f5822732b8feb..f6631fe85f6ca164c29baa0987fb22d914350b34 100644
--- a/core/src/cz/nic/tablexia/screen/AbstractAutoloadTablexiaScreen.java
+++ b/core/src/cz/nic/tablexia/screen/AbstractAutoloadTablexiaScreen.java
@@ -7,7 +7,7 @@ import com.badlogic.gdx.graphics.Texture;
 
 import java.util.List;
 
-import cz.nic.tablexia.loader.TablexiaAssetManager;
+import cz.nic.tablexia.loader.TablexiaAbstractFileManager;
 import cz.nic.tablexia.util.assetmanager.DirectoryAsset;
 
 /**
@@ -30,7 +30,7 @@ public class AbstractAutoloadTablexiaScreen<T> extends AbstractLinearTextureTabl
         initAssets(basePath);
     }
 
-    public AbstractAutoloadTablexiaScreen(boolean hasState, boolean loadAsync, TablexiaAssetManager.StorageType storageType, String basePath) {
+    public AbstractAutoloadTablexiaScreen(boolean hasState, boolean loadAsync, TablexiaAbstractFileManager.AssetsStorageType storageType, String basePath) {
         super(hasState, loadAsync, storageType);
         initAssets(basePath);
     }
@@ -70,6 +70,6 @@ public class AbstractAutoloadTablexiaScreen<T> extends AbstractLinearTextureTabl
     }
 
     public Music getMusic(String musicName) {
-        return Gdx.audio.newMusic(Gdx.files.external(TablexiaAssetManager.StorageType.EXTERNAL.getStoragePath() + musicAssets.get(musicName)));
+        return Gdx.audio.newMusic(Gdx.files.external(TablexiaAbstractFileManager.RootStorageType.EXTERNAL.getStoragePath() + musicAssets.get(musicName)));
     }
 }
diff --git a/core/src/cz/nic/tablexia/screen/AbstractLinearTextureTablexiaScreen.java b/core/src/cz/nic/tablexia/screen/AbstractLinearTextureTablexiaScreen.java
index 10de67bb0cb3964996a45d1e2acf3ff48cd42b48..a2c9eb04422999abdccbe6d294c3b057f02417ff 100644
--- a/core/src/cz/nic/tablexia/screen/AbstractLinearTextureTablexiaScreen.java
+++ b/core/src/cz/nic/tablexia/screen/AbstractLinearTextureTablexiaScreen.java
@@ -2,7 +2,7 @@ package cz.nic.tablexia.screen;
 
 import com.badlogic.gdx.graphics.Texture;
 
-import cz.nic.tablexia.loader.TablexiaAssetManager;
+import cz.nic.tablexia.loader.TablexiaAbstractFileManager;
 
 /**
  * Created by lhoracek on 4/8/15.
@@ -11,7 +11,7 @@ public class AbstractLinearTextureTablexiaScreen<T> extends AbstractTablexiaScre
     public AbstractLinearTextureTablexiaScreen() {
     }
 
-    public AbstractLinearTextureTablexiaScreen(boolean hasState, boolean loadAsync, TablexiaAssetManager.StorageType storageType) {
+    public AbstractLinearTextureTablexiaScreen(boolean hasState, boolean loadAsync, TablexiaAbstractFileManager.AssetsStorageType storageType) {
         super(hasState, loadAsync, storageType);
     }
 
diff --git a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
index 66131df18860ff40f227dd7ffceec1249a6d5168..bb3c4dd566ee7dec085ca0bf9567b1c468331aa8 100644
--- a/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
+++ b/core/src/cz/nic/tablexia/screen/AbstractTablexiaScreen.java
@@ -22,7 +22,7 @@ import cz.nic.tablexia.TablexiaSettings;
 import cz.nic.tablexia.bus.ApplicationBus;
 import cz.nic.tablexia.bus.ApplicationBus.ApplicationEvent;
 import cz.nic.tablexia.bus.event.MainMenuPositionChangedEvent;
-import cz.nic.tablexia.loader.TablexiaAssetManager;
+import cz.nic.tablexia.loader.TablexiaAbstractFileManager;
 import cz.nic.tablexia.loader.TablexiaDataManager;
 import cz.nic.tablexia.loader.TablexiaSoundManager;
 import cz.nic.tablexia.loader.TablexiaTextureManager;
@@ -112,10 +112,10 @@ public abstract class AbstractTablexiaScreen<T> extends ScreenAdapter {
 
 
     public AbstractTablexiaScreen() {
-        this(true, true, TablexiaAssetManager.StorageType.EXTERNAL);
+        this(true, true, TablexiaAbstractFileManager.AssetsStorageType.EXTERNAL);
     }
 	
-	public AbstractTablexiaScreen(boolean hasState, boolean loadAsync, TablexiaAssetManager.StorageType storageType) {
+	public AbstractTablexiaScreen(boolean hasState, boolean loadAsync, TablexiaAbstractFileManager.AssetsStorageType storageType) {
         stage               = prepareStage();
         this.hasState       = hasState;
         this.loadAsync      = loadAsync;
diff --git a/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java b/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java
index fb109569655ae98a669535bc6fd1b073c90b45ff..5ab0182c765b4c1a49feeacaf317eb535a216602 100644
--- a/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java
+++ b/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java
@@ -4,14 +4,10 @@ import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.scenes.scene2d.actions.Actions;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
 import java.util.List;
 
 import cz.nic.tablexia.TablexiaSettings;
-import cz.nic.tablexia.TablexiaStorage;
-import cz.nic.tablexia.loader.TablexiaAssetManager;
+import cz.nic.tablexia.loader.TablexiaAbstractFileManager;
 import cz.nic.tablexia.screen.AbstractLinearTextureTablexiaScreen;
 
 public class LoaderScreen extends AbstractLinearTextureTablexiaScreen<Void> {
@@ -21,7 +17,7 @@ public class LoaderScreen extends AbstractLinearTextureTablexiaScreen<Void> {
     private static final String LOADER_BIG_HAND = "gfx/screen_loader_bighand.png";
 
     public LoaderScreen() {
-        super(false, false, TablexiaAssetManager.StorageType.INTERNAL);
+        super(false, false, TablexiaAbstractFileManager.AssetsStorageType.INTERNAL);
     }
 
     @Override
diff --git a/core/src/cz/nic/tablexia/screen/viewport/FullscreenImageDebugScreen.java b/core/src/cz/nic/tablexia/screen/viewport/FullscreenImageDebugScreen.java
index 62d64ab7a0eeaa9b14075ec63589e971306a25d8..cf97cd2fac05937feb990381d5ba5eb1ade8d13e 100644
--- a/core/src/cz/nic/tablexia/screen/viewport/FullscreenImageDebugScreen.java
+++ b/core/src/cz/nic/tablexia/screen/viewport/FullscreenImageDebugScreen.java
@@ -6,7 +6,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Image;
 
 import java.util.List;
 
-import cz.nic.tablexia.loader.TablexiaAssetManager;
+import cz.nic.tablexia.loader.TablexiaAbstractFileManager;
 import cz.nic.tablexia.screen.AbstractTablexiaScreen;
 
 public class FullscreenImageDebugScreen extends AbstractTablexiaScreen<Void> {
@@ -16,7 +16,7 @@ public class FullscreenImageDebugScreen extends AbstractTablexiaScreen<Void> {
     private static final String LOADER_BIG_HAND = "gfx/screen_loader_bighand.png";
 
     public FullscreenImageDebugScreen() {
-        super(false, false, TablexiaAssetManager.StorageType.INTERNAL);
+        super(false, false, TablexiaAbstractFileManager.AssetsStorageType.INTERNAL);
     }
 
     @Override
diff --git a/core/src/cz/nic/tablexia/util/Utility.java b/core/src/cz/nic/tablexia/util/Utility.java
index 0ef6833097e69478c9e1406a439c3d9e32d93872..991687ab8e2c63b7acbcccddeee2b5d56f8b0fd1 100644
--- a/core/src/cz/nic/tablexia/util/Utility.java
+++ b/core/src/cz/nic/tablexia/util/Utility.java
@@ -19,12 +19,11 @@ public class Utility {
         return null;
     }
 
-    public static Map<String, String> createChecksumMapFromString(String checksumsString, String keyValueSeparator) {
-        if (checksumsString == null) {
+    public static Map<String, String> createChecksumMapFromString(String checksums) {
+        if (checksums == null) {
             return null;
         }
-        String checksums = checksumsString.substring(1, checksumsString.length() - 1);
-        return Splitter.on(',').trimResults().withKeyValueSeparator(keyValueSeparator).split(checksums);
+        return Splitter.on(',').trimResults().withKeyValueSeparator(":").split(checksums);
     }
 
 }
diff --git a/core/src/cz/nic/tablexia/util/assetmanager/DirectoryAsset.java b/core/src/cz/nic/tablexia/util/assetmanager/DirectoryAsset.java
index c837dcb06c4dfb47d76c0706426d67dc8d662f5b..c6ebb29629f6aea0a88a7e21e58cbc87f0300588 100644
--- a/core/src/cz/nic/tablexia/util/assetmanager/DirectoryAsset.java
+++ b/core/src/cz/nic/tablexia/util/assetmanager/DirectoryAsset.java
@@ -1,11 +1,10 @@
 package cz.nic.tablexia.util.assetmanager;
 
-import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.files.FileHandle;
 
 import java.util.HashMap;
 
-import cz.nic.tablexia.loader.TablexiaAssetManager;
+import cz.nic.tablexia.loader.TablexiaAbstractFileManager;
 import cz.nic.tablexia.util.Log;
 
 /**
@@ -27,7 +26,7 @@ public class DirectoryAsset extends HashMap<String, String> {
 
     private void loadFiles(String path, FileHandle fh) {
         if (fh.isDirectory()) {
-            Log.info(getClass().getName(), "Is directory: " + fh.name());
+            Log.debug(getClass(), "Is directory: " + fh.name());
             for (FileHandle entry : fh.list()) {
                 loadFiles(path + fh.name() + "/", entry);
             }
@@ -38,14 +37,14 @@ public class DirectoryAsset extends HashMap<String, String> {
 
     private FileHandle getDirHandle(String path) {
         FileHandle dirHandle;
-        dirHandle = Gdx.files.external(TablexiaAssetManager.StorageType.EXTERNAL.getStoragePath() + path);
+        dirHandle = TablexiaAbstractFileManager.getFileStoragePathFileHandle(TablexiaAbstractFileManager.AssetsStorageType.EXTERNAL, path);
         return dirHandle;
     }
 
     public String add(String path, FileHandle fh) {
         String fullPath = basePath + "/" + path + fh.name();
         String key = path + fh.nameWithoutExtension();
-        Log.info(getClass().getName(), "Adding asset: " + key + " : " + fullPath);
+        Log.debug(getClass(), "Adding asset: " + key + " : " + fullPath);
         return super.put(key, fullPath);
     }
 
@@ -53,7 +52,7 @@ public class DirectoryAsset extends HashMap<String, String> {
     public String get(Object key) {
         String value = super.get(key);
         if(value == null){
-            Log.info(getClass().getName(), "Asset not prepared: " + key);
+            Log.err(getClass(), "Asset not prepared: " + key);
             throw new IllegalArgumentException("Asset not prepared: " + key);
         }
         return value;
diff --git a/core/src/cz/nic/tablexia/util/ui/XFillViewport.java b/core/src/cz/nic/tablexia/util/ui/XFillViewport.java
index c9a71aba40cc8b1f7917f26c49fc29e1a13ce092..143e89bc67e8244f027c2fc83a32591699e51d1f 100644
--- a/core/src/cz/nic/tablexia/util/ui/XFillViewport.java
+++ b/core/src/cz/nic/tablexia/util/ui/XFillViewport.java
@@ -18,7 +18,7 @@ public class XFillViewport extends Viewport {
     public XFillViewport() {
         setWorldSize(TablexiaSettings.getWorldWidth(), TablexiaSettings.getMinWorldHeight());
         setCamera(new OrthographicCamera());
-        Log.info(getClass().getName(), "Viewport size: " + TablexiaSettings.getWorldWidth() + "x" + TablexiaSettings.getMinWorldHeight());
+        Log.info(getClass(), "Viewport size: " + TablexiaSettings.getWorldWidth() + "x" + TablexiaSettings.getMinWorldHeight());
     }
 
     private float cameraYOffset;
@@ -45,7 +45,7 @@ public class XFillViewport extends Viewport {
 
     @Override
     public void apply(boolean centerCamera) {
-        Log.info(getClass().getName(), "New viewport size (min: " + TablexiaSettings.getMinWorldHeight() + ") position: " + getScreenX() + ":" + getScreenY() + " - bounds: " + getScreenWidth() + ":" + getScreenHeight() + " - world: " + getWorldWidth() + "x" + getWorldHeight() + " - y offset: " + cameraYOffset);
+        Log.info(getClass(), "New viewport size (min: " + TablexiaSettings.getMinWorldHeight() + ") position: " + getScreenX() + ":" + getScreenY() + " - bounds: " + getScreenWidth() + ":" + getScreenHeight() + " - world: " + getWorldWidth() + "x" + getWorldHeight() + " - y offset: " + cameraYOffset);
 
         Gdx.gl.glViewport(getScreenX(), getScreenY(), getScreenWidth(), getScreenHeight());
         getCamera().viewportWidth = getWorldWidth();
diff --git a/desktop/build.gradle b/desktop/build.gradle
index 2c0d1cde356f192e95310ae43bfb73cecc4a88a2..074a33ea57cd3bb3203c63523202f812a1fb0b32 100644
--- a/desktop/build.gradle
+++ b/desktop/build.gradle
@@ -26,7 +26,7 @@ task debugJar(type: Jar) {
             attributes 'Main-Class': project.mainClassName
             attributes 'Build-Type': 'debug'
             attributes 'Version-Name': tablexiaVersionName
-            attributes 'Assets-Cheksums': rootProject.ext.assetsChecksum.toString()
+            attributes 'Assets-Cheksums': getMapConvertedToString(rootProject.ext.assetsChecksum)
         }
     }
 }
@@ -43,7 +43,7 @@ task releaseJar(type: Jar) {
             attributes 'Main-Class': project.mainClassName
             attributes 'Build-Type': 'release'
             attributes 'Version-Name': tablexiaVersionName
-            attributes 'Assets-Cheksums': rootProject.ext.assetsChecksum
+            attributes 'Assets-Cheksums': getMapConvertedToString(rootProject.ext.assetsChecksum)
         }
     }
 }
diff --git a/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java b/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java
index c3e47eea3fa6b7ffaf81ee3052e0b2cf9cc6fe86..058304682a11666ababfa9b9ec76db14ba8ce463 100644
--- a/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java
+++ b/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java
@@ -59,7 +59,7 @@ public class DesktopLauncher {
                                           Locale.getDefault(),
                                           versionName,
                                           SQL_CONNECTION_TYPE,
-                                          Utility.createChecksumMapFromString(checksums, "="),
+                                          Utility.createChecksumMapFromString(checksums),
                                           true), config);
     }
 
diff --git a/util/checksum/build.gradle b/util/checksum/build.gradle
index c1be675eaf28f79b9a049e86de97f6ab9bdc486a..1fc5298bb9dee7730c4c0282d241d9c1484159ec 100644
--- a/util/checksum/build.gradle
+++ b/util/checksum/build.gradle
@@ -23,9 +23,6 @@ task runJarChecksum(dependsOn: jar) {
                 String dirName = dir.getName()
                 String destDir = "" + buildDir + CHECKSUM_DIR + dirName
                 task("checksum_" + dirName, type: Copy) {
-
-                    println dir.absolutePath
-
                     from sourceDir.absolutePath + "/common"
                     from dir.absolutePath
                     into destDir
@@ -41,9 +38,7 @@ task runJarChecksum(dependsOn: jar) {
                     standardOutput = stdout
 
                     doLast {
-                        println "TEST: " + rootProject.ext.assetsChecksum[dirName]
                         rootProject.ext.assetsChecksum[dirName] = stdout.toString().trim()
-                        println "TEST: " + rootProject.ext.assetsChecksum[dirName]
                     }
                 }.execute()
             }