diff --git a/app/build.gradle b/app/build.gradle
index 44f482f50ae2887ac9fba69e6f2a7f2c8668ff57..dca622af51331c7cc079bf3e3f1d48db67600f60 100755
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -7,8 +7,8 @@ android {
         applicationId "ohi.andre.consolelauncher"
         minSdkVersion 8
         targetSdkVersion 25
-        versionCode 82
-        versionName "4.11"
+        versionCode 83
+        versionName "4.12"
     }
 
     buildTypes {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 06e1caa4b00b3d2c22430fa7c2260bf6d7c4fefc..dc8d290b1f259d90ea0c894718b352693de02d08 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -109,7 +109,7 @@
 
         <provider
             android:name="android.support.v4.content.FileProvider"
-            android:authorities="${applicationId}.provider"
+            android:authorities="ohi.andre.consolelauncher.provider"
             android:exported="false"
             android:grantUriPermissions="true">
             <meta-data
diff --git a/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java b/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java
index e7b83b99c3e8be042c10b3a09cfcd438dc8d0190..f42c58cd640883be5039a1befd966c271e833b4a 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/LauncherActivity.java
@@ -37,7 +37,7 @@ public class LauncherActivity extends Activity implements Reloadable {
     private final int FILEUPDATE_DELAY = 300;
 
     public static final int COMMAND_REQUEST_PERMISSION = 10;
-    public static final int STORAGE_PERMISSION = 11;
+    public static final int STARTING_PERMISSION = 11;
     public static final int COMMAND_SUGGESTION_REQUEST_PERMISSION = 12;
 
     private final String FIRSTACCESS_KEY = "firstAccess";
@@ -100,16 +100,6 @@ public class LauncherActivity extends Activity implements Reloadable {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        SharedPreferences preferences = getPreferences(0);
-        boolean firstAccess = preferences.getBoolean(FIRSTACCESS_KEY, true);
-        if (firstAccess) {
-            SharedPreferences.Editor editor = preferences.edit();
-            editor.putBoolean(FIRSTACCESS_KEY, false);
-            editor.commit();
-
-            Tuils.showTutorial(this);
-        }
-
         if (isFinishing()) {
             return;
         }
@@ -118,7 +108,8 @@ public class LauncherActivity extends Activity implements Reloadable {
             if (!(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED  &&
                     ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) {
 
-                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, LauncherActivity.STORAGE_PERMISSION);
+                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
+                        LauncherActivity.STARTING_PERMISSION);
                 return;
             }
         }
@@ -127,6 +118,17 @@ public class LauncherActivity extends Activity implements Reloadable {
     }
 
     private void finishOnCreate() {
+
+        SharedPreferences preferences = getPreferences(0);
+        boolean firstAccess = preferences.getBoolean(FIRSTACCESS_KEY, true);
+        if (firstAccess) {
+            SharedPreferences.Editor editor = preferences.edit();
+            editor.putBoolean(FIRSTACCESS_KEY, false);
+            editor.commit();
+
+            Tuils.showTutorial(this);
+        }
+
         File tuiFolder = getFolder();
         Resources res = getResources();
         starterIntent = getIntent();
@@ -199,6 +201,8 @@ public class LauncherActivity extends Activity implements Reloadable {
     protected void onStart() {
         super.onStart();
 
+        overridePendingTransition(0,0);
+
         if (ui != null && openKeyboardOnStart) {
             ui.onStart();
         }
@@ -289,13 +293,18 @@ public class LauncherActivity extends Activity implements Reloadable {
                         ui.setOutput(getString(R.string.output_nopermissions));
                     }
                     break;
-                case STORAGE_PERMISSION:
-                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
-                        finishOnCreate();
-                    } else {
-                        Toast.makeText(this, R.string.permissions_toast, Toast.LENGTH_LONG).show();
-                        finish();
+                case STARTING_PERMISSION:
+                    int count = 0;
+                    while(count < permissions.length && count < grantResults.length) {
+                        if( (permissions[count].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE) || permissions[count].equals(Manifest.permission.READ_EXTERNAL_STORAGE))
+                                && grantResults[count] == PackageManager.PERMISSION_DENIED) {
+                            Toast.makeText(this, R.string.permissions_toast, Toast.LENGTH_LONG).show();
+                            finish();
+                            return;
+                        }
+                        count++;
                     }
+                    finishOnCreate();
                     break;
                 case COMMAND_SUGGESTION_REQUEST_PERMISSION:
                     if (grantResults.length == 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
diff --git a/app/src/main/java/ohi/andre/consolelauncher/MainManager.java b/app/src/main/java/ohi/andre/consolelauncher/MainManager.java
index b74c2691898c18485c3c5b3792c4aa2eedbef54b..d29db175d074607d2028067a44f6e07f4fa2b187 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/MainManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/MainManager.java
@@ -4,6 +4,7 @@ import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.util.Log;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -43,9 +44,9 @@ public class MainManager {
     private final int LAST_COMMANDS_SIZE = 20;
 
     private CmdTrigger[] triggers = new CmdTrigger[]{
-            new AppTrigger(),
             new AliasTrigger(),
             new TuiCommandTrigger(),
+            new AppTrigger(),
 //            keep this as last trigger
             new SystemCommandTrigger()
     };
@@ -154,8 +155,10 @@ public class MainManager {
         @Override
         public boolean trigger(ExecInfo info, Outputable out, String input) {
             String alias = info.aliasManager.getAlias(input);
-            if (alias == null)
+            if (alias == null) {
                 return false;
+            }
+            Log.e("andre", alias);
 
             info.executer.exec(alias);
 
diff --git a/app/src/main/java/ohi/andre/consolelauncher/UIManager.java b/app/src/main/java/ohi/andre/consolelauncher/UIManager.java
index 220df25ff591d050b80e60d32b77b156f6819f22..c84c141af5da6d3e15d32925403ab37d9f08f948 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/UIManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/UIManager.java
@@ -466,6 +466,7 @@ public class UIManager implements OnTouchListener {
     private void openKeyboard() {
         mTerminalAdapter.requestInputFocus();
         imm.showSoftInput(mTerminalAdapter.getInputView(), InputMethodManager.SHOW_IMPLICIT);
+        mTerminalAdapter.scrollToEnd();
     }
 
     private void closeKeyboard() {
@@ -500,7 +501,7 @@ public class UIManager implements OnTouchListener {
 
     //    update ram
     public void updateRamDetails() {
-        ram.setText("RAM: " + Tuils.ramDetails(activityManager, memory));
+        ram.setText("free ram: " + Tuils.ramDetails(activityManager, memory));
     }
 
     public void focusTerminal() {
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java
index 3d9b4244d77a89dcac5ea67897633f61118c3a82..4372265b0f2fdf3a5bd622a5515309fc604964ea 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandTuils.java
@@ -1,6 +1,7 @@
 package ohi.andre.consolelauncher.commands;
 
 import android.annotation.SuppressLint;
+import android.util.Log;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -129,6 +130,10 @@ public class CommandTuils {
     }
 
     private static ArgInfo textList(String input) {
+        if (input == null) {
+            return null;
+        }
+
         List<String> strings = new ArrayList<>();
 
         char[] chars = input.toCharArray();
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/CommandsPreferences.java b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandsPreferences.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d1d859e19c10cc2d317efad7685b554339f044b
--- /dev/null
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/CommandsPreferences.java
@@ -0,0 +1,41 @@
+package ohi.andre.consolelauncher.commands;
+
+import java.util.HashMap;
+
+import ohi.andre.consolelauncher.managers.PreferencesManager;
+
+/**
+ * Created by francescoandreuzzi on 06/01/2017.
+ */
+
+public class CommandsPreferences {
+
+    public static final int DEFAULT_PARAM = 10;
+
+    private HashMap<String, Preference> preferenceHashMap;
+
+    public CommandsPreferences(PreferencesManager preferencesManager) {
+        preferenceHashMap = new HashMap<>();
+
+//        search
+        Preference searchP = new Preference();
+        searchP.add(preferencesManager.getValue(PreferencesManager.DEFAULT_SEARCH), DEFAULT_PARAM);
+        preferenceHashMap.put("search", searchP);
+    }
+
+    public Preference forCommand(String cmd) {
+        return preferenceHashMap.get(cmd);
+    }
+
+    public class Preference {
+        HashMap<Integer, String> prefs = new HashMap<>();
+
+        public void add(String pref, int id) {
+            prefs.put(id, pref);
+        }
+
+        public String get(int id) {
+            return prefs.get(id);
+        }
+    }
+}
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/ExecInfo.java b/app/src/main/java/ohi/andre/consolelauncher/commands/ExecInfo.java
index a8bb78398f805339bfb8da4bae37f21b607f5755..49e834c2a44375e47f14d9b40ccf080fa692b88d 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/ExecInfo.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/ExecInfo.java
@@ -74,6 +74,8 @@ public class ExecInfo {
     //	reload field
     public Reloadable reloadable;
 
+    public CommandsPreferences cmdPrefs;
+
     //	execute a command
     public CommandExecuter executer;
     //	current set of args
@@ -103,6 +105,8 @@ public class ExecInfo {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR_MR1)
             initFlash(context);
 
+        this.cmdPrefs = new CommandsPreferences(prefsMgr);
+
         this.player = p;
         this.contacts = c;
 
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/apps.java b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/apps.java
index 1465bd1025f7f155ebff299dfb22a45ef217a0b4..38e00b1d754c6f1472f31533f12a2a560f464a09 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/apps.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/apps.java
@@ -1,32 +1,51 @@
 package ohi.andre.consolelauncher.commands.raw;
 
 import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
 import android.content.SharedPreferences;
+import android.net.Uri;
 
 import ohi.andre.consolelauncher.R;
 import ohi.andre.consolelauncher.commands.CommandAbstraction;
 import ohi.andre.consolelauncher.commands.ExecInfo;
 import ohi.andre.consolelauncher.managers.AppsManager;
+import ohi.andre.consolelauncher.tuils.Tuils;
 
 public class apps implements CommandAbstraction {
 
     private final String HIDE_PARAM = "-h";
     private final String UNHIDE_PARAM = "-uh";
     private final String SHOWHIDDEN_PARAM = "-sh";
+    private final String PLAYSTORE_PARAM = "-ps";
+    private final String SETTINGS_PARAM = "-st";
+    private final String FORCE_PARAM = "-f";
 
     @Override
     public String exec(ExecInfo info) {
         String param = info.get(String.class, 0);
         String app = info.get(String.class, 1);
-        if (app == null)
+        if (app == null) {
             return info.res.getString(helpRes());
+        }
 
-        if (param.equals(HIDE_PARAM))
+        if (param.equals(HIDE_PARAM)) {
             return hideApp(info, app);
-        else if (param.equals(UNHIDE_PARAM))
+        } else if (param.equals(UNHIDE_PARAM)) {
             return unHideApp(info, app);
-        else
+        } else if (param.equals(PLAYSTORE_PARAM)) {
+            openPlaystore(info.context, app);
+            return info.context.getString(R.string.output_showplaystore) + Tuils.SPACE + app;
+        } else if (param.equals(SETTINGS_PARAM)) {
+            openSettings(info.context, app);
+            return info.context.getString(R.string.output_showsettings) + Tuils.SPACE + app;
+        } else if (param.equals(FORCE_PARAM)) {
+            Intent intent = info.appsManager.getIntent(app);
+            info.context.startActivity(intent);
+            return info.context.getString(R.string.starting_app) + Tuils.SPACE + app;
+        } else {
             return info.res.getString(helpRes());
+        }
     }
 
     private String hideApp(ExecInfo info, String app) {
@@ -34,7 +53,7 @@ public class apps implements CommandAbstraction {
         String result = info.appsManager.hideApp(app);
         if (result != null) {
             editor.commit();
-            return result + " " + info.res.getString(R.string.output_hideapp);
+            return result + Tuils.SPACE + info.res.getString(R.string.output_hideapp);
         } else
             return info.res.getString(R.string.output_appnotfound);
     }
@@ -44,7 +63,7 @@ public class apps implements CommandAbstraction {
         String result = info.appsManager.unhideApp(app);
         if (result != null) {
             editor.commit();
-            return result + " " + info.res.getString(R.string.output_unhideapp);
+            return result + Tuils.SPACE + info.res.getString(R.string.output_unhideapp);
         } else
             return info.res.getString(R.string.output_appnotfound);
     }
@@ -53,6 +72,18 @@ public class apps implements CommandAbstraction {
         return info.appsManager.printApps(AppsManager.HIDDEN_APPS);
     }
 
+    private void openSettings(Context context, String packageName) {
+        Tuils.openSettingsPage(context, packageName);
+    }
+
+    private void openPlaystore(Context context, String packageName) {
+        try {
+            context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)));
+        } catch (Exception e) {
+            context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName)));
+        }
+    }
+
     @Override
     public int helpRes() {
         return R.string.help_apps;
@@ -83,7 +114,10 @@ public class apps implements CommandAbstraction {
         return new String[]{
                 HIDE_PARAM,
                 UNHIDE_PARAM,
-                SHOWHIDDEN_PARAM
+                SHOWHIDDEN_PARAM,
+                SETTINGS_PARAM,
+                PLAYSTORE_PARAM,
+                FORCE_PARAM
         };
     }
 
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/refresh.java b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/refresh.java
index bcb6d60a14c23adad7dae3aea7564cffb027cdbf..7d5082693a0f30a77dcdf500c17a03bbdbb34ad9 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/refresh.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/refresh.java
@@ -5,6 +5,7 @@ import android.app.Activity;
 import ohi.andre.consolelauncher.R;
 import ohi.andre.consolelauncher.commands.CommandAbstraction;
 import ohi.andre.consolelauncher.commands.ExecInfo;
+import ohi.andre.consolelauncher.managers.ContactManager;
 import ohi.andre.consolelauncher.managers.PreferencesManager;
 
 public class refresh implements CommandAbstraction {
@@ -14,6 +15,8 @@ public class refresh implements CommandAbstraction {
         info.appsManager.fill(((Activity) info.context).getPreferences(0));
         info.preferencesManager.refresh(PreferencesManager.ALIAS);
         info.aliasManager.reload();
+        info.player.refresh(info.context);
+        info.contacts = new ContactManager(info.context);
 
         return info.res.getString(R.string.output_refresh);
     }
diff --git a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/search.java b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/search.java
index 4ddbf4dd22ccbb93faca643ac86544d9e4e51935..05036c262b48f5cf6309be375b01b901bd864e37 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/commands/raw/search.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/commands/raw/search.java
@@ -12,6 +12,7 @@ import java.util.List;
 import ohi.andre.comparestring.Compare;
 import ohi.andre.consolelauncher.R;
 import ohi.andre.consolelauncher.commands.CommandAbstraction;
+import ohi.andre.consolelauncher.commands.CommandsPreferences;
 import ohi.andre.consolelauncher.commands.ExecInfo;
 import ohi.andre.consolelauncher.managers.FileManager;
 import ohi.andre.consolelauncher.tuils.Tuils;
@@ -33,10 +34,18 @@ public class search implements CommandAbstraction {
 
     @Override
     public String exec(ExecInfo info) {
-        String param = info.get(String.class, 0);
         List<String> args = info.get(ArrayList.class, 1);
-        if (args == null) {
-            return info.res.getString(R.string.output_nothing_found);
+
+        String param = info.get(String.class, 0);
+        if(param == null) {
+            return info.context.getString(R.string.output_nothing_found);
+        }
+        if(!param.startsWith("-")) {
+            if(args == null) {
+                args = new ArrayList<>();
+            }
+            args.add(0,param);
+            param = info.cmdPrefs.forCommand("search").get(CommandsPreferences.DEFAULT_PARAM);
         }
 
         switch (param) {
@@ -51,7 +60,7 @@ public class search implements CommandAbstraction {
             case URL_PARAM:
                 return url(args.get(0), info.context, info.res);
             default:
-                return info.res.getString(R.string.output_invalid_param);
+                return info.res.getString(R.string.output_invalid_param) + Tuils.SPACE + param;
         }
     }
 
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java
index 024cbbf08ce2f2db1e53fcd53ecc493808ca05dd..17ff38cd6c13352565b9d7e646408aeb7dde7491 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java
@@ -42,10 +42,6 @@ public class AliasManager implements Reloadable {
         return alias.get(s);
     }
 
-    public Set<String> getAliass() {
-        return alias.keySet();
-    }
-
     @Override
     public void reload() {
         alias = new HashMap<>();
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java
index dcf1d532881d9cca4e1093acc5470899ae0e0dc2..c663e266ad5bba98da138db06afc8e8ea537ecf0 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java
@@ -14,6 +14,7 @@ import android.os.Build;
 import android.util.Log;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
@@ -154,9 +155,12 @@ public class AppsManager {
     }
 
     public String findPackage(String name) {
-        List<AppInfo> allApps = new ArrayList<>(appsHolder.getApps());
-        allApps.addAll(hiddenApps);
-        return findPackage(allApps, null, name);
+        List<AppInfo> apps = appsHolder.getApps();
+        if(apps != null) {
+            apps.addAll(hiddenApps);
+            return findPackage(apps, null, name);
+        }
+        return null;
     }
 
     public String findPackage(List<AppInfo> appList, List<String> labels, String name) {
@@ -478,9 +482,8 @@ public class AppsManager {
                         continue Second;
                     }
 
-                    if (!info.equals(info2) && info.publicLabel.equals(info2.publicLabel)) {
-                        list.set(count, new AppInfo(info2.packageName, getNewLabel(info2.publicLabel, info2.packageName),
-                                info2.launchedTimes));
+                    if (info.publicLabel.toLowerCase().replace(Tuils.SPACE, Tuils.EMPTYSTRING).equals(info2.publicLabel.replace(Tuils.SPACE, Tuils.EMPTYSTRING))) {
+                        list.set(count, new AppInfo(info2.packageName, getNewLabel(info2.publicLabel, info2.packageName), info2.launchedTimes));
                     }
                 }
             }
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/ContactManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/ContactManager.java
index 9aae09f6227a4d15320903ed51b15b05747d81ac..b1e642f1f9f29983426101e83577115d89c0c053 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/ContactManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/ContactManager.java
@@ -37,14 +37,15 @@ public class ContactManager {
         }
 
         Cursor phones = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
-        while (phones != null && phones.moveToNext()) {
-            String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
-            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
+        if (phones != null) {
+            while (phones.moveToNext()) {
+                String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
+                String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
 
-            contacts.put(name, phoneNumber);
-        }
-        if (phones != null)
+                contacts.put(name, phoneNumber);
+            }
             phones.close();
+        }
 
         return contacts;
     }
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/MusicManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/MusicManager.java
index 91d92b217461335642e4254660f6ad40ec8507de..ea9a2348739ed021564091d77c462355b7ca7f48 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/MusicManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/MusicManager.java
@@ -30,6 +30,9 @@ public class MusicManager implements OnCompletionListener {
     private int currentSongIndex = 0;
     private File currentSong = null;
 
+    private boolean fromMediastore;
+    File songsFolder;
+
     private Outputable outputable;
 
     //	headset broadcast
@@ -50,13 +53,15 @@ public class MusicManager implements OnCompletionListener {
         c.registerReceiver(headsetReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG));
 
         boolean randomActive = Boolean.parseBoolean(preferencesManager.getValue(PreferencesManager.PLAY_RANDOM));
-
-        if(Boolean.parseBoolean(preferencesManager.getValue(PreferencesManager.FROM_MEDIASTORE))) {
-            files = Tuils.getMediastoreSongs(c);
+        fromMediastore = Boolean.parseBoolean(preferencesManager.getValue(PreferencesManager.FROM_MEDIASTORE));
+        if(fromMediastore) {
+            songsFolder = null;
         } else {
-            files = Tuils.getSongsInFolder(new File(preferencesManager.getValue(PreferencesManager.SONGSFOLDER)));
+            songsFolder = new File(preferencesManager.getValue(PreferencesManager.SONGSFOLDER));
         }
 
+        refresh(c);
+
         if(randomActive && files != null) {
             Collections.shuffle(files);
         }
@@ -88,8 +93,9 @@ public class MusicManager implements OnCompletionListener {
     public List<String> getNames() {
         List<String> names = new ArrayList<>();
 
-        for (File file : files)
+        for (File file : files) {
             names.add(file.getName());
+        }
 
         Collections.sort(names);
 
@@ -188,6 +194,15 @@ public class MusicManager implements OnCompletionListener {
                 " (" + (100 * position / total) + "%)";
     }
 
+    public void refresh(Context c) {
+        if(fromMediastore) {
+            files = Tuils.getMediastoreSongs(c);
+        } else {
+            files = Tuils.getSongsInFolder(songsFolder);
+        }
+
+    }
+
     @Override
     public void onCompletion(MediaPlayer mp) {
         outputable.onOutput(next());
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/PreferencesManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/PreferencesManager.java
index 8edda30a0bb570af6f68799eadf8723be7a149be..27355d8d86b1ea51e48143c68eb13b7ff7ef1be5 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/PreferencesManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/PreferencesManager.java
@@ -63,6 +63,8 @@ public class PreferencesManager {
     public static final String COMPARESTRING_APPS = "compareStringForApps";
     public static final String SHOW_DONATE_MESSAGE = "showDonationMessage";
 
+    public static final String DEFAULT_SEARCH = "defaultSearch";
+
     public static final String ALIAS_FILENAME = "alias.txt";
     public static final int ALIAS = 11;
 
diff --git a/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java b/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java
index 4cbb9771fd56548bad3902b65d988e06ab1d20c9..62ed4c6060a2ffbfcef4437395b8a67122bcfe51 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java
@@ -7,6 +7,7 @@ import android.app.Activity;
 import android.app.ActivityManager;
 import android.app.ActivityManager.MemoryInfo;
 import android.app.admin.DevicePolicyManager;
+import android.content.ActivityNotFoundException;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -19,6 +20,7 @@ import android.provider.MediaStore;
 import android.provider.Settings;
 import android.support.v4.content.FileProvider;
 import android.text.TextUtils;
+import android.util.Log;
 import android.util.Patterns;
 import android.widget.Toast;
 
@@ -76,7 +78,10 @@ public class Tuils {
 
         for (File file : files) {
             if (file.isDirectory()) {
-                songs.addAll(getSongsInFolder(file));
+                List<File> s = getSongsInFolder(file);
+                if(s != null) {
+                    songs.addAll(s);
+                }
             }
             else if (containsExtension(MusicManager.MUSIC_EXTENSIONS, file.getName())) {
                 songs.add(file);
@@ -92,13 +97,12 @@ public class Tuils {
     }
 
     @TargetApi(Build.VERSION_CODES.GINGERBREAD)
-    public static void openSettingsPage(Activity c, String toast) {
+    public static void openSettingsPage(Context c, String packageName) {
         Intent intent = new Intent();
         intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
-        Uri uri = Uri.fromParts("package", c.getPackageName(), null);
+        Uri uri = Uri.fromParts("package", packageName, null);
         intent.setData(uri);
         c.startActivity(intent);
-        Toast.makeText(c, toast, Toast.LENGTH_LONG).show();
     }
 
     public static void requestAdmin(Activity a, ComponentName component, String label) {
@@ -300,6 +304,9 @@ public class Tuils {
     }
 
     public static boolean isAlpha(String s) {
+        if(s == null) {
+            return false;
+        }
         char[] chars = s.toCharArray();
 
         for (char c : chars)
@@ -310,6 +317,9 @@ public class Tuils {
     }
 
     public static boolean isNumber(String s) {
+        if(s == null) {
+            return false;
+        }
         char[] chars = s.toCharArray();
 
         for (char c : chars) {
@@ -346,145 +356,52 @@ public class Tuils {
             for (Account a : accs)
                 if (email.matcher(a.name).matches())
                     return a.name;
-        } catch (Exception e) {
+        } catch (SecurityException e) {
             return null;
         }
         return null;
     }
 
     public static Intent openFile(Context context, File url) {
-        Uri uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", url);
-
         Intent intent = new Intent(Intent.ACTION_VIEW);
-        if (url.toString().contains(".doc") || url.toString().contains(".docx")) {
-            // Word document
-            intent.setDataAndType(uri, "application/msword");
-        } else if (url.toString().contains(".apk")) {
-            // apk
-            intent.setDataAndType(uri,
-                    "application/vnd.android.package-archive");
-        } else if (url.toString().contains(".pdf")) {
-            // PDF file
-            intent.setDataAndType(uri, "application/pdf");
-        } else if (url.toString().contains(".ppt")
-                || url.toString().contains(".pptx")) {
-            // Powerpoint file
-            intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
-        } else if (url.toString().contains(".xls")
-                || url.toString().contains(".xlsx")) {
-            // Excel file
-            intent.setDataAndType(uri, "application/vnd.ms-excel");
-        } else if (url.toString().contains(".zip")
-                || url.toString().contains(".rar")) {
-            // ZIP Files
-            intent.setDataAndType(uri, "application/zip");
-        } else if (url.toString().contains(".rtf")) {
-            // RTF file
-            intent.setDataAndType(uri, "application/rtf");
-        } else if (url.toString().contains(".wav")
-                || url.toString().contains(".mp3")) {
-            // WAV audio file
-            intent.setDataAndType(uri, "audio/x-wav");
-        } else if (url.toString().contains(".gif")) {
-            // GIF file
-            intent.setDataAndType(uri, "image/gif");
-        } else if (url.toString().contains(".jpg")
-                || url.toString().contains(".jpeg")
-                || url.toString().contains(".png")) {
-            // JPG file
-            intent.setDataAndType(uri, "image/jpeg");
-        } else if (url.toString().contains(".txt")) {
-            // Text file
-            intent.setDataAndType(uri, "text/plain");
-        } else if (url.toString().contains(".3gp")
-                || url.toString().contains(".mpg")
-                || url.toString().contains(".mpeg")
-                || url.toString().contains(".mpe")
-                || url.toString().contains(".mp4")
-                || url.toString().contains(".avi")) {
-            // Video files
-            intent.setDataAndType(uri, "video/*");
-        } else {
-            intent.setDataAndType(uri, "*/*");
-        }
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 
         intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
         intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
-        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+        Uri uri = FileProvider.getUriForFile(context, "ohi.andre.consolelauncher.provider", url);
+        intent.setDataAndType(uri, context.getContentResolver().getType(uri));
+
         return intent;
     }
 
     public static Intent shareFile(Context c, File url) {
-        Uri uri = FileProvider.getUriForFile(c, BuildConfig.APPLICATION_ID + ".provider", url);
-
-        Intent intent = new Intent(Intent.ACTION_VIEW);
-
-        if (url.toString().contains(".doc") || url.toString().contains(".docx")) {
-            // Word document
-            intent.setDataAndType(uri, "application/msword");
-        } else if (url.toString().contains(".apk")) {
-            // apk
-            intent.setDataAndType(uri,
-                    "application/vnd.android.package-archive");
-        } else if (url.toString().contains(".pdf")) {
-            // PDF file
-            intent.setDataAndType(uri, "application/pdf");
-        } else if (url.toString().contains(".ppt")
-                || url.toString().contains(".pptx")) {
-            // Powerpoint file
-            intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
-        } else if (url.toString().contains(".xls")
-                || url.toString().contains(".xlsx")) {
-            // Excel file
-            intent.setDataAndType(uri, "application/vnd.ms-excel");
-        } else if (url.toString().contains(".zip")
-                || url.toString().contains(".rar")) {
-            // ZIP Files
-            intent.setDataAndType(uri, "application/zip");
-        } else if (url.toString().contains(".rtf")) {
-            // RTF file
-            intent.setDataAndType(uri, "application/rtf");
-        } else if (url.toString().contains(".wav")
-                || url.toString().contains(".mp3")) {
-            // WAV audio file
-            intent.setDataAndType(uri, "audio/x-wav");
-        } else if (url.toString().contains(".gif")) {
-            // GIF file
-            intent.setDataAndType(uri, "image/gif");
-        } else if (url.toString().contains(".jpg")
-                || url.toString().contains(".jpeg")
-                || url.toString().contains(".png")) {
-            // JPG file
-            intent.setDataAndType(uri, "image/jpeg");
-        } else if (url.toString().contains(".txt")) {
-            // Text file
-            intent.setDataAndType(uri, "text/plain");
-        } else if (url.toString().contains(".3gp")
-                || url.toString().contains(".mpg")
-                || url.toString().contains(".mpeg")
-                || url.toString().contains(".mpe")
-                || url.toString().contains(".mp4")
-                || url.toString().contains(".avi")) {
-            // Video files
-            intent.setDataAndType(uri, "video/*");
-        } else {
-            intent.setDataAndType(uri, "*/*");
-        }
+        Intent intent = new Intent(Intent.ACTION_SEND);
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 
-        intent.putExtra(Intent.EXTRA_STREAM, uri);
         intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
         intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
-        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        return intent;
 
+        Uri uri = FileProvider.getUriForFile(c, "ohi.andre.consolelauncher.provider", url);
+        intent.setDataAndType(uri, c.getContentResolver().getType(uri));
+
+        return intent;
     }
 
     public static String getInternalDirectoryPath() {
-        return Environment.getExternalStorageDirectory().getAbsolutePath();
+        File f = Environment.getExternalStorageDirectory();
+        if(f != null) {
+            return f.getAbsolutePath();
+        }
+        return null;
     }
 
     public static File getTuiFolder() {
-        return new File(Tuils.getInternalDirectoryPath(), TUI_FOLDER);
+        String internalDir = Tuils.getInternalDirectoryPath();
+        if(internalDir == null) {
+            return null;
+        }
+        return new File(internalDir, TUI_FOLDER);
     }
 
     public static List<File> getMediastoreSongs(Context activity) {
@@ -498,22 +415,18 @@ public class Tuils {
         Cursor cur = cr.query(uri, null, selection, null, sortOrder);
         int count = 0;
 
-        if(cur != null)
-        {
+        if(cur != null) {
             count = cur.getCount();
-
-            if(count > 0)
-            {
-                while(cur.moveToNext())
-                {
+            if(count > 0) {
+                while(cur.moveToNext()) {
                     String data = cur.getString(cur.getColumnIndex(MediaStore.Audio.Media.DATA));
                     paths.add(new File(data));
                 }
 
             }
-        }
 
-        cur.close();
+            cur.close();
+        }
 
         return paths;
     }
diff --git a/app/src/main/res/raw/settings.txt b/app/src/main/res/raw/settings.txt
index 1b72c360c9410fdffc063b11743ea85edc514917..fc8cfc27979e07f1ba8fc67ce4b8ca4627fa0241 100755
--- a/app/src/main/res/raw/settings.txt
+++ b/app/src/main/res/raw/settings.txt
@@ -50,3 +50,6 @@ showSuggestions=true
 enableEnterInPhysicalKeyboard=false
 compareStringForApps=false
 showDonationMessage=true
+
+// commands
+defaultSearch=-g
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index fdddff0f0196d52999d4ab0cf772d366fe279847..d0c1c734e8d3dfcb96bee5868ee4bcfb60268483 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -6,15 +6,17 @@
     <string name="separator_text_su">$</string>
     <string name="su">T-UI got SU permission</string>
     <string name="nosu">Your device isn\'t rooted</string>
-    <string name="permissions_toast">You have to grant Storage permission at least</string>
+    <string name="permissions_toast">You have to grant Storage permission</string>
     <string name="version_label">Version:</string>
 
-    <string name="rate_donate_text">\nDo you like T-UI? Rate T-UI on Play Store (command: >>rate) or offer me a coffee (command: >>donate).\n\nYou can disable this message with >>tuisettings</string>
+    <string name="rate_donate_text">\nDo you like my work? Rate on Play Store (command: >>rate) or offer me a coffee (command: >>donate). Thank you for using T-UI.\n\nYou can disable this message in >>tuisettings</string>
 
     <!-- app mgr -->
     <string name="output_appnotfound">Application not found</string>
     <string name="output_hideapp">state: hidden</string>
     <string name="output_unhideapp">state: shown</string>
+    <string name="output_showplaystore">Play Store page:</string>
+    <string name="output_showsettings">Settings:</string>
 
     <!-- label -->
     <string name="share_label">Share</string>
@@ -92,7 +94,7 @@
         \n(Francesco Andreuzzi) - CompareString
         \nApache commons-io
     </string>
-    <string name="output_refresh">Refreshed: apps and alias</string>
+    <string name="output_refresh">Refresh: apps, alias, music, contacts</string>
     <string name="output_rate">Thank you!</string>
     <string name="output_lookfortutorial">Looking for Tutorial</string>
 
@@ -102,11 +104,15 @@
     <string name="help_aliases">Print alias that are currently saved in \"sdcard\"/t-ui/alias.txt</string>
     <string name="help_aliasfile">Open alias.txt</string>
     <string name="help_apps">Manage your apps
-        \nUsage apps [option] [app name]
+        \n\nUsage:
+        \napps [option] [app name]
         \n\n[option] can be:
         \n-h [app name] -> hide the app
         \n-uh [app name] -> unhide the app
         \n-sh -> show hidden apps
+        \n-ps [app name] -> show Google Play Store page for this app
+        \n-st [app name] -> show Settings details for this app
+        \n-f [app name] -> force t-ui to open this app
         \nno option -> list your apps
         \n\nExample:
         \napps -h whatsapp
@@ -119,7 +125,8 @@
     </string>
     <string name="help_contacts">Print your contacts</string>
     <string name="help_cp">Copy one or more files to a folder
-        \nUsage: [su] cp [files] [folder]
+        \nUsage:
+        \n[su] cp [files] [folder]
         \n\nExample:
         \nsu cp fool.txt fool2.png myFolder
         \ncp myFile.txt myFolder
@@ -128,18 +135,21 @@
     <string name="help_donate">Donate something to the developer</string>
     <string name="help_flash">Toggle the flashlight</string>
     <string name="help_help">Print a list of available commands at this moment, or informations about a command
-        \nUsage: help command
+        \nUsage:
+        \nhelp [command]
         \n\nExample:
         \nhelp search
     </string>
     <string name="help_mv">Move one or more files to a folder
-        \nUsage: [su] mv [files] [folder]
+        \nUsage:
+        \n[su] mv [files] [folder]
         \n\nsu mv fool.txt fool2.png myFolder
         \nmv fool.txt myFolder
     </string>
     <string name="help_next">Play the next track in the queue</string>
     <string name="help_listen">Play a specific track
-        \nUsage: listen trackname
+        \nUsage:
+        \nlisten trackname
         \n\nExample:
         \nplay back in black
         \n\n(The track has to be located in your Music Folder)
@@ -152,13 +162,15 @@
     </string>
     <string name="help_restart">Restart t-ui and load modified values</string>
     <string name="help_rm">Remove a file:
-        \nUsage: [su] rm [files]
+        \nUsage:
+        \n[su] rm [files]
         \n\nExample:
         \n\nsu rm fool.txt fool2.png
         \nrm Downloads/fool.txt
     </string>
     <string name="help_search">Search something somewhere
-        \nUsage: search [option] something
+        \nUsage:
+        \nsearch [option] something
         \n\n[option] can be:
         \n-g -> (Google Search)
         \n-p -> (Google Play Store)
@@ -168,7 +180,8 @@
         \nsearch -p T-UI
     </string>
     <string name="help_share">Share a file
-        \nUsage: share pathToFile
+        \nUsage:
+        \nshare pathToFile
         \n\nExample:
         \nshare fool.jpg
     </string>
@@ -181,7 +194,8 @@
     <string name="help_tuisettings">Open t-ui settings file</string>
     <string name="help_tutorial">Go to T-UI tutorial page</string>
     <string name="help_uninstall">Uninstall an application
-        \nUsage: uninstall appName OR packageName
+        \nUsage:
+        \nuninstall appName OR packageName
         \n\nExample:
         \nuninstall dropbox
     </string>
@@ -189,17 +203,20 @@
 
     <!-- linux -->
     <string name="help_cd">Change the current directory
-        \nUsage: cd path
+        \nUsage:
+        \ncd [path]
         \n\nExample:
         \ncd /storage/sdcard1/DCIM
     </string>
     <string name="help_open">Open a file with the default application
-        \nUsage: open pathToFile
+        \nUsage:
+        \nopen [pathToFile]
         \n\nExample:
         \nopen docs/fool.txt
     </string>
     <string name="help_ls">Print a list of the files in a directory
-        \nUsage: ls directory
+        \nUsage:
+        \nls [directory]
         \n\nExample:
         \nls Downloads
     </string>