diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadActivity.java b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadActivity.java
index a555a18e..45c3d77f 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadActivity.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadActivity.java
@@ -1,7 +1,9 @@
 package gr.thmmy.mthmmy.activities.upload;
 
 import android.app.Activity;
+import android.app.PendingIntent;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
@@ -12,6 +14,7 @@ import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.design.widget.FloatingActionButton;
 import android.support.v4.content.FileProvider;
+import android.support.v7.app.AlertDialog;
 import android.support.v7.content.res.AppCompatResources;
 import android.support.v7.preference.PreferenceManager;
 import android.support.v7.widget.AppCompatButton;
@@ -36,6 +39,7 @@ import android.widget.Toast;
 import net.gotev.uploadservice.MultipartUploadRequest;
 import net.gotev.uploadservice.ServerResponse;
 import net.gotev.uploadservice.UploadInfo;
+import net.gotev.uploadservice.UploadNotificationAction;
 import net.gotev.uploadservice.UploadNotificationConfig;
 import net.gotev.uploadservice.UploadStatusDelegate;
 
@@ -232,7 +236,6 @@ public class UploadActivity extends BaseActivity {
             popUp.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);
             popUp.setFocusable(true);
 
-            //((TextView) popUpContent.findViewById(R.id.upload_filename_info_text)).setTe
             ((TextView) popUpContent.findViewById(R.id.upload_filename_info_text)).
                     setMovementMethod(LinkMovementMethod.getInstance());
             //Displays the popup
@@ -279,7 +282,7 @@ public class UploadActivity extends BaseActivity {
 
             String uploadTitleText = uploadTitle.getText().toString();
             String editTextFilename = uploadFilename.getText().toString();
-            String uploadDescriptionText = uploadDescription.getText().toString();
+            final String[] uploadDescriptionText = {uploadDescription.getText().toString()};
 
             //Checks if all required fields are filled
             {
@@ -307,7 +310,9 @@ public class UploadActivity extends BaseActivity {
                         shouldReturn = true;
                     }
                 }
-                if (!editTextFilename.matches("(.+\\.)+.+")) {
+                if (!editTextFilename.matches("(.+\\.)+.+") ||
+                        !FileUtils.getFilenameWithoutExtension(editTextFilename).
+                                matches("[0-9a-zA-Z~!@#$%^&()_+=\\-`\\[\\]{};',.]+")) {
                     uploadFilename.setError("Invalid filename");
                     shouldReturn = true;
                 }
@@ -317,121 +322,144 @@ public class UploadActivity extends BaseActivity {
                 }
             }
 
-            //Checks settings and possibly adds "Uploaded from mTHMMY" string to description
-            SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(view.getContext());
-            if (sharedPrefs.getBoolean(UPLOADING_APP_SIGNATURE_ENABLE_KEY, true)) {
-                uploadDescriptionText += uploadedFromThmmyPromptHtml;
-            }
+            AlertDialog.Builder builder = new AlertDialog.Builder(this);
+            builder.setTitle("Upload to thmmy");
+            builder.setMessage("Are you sure?");
+            builder.setPositiveButton("YES, FIRE AWAY", (dialog, which) -> {
+                //Checks settings and possibly adds "Uploaded from mTHMMY" string to description
+                SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(view.getContext());
+                if (sharedPrefs.getBoolean(UPLOADING_APP_SIGNATURE_ENABLE_KEY, true)) {
+                    uploadDescriptionText[0] += uploadedFromThmmyPromptHtml;
+                }
 
-            Uri tempFileUri = null;
-            if (filesList.size() == 1) {
-                //Checks if the file needs renaming
-                UploadFile uploadFile = filesList.get(0);
-                String selectedFileFilename = FileUtils.filenameFromUri(this, uploadFile.getFileUri());
-
-                if (!editTextFilename.equals(selectedFileFilename)) {
-                    //File should be uploaded with a different name
-                    if (!uploadFile.isCameraPhoto()) {
-                        //Temporarily copies the file to a another location and renames it
-                        tempFileUri = UploadsHelper.createTempFile(this, storage,
-                                uploadFile.getFileUri(),
-                                FileUtils.getFilenameWithoutExtension(editTextFilename));
-                    } else {
-                        //Renames the photo taken
-                        String photoPath = uploadFile.getPhotoFile().getPath();
-                        photoPath = photoPath.substring(0, photoPath.lastIndexOf(File.separator));
-                        String destinationFilename = photoPath + File.separator +
-                                FileUtils.getFilenameWithoutExtension(editTextFilename) + ".jpg";
-
-                        if (!storage.rename(uploadFile.getPhotoFile().getAbsolutePath(), destinationFilename)) {
-                            //Something went wrong, abort
-                            Toast.makeText(this, "Could not create temporary file for renaming", Toast.LENGTH_SHORT).show();
-                            progressBar.setVisibility(View.GONE);
-                            return;
-                        }
+                Uri tempFileUri = null;
+                if (filesList.size() == 1) {
+                    //Checks if the file needs renaming
+                    UploadFile uploadFile = filesList.get(0);
+                    String selectedFileFilename = FileUtils.filenameFromUri(this, uploadFile.getFileUri());
+
+                    if (!editTextFilename.equals(selectedFileFilename)) {
+                        //File should be uploaded with a different name
+                        if (!uploadFile.isCameraPhoto()) {
+                            //Temporarily copies the file to a another location and renames it
+                            tempFileUri = UploadsHelper.createTempFile(this, storage,
+                                    uploadFile.getFileUri(),
+                                    FileUtils.getFilenameWithoutExtension(editTextFilename));
+                        } else {
+                            //Renames the photo taken
+                            String photoPath = uploadFile.getPhotoFile().getPath();
+                            photoPath = photoPath.substring(0, photoPath.lastIndexOf(File.separator));
+                            String destinationFilename = photoPath + File.separator +
+                                    FileUtils.getFilenameWithoutExtension(editTextFilename) + ".jpg";
+
+                            if (!storage.rename(uploadFile.getPhotoFile().getAbsolutePath(), destinationFilename)) {
+                                //Something went wrong, abort
+                                Toast.makeText(this, "Could not create temporary file for renaming", Toast.LENGTH_SHORT).show();
+                                progressBar.setVisibility(View.GONE);
+                                return;
+                            }
 
-                        //Points photoFile and fileUri to the new copied and renamed file
-                        uploadFile.setPhotoFile(storage.getFile(destinationFilename));
-                        uploadFile.setFileUri(FileProvider.getUriForFile(this, getPackageName() +
-                                ".provider", uploadFile.getPhotoFile()));
+                            //Points photoFile and fileUri to the new copied and renamed file
+                            uploadFile.setPhotoFile(storage.getFile(destinationFilename));
+                            uploadFile.setFileUri(FileProvider.getUriForFile(this, getPackageName() +
+                                    ".provider", uploadFile.getPhotoFile()));
+                        }
+                    }
+                } else {
+                    Uri[] filesListArray = new Uri[filesList.size()];
+                    for (int i = 0; i < filesList.size(); ++i) {
+                        filesListArray[i] = filesList.get(i).getFileUri();
                     }
-                }
-            } else {
-                Uri[] filesListArray = new Uri[filesList.size()];
-                for (int i = 0; i < filesList.size(); ++i) {
-                    filesListArray[i] = filesList.get(i).getFileUri();
-                }
 
-                File zipFile = UploadsHelper.createZipFile(this);
-                assert zipFile != null;
-                tempFileUri = FileProvider.getUriForFile(this, getPackageName() +
-                        ".provider", zipFile);
+                    File zipFile = UploadsHelper.createZipFile(this);
+                    assert zipFile != null;
+                    tempFileUri = FileProvider.getUriForFile(this, getPackageName() +
+                            ".provider", zipFile);
 
-                UploadsHelper.zip(this, filesListArray, tempFileUri);
-            }
+                    UploadsHelper.zip(this, filesListArray, tempFileUri);
+                }
 
-            try {
-                new MultipartUploadRequest(view.getContext(), uploadIndexUrl)
-                        .setUtf8Charset()
-                        .addParameter("tp-dluploadtitle", uploadTitleText)
-                        .addParameter("tp-dluploadcat", categorySelected)
-                        .addParameter("tp-dluploadtext", uploadDescriptionText)
-                        .addFileToUpload(tempFileUri == null
-                                        ? filesList.get(0).getFileUri().toString()
-                                        : tempFileUri.toString()
-                                , "tp-dluploadfile")
-                        .addParameter("tp_dluploadicon", fileIcon)
-                        .addParameter("tp-uploaduser", uploaderProfileIndex)
-                        .setNotificationConfig(new UploadNotificationConfig())
-                        .setMaxRetries(2)
-                        .setDelegate(new UploadStatusDelegate() {
-                            @Override
-                            public void onProgress(Context context, UploadInfo uploadInfo) {
-                            }
+                try {
+                    UploadNotificationConfig uploadNotificationConfig = new UploadNotificationConfig();
+                    uploadNotificationConfig.setIconForAllStatuses(android.R.drawable.stat_sys_upload);
+
+                    uploadNotificationConfig.getProgress().iconResourceID = android.R.drawable.stat_sys_upload;
+                    uploadNotificationConfig.getCompleted().iconResourceID = android.R.drawable.stat_sys_upload_done;
+                    uploadNotificationConfig.getError().iconResourceID = android.R.drawable.stat_sys_upload_done;
+                    uploadNotificationConfig.getError().iconColorResourceID = R.color.error_red;
+
+                    new MultipartUploadRequest(view.getContext(), uploadIndexUrl)
+                            .setUtf8Charset()
+                            .setNotificationConfig(uploadNotificationConfig)
+                            .addParameter("tp-dluploadtitle", uploadTitleText)
+                            .addParameter("tp-dluploadcat", categorySelected)
+                            .addParameter("tp-dluploadtext", uploadDescriptionText[0])
+                            .addFileToUpload(tempFileUri == null
+                                            ? filesList.get(0).getFileUri().toString()
+                                            : tempFileUri.toString()
+                                    , "tp-dluploadfile")
+                            .addParameter("tp_dluploadicon", fileIcon)
+                            .addParameter("tp-uploaduser", uploaderProfileIndex)
+                            .setNotificationConfig(new UploadNotificationConfig())
+                            .setMaxRetries(2)
+                            .setDelegate(new UploadStatusDelegate() {
+                                @Override
+                                public void onProgress(Context context, UploadInfo uploadInfo) {
+                                }
 
-                            @Override
-                            public void onError(Context context, UploadInfo uploadInfo, ServerResponse serverResponse,
-                                                Exception exception) {
-                                Toast.makeText(context, "Upload failed", Toast.LENGTH_SHORT).show();
-                                UploadsHelper.deleteTempFiles();
-                                progressBar.setVisibility(View.GONE);
-                            }
+                                @Override
+                                public void onError(Context context, UploadInfo uploadInfo, ServerResponse serverResponse,
+                                                    Exception exception) {
+                                    Toast.makeText(context, "Upload failed", Toast.LENGTH_SHORT).show();
+                                    UploadsHelper.deleteTempFiles();
+                                    progressBar.setVisibility(View.GONE);
+                                }
 
-                            @Override
-                            public void onCompleted(Context context, UploadInfo uploadInfo, ServerResponse serverResponse) {
-                                Toast.makeText(context, "Upload completed successfully", Toast.LENGTH_SHORT).show();
-                                UploadsHelper.deleteTempFiles();
-                                BaseApplication.getInstance().logFirebaseAnalyticsEvent("file_upload", null);
+                                @Override
+                                public void onCompleted(Context context, UploadInfo uploadInfo, ServerResponse serverResponse) {
+                                    Toast.makeText(context, "Upload completed successfully", Toast.LENGTH_SHORT).show();
+                                    UploadsHelper.deleteTempFiles();
+                                    BaseApplication.getInstance().logFirebaseAnalyticsEvent("file_upload", null);
 
-                                for (UploadFile file : filesList) {
-                                    if (file.isCameraPhoto()) {
-                                        TakePhoto.galleryAddPic(context, file.getPhotoFile());
+                                    for (UploadFile file : filesList) {
+                                        if (file.isCameraPhoto()) {
+                                            TakePhoto.galleryAddPic(context, file.getPhotoFile());
+                                        }
                                     }
+
+                                    uploadTitle.setText(null);
+                                    uploadFilename.setText(null);
+                                    hasModifiedFilename = false;
+                                    uploadDescription.setText(null);
+                                    filesList.clear();
+                                    filesListView.removeAllViews();
+                                    photoFileCreated = null;
+                                    progressBar.setVisibility(View.GONE);
                                 }
 
-                                uploadTitle.setText(null);
-                                uploadFilename.setText(null);
-                                hasModifiedFilename = false;
-                                uploadDescription.setText(null);
-                                filesList.clear();
-                                filesListView.removeAllViews();
-                                photoFileCreated = null;
-                                progressBar.setVisibility(View.GONE);
-                            }
+                                @Override
+                                public void onCancelled(Context context, UploadInfo uploadInfo) {
+                                    Toast.makeText(context, "Upload canceled", Toast.LENGTH_SHORT).show();
 
-                            @Override
-                            public void onCancelled(Context context, UploadInfo uploadInfo) {
-                                Toast.makeText(context, "Upload canceled", Toast.LENGTH_SHORT).show();
+                                    UploadsHelper.deleteTempFiles();
+                                    progressBar.setVisibility(View.GONE);
+                                }
+                            })
+                            .startUpload();
+                } catch (Exception exception) {
+                    Timber.e(exception, "AndroidUploadService: %s", exception.getMessage());
+                    progressBar.setVisibility(View.GONE);
+                }
+                dialog.dismiss();
+            });
 
-                                UploadsHelper.deleteTempFiles();
-                                progressBar.setVisibility(View.GONE);
-                            }
-                        })
-                        .startUpload();
-            } catch (Exception exception) {
-                Timber.e(exception, "AndroidUploadService: %s", exception.getMessage());
+            builder.setNegativeButton("NOPE", (dialog, which) -> {
                 progressBar.setVisibility(View.GONE);
-            }
+                dialog.dismiss();
+            });
+
+            AlertDialog alert = builder.create();
+            alert.show();
         });
 
         if (uploadRootCategories.isEmpty()) {
diff --git a/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsHelper.java b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsHelper.java
index 6a736566..9ad789df 100644
--- a/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsHelper.java
+++ b/app/src/main/java/gr/thmmy/mthmmy/activities/upload/UploadsHelper.java
@@ -83,7 +83,7 @@ class UploadsHelper {
 
     @Nullable
     public static File createZipFile(Context context) {
-        // Create an image file name
+        // Create a zip file name
         String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.FRANCE).format(new Date());
         String zipFileName = "mThmmy_" + timeStamp + ".zip";
 
diff --git a/app/src/main/res/layout/activity_upload.xml b/app/src/main/res/layout/activity_upload.xml
index 7aea59c3..507914f8 100644
--- a/app/src/main/res/layout/activity_upload.xml
+++ b/app/src/main/res/layout/activity_upload.xml
@@ -28,7 +28,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_gravity="top|start"
-        android:background="@color/background"
+        android:background="@color/primary_light"
         android:paddingEnd="@dimen/activity_horizontal_margin"
         android:paddingStart="@dimen/activity_horizontal_margin"
         app:layout_behavior="@string/appbar_scrolling_view_behavior"
@@ -37,7 +37,7 @@
         
 
@@ -46,7 +46,7 @@
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="8dp"
-                android:background="@color/background"
+                android:background="@color/primary_light"
                 android:orientation="vertical">
 
                 
             
 
diff --git a/app/src/main/res/layout/activity_upload_fields_builder.xml b/app/src/main/res/layout/activity_upload_fields_builder.xml
index af3daae6..9b748fe8 100644
--- a/app/src/main/res/layout/activity_upload_fields_builder.xml
+++ b/app/src/main/res/layout/activity_upload_fields_builder.xml
@@ -27,7 +27,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_gravity="top|start"
-        android:background="@color/background"
+        android:background="@color/primary_light"
         android:paddingEnd="@dimen/activity_horizontal_margin"
         android:paddingStart="@dimen/activity_horizontal_margin"
         app:layout_behavior="@string/appbar_scrolling_view_behavior"
diff --git a/app/src/main/res/layout/activity_upload_filename_info_popup.xml b/app/src/main/res/layout/activity_upload_filename_info_popup.xml
index 8b31440c..bb6a9704 100644
--- a/app/src/main/res/layout/activity_upload_filename_info_popup.xml
+++ b/app/src/main/res/layout/activity_upload_filename_info_popup.xml
@@ -3,6 +3,7 @@
     android:id="@+id/upload_filename_info_text"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
+    android:background="@color/primary_light"
     android:linksClickable="true"
     android:padding="8dp"
     android:text="@string/upload_filename_info"
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
index 29d0ef94..29bc9180 100644
--- a/app/src/main/res/values-v21/styles.xml
+++ b/app/src/main/res/values-v21/styles.xml
@@ -33,6 +33,6 @@
     
 
     
 
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index c3bdac7a..abad71bb 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -18,6 +18,7 @@
     #8B8B8B
     #FF9800
     #FAA61A
+    #890d0d
 
     #FFFFFF
     #CCCCCC
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 0e5ec576..d42f405f 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -84,6 +84,6 @@