diff --git a/app/build.gradle b/app/build.gradle
index 991a1d717e208b6d39e562881bcd0843a90ab178..809e6af677dd78be25cff49f0439807e3934eb59 100755
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,7 +3,7 @@ apply plugin: 'com.google.gms.google-services'
 android {
 
     compileSdkVersion 25
-    buildToolsVersion '25.0.2'
+    buildToolsVersion '26.0.2'
 
     defaultConfig {
         applicationId "ohi.andre.consolelauncher"
@@ -11,7 +11,7 @@ android {
         minSdkVersion 9
         targetSdkVersion 23
 
-        versionCode 150
+        versionCode 151
         versionName "6.4"
     }
 
@@ -38,16 +38,9 @@ android {
         compile 'com.android.support:appcompat-v7:23.4.0'
     }
 
-    applicationVariants.all { variant ->
-        def vn = variant.versionName
-
-        def x = vn.substring(0, vn.length() - 1)
-        if (x.endsWith(".")) x = vn
-
-        variant.outputs.each { output ->
-            output.outputFile = new File(
-                    output.outputFile.parent,
-                    output.outputFile.name.replace("app-release.apk", "${x}/${variant.applicationId}_${variant.versionName}_${new Date().format("dd-MM_hh.mm.ss")}.apk"))
+    android.applicationVariants.all { variant ->
+        variant.outputs.all {
+            outputFileName = "./${variant.versionName}/${variant.versionCode}.apk"
         }
     }
 
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 5314d8f74a43b66e83f823d0ba229cb1e7526ae1..cc9cb28838e4c8ce2d3746671a7d2029b91a60f6 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/AliasManager.java
@@ -146,7 +146,10 @@ public class AliasManager implements Reloadable {
         if(aliases != null) aliases.clear();
         else aliases = new ArrayList<>();
 
-        File file = new File(Tuils.getFolder(), PATH);
+        File root = Tuils.getFolder();
+        if(root == null) return;
+
+        File file = new File(root, PATH);
 
         try {
             if(!file.exists()) file.createNewFile();
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 63c0d415767b0bb4c5a53686b3d3c20e48b6ad56..8a8c5dbf667ce22ee826ebb496e9e432d63beff4 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/AppsManager.java
@@ -132,7 +132,9 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement {
             pn = null;
         }
 
-        this.file = new File(Tuils.getFolder(), PATH);
+        File root = Tuils.getFolder();
+        if(root == null) this.file = null;
+        else this.file = new File(root, PATH);
 
         this.preferences = context.getSharedPreferences(PREFS, 0);
         this.editor = preferences.edit();
@@ -170,148 +172,152 @@ public class AppsManager implements XMLPrefsManager.XmlPrefsElement {
         try {
             defaultApps = new XMLPrefsManager.XMLPrefsList();
 
-            if(!file.exists()) {
-                resetFile(file, NAME);
-            }
+            if(file != null) {
+                if(!file.exists()) {
+                    resetFile(file, NAME);
+                }
 
-            Object[] o;
-            try {
-                o = XMLPrefsManager.buildDocument(file, NAME);
-                if(o == null) {
-                    Tuils.sendXMLParseError(context, PATH);
+                Object[] o;
+                try {
+                    o = XMLPrefsManager.buildDocument(file, NAME);
+                    if(o == null) {
+                        Tuils.sendXMLParseError(context, PATH);
+                        return;
+                    }
+                } catch (Exception e) {
+                    Tuils.sendXMLParseError(context, PATH, e);
                     return;
                 }
-            } catch (Exception e) {
-                Tuils.sendXMLParseError(context, PATH, e);
-                return;
-            }
 
-            Document d = (Document) o[0];
-            Element root = (Element) o[1];
+                Document d = (Document) o[0];
+                Element root = (Element) o[1];
 
-            List<Apps> enums = new ArrayList<>(Arrays.asList(Apps.values()));
-            NodeList nodes = root.getElementsByTagName("*");
+                List<Apps> enums = new ArrayList<>(Arrays.asList(Apps.values()));
+                NodeList nodes = root.getElementsByTagName("*");
 
-            for (int count = 0; count < nodes.getLength(); count++) {
-                final Node node = nodes.item(count);
+                for (int count = 0; count < nodes.getLength(); count++) {
+                    final Node node = nodes.item(count);
 
-                String nn = node.getNodeName();
-                int nodeIndex = Tuils.find(nn, (List) enums);
-                if (nodeIndex != -1) {
-                    defaultApps.add(nn, node.getAttributes().getNamedItem(VALUE_ATTRIBUTE).getNodeValue());
+                    String nn = node.getNodeName();
+                    int nodeIndex = Tuils.find(nn, (List) enums);
+                    if (nodeIndex != -1) {
+                        defaultApps.add(nn, node.getAttributes().getNamedItem(VALUE_ATTRIBUTE).getNodeValue());
 
-                    for (int en = 0; en < enums.size(); en++) {
-                        if (enums.get(en).label().equals(nn)) {
-                            enums.remove(en);
-                            break;
+                        for (int en = 0; en < enums.size(); en++) {
+                            if (enums.get(en).label().equals(nn)) {
+                                enums.remove(en);
+                                break;
+                            }
                         }
                     }
-                }
 //                todo support delete
-                else {
-                    if (node.getNodeType() == Node.ELEMENT_NODE) {
-                        final Element e = (Element) node;
-
-                        if(e.hasAttribute(APPS_ATTRIBUTE)) {
-                            final String name = e.getNodeName();
-                            if(name.contains(Tuils.SPACE)) {
-                                Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_groupspace) + ": " + name);
-                                continue;
-                            }
+                    else {
+                        if (node.getNodeType() == Node.ELEMENT_NODE) {
+                            final Element e = (Element) node;
+
+                            if(e.hasAttribute(APPS_ATTRIBUTE)) {
+                                final String name = e.getNodeName();
+                                if(name.contains(Tuils.SPACE)) {
+                                    Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_groupspace) + ": " + name);
+                                    continue;
+                                }
 
-                            new StoppableThread() {
-                                @Override
-                                public void run() {
-                                    super.run();
+                                new StoppableThread() {
+                                    @Override
+                                    public void run() {
+                                        super.run();
 
-                                    Group g = new Group(name);
+                                        Group g = new Group(name);
 
-                                    String apps = e.getAttribute(APPS_ATTRIBUTE);
-                                    String[] split = apps.split(APPS_SEPARATOR);
+                                        String apps = e.getAttribute(APPS_ATTRIBUTE);
+                                        String[] split = apps.split(APPS_SEPARATOR);
 
-                                    List<LaunchInfo> as = new ArrayList<>(allApps);
+                                        List<LaunchInfo> as = new ArrayList<>(allApps);
 
-                                    External:
-                                    for(String s : split) {
-                                        for(int c = 0; c < as.size(); c++) {
-                                            if(as.get(c).equals(s)) {
-                                                g.add(as.remove(c));
-                                                continue External;
+                                        External:
+                                        for(String s : split) {
+                                            for(int c = 0; c < as.size(); c++) {
+                                                if(as.get(c).equals(s)) {
+                                                    g.add(as.remove(c));
+                                                    continue External;
+                                                }
                                             }
                                         }
-                                    }
 
-                                    if(e.hasAttribute(BGCOLOR_ATTRIBUTE)) {
-                                        String c = e.getAttribute(BGCOLOR_ATTRIBUTE);
-                                        if(c.length() > 0) {
-                                            try {
-                                                g.setBgColor(Color.parseColor(c));
-                                            } catch (Exception e) {
-                                                Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_invalidcolor) + ": " + c);
+                                        if(e.hasAttribute(BGCOLOR_ATTRIBUTE)) {
+                                            String c = e.getAttribute(BGCOLOR_ATTRIBUTE);
+                                            if(c.length() > 0) {
+                                                try {
+                                                    g.setBgColor(Color.parseColor(c));
+                                                } catch (Exception e) {
+                                                    Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_invalidcolor) + ": " + c);
+                                                }
                                             }
                                         }
-                                    }
 
-                                    if(e.hasAttribute(FORECOLOR_ATTRIBUTE)) {
-                                        String c = e.getAttribute(FORECOLOR_ATTRIBUTE);
-                                        if(c.length() > 0) {
-                                            try {
-                                                g.setForeColor(Color.parseColor(c));
-                                            } catch (Exception e) {
-                                                Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_invalidcolor) + ": " + c);
+                                        if(e.hasAttribute(FORECOLOR_ATTRIBUTE)) {
+                                            String c = e.getAttribute(FORECOLOR_ATTRIBUTE);
+                                            if(c.length() > 0) {
+                                                try {
+                                                    g.setForeColor(Color.parseColor(c));
+                                                } catch (Exception e) {
+                                                    Tuils.sendOutput(Color.RED, context, PATH + ": " + context.getString(R.string.output_invalidcolor) + ": " + c);
+                                                }
                                             }
                                         }
-                                    }
 
-                                    groups.add(g);
-                                }
-                            }.start();
-                        } else {
-                            boolean shown = !e.hasAttribute(SHOW_ATTRIBUTE) || Boolean.parseBoolean(e.getAttribute(SHOW_ATTRIBUTE));
-                            if (!shown) {
-                                ComponentName name = null;
-
-                                String[] split = nn.split("-");
-                                if (split.length >= 2) {
-                                    name = new ComponentName(split[0], split[1]);
-                                } else if (split.length == 1) {
-                                    if (split[0].contains("Activity")) {
-                                        for (LaunchInfo i : allApps) {
-                                            if (i.componentName.getClassName().equals(split[0]))
-                                                name = i.componentName;
-                                        }
-                                    } else {
-                                        for (LaunchInfo i : allApps) {
-                                            if (i.componentName.getPackageName().equals(split[0]))
-                                                name = i.componentName;
+                                        groups.add(g);
+                                    }
+                                }.start();
+                            } else {
+                                boolean shown = !e.hasAttribute(SHOW_ATTRIBUTE) || Boolean.parseBoolean(e.getAttribute(SHOW_ATTRIBUTE));
+                                if (!shown) {
+                                    ComponentName name = null;
+
+                                    String[] split = nn.split("-");
+                                    if (split.length >= 2) {
+                                        name = new ComponentName(split[0], split[1]);
+                                    } else if (split.length == 1) {
+                                        if (split[0].contains("Activity")) {
+                                            for (LaunchInfo i : allApps) {
+                                                if (i.componentName.getClassName().equals(split[0]))
+                                                    name = i.componentName;
+                                            }
+                                        } else {
+                                            for (LaunchInfo i : allApps) {
+                                                if (i.componentName.getPackageName().equals(split[0]))
+                                                    name = i.componentName;
+                                            }
                                         }
                                     }
-                                }
 
-                                if (name == null) continue;
+                                    if (name == null) continue;
 
-                                LaunchInfo removed = AppUtils.findLaunchInfoWithComponent(allApps, name);
-                                if (removed != null) {
-                                    allApps.remove(removed);
-                                    hiddenApps.add(removed);
+                                    LaunchInfo removed = AppUtils.findLaunchInfoWithComponent(allApps, name);
+                                    if (removed != null) {
+                                        allApps.remove(removed);
+                                        hiddenApps.add(removed);
+                                    }
                                 }
                             }
                         }
                     }
                 }
-            }
 
-            if (enums.size() > 0) {
-                for (XMLPrefsManager.XMLPrefsSave s : enums) {
-                    String value = s.defaultValue();
+                if (enums.size() > 0) {
+                    for (XMLPrefsManager.XMLPrefsSave s : enums) {
+                        String value = s.defaultValue();
 
-                    Element em = d.createElement(s.label());
-                    em.setAttribute(VALUE_ATTRIBUTE, value);
-                    root.appendChild(em);
+                        Element em = d.createElement(s.label());
+                        em.setAttribute(VALUE_ATTRIBUTE, value);
+                        root.appendChild(em);
 
-                    defaultApps.add(s.label(), value);
+                        defaultApps.add(s.label(), value);
+                    }
+                    writeTo(d, file);
                 }
-                writeTo(d, file);
+            } else {
+                Tuils.sendOutput(Color.RED, context, R.string.tuinotfound_app);
             }
 
             for (Map.Entry<String, ?> entry : this.preferences.getAll().entrySet()) {
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/RegexManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/RegexManager.java
index dbb52773fa594a286d6528ff53d895f17be6ed3c..fe018ea1eab6ae078d9aae53e9e8010fa2516e0a 100644
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/RegexManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/RegexManager.java
@@ -1,6 +1,7 @@
 package ohi.andre.consolelauncher.managers;
 
 import android.content.Context;
+import android.graphics.Color;
 import android.text.SpannableString;
 
 import org.w3c.dom.Document;
@@ -14,6 +15,7 @@ import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import ohi.andre.consolelauncher.R;
 import ohi.andre.consolelauncher.managers.xml.XMLPrefsManager;
 import ohi.andre.consolelauncher.managers.xml.options.Theme;
 import ohi.andre.consolelauncher.tuils.StoppableThread;
@@ -47,7 +49,13 @@ public class RegexManager {
                 super.run();
 
                 try {
-                    File file = new File(Tuils.getFolder(), PATH);
+                    File root = Tuils.getFolder();
+                    if(root == null) {
+                        Tuils.sendOutput(Color.RED, context, R.string.tuinotfound_rss);
+                        return;
+                    }
+
+                    File file = new File(root, PATH);
                     if(!file.exists()) {
                         file.createNewFile();
                         XMLPrefsManager.resetFile(file, ROOT);
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java
index 0ad120e2ef0d320210b366dd978303942363b4a3..6b000632f25901de93d9e42b920271fe33a15623 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationManager.java
@@ -2,6 +2,7 @@ package ohi.andre.consolelauncher.managers.notifications;
 
 import android.annotation.TargetApi;
 import android.content.Context;
+import android.graphics.Color;
 import android.os.Build;
 
 import org.w3c.dom.Document;
@@ -16,6 +17,7 @@ import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import ohi.andre.consolelauncher.R;
 import ohi.andre.consolelauncher.managers.RegexManager;
 import ohi.andre.consolelauncher.managers.xml.XMLPrefsManager;
 import ohi.andre.consolelauncher.managers.xml.options.Notifications;
@@ -78,7 +80,13 @@ public class NotificationManager implements XMLPrefsManager.XmlPrefsElement {
         values = new XMLPrefsManager.XMLPrefsList();
 
         try {
-            File file = new File(Tuils.getFolder(), PATH);
+            File r = Tuils.getFolder();
+            if(r == null) {
+                Tuils.sendOutput(Color.RED, context, R.string.tuinotfound_notifications);
+                return;
+            }
+
+            File file = new File(r, PATH);
             if(!file.exists()) {
                 resetFile(file, NAME);
             }
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java
index b4d60a3368a706dada64dd841afce996479cff54..0cf9fa8d2146bead1f03fce851c7e5c1d2aab6bf 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/notifications/NotificationService.java
@@ -234,8 +234,8 @@ public class NotificationService extends NotificationListenerService {
     public void onCreate() {
         super.onCreate();
 
-        NotificationManager.create(this);
         try {
+            NotificationManager.create(this);
             XMLPrefsManager.create(this);
         } catch (Exception e) {
             return;
diff --git a/app/src/main/java/ohi/andre/consolelauncher/managers/xml/XMLPrefsManager.java b/app/src/main/java/ohi/andre/consolelauncher/managers/xml/XMLPrefsManager.java
index 7dce317237f0c5310c58af397a3feb12719b21e4..b95ed48574fa42527090d473b94143fbec9e7d2b 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/managers/xml/XMLPrefsManager.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/managers/xml/XMLPrefsManager.java
@@ -25,6 +25,7 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
+import ohi.andre.consolelauncher.R;
 import ohi.andre.consolelauncher.managers.xml.options.Behavior;
 import ohi.andre.consolelauncher.managers.xml.options.Cmd;
 import ohi.andre.consolelauncher.managers.xml.options.Suggestions;
@@ -201,6 +202,10 @@ public class XMLPrefsManager {
         called = true;
 
         File folder = Tuils.getFolder();
+        if(folder == null) {
+            Tuils.sendOutput(Color.RED, context, R.string.tuinotfound_xmlprefs);
+            return;
+        }
 
         for(XMLPrefsRoot element : XMLPrefsRoot.values()) {
             File file = new File(folder, element.path);
@@ -544,7 +549,6 @@ public class XMLPrefsManager {
             Element root = (Element) o[1];
 
             if(d == null || root == null) {
-                Tuils.log("document is null or root is null");
                 return Tuils.EMPTYSTRING;
             }
 
@@ -760,14 +764,13 @@ public class XMLPrefsManager {
 
     public static <T> T get(Class<T> c, XMLPrefsManager.XMLPrefsSave prefsSave) {
         try {
-            Tuils.log("list", prefsSave.parent().getValues().values().toString());
             return (T) transform(prefsSave.parent().getValues().get(prefsSave).value, c);
         } catch (Exception e) {
-            Tuils.log(e);
+//            this will happen if the option is not found
             try {
                 return (T) transform(prefsSave.defaultValue(), c);
             } catch (Exception e1) {
-                Tuils.log(e1);
+//                attempts to get a default value for the given type, as we say in italian, "the last beach"
                 return Tuils.getDefaultValue(c);
             }
         }
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 dcbdf10a59bf37dc44b3d05f7fbb9802dd50f846..6b1d83b54acc5bf267abea1bdb32361e5d1e118b 100755
--- a/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java
+++ b/app/src/main/java/ohi/andre/consolelauncher/tuils/Tuils.java
@@ -105,6 +105,9 @@ public class Tuils {
             if(systemFont) globalTypeface = Typeface.DEFAULT;
             else {
                 File tui = Tuils.getFolder();
+                if(tui == null) {
+                    return systemFont ? Typeface.DEFAULT : Typeface.createFromAsset(context.getAssets(), "lucida_console.ttf");
+                }
 
                 File font = null;
                 for(File f : tui.listFiles()) {
@@ -1081,12 +1084,13 @@ public class Tuils {
         return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
     }
 
-    private static final int FILEUPDATE_DELAY = 75;
+    private static final int FILEUPDATE_DELAY = 100;
     private static File folder = null;
     public static File getFolder() {
         if(folder != null) return folder;
 
-        while (true) {
+        int elapsedTime = 0;
+        while (elapsedTime < 3500) {
             File tuiFolder = Tuils.getTuiFolder();
             if(tuiFolder != null && ((tuiFolder.exists() && tuiFolder.isDirectory()) || tuiFolder.mkdir())) {
                 folder = tuiFolder;
@@ -1096,7 +1100,11 @@ public class Tuils {
             try {
                 Thread.sleep(FILEUPDATE_DELAY);
             } catch (InterruptedException e) {}
+
+            elapsedTime += FILEUPDATE_DELAY;
         }
+
+        return null;
     }
 
     public static int alphabeticCompare(String s1, String s2) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4467be3f6b45b1e51d1743e13b4864752e0b5a0d..9f9059a9d8b5561801c5f80d3582b6d0fa4931c2 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -43,6 +43,12 @@
     <string name="permissions_toast">You have to grant Storage permission</string>
     <string name="output_usedefapp">You can use "apps -default_app" instead</string>
 
+    <!-- tui folder not found -->
+    <string name="tuinotfound_app">Your apps preferences couldn\'t be loaded because your \"t-ui\" folder is not readable at the moment (you should try to use the command \"restart\")</string>
+    <string name="tuinotfound_rss">Your rss preferences couldn\'t be loaded because your \"t-ui\" folder is not readable at the moment (you should try to use the command \"restart\")</string>
+    <string name="tuinotfound_notifications">Your notifications preferences couldn\'t be loaded because your \"t-ui\" folder is not readable at the moment (you should try to use the command \"restart\")</string>
+    <string name="tuinotfound_xmlprefs">Your xml preferences couldn\'t be loaded because your \"t-ui\" folder is not readable at the moment (you should try to use the command \"restart\")</string>
+
     <!-- hints -->
     <string name="hint_donate">\nDo you like my work?\nIf yes, rate t-ui on Play Store (cmd: $ rate) or offer me a coffee (cmd: $ donate). Thank you!</string>
     <string name="hint_twitter">Did you know? t-ui is on Twitter. You can have a look with the cmd \"$ tui -twitter\"</string>