diff --git a/.idea/misc.xml b/.idea/misc.xml
index f1a2d08..f4f18d3 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -5,7 +5,9 @@
       
     
   
diff --git a/app/src/main/java/com/localtransfer/DownloadFile.java b/app/src/main/java/com/localtransfer/DownloadFile.java
index 80c35fd..42fe433 100644
--- a/app/src/main/java/com/localtransfer/DownloadFile.java
+++ b/app/src/main/java/com/localtransfer/DownloadFile.java
@@ -7,6 +7,7 @@ import android.content.Context;
 import android.database.Cursor;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
+import android.os.Environment;
 import android.provider.MediaStore;
 import android.util.Log;
 import android.view.animation.Animation;
@@ -14,6 +15,8 @@ import android.view.animation.LinearInterpolator;
 import android.widget.Button;
 import android.widget.LinearLayout;
 
+import androidx.core.content.FileProvider;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -32,8 +35,6 @@ public class DownloadFile extends Transfer {
 
     public String type;
 
-    public String save_location;
-
     public Uri uri;
 
     private Button button;
@@ -60,7 +61,7 @@ public class DownloadFile extends Transfer {
             ContentValues values = new ContentValues();
             values.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
             values.put(MediaStore.MediaColumns.MIME_TYPE, mime);
-            values.put(MediaStore.MediaColumns.RELATIVE_PATH, Transfer.local_storage);
+            values.put(MediaStore.MediaColumns.RELATIVE_PATH, Transfer.shared_storage);
             uri = resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values);
         }
         try {
@@ -71,7 +72,6 @@ public class DownloadFile extends Transfer {
             e.printStackTrace();
 
             state = Transfer.STATE_FAILED;
-            error = ExceptionName + ": " + ExceptionMess;
             progressEnd();
             buttonProgressEnd();
 
@@ -83,25 +83,51 @@ public class DownloadFile extends Transfer {
     }
 
     public boolean exist(Context context) {
-        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
-            Cursor cursor = context.getContentResolver().query(MediaStore.Downloads.EXTERNAL_CONTENT_URI, null, null, null, null);
-            while (cursor.moveToNext()) {
-                String MediaStore_File_name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Downloads.DISPLAY_NAME));
-                long MediaStore_File_size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Downloads.SIZE));
-                if(MediaStore_File_name.equals(name) && MediaStore_File_size == size) {
-                    int cursor_id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Downloads._ID));
-                    uri = ContentUris.withAppendedId(MediaStore.Downloads.EXTERNAL_CONTENT_URI, cursor_id);
-                    return true;
-                }
-            }
-        }
-        else {
-            File file = new File(save_location, name);
-            new File(save_location).mkdirs();
-            uri = Uri.fromFile(file);
+        if (!Transfer.use_shared_storage){
+            File file = new File(activity.getFilesDir(), name);
+
+            uri = FileProvider.getUriForFile(activity, activity.getPackageName(), file);
+
             if (file.exists() && file.length() == size)
                 return true;
         }
+        else {
+            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
+                Cursor cursor = context.getContentResolver().query(MediaStore.Downloads.EXTERNAL_CONTENT_URI, null, null, null, null);
+                while (cursor.moveToNext()) {
+                    String MediaStore_File_name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Downloads.DISPLAY_NAME));
+                    long MediaStore_File_size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Downloads.SIZE));
+                    if(MediaStore_File_name.equals(name) && MediaStore_File_size == size) {
+                        int cursor_id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Downloads._ID));
+                        uri = ContentUris.withAppendedId(MediaStore.Downloads.EXTERNAL_CONTENT_URI, cursor_id);
+                        return true;
+                    }
+                }
+            }
+            else {
+                String save_location = null;
+                if (mime.equals("text/plain"))
+                    save_location = context.getCacheDir().toString();
+                else
+                    save_location = Environment.getExternalStorageDirectory() + "/" + Transfer.shared_storage;
+                new File(save_location).mkdirs();
+                File file = new File(save_location, name);
+                try {
+                    file.createNewFile();
+                } catch (IOException e) {
+                    final String ExceptionName = e.getClass().getSimpleName();
+                    final String ExceptionMess = e.getMessage();
+                    e.printStackTrace();
+
+                    if(ExceptionName != null && ExceptionMess != null) {
+                        errorSnackbar(ExceptionName + ": " + ExceptionMess);
+                    }
+                }
+                uri = Uri.fromFile(file);
+                if (file.exists() && file.length() == size)
+                    return true;
+            }
+        }
         return false;
     }
 
