diff --git a/build.gradle b/build.gradle
index 1953268ae33357833e89e86768ea28e89baa36f7..3bb5537ed81d0f016effe1845acec75a3721c42c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -153,7 +153,7 @@ task zipAssets(dependsOn: [prepareSoundAssets, prepareGraphicAssets]) {
 
             if (!dir.name.equals('common')) {
                 task("${name}_${dir.name}", type: Zip) {
-                    archiveName = dir.getName() + ".zip"
+                    archiveName = dir.getName() + "_SNAPSHOT.zip"
                     destinationDir = rootProject.ext.assetsPackDir
                     from "${buildDir}/${assetsDirName}/${assetsDestinationDirName}/${dir.name}"
                 }.execute()
@@ -162,26 +162,30 @@ task zipAssets(dependsOn: [prepareSoundAssets, prepareGraphicAssets]) {
     }
 }
 
-task uploadAssets(dependsOn: [':util:checksum:runChecksum', ':util:checksum:runAssetsArchivesChecksum', 'zipAssets']) {
+task processAssets(dependsOn: [':util:checksum:runChecksum', ':util:checksum:runAssetsArchivesChecksum']) {
     doLast {
-        def data = new URL(ASSETS_DOWNLOAD_URL).getText()
-        rootProject.ext.assetsPackDir.eachFile() { file ->
-            String fileName = file.getName()
-            String[] fileNameParts = fileName.split("\\.");
-            String packageName = "${fileNameParts[0]}_${assetsChecksum[fileNameParts[0]]}.${fileNameParts[1]}";
-
-            if (!data.contains(packageName)) {
-                println "AssetsUploader: FILE: ${packageName} DO NOT EXISTS ON SERVER -> UPLOADING FILE"
-                task ("${name}_${fileName}", type:Exec) {
-                    workingDir "${rootProject.projectDir}"
-                    commandLine './util/script/assetsUpload.sh', file, TABLEXIA_ASSETS_SERVER_USER, TABLEXIA_ASSETS_SERVER_URL, packageName
-                    standardOutput = new ByteArrayOutputStream()
-                    ext.output = {
-                        return standardOutput.toString()
-                    }
-                }.execute()
-            } else {
-                println "AssetsUploader: FILE: ${packageName} EXISTS ON SERVER -> SKIPPING UPLOAD"
+        if (project.hasProperty('TABLEXIA_ASSETS_SERVER_USER') && project.hasProperty('TABLEXIA_ASSETS_SERVER_URL')) {
+            def data = new URL(ASSETS_DOWNLOAD_URL).getText()
+            rootProject.ext.assetsPackDir.eachFile() { file ->
+                String fileName = file.getName()
+                String[] fileNameParts = fileName.split("_SNAPSHOT\\.");
+                String packageName = "${fileNameParts[0]}_${assetsChecksum[fileNameParts[0]]}.${fileNameParts[1]}";
+
+                boolean isProductionVersion = project.hasProperty('TABLEXIA_ASSETS_UPLOAD_PRODUCTION') && Boolean.valueOf(TABLEXIA_ASSETS_UPLOAD_PRODUCTION).booleanValue()
+                String uploadFileName = isProductionVersion ? packageName : fileName
+                if (!isProductionVersion || !data.contains(packageName)) {
+                    println "AssetsUploader: UPLOADING FILE: ${uploadFileName}"
+                    task ("${name}_${packageName}", type:Exec) {
+                        workingDir "${rootProject.projectDir}"
+                        commandLine './util/script/assetsUpload.sh', file, TABLEXIA_ASSETS_SERVER_USER, TABLEXIA_ASSETS_SERVER_URL, uploadFileName
+                        standardOutput = new ByteArrayOutputStream()
+                        ext.output = {
+                            return standardOutput.toString()
+                        }
+                    }.execute()
+                } else {
+                    println "AssetsUploader: FILE: ${packageName} EXISTS ON SERVER -> SKIPPING UPLOAD"
+                }
             }
         }
     }
@@ -296,7 +300,7 @@ project(":core") {
     apply plugin: "java"
 
     sourceSets.test.java.srcDirs = ["test/"]
-	tasks.processResources.dependsOn ':util:checksum:runChecksum'
+	tasks.processResources.dependsOn processAssets
 
     dependencies {
         compile project(":util:checksum")
diff --git a/core/src/cz/nic/tablexia/TablexiaSettings.java b/core/src/cz/nic/tablexia/TablexiaSettings.java
index c9ac4c10eba207cbf50ed35cef562c4ff7d78589..bee116b912a4faf294f71f517c702cf06d4ec6ac 100644
--- a/core/src/cz/nic/tablexia/TablexiaSettings.java
+++ b/core/src/cz/nic/tablexia/TablexiaSettings.java
@@ -27,7 +27,8 @@ public class TablexiaSettings {
     private static final String PREFERENCES_KEY    = "cz.nic.tablexia.";
     public static final  String LOCALE_KEY         = "locale";
 
-    private static final String IDE_BUILD_VERSION_NAME = "DEVEL";
+    private static final String IDE_BUILD_VERSION_NAME  = "DEVEL";
+    public  static final String DEV_VERSION_TYPE        = "-DEV-";
 
 
     private final BuildType BUILD_TYPE;
diff --git a/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java b/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java
index 3659e4bd03266316c9a20fd2deb32e144382b429..a5468a95288b8344d217900a33fd4331f85f4754 100644
--- a/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java
+++ b/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java
@@ -43,8 +43,9 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
     private static final int                                        TABLEXIA_ASSETS_DOWNLOAD_TIMEOUT    = 2500;
     private static final String                                     TABLEXIA_TRUST_KEYSTORE_NAME        = "tablexiaTrustKeystore";
     private static final String                                     TABLEXIA_TRUST_KEYSTORE_PASSWORD    = "tablexia";
-    public static final int                                         DOWNLOAD_TRY_COUNT                  = 3;
+    private static final String                                     SNAPSHOT_PACKAGE_NAME               = "SNAPSHOT";
 
+    public static final int                                         DOWNLOAD_TRY_COUNT                  = 3;
     private static final Object                                     LOCK                                = new Object();
 
 
@@ -108,8 +109,20 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
                     FileHandle assetsPackageFileHandle = TablexiaAbstractFileManager.getFileStoragePathFileHandle(ZIP_FILES_STORAGE_TYPE, zipAssetsPackageName);
 
                     // check current package file and download it if it is necessary
+                    boolean usedSnapshot = false;
                     prepareKeyStore();
-                    if (!checkAndDownload(assetsPackageName)) {
+                    if (TablexiaSettings.getInstance().getVersionName().contains(TablexiaSettings.DEV_VERSION_TYPE) || TablexiaSettings.getInstance().getBuildType() == TablexiaSettings.BuildType.DEVEL) {
+                        Log.info(ZipAssetLoader.class, "Devel mode --> try to use SNAPSHOT assets package");
+                        String snapshotAssetsPackageName = language + "_" + SNAPSHOT_PACKAGE_NAME;
+                        String snapshotZipAssetsPackageName = snapshotAssetsPackageName + ZIP_FILE_EXTENSION;
+                        if (checkAndDownload(snapshotAssetsPackageName)) {
+                            usedSnapshot = true;
+                            assetsPackageFileHandle = TablexiaAbstractFileManager.getFileStoragePathFileHandle(ZIP_FILES_STORAGE_TYPE, snapshotZipAssetsPackageName);
+                        } else {
+                            Log.err(getClass(), String.format("Cannot download assets package: %s", snapshotZipAssetsPackageName));
+                        }
+                    }
+                    if (!usedSnapshot && !checkAndDownload(assetsPackageName)) {
                         error(getClass(), String.format("Cannot download assets package: %s", zipAssetsPackageName));
                         return null;
                     }
diff --git a/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java b/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java
index cc54dcaa48c3a9c098e7544c9bcb5579212cd8b3..058304682a11666ababfa9b9ec76db14ba8ce463 100644
--- a/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java
+++ b/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java
@@ -1,6 +1,5 @@
 package cz.nic.tablexia.desktop;
 
-import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Files;
 import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
 import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
diff --git a/util/checksum/build.gradle b/util/checksum/build.gradle
index 049cd141f67c8f79c97d1dba5cbf2cc8852608d5..a5498f48f6ffb1c428c6db00831d374b8c0a3443 100644
--- a/util/checksum/build.gradle
+++ b/util/checksum/build.gradle
@@ -39,7 +39,7 @@ task runAssetsArchivesChecksum(dependsOn: [classes, rootProject.tasks.zipAssets]
                     standardOutput = stdout
 
                     doLast {
-                        (new File("${assetsPackDir.getAbsolutePath()}${fileName.split("\\.")[0]}.checksum")).write(stdout.toString().trim());
+                        (new File("${assetsPackDir.getAbsolutePath()}/${fileName.split("\\.")[0]}.checksum")).write(stdout.toString().trim());
                     }
                 }.execute()
             }