diff --git a/app/src/main/java/com/localtransfer/MainActivity.java b/app/src/main/java/com/localtransfer/MainActivity.java
index 21969e6..15497f5 100644
--- a/app/src/main/java/com/localtransfer/MainActivity.java
+++ b/app/src/main/java/com/localtransfer/MainActivity.java
@@ -81,7 +81,8 @@ public class MainActivity extends AppCompatActivity {
                     .putString("host", getString(R.string.server_host_def))
                     .putString("port", getString(R.string.server_port_def))
                     .putString("root", getString(R.string.server_root_def))
-                    .putString("local_storage", getString(R.string.local_storage_def))
+                    .putString("shared_storage", getString(R.string.shared_storage_def))
+                    .putBoolean("use_shared_storage", false)
                     .apply();
 
         Transfer.parameter(this);
@@ -195,7 +196,7 @@ public class MainActivity extends AppCompatActivity {
                 startActivity(settings);
                 break;
             case R.id.action_folder:
-                String save_location = Environment.getExternalStorageDirectory() + "/" + Transfer.local_storage;
+                String save_location = Environment.getExternalStorageDirectory() + "/" + Transfer.shared_storage;
                 Uri selectedUri = Uri.parse(save_location.toString());
                 boolean intentSuccess = false;
                 try {
diff --git a/app/src/main/java/com/localtransfer/SettingsActivity.java b/app/src/main/java/com/localtransfer/SettingsActivity.java
index 43d97d6..44afe9c 100644
--- a/app/src/main/java/com/localtransfer/SettingsActivity.java
+++ b/app/src/main/java/com/localtransfer/SettingsActivity.java
@@ -13,6 +13,7 @@ import androidx.appcompat.app.AppCompatActivity;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceFragmentCompat;
 import androidx.preference.PreferenceManager;
+import androidx.preference.SwitchPreference;
 
 import lib.folderpicker.FolderPicker;
 
@@ -42,8 +43,24 @@ public class SettingsActivity extends AppCompatActivity {
             setPreferencesFromResource(R.xml.root_preferences, rootKey);
 
             SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
-            directory = findPreference("local_storage");
-            directory.setSummary(prefs.getString("local_storage", null));
+
+            directory = findPreference("shared_storage");
+            directory.setSummary(prefs.getString("shared_storage", null));
+
+            SwitchPreference shared;
+            shared = findPreference("use_shared_storage");
+            if(shared.isChecked())
+                directory.setVisible(true);
+            else
+                directory.setVisible(false);
+
+            shared.setOnPreferenceClickListener(preference -> {
+                if(shared.isChecked())
+                    directory.setVisible(true);
+                else
+                    directory.setVisible(false);
+                return false;
+            });
             directory.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                 @Override
                 public boolean onPreferenceClick(Preference preference) {
@@ -65,7 +82,7 @@ public class SettingsActivity extends AppCompatActivity {
                             String save_location = currentPath.replace(Environment.getExternalStorageDirectory() + "/", "");
                             Log.d("Path", save_location);
                             SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
-                            prefs.edit().putString("local_storage", save_location).apply();
+                            prefs.edit().putString("shared_storage", save_location).apply();
                             directory.setSummary(save_location);
                         }
                     }
diff --git a/app/src/main/java/com/localtransfer/Transfer.java b/app/src/main/java/com/localtransfer/Transfer.java
index 07a53bb..060c363 100644
--- a/app/src/main/java/com/localtransfer/Transfer.java
+++ b/app/src/main/java/com/localtransfer/Transfer.java
@@ -32,7 +32,6 @@ import java.sql.Timestamp;
 import java.text.CharacterIterator;
 import java.text.StringCharacterIterator;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Comparator;
 import java.util.ConcurrentModificationException;
 import java.util.List;
@@ -56,7 +55,8 @@ public class Transfer {
     public static Integer port;
     public static String root;
     public static String protocol;
-    public static String local_storage;
+    public static String shared_storage;
+    public static boolean use_shared_storage;
 
     public static Activity activity;
 
@@ -65,7 +65,6 @@ public class Transfer {
     public int drawable;
     public String info;
     public String message;
-    public String error;
 
     public String sizeSI;
 
@@ -127,7 +126,8 @@ public class Transfer {
 
         host = prefs.getString("host", null);
         root = prefs.getString("root", null);
-        local_storage = prefs.getString("local_storage", null);
+        shared_storage = prefs.getString("shared_storage", null);
+        use_shared_storage = prefs.getBoolean("use_shared_storage", false);
         if(prefs.getBoolean("protocol", false))
             protocol = "https";
         else
diff --git a/app/src/main/java/com/localtransfer/UploadFile.java b/app/src/main/java/com/localtransfer/UploadFile.java
index 7636552..84fc0f4 100644
--- a/app/src/main/java/com/localtransfer/UploadFile.java
+++ b/app/src/main/java/com/localtransfer/UploadFile.java
@@ -93,7 +93,6 @@ public class UploadFile extends Transfer {
             final String ExceptionMess = e.getMessage();
 
             state = Transfer.STATE_FAILED;
-            error = ExceptionName + ": " + ExceptionMess;
             progressEnd();
 
             if(ExceptionName != null && ExceptionMess != null) {
diff --git a/app/src/main/java/com/localtransfer/fragment/DownloadFragment.java b/app/src/main/java/com/localtransfer/fragment/DownloadFragment.java
index 01bfda3..fe41d76 100644
--- a/app/src/main/java/com/localtransfer/fragment/DownloadFragment.java
+++ b/app/src/main/java/com/localtransfer/fragment/DownloadFragment.java
@@ -20,6 +20,7 @@ import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import androidx.fragment.app.Fragment;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
@@ -224,11 +225,6 @@ public class DownloadFragment extends Fragment {
 
         trFile.setButton(file_buttons.findViewById(R.id.file_download));
 
-        if (trFile.mime.equals("text/plain"))
-            trFile.save_location = getContext().getCacheDir().toString();
-        else
-            trFile.save_location = Environment.getExternalStorageDirectory() + "/" + Transfer.local_storage;
-
         viewName.setText(trFile.name);
         viewType.setText(trFile.mime);
         viewSize.setText(Transfer.humanReadableByteCountBin(trFile.size));
@@ -330,6 +326,7 @@ public class DownloadFragment extends Fragment {
                 startActivity(Intent.createChooser(intent, getString(R.string.share_title)));
             } catch (ActivityNotFoundException e) {
                 e.printStackTrace();
+                Toast.makeText(getActivity(), "Can't share " + dl.mime, Toast.LENGTH_SHORT).show();
             }
         }
         else {
@@ -341,10 +338,9 @@ public class DownloadFragment extends Fragment {
                 startActivity(Intent.createChooser(intent, getString(R.string.share_title)));
             } catch (ActivityNotFoundException e) {
                 e.printStackTrace();
+                Toast.makeText(getActivity(), "Can't share " + dl.mime, Toast.LENGTH_SHORT).show();
             }
         }
-
-
     };
 
     private View.OnClickListener ListenerView = v -> {
@@ -360,9 +356,8 @@ public class DownloadFragment extends Fragment {
             startActivity(intent);
         } catch (ActivityNotFoundException e) {
             e.printStackTrace();
+            Toast.makeText(getActivity(), "No " + dl.mime + " viewer", Toast.LENGTH_SHORT).show();
         }
-
-
     };
 
     private List getAllChildren(View v) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e7fe80f..474e6fa 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -30,8 +30,9 @@
     /transfer
 
     
-    Local Storage
-    Download/TransferLocal
+    Use shared storage
+    Shared Storage
+    Download/TransferLocal
 
     
     Share
diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml
index 0d06de5..d398c07 100644
--- a/app/src/main/res/xml/root_preferences.xml
+++ b/app/src/main/res/xml/root_preferences.xml
@@ -31,11 +31,17 @@
 
     
 
+        
+
         
+            app:key="shared_storage"
+            app:title="@string/shared_storage"
+            app:defaultValue="@string/shared_storage_def"
+            app:useSimpleSummaryProvider="true"
+            app:isPreferenceVisible="false"/>