diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index 407ea248e0468fa6ee49ddd5cc9023fb716282d6..7f0c22fd1b2ae1afe69d39c6756a6f2eb3f3a77b 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -9,6 +9,7 @@
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
 
     <application
         android:allowBackup="true"
diff --git a/android/assets/gfx/launch_de.png b/android/assets/gfx/launch_de.png
index 6e5e0645f93054541d7af538f5138e6988e3761f..24b70a2661be6608bbd3790e84dc332ecf0c694d 100644
Binary files a/android/assets/gfx/launch_de.png and b/android/assets/gfx/launch_de.png differ
diff --git a/android/assets/gfx/login_de.png b/android/assets/gfx/login_de.png
index 2753dbdce7d6876340a0145a9d329a6ce00aa2a2..05399331e1b9e8cda26dff41a6e17faa71680687 100644
Binary files a/android/assets/gfx/login_de.png and b/android/assets/gfx/login_de.png differ
diff --git a/android/assets/gfx/login_sk.png b/android/assets/gfx/login_sk.png
index b7924b1117c3e44f2f35b1365104860cf73fd179..67452582b22cb4c24aee5f7bac1ce767a4ef83fb 100644
Binary files a/android/assets/gfx/login_sk.png and b/android/assets/gfx/login_sk.png differ
diff --git a/android/assets/text/application/application_de.properties b/android/assets/text/application/application_de.properties
index 4cb2f140994a5e7909a7bde67ef3c1b971af34ac..0fadb27689eac88df54dc0bd57bb2c150acd9f47 100644
--- a/android/assets/text/application/application_de.properties
+++ b/android/assets/text/application/application_de.properties
@@ -51,8 +51,8 @@ game_robbery_description=Training des Arbeitsgedächtnisses
 game_robbery_preloader=Lies dir zu Beginn des Spiels durch, wie du den Einbrecher bzw. die Einbrecherin erkennst.  Merke dir diese Beschreibung.\nBeobachte die Leute, die den Raum betreten, und markiere mit einer BerĂĽhrung den Einbrecher bzw. die Einbrecherin.
 game_kidnapping_title=EntfĂĽhrung
 game_kidnapping_description=Training des Hörgedächtnisses
-game_kidnapping_preloader1=Hör zu und merke dir das\u00A0Geräusch, das du auf der\u00A0Kreuzung gehört hast.
-game_kidnapping_preloader2=Dann hör dir die Geräusche der\u00A0umliegenden Straßen an und\u00A0bestimme, durch welche Straße sie gefahren sind-
+game_kidnapping_preloader1=Hör zu und merke dir\u00A0das Geräusch, das du auf der\u00A0Kreuzung gehört hast.
+game_kidnapping_preloader2=Hör dir\u00A0dann die\u00A0Geräusche der\u00A0umliegenden Straßen an und\u00A0bestimme, durch welche Straße sie gefahren sind.
 game_kidnapping_preloader3=Mit Kopfhörern hörst du die\u00A0Geräusche besser.
 game_pursuit_title=Verfolgung
 game_pursuit_description=Training der räumlichen Orientierung
@@ -62,12 +62,12 @@ game_night_watch_description=Training des Sehgedächtnisses
 game_night_watch_preloader=Pass auf, welche Fenster nach Einbruch der Dunkelheit leuchten und um wieviel Uhr. Stelle nach Tagesanbruch in der Uhr die Zeit ein und markiere die Fenster, die geleuchtet haben.
 game_shooting_range_title=SchieĂźstand
 game_shooting_range_description=Aufmerksamkeitstraining
-game_shooting_range_preloader1=Verfolge aufmerksam die\u00A0Blume im oberen rechten Eck. Versuch, auf dem\u00A0SchieĂźstand Blumen von gleicher Form und\u00A0Farbe zu treffen.
+game_shooting_range_preloader1=Verfolge aufmerksam die\u00A0Blume im oberen rechten Eck. Versuche, auf dem\u00A0SchieĂźstand Blumen mit gleicher Form und\u00A0Farbe zu treffen.
 game_shooting_range_preloader2=Mit einem Klick auf die\u00A0Kiste mit Stern lassen sich die\u00A0Blumen leichter treffen, mit einem Klick auf die\u00A0Kiste mit Schädel schwieriger.
 game_in_the_darkness_title=Im Dunkeln
 game_in_the_darkness_description=Training der Serialität
-game_in_the_darkness_preloader1=Plane Schritt fĂĽr Schritt den\u00A0Weg durch das\u00A0Labyrinth.
-game_in_the_darkness_preloader2=Ziehe die\u00A0richtigen Handlungen in das\u00A0Band auf der\u00A0rechten Seite und\u00A0pass auf alle Hindernisse auf. Sobald du die\u00A0ganze Route geplant hast, drĂĽcke den\u00A0Knopf FERTIG.
+game_in_the_darkness_preloader1=Plane Schritt fĂĽr Schritt den\u00A0Weg duch das\u00A0Labyrinth.
+game_in_the_darkness_preloader2=Ziehe die\u00A0richtigen Handlungen auf die\u00A0rechte Seite und\u00A0pass auf alle Hindernisse auf. Sobald du die\u00A0ganze Route geplant hast, drĂĽcke den\u00A0Knopf FERTIG.
 
 #    <!-- Robbery -->
 robbery_1_finished=Handschellen Standard
@@ -120,7 +120,7 @@ night_watch_2_limit_description=FĂĽr 3 Pokale auf der schwierigen Stufe
 #    <!-- Shooting range -->
 shooting_range_1_finished=Sonntags-SchĂĽtze
 shooting_range_1_finished_description=FĂĽr das Beenden des ersten Spiels
-shooting_range_5_finished=Revolverheld am Mehrlader
+shooting_range_5_finished=Ein Profi im Nachladen
 shooting_range_5_finished_description=FĂĽr fĂĽnf beendete Spiele
 shooting_range_10_finished=Ein Schuss nach dem anderen
 shooting_range_10_finished_description=FĂĽr 10 beendete Spiele
@@ -152,5 +152,5 @@ user_consecutivelyallgames0stars=Goldener KnĂĽppel
 user_consecutivelyallgames0stars_description=FĂĽr das Spielen aller Spiele an einem Tag
 user_consecutivelyallgames2stars=Wachhund
 user_consecutivelyallgames2stars_description=FĂĽr alle Spiele nacheinander auf der mittleren Stufe mit drei Pokalen
-user_consecutivelyallgames3stars=Als Detektiv ein Raubtier
+user_consecutivelyallgames3stars=Als DetektivIn ein Raubtier
 user_consecutivelyallgames3stars_description=FĂĽr alle Spiele nacheinander auf der schwierigen Stufe mit drei Pokalen
diff --git a/android/assets/text/game/kidnapping/kidnapping_de.properties b/android/assets/text/game/kidnapping/kidnapping_de.properties
index 1849ebd57f3529108be49a2da328886526e10a1d..8025cf551b5390c4d1c16152b85a5a0307360ca9 100644
--- a/android/assets/text/game/kidnapping/kidnapping_de.properties
+++ b/android/assets/text/game/kidnapping/kidnapping_de.properties
@@ -1,6 +1,6 @@
 game_kidnapping_replay=Nochmal spielen
 game_kidnapping_rulemessage_understand=Ich verstehe
-game_kidnapping_result_0=Ein Elend, aber wer sagt, dass\u00A0du dich nicht verbessern kannst?
+game_kidnapping_result_0=Ein Jammer, aber wer sagt, dass\u00A0du dich nicht verbessern kannst?
 game_kidnapping_result_1=Mit sauberen Ohren und ein wenig Training kommst du bestimmt weit!
 game_kidnapping_result_2=Gute Ohren stehen einem Detektiv gut!
 game_kidnapping_result_3=Mit so einem Gehör kannst du blind durch die Stadt spazieren!
diff --git a/android/assets/text/game/robbery/robbery_de.properties b/android/assets/text/game/robbery/robbery_de.properties
index 837e0456bd22be48d7d0722abb25222c408a6077..e0ae88a8a2b7c2d482ab19277793717a99ef9826 100644
--- a/android/assets/text/game/robbery/robbery_de.properties
+++ b/android/assets/text/game/robbery/robbery_de.properties
@@ -3,11 +3,11 @@ game_robbery_averagescore=Durchschnittlich identifiziert:
 game_robbery_victorytext_threestars=Mit einer solchen Wache braucht die Bank nicht einmal einen Tresor.
 game_robbery_victorytext_twostar=Deinen Namen pfeifen langsam schon \ndie Elstern von den Dächern.
 game_robbery_victorytext_onestar=Nicht schlecht! Einige Einbrecher hast du jedoch entwischen lassen!
-game_robbery_victorytext_nostar=Du bist bei den Einbrechern eindeutig ambeliebtesten...\nAber! Wenn du trainierst, werden sie bald Angst vor dir haben!
+game_robbery_victorytext_nostar=Du bist bei den Einbrechern zurzeit eindeutig am beliebtesten. \nWenn du aber trainierst, werden sie bald Angst vor dir haben!
 game_robbery_victorytext_summary=Richtig: {0}  [BLACK]{1}/{2}[].
-game_robbery_victorytext_summary_identification=identifiziert
-game_robbery_victorytext_summary_identification_male=identifiziert
-game_robbery_victorytext_summary_identification_female=identifiziert
+game_robbery_victorytext_summary_identification=
+game_robbery_victorytext_summary_identification_male=
+game_robbery_victorytext_summary_identification_female=
 game_robbery_color_red=rot
 game_robbery_color_green=grĂĽn
 game_robbery_color_blue=blau
diff --git a/android/assets/text/screen/encyclopedia/encyclopedia_de.properties b/android/assets/text/screen/encyclopedia/encyclopedia_de.properties
index 9cd9fa3c6ccf5c20233860eb152a6e9561eec2e2..d248955dc5ed7d1d5c6be73fa3fd3b24a94ce28d 100644
--- a/android/assets/text/screen/encyclopedia/encyclopedia_de.properties
+++ b/android/assets/text/screen/encyclopedia/encyclopedia_de.properties
@@ -18,7 +18,7 @@ dysgraphia_hint_text=Wenn du deine Schrift selbst nicht lesen kannst und auch an
 dyslexia=Dyslexie
 dyslexia_definition=Bei Dyslexie bzw. Leseschwäche handelt es sich, die, trotz gutem Unterricht, Übungen zu Hause und ausreichendem (manchmal sogar überdurchschnittlichem!) Intellekt, Schwierigkeiten beim Lesen verursacht.
 
-dyslexia_paragraph_1=Aktuelle Forschungsergebnisse zeigen, dass es sich um (wahrscheinlich erbliche) Schwierigkeiten handelt, die durch Probleme in der Informationsverarbeitung im Gehirn verursacht werden. Probleme mit Dyslexie können ein Leben lang bestehen bleiben, wobei dies auch von ihrer Intensität und dem Umfang therapeutischer Unterstützung abhängt. Bei manchen Menschen sind sie irgendwann gar nicht mehr vorhanden, bei anderen bis ins hohe Alter. Gerade in der heutigen „Informationsgesellschaft“, in der ständig mittels Schreiben und Lesen Informationen ausgetauscht werden, ist Dyslexie für manche zu einem größeren Problem im Vergleich zu früher geworden. Zum Glück gibt es aber viele Möglichkeiten, diesem Problem entgegenzuwirken!
+dyslexia_paragraph_1=Aktuelle Forschungsergebnisse zeigen, dass es sich um (wahrscheinlich erbliche) Schwierigkeiten handelt, die durch Probleme in der Informationsverarbeitung im Gehirn verursacht werden. Probleme mit Dyslexie können ein Leben lang bestehen bleiben, wobei dies auch von ihrer Intensität und dem Umfang therapeutischer Unterstützung abhängt. Bei manchen Menschen sind sie irgendwann gar nicht mehr vorhanden, bei anderen bis ins hohe Alter. Gerade in der heutigen "Informationsgesellschaft", in der ständig mittels Schreiben und Lesen Informationen ausgetauscht werden, ist Dyslexie für manche zu einem größeren Problem im Vergleich zu früher geworden. Zum Glück gibt es aber viele Möglichkeiten, diesem Problem entgegenzuwirken!
 
 dyslexia_paragraph_2=Dabei ist es wichtig, sich bewusst zu machen, unter welchen Bedingungen man am besten liest, um diese nutzen zu können. Eine Rolle können z.B. die Tageszeit, aber auch Ruhe und genügend Zeit zum Lesen sowie das Nutzen verschiedener moderner Technologien (wie zum Beispiel elektronische Lesegeräte, Stimmausgabe am Computer, Einstellungen des Computers, die die Texte möglichst überschaubar machen, und so weiter) spielen. Betroffene können generell gut lernen und auch Experten bzw. Expertinnen in ihrem Fachbereich werden. Wie bei vielen anderen Lernstörungen gilt auch bei der Dyslexie, dass Betroffene Anspruch auf Anpassung an ihre Lernbedürfnisse in der Schule haben. Aus diesem Grund ist es gut zu wissen, was genau sie brauchen, damit die Anpassungen wirklich effektiv sind.
 
@@ -29,7 +29,7 @@ dysorthographia=Dysorthographie
 
 dysorthographia_definition=Bei der Dysorthographie oder Rechtschreibschwäche stehen Schwierigkeiten beim, wie der Name schon sagt, Rechtschreiben, im Mittelpunkt. Texte von Betroffenen enthalten oft viele Fehler und Ungenauigkeiten, die wiederholt passieren.
 
-dysorthographia_paragraph_1=Zu typischen Fehlern gehören das Auslassen von Wörtern, das Verwechseln ähnlich klingender Buchstaben und Laute oder das Vertauschen von Lauten in Wörtern, sodass sie nicht mehr erkennbar sind. Betroffene können manchmal den richtigen Laut „nicht hören“ oder haben Probleme dabei, sich bewusst zu machen, aus welchen Lauten sich ein Wort zusammensetzt, obwohl das Wort als Ganzes gehört und verstanden wird. Ein weiteres Symptom der Rechtschreibschwäche ist die fehlerhafte Anwendung der Rechtschreibregeln. Betroffene können die Regel oftmals genau erklären, wenn es jedoch darum geht einen komplexen Satz zu schreiben, werden bei der Anwendung der eben noch korrekt erklärten Regel Fehler gemacht. Wie auch bei den anderen beschriebenen Lernschwächen hängen auch die im Rahmen einer Rechtschreibschwäche auftretenden Probleme nicht mit dem Intellekt zusammen. Um Verbesserungen zu erzielen ist es auch hier wichtig, sich bewusst zu machen, welche Bedingungen für die betroffene Person am förderlichsten sind. Oft hilft genügend Zeit und Ruhe für die Arbeit, manchmal auch Schreiben am Computer mit aktivierter Autokorrektur. Man sollte auch lernen, die eigenen Texte sorgfältig kontrollieren zu können und wissen, welchem Bereich man größere Aufmerksamkeit widmen muss. In Fällen, in denen der Inhalt der Mitteilung sehr wichtig ist, lohnt es sich den Text von einer anderen Person auf Fehler kontrollieren zu lassen, weil Betroffene diese oft „nicht sehen". Ein anderer Trick ist, den Text von hinten zu lesen, sodass man die Wörter liest wie sie geschrieben sind, beginnend vom Ende des Satzes. Diese Methode ermöglicht es, sich anstatt auf den Inhalt der Mitteilung auf jedes einzelne Wort zu konzentrieren.
+dysorthographia_paragraph_1=Zu typischen Fehlern gehören das Auslassen von Wörtern, das Verwechseln ähnlich klingender Buchstaben und Laute oder das Vertauschen von Lauten in Wörtern, sodass sie nicht mehr erkennbar sind. Betroffene können manchmal den richtigen Laut "nicht hören" oder haben Probleme dabei, sich bewusst zu machen, aus welchen Lauten sich ein Wort zusammensetzt, obwohl das Wort als Ganzes gehört und verstanden wird. Ein weiteres Symptom der Rechtschreibschwäche ist die fehlerhafte Anwendung der Rechtschreibregeln. Betroffene können die Regel oftmals genau erklären, wenn es jedoch darum geht einen komplexen Satz zu schreiben, werden bei der Anwendung der eben noch korrekt erklärten Regel Fehler gemacht. Wie auch bei den anderen beschriebenen Lernschwächen hängen auch die im Rahmen einer Rechtschreibschwäche auftretenden Probleme nicht mit dem Intellekt zusammen. Um Verbesserungen zu erzielen ist es auch hier wichtig, sich bewusst zu machen, welche Bedingungen für die betroffene Person am förderlichsten sind. Oft hilft genügend Zeit und Ruhe für die Arbeit, manchmal auch Schreiben am Computer mit aktivierter Autokorrektur. Man sollte auch lernen, die eigenen Texte sorgfältig kontrollieren zu können und wissen, welchem Bereich man größere Aufmerksamkeit widmen muss. In Fällen, in denen der Inhalt der Mitteilung sehr wichtig ist, lohnt es sich den Text von einer anderen Person auf Fehler kontrollieren zu lassen, weil Betroffene diese oft "nicht sehen". Ein anderer Trick ist, den Text von hinten zu lesen, sodass man die Wörter liest wie sie geschrieben sind, beginnend vom Ende des Satzes. Diese Methode ermöglicht es, sich anstatt auf den Inhalt der Mitteilung auf jedes einzelne Wort zu konzentrieren.
 
 dysorthographia_hint_text=Lass wichtige Texte, die du geschrieben hast, immer von jemandem Korrektur lesen!
 
@@ -37,7 +37,7 @@ dysorthographia_hint_text=Lass wichtige Texte, die du geschrieben hast, immer vo
 memory=Gedächtnis
 memory_definition=Das Gedächtnis setzt sich aus verschiedenen Gedächtnisarten zusammen, die unterschiedliche Aufgaben haben. Es sind z.B. andere Strukturen beim Erinnern von Urlaubserlebnissen, als beim Lernen wie man Fahrrad fährt, oder beim Einprägen von Vokabeln im Einsatz.
 
-memory_paragraph_1=Bei Menschen mit Lese- und Rechtschreibschwäche sind manchmal eine oder mehrere Gedächtnisarten geschwächt. Glücklicherweise können wir schwächere Gedächtnisformen mit der Leistung besser funktionierender ausgleichen! Zusätzlich gibt es einige nützliche Tipps und Tricks, die man anwenden kann, um sich das Merken und Erinnern zu erleichtern (z.B. sich Notizen auf Post-its zu machen, um Wichtiges nicht zu vergessen).
+memory_paragraph_1=Bei Menschen mit Lese- und Rechtschreibschwäche sind manchmal eine oder mehrere Gedächtnisarten geschwächt. Glücklicherweise können wir schwächere Gedächtnisformen mit der Leistung besser funktionierender ausgleichen! Zusätzlich gibt es einige nützliche Tipps und Tricks, die man anwenden kann, um sich das Merken und Erinnern zu erleichtern (z.B. sich Notizen auf Post-its zu machen, um Wichtiges nicht zu vergessen). \n\nSchauen wir uns einige Gedächtnisarten genauer an:
 Schauen wir uns einige Gedächtnisarten genauer an:
 
 memory_short_term=Kurzzeitgedächtnis
@@ -48,7 +48,7 @@ memory_short_term_paragraph_1=Kinder und Jugendliche brauchen es beispielsweise
 
 memory_short_term_paragraph_2=Wir können Techniken erlernen, die es uns ermöglichen, die Menge an Informationen, die im Kurzzeitgedächtnis aufgenommen wird, zu erhöhen. Als Stütze ist es auch ratsam, sich wichtige Informationen aufzuschreiben, sie öfter zu wiederholen oder sie sich so oft anzusehen, bis man sie sich gemerkt hat.
 
-memory_short_term_hint_text=Schreibe dir Dinge, die du dir schwer merken kannst, gleich auf! (benutze ein „externes Gedächtnis").
+memory_short_term_hint_text=Schreibe dir Dinge, die du dir schwer merken kannst, gleich auf! (benutze ein "externes Gedächtnis").
 
 memory_working=Arbeitsgedächtnis
 
@@ -58,13 +58,13 @@ memory_working_paragraph_1=Es werden darin Informationen aus dem Lang- und Kurzz
 
 memory_working_paragraph_2=Da einige von einer Lese- und Rechtschreibschwäche betroffene Personen Schwierigkeiten mit diesem Gedächtnisbereich haben, ist es für sie wichtig, das Arbeitsgedächtnis gezielt zu trainieren (siehe Aktivitäten im Spiel). Zusätzlich dazu ist es erleichternd und sinnvoll, Hilfsmittel zu benützen, z.B. sich Zwischenschritte beim Abarbeiten einer komplizierten Aufgabe zu notieren.
 
-memory_working_hint_text=Trainiere schrittweise zu arbeiten! Bevor du beginnst etwas zu machen, sage und schreibe dir auf, was du alles machen musst. Ordne die Schritte mit: „Erstens…“, „Zweitens…“, „Drittens…“ usw.
+memory_working_hint_text=Trainiere schrittweise zu arbeiten! Bevor du beginnst etwas zu machen, sage und schreibe dir auf, was du alles machen musst. Ordne die Schritte mit: "Erstens…", "Zweitens…", "Drittens…" usw.
 
 memory_auditory=Auditives Kurzzeitgedächtnis
 
 memory_auditory_definition=Hierbei handelt es sich um eine Art des Kurzzeitgedächtnisses, in der gehörte Informationen aufgenommen und abgespeichert werden.
 
-memory_auditory_paragraph_1=Bei einigen Personen mit Lese- und Rechtschreibschwäche ist diese Art des Kurzzeitgedächtnisses geschwächt. Wie bei den anderen Gedächtnisformen ist auch hier gezieltes Training möglich, das sinnvoll durch Stützen im Alltag ergänzt werden kann, wie z.B. dem Aufschreiben gehörter Informationen, damit diese gleichzeitig auch visuell aufgenommen werden können. Man nennt dies „Visualisierung des Gehörten“, wobei man hierbei Informationen durch Aufzeichnen oder Aufschreiben für die Augen wahrnehmbar macht, oder sie sich einfach bildlich vorstellt. Ein weiterer Tipp sich das Merken zu erleichtern ist, Zusammenhänge zwischen den Inhalten zu bilden. So können wir die gehörten Informationen miteinander verbinden, indem wir sie z.B. in Gruppen ordnen. Beim Auswendiglernen von Informationen, die nicht miteinander in Verbindung gebracht wurden, wie beispielsweise einer Einkaufsliste oder einer Telefonnummer, treten oft größere Merkprobleme auf.
+memory_auditory_paragraph_1=Bei einigen Personen mit "Lese- und Rechtschreibschwäche" ist diese Art des Kurzzeitgedächtnisses geschwächt. Wie bei den anderen Gedächtnisformen ist auch hier gezieltes Training möglich, das sinnvoll durch Stützen im Alltag ergänzt werden kann, wie z.B. dem Aufschreiben gehörter Informationen, damit diese gleichzeitig auch visuell aufgenommen werden können. Man nennt dies "Visualisierung des Gehörten", wobei man hierbei Informationen durch Aufzeichnen oder Aufschreiben für die Augen wahrnehmbar macht, oder sie sich einfach bildlich vorstellt. Ein weiterer Tipp sich das Merken zu erleichtern ist, Zusammenhänge zwischen den Inhalten zu bilden. So können wir die gehörten Informationen miteinander verbinden, indem wir sie z.B. in Gruppen ordnen. Beim Auswendiglernen von Informationen, die nicht miteinander in Verbindung gebracht wurden, wie beispielsweise einer Einkaufsliste oder einer Telefonnummer, treten oft größere Merkprobleme auf.
 
 memory_auditory_hint_text=Wenn du dir Wörter nicht merken kannst, versuche dir die Informationen auch als Bilder, Zeichen, Farben o. Ä. einzuprägen - vielleicht kannst du sie dir dann besser merken.
 
@@ -81,7 +81,7 @@ spatial_orientation=Raumorientierung
 
 spatial_orientation_definition=Sich im Raum orientieren zu können bedeutet, sich bewusst zu sein, wo links, rechts, oben und unten ist.
 
-spatial_orientation_paragraph_1=Manche Menschen, die unter einer Lese-und Rechtschreibschwäche leiden, haben in diesem Bereich Schwierigkeiten. Diese können sich auf verschiedene Weise äußern, z.B. in Problemen, schnell die Richtung zu bestimmen, im Vergessen wo man das Auto geparkt hat oder in Zuspätkommen, weil man sich den Weg nicht gemerkt und sich verlaufen hat. Die räumliche Orientierung ist aber nicht nur wichtig, um sich in der eigenen Umgebung zurechtzufinden; man braucht sie auch um sich beim Lesen eines Texts (wir lesen immer von links nach rechts, nicht von rechts nach links!) und beim Schreiben (wir schreiben von links nach rechts) orientieren zu können. Eine geschwächte Raumwahrnehmung kann man aber zum Glück trainieren, egal wie schlecht sie ausgeprägt sein mag! Mit etwas Fleiß, Übung und dem gezielten Nachdenken über den Raum um uns herum, ist dies auf jeden Fall schaffbar! Allerdings muss man sich auch dafür entscheiden, etwas machen zu wollen; wenn man aufgibt und zu dem Entschluss kommt eben „keine Raumorientierung zu haben“ oder „sich eben nicht orientieren zu können“, wird sich nicht viel ändern.
+spatial_orientation_paragraph_1=Manche Menschen, die unter einer Lese-und Rechtschreibschwäche leiden, haben in diesem Bereich Schwierigkeiten. Diese können sich auf verschiedene Weise äußern, z.B. in Problemen, schnell die Richtung zu bestimmen, im Vergessen wo man das Auto geparkt hat oder in Zuspätkommen, weil man sich den Weg nicht gemerkt und sich verlaufen hat. Die räumliche Orientierung ist aber nicht nur wichtig, um sich in der eigenen Umgebung zurechtzufinden; man braucht sie auch um sich beim Lesen eines Texts (wir lesen immer von links nach rechts, nicht von rechts nach links!) und beim Schreiben (wir schreiben von links nach rechts) orientieren zu können. Eine geschwächte Raumwahrnehmung kann man aber zum Glück trainieren, egal wie schlecht sie ausgeprägt sein mag! Mit etwas Fleiß, Übung und dem gezielten Nachdenken über den Raum um uns herum, ist dies auf jeden Fall schaffbar! Allerdings muss man sich auch dafür entscheiden, etwas machen zu wollen; wenn man aufgibt und zu dem Entschluss kommt eben "keine Raumorientierung zu haben" oder "sich eben nicht orientieren zu können", wird sich nicht viel ändern.
 
 spatial_orientation_paragraph_2=Zu den einfachsten Trainingsmethoden gehört eine gezielte Suche nach Punkten und Orten in der Umgebung, die es ermöglicht, sich zu merken wohin man  geht und was in der Umgebung war. Es ist allerdings wichtig, die Aufmerksamkeit gezielt auf diese Punkte zu richten! Ein hilfreicher Trick zur Richtungsbestimmung (links, rechts) ist es, ein Armband oder eine Uhr immer am rechten (oder linken) Arm zu tragen, so weiß man immer welches die rechte (bzw. die linke) Seite ist.
 
@@ -116,16 +116,15 @@ auditory_distinction_hint_text=Beobachte dich selbst! Beobachte, wann du am best
 #    <!--Specific learning disabilities-->
 specific_learning_disabilities=Lernstörungen
 
-specific_learning_disabilities_definition=Der Begriff „Lernstörungen“ fasst verschiedene spezifische Lernstörungen, wie Dyslexie , Dysgraphie, Dysorthographie, Dyskalkulie  und einige weitere, seltenere Formen von Bildungsschwierigkeiten wie zum Beispiel  Dyspraxie, also Bewegungsschwierigkeiten, zusammen.
+specific_learning_disabilities_definition=Der Begriff "Lernstörungen" fasst verschiedene spezifische Lernstörungen, wie Dyslexie, Dysgraphie, Dysorthographie, Dyskalkulie  und einige weitere, seltenere Formen von Bildungsschwierigkeiten wie zum Beispiel Dyspraxie, also Bewegungsschwierigkeiten, zusammen.
 
-specific_learning_disabilities_paragraph_1=Im Alltag werden für diese Störungen oft andere Bezeichnungen verwendet, wie Leseschwäche für Dyslexie, Schreibschwäche für Dysgraphie, Rechtschreibschwäche für Dysorthographie, und Rechenschwäche für Dyskalkulie. Menschen, die unter einer dieser Schwächen leiden, haben manchmal auch Symptome anderer Lernschwächen. Es kann z.B. sein, dass eine Person die Dyslexie hat, auch eine Schreib- oder Rechtschreibschwäche hat. Eine Kombination dieser beiden Lernstörungen nennt man im Alltag „Legasthenie“ bzw.  „Lese-Rechtschreibschwäche“. Um wirklich von einer diagnostizierten „Störung“ sprechen zu können, werden von Psychologinnen bzw. Psychologen Tests durchgeführt und Fragen zur Beschulung, Lernmöglichkeiten usw. gestellt. Sind die Kriterien laut ICD-10, dem internationalen Klassifikationssystem für  Krankheiten und Gesundheitsprobleme der Weltgesundheitsorganisation erfüllt, spricht man von einer bestimmten „Störung“. Eine ärztliche und psychologische Abklärung bei vorhandenen Problemen ist sinnvoll, um das Problem konkret benennen und andere Ursachen (wie zum Beispiel eingeschränkte Seh- oder Kriterien laut ICD-10, dem internationalen Klassifikationssystem für  Krankheiten und Gesundheitsprobleme der Weltgesundheitsorganisation erfüllt, spricht man von einer bestimmten „Störung“.) ausschließen zu können. In weiterer Folge wird in diesem Text somit nicht mehr der Begriff „Störung“ (z.B. Lese-Rechtschreibstörung) verwendet, sondern der Begriff „Schwäche“, da für das Vorhandensein von Lernstörungen, wie erwähnt, bestimmte Kriterien erfüllt sein müssen.
-Außerdem ist ein Nachteil des Begriffes „Lernstörung“, dass er meist eine negative Etikettierung der Betroffenen mit sich bringt. Wir legen jedoch Wert darauf, Menschen mit Lernschwierigkeiten nicht als „gestört“ zu klassifizieren, sondern sie in ihren Bedürfnissen unter anderen Arbeitsbedingungen zu lernen, wahrzunehmen. Jeder Mensch lernt auf unterschiedliche Art, hat individuelle Stärken und Schwächen. Eine „Lernstörung“ hat außerdem nichts mit verminderter Intelligenz zu tun. Betroffene Menschen verfügen über eine normale, manchmal auch überdurchschnittlich hohe Intelligenz! Ein weiterer Nachteil des Begriffs „Lernstörung“ ist, dass er oft zu sehr mit dem schulischen Umfeld assoziiert wird. Das kann dazu führen, dass die Tatsache, dass sich die Probleme auch auf außerschulische Tätigkeiten auswirken und bis ins Erwachsenenalter andauern können, aus dem Bewusstsein gerät.
+specific_learning_disabilities_paragraph_1=Im Alltag werden für diese Störungen oft andere Bezeichnungen verwendet, wie Leseschwäche für Dyslexie, Schreibschwäche für Dysgraphie, Rechtschreibschwäche für Dysorthographie, und Rechenschwäche für Dyskalkulie. \n\nMenschen, die unter einer dieser Schwächen leiden, haben manchmal auch Symptome anderer Lernschwächen. Es kann zum Beispiel  sein, dass eine Person, die Dyslexie hat, auch eine Schreib- oder Rechtschreibschwäche hat. Eine Kombination dieser beiden Lernstörungen nennt man im Alltag "Legasthenie" beziehungsweise  "Lese-Rechtschreibschwäche". Um wirklich von einer diagnostizierten "Störung" sprechen zu können, werden von Psychologinnen und Psychologen Tests durchgeführt und Fragen zur Beschulung, Lernmöglichkeiten und so weiter gestellt. Sind die Kriterien laut ICD-10, dem internationalen Klassifikationssystem für  Krankheiten und Gesundheitsprobleme der Weltgesundheitsorganisation erfüllt, spricht man von einer bestimmten "Störung". Eine ärztliche und psychologische Abklärung bei vorhandenen Problemen ist sinnvoll, um das Problem konkret benennen und andere Ursachen (wie zum Beispiel eingeschränkte Seh- oder Hörleistung oder unzureichende Beschulung) ausschließen zu können. In weiterer Folge wird in diesem Text somit nicht mehr der Begriff "Störung" (zum Beispiel Lese-Rechtschreibstörung) verwendet, sondern der Begriff "Schwäche", da für das Vorhandensein von Lernstörungen, wie erwähnt, bestimmte Kriterien erfüllt sein müssen. \n\nAußerdem ist ein Nachteil des Begriffes "Lernstörung", dass er meist eine negative Etikettierung der Betroffenen mit sich bringt. Wir legen jedoch Wert darauf, Menschen mit Lernschwierigkeiten nicht als "gestört" zu klassifizieren, sondern sie in ihren Bedürfnissen unter anderen Arbeitsbedingungen zu lernen, wahrzunehmen. Jeder Mensch lernt auf unterschiedliche Art, hat individuelle Stärken und Schwächen. Eine "Lernstörung" hat außerdem nichts mit verminderter Intelligenz zu tun. Betroffene Menschen verfügen über eine normale, manchmal auch überdurchschnittlich hohe Intelligenz! Ein weiterer Nachteil des Begriffs "Lernstörung" ist, dass er oft zu sehr mit dem schulischen Umfeld assoziiert wird. Das kann dazu führen, dass die Tatsache, dass sich die Probleme auch auf außerschulische Tätigkeiten auswirken und bis ins Erwachsenenalter andauern können, aus dem Bewusstsein gerät.
 
-specific_learning_disabilities_hint_text=Hast du im Deutschunterricht eine Pflichtlektüre? Lies das Buch als E-Book auf einem E-Reader (da kannst du einfach die Schriftgröße und die Textmenge auf der Seite einstellen) oder hol es dir als Audiobuch und „lies mit den Ohren“ über MP3.
+specific_learning_disabilities_hint_text=Hast du im Deutschunterricht eine Pflichtlektüre? Lies das Buch als E-Book auf einem E-Reader (da kannst du einfach die Schriftgröße und die Textmenge auf der Seite einstellen) oder hol es dir als Audiobuch und "lies mit den Ohren" über MP3.
 
 #    <!--Introduction-->
 introduction=Einleitung
-introduction_paragraph_1=In der Enzyklopädie werden der Begriff „Lese- und Rechtschreibschwäche“, sowie ähnliche Lernschwierigkeiten, beschrieben und erklärt. Bei jedem Begriff sind ein bis zwei Sätze fett markiert. Wenn du nicht den ganzen Text lesen möchtest, lies einfach diese Zusammenfassungen. Wenn du mehr Informationen haben möchtest, lies auch den Rest des Textes, der dabei steht. Du kannst dir den Text auch von jemandem vorlesen lassen und ihr könnt die Bedeutung der Begriffe gemeinsam besprechen!
+introduction_paragraph_1=In der Enzyklopädie werden der Begriff "Lese- und Rechtschreibschwäche", sowie ähnliche Lernschwierigkeiten, beschrieben und erklärt. Bei jedem Begriff sind ein bis zwei Sätze fett markiert. Wenn du nicht den ganzen Text lesen möchtest, lies einfach diese Zusammenfassungen. Wenn du mehr Informationen haben möchtest, lies auch den Rest des Textes, der dabei steht. Du kannst dir den Text auch von jemandem vorlesen lassen und ihr könnt die Bedeutung der Begriffe gemeinsam besprechen!
 
 #    <!--Famous dyslectics-->
 famous_dyslectics=Berühmte Menschen mit Lese-und Rechtschreibschwäche
@@ -166,6 +165,6 @@ verbal_skills_paragraph_1=Menschen unterscheiden sich in ihren sprachlichen Fäh
 
 verbal_skills_paragraph_2=Ein wichtiger Ausgangspunkt für gute sprachliche Fähigkeiten ist ein reicher Wortschatz. Diesen gewinnen wir, wenn wir lesen (auch mit Audiobüchern oder E-Readern), ins Theater gehen, Filme anschauen und uns mit anderen Menschen unterhalten.
 
-verbal_skills_paragraph_3=Bei Menschen mit einer Lese-und Rechtschreibschwäche sind die sprachlichen Fähigkeiten manchmal nicht optimal ausgeprägt und zwar insbesondere dann, wenn ihre Probleme beim Lesen sich mit Schwierigkeiten beim Sprechen verbinden. Aber! - eine ziemlich große Anzahl von Menschen mit Lese-und Rechtschreibschwäche verfügt über sehr gut ausgeprägte sprachliche Fähigkeiten! Getreu dem Motto „Wenn man nicht lesen und schreiben kann, muss man eben reden“, wurden ihre verbalen (also sprachlichen) Fähigkeiten ihre starke Seite. Sie können ausgezeichnet Reden halten, sich sehr genau äußern und werden von ihren Mitmenschen oft um diese Fähigkeiten beneidet. Für all jene, die verbale Probleme haben, gilt jedoch, dass sich, wie alle anderen in der Enzyklopädie beschriebenen Fähigkeiten, auch die verbalen trainieren lassen und trainiert werden sollten!
+verbal_skills_paragraph_3=Bei Menschen mit einer Lese-und Rechtschreibschwäche sind die sprachlichen Fähigkeiten manchmal nicht optimal ausgeprägt und zwar insbesondere dann, wenn ihre Probleme beim Lesen sich mit Schwierigkeiten beim Sprechen verbinden. Aber! - eine ziemlich große Anzahl von Menschen mit Lese-und Rechtschreibschwäche verfügt über sehr gut ausgeprägte sprachliche Fähigkeiten! Getreu dem Motto "Wenn man nicht lesen und schreiben kann, muss man eben reden", wurden ihre verbalen (also sprachlichen) Fähigkeiten ihre starke Seite. Sie können ausgezeichnet Reden halten, sich sehr genau äußern und werden von ihren Mitmenschen oft um diese Fähigkeiten beneidet. Für all jene, die verbale Probleme haben, gilt jedoch, dass sich, wie alle anderen in der Enzyklopädie beschriebenen Fähigkeiten, auch die verbalen trainieren lassen und trainiert werden sollten!
 
 verbal_skills_hint_text=Wenn du dir beim Reden in der Öffentlichkeit nicht sicher bist (zum Beispiel bei einem Referat in der Klasse), trainiere es zu Hause vor dem Spiegel. Über deine Rede mehrmals, benutzen verschiedene Wörter und Redewendungen. Lerne vor allem nicht jedes Wort auswendig! Trage Anderen etwas vor, z.B. deinen Freunden, Eltern, Geschwistern oder Haustieren. Wenn du lernst, erkläre dir den Stoff laut oder erzähle jemandem davon.
diff --git a/android/assets/text/screen/form/form_de.properties b/android/assets/text/screen/form/form_de.properties
index 36d61bf2c421bf6cf923a2892aade0a7c2a7f6f6..83ef8e18a965a3889a4348dd764c98a26afd8be0 100644
--- a/android/assets/text/screen/form/form_de.properties
+++ b/android/assets/text/screen/form/form_de.properties
@@ -9,5 +9,5 @@ validation_gender=Junge/Mädchen
 validation_mugshot=Wähle ein Foto
 validation_signature=Unterschreibe dies mit dem Stift
 validation_age=Gib dein Alter ein
-validation_stamp=Dokument abstempeln
+validation_stamp=Stemple das Dokument ab
 validation_username_exists=*Krycí jméno detektiva již existuje_DE*
\ No newline at end of file
diff --git a/android/assets/text/screen/panorama/panorama_de.properties b/android/assets/text/screen/panorama/panorama_de.properties
index 26b7bcdaf7cfa71cd2fa6ab9aed078c955aa6ec7..f2378fe3b27ea294cad4a53a20743cf9a08c82f5 100644
--- a/android/assets/text/screen/panorama/panorama_de.properties
+++ b/android/assets/text/screen/panorama/panorama_de.properties
@@ -1,9 +1,9 @@
 createuser_detective_1=Du glaubst also, du kannst meinen Platz einnehmen?
-createuser_detective_2=Dich erwartet harte Arbeit, jahrelanges Schuften, Training und\u00A0 kamof gegen das Verbrechen.
+createuser_detective_2=Dich erwartet harte Arbeit, jahrelanges Schuften, Training und\u00A0Kampf gegen das Verbrechen.
 createuser_detective_3=Wenn du die Herausforderung annimmst, fĂĽlle den Detektivausweis aus und\u00A0 geh in die StraĂźen.
-createuser_detective_4=Denk daran, dass noch kein Profi vom\u00A0 Himmel gefallen ist.
-newuseranim_topic_1=Ich warte lieber, bis sie selbst zu wachsen anfangen. Ich spare das Geld für die Crème und\u00A0Rasierklingen.
+createuser_detective_4=Denk daran, dass noch kein Profi vom\u00A0Himmel gefallen ist.
+newuseranim_topic_1=Ich warte lieber, bis\u00A0sie selbst zu wachsen anfangen, und\u00A0 spare mir\u00A0 das Geld fĂĽr die\u00A0 Creme und\u00A0 Rasierklingen.
 newuseranim_topic_2=Der landet erst morgen.
 newuseranim_topic_3=HĂĽbsch, aber woher soll ich das Geld dafĂĽr nehmen?
-newuseranim_topic_4=Zum Baden ist es bald zu kalt und\u00A0was, wenn sie ĂĽber den Winter aus der\u00A0Mode kommen?
+newuseranim_topic_4=Zum Baden ist es bald zu kalt, und\u00A0was, wenn sie ĂĽber den Winter aus\u00A0 der\u00A0 Mode kommen?
 newuseranim_topic_5=Das könnte etwas für mich sein!
\ No newline at end of file
diff --git a/android/src/main/java/cz/nic/tablexia/android/AndroidLauncher.java b/android/src/main/java/cz/nic/tablexia/android/AndroidLauncher.java
index 8c6f27d58a49b3f8ea31bad1b25690d8ddfc055d..d75acb958c8f9767680248b63ede954e73e88450 100644
--- a/android/src/main/java/cz/nic/tablexia/android/AndroidLauncher.java
+++ b/android/src/main/java/cz/nic/tablexia/android/AndroidLauncher.java
@@ -31,9 +31,11 @@ public class AndroidLauncher extends AndroidApplication {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
+		config.useWakelock = true;
         initialize(tablexia = new Tablexia(BuildConfig.BUILD_TYPE,
                 getResources().getConfiguration().locale,
                 SQL_CONNECTION_TYPE,
+				new AndroidConnectionManager(getContext()),
                 savedInstanceState == null), config);
 
         if (TablexiaSettings.getInstance().getBuildType().isBugReport() && TablexiaBuildConfig.FLURRY_KEY != null) {
@@ -41,8 +43,6 @@ public class AndroidLauncher extends AndroidApplication {
             FlurryAgent.setVersionName(TablexiaSettings.getInstance().getFullName());
             FlurryAgent.init(this, TablexiaBuildConfig.FLURRY_KEY);
         }
-
-        Tablexia.connectionManager = new AndroidConnectionManager(getContext());
     }
 
     /**
diff --git a/core/build.gradle b/core/build.gradle
index db2902c3e96365d19e1d6b9e4571ea33d2a98107..047f11b2674584ec78a541f5c87219a1fe53b09d 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -34,11 +34,12 @@ task writeTablexiaBuildConfig {
                 " */\n" +
                 "public class TablexiaBuildConfig {\n" +
                 "\n" +
-                "    public final static String VERSION_NAME = \"${tablexiaVersionName}\";\n" +
-                "    public final static String ASSETS_CHECKSUM = \"${getMapConvertedToString(rootProject.ext.assetsChecksum)}\";\n" +
-                "    public final static String TABLEXIA_SERVER_ADDRESS = ${project.hasProperty('TABLEXIA_SERVER_ADDRESS') ? "\"$TABLEXIA_SERVER_ADDRESS\"" : "null"};\n" +
+                "    public final static String  VERSION_NAME = \"${tablexiaVersionName}\";\n" +
+                "    public final static String  ASSETS_CHECKSUM = \"${getMapConvertedToString(rootProject.ext.assetsChecksum)}\";\n" +
+                "    public final static String  TABLEXIA_SERVER_HOST = ${project.hasProperty('TABLEXIA_SERVER_HOST') ? "\"$TABLEXIA_SERVER_HOST\"" : "null"};\n" +
+                "    public final static Integer TABLEXIA_SERVER_PORT = ${project.hasProperty('TABLEXIA_SERVER_PORT') ? "$TABLEXIA_SERVER_PORT" : "null"};\n" +
                 "    public final static String TABLEXIA_SERVER_SECRET = ${project.hasProperty('TABLEXIA_SERVER_SECRET') ? "\"$TABLEXIA_SERVER_SECRET\"" : "null"};\n" +
-                "    public final static String FLURRY_KEY = ${project.hasProperty('TABLEXIA_FLURRY_KEY') ? "\"$TABLEXIA_FLURRY_KEY\"" : "null"};\n" +
+                "    public final static String  FLURRY_KEY = ${project.hasProperty('TABLEXIA_FLURRY_KEY') ? "\"$TABLEXIA_FLURRY_KEY\"" : "null"};\n" +
                 "\n" +
                 "}", BUILD_CONFIG_FILE_ENCODING)
     }
diff --git a/core/external b/core/external
index 0687994a57443ecb3a5598fac9114b1b96fbfcde..2bb2daf34f200050309ff8084c62fb047cf8e830 160000
--- a/core/external
+++ b/core/external
@@ -1 +1 @@
-Subproject commit 0687994a57443ecb3a5598fac9114b1b96fbfcde
+Subproject commit 2bb2daf34f200050309ff8084c62fb047cf8e830
diff --git a/core/src/cz/nic/tablexia/Tablexia.java b/core/src/cz/nic/tablexia/Tablexia.java
index d33f288e502d4c0202a1e27be410f4cf245ceb88..a085ae0c51a4f7c9f1494404904f56879d7aaa1a 100644
--- a/core/src/cz/nic/tablexia/Tablexia.java
+++ b/core/src/cz/nic/tablexia/Tablexia.java
@@ -49,7 +49,7 @@ public class Tablexia extends TablexiaApplication {
     public static final int     ERROR_DIALOG_WIDTH                      = 400;
     public static final int     ERROR_DIALOG_HEIGHT                     = 250;
 
-    public static IConnectionManager connectionManager;
+    private static IConnectionManager connectionManager;
 
     private final SQLConnectionType     sqlConnectionType;
     private MenuController              menuController;
@@ -78,8 +78,9 @@ public class Tablexia extends TablexiaApplication {
         }
     }
 
-    public Tablexia(String buildType, Locale systemLocale, SQLConnectionType sqlConnectionType, boolean reset) {
+    public Tablexia(String buildType, Locale systemLocale, SQLConnectionType sqlConnectionType, IConnectionManager connManager, boolean reset) {
         this.reset = reset;
+		connectionManager = validateConnectionManager(connManager);
         this.sqlConnectionType = sqlConnectionType;
 
         TablexiaSettings.init(buildType, systemLocale);
@@ -122,7 +123,7 @@ public class Tablexia extends TablexiaApplication {
 
     private void startLoading(Locale locale) {
         // sync loaded screen with loader image
-        setScreenIfIsDifferent(Utility.getScreenForScreenClass(TablexiaSettings.LOADER_SCREEN, null));
+        setScreen(Utility.getScreenForScreenClass(TablexiaSettings.LOADER_SCREEN, null));
 
         // async internal assets loading
 		ApplicationFontManager.getInstance().load();
@@ -305,6 +306,16 @@ public class Tablexia extends TablexiaApplication {
         clearLoadedData();
     }
 
+	private static IConnectionManager validateConnectionManager(IConnectionManager connectionManager) {
+		if(connectionManager == null)
+			throw new RuntimeException(Tablexia.class.getName() + ": Connection Manager equals to " + connectionManager);
+
+		return connectionManager;
+	}
+
+	public static IConnectionManager getConnectionManager() {
+		return connectionManager;
+	}
 
 
 //////////////////////////// APPLICATION LOADERS
diff --git a/core/src/cz/nic/tablexia/TablexiaApplication.java b/core/src/cz/nic/tablexia/TablexiaApplication.java
index ac8229f91ea839bd3eb6feefb600cba60eb348db..2602fbcedc3dc96e26bea9dd9c62a9284f2499d7 100644
--- a/core/src/cz/nic/tablexia/TablexiaApplication.java
+++ b/core/src/cz/nic/tablexia/TablexiaApplication.java
@@ -49,6 +49,7 @@ import cz.nic.tablexia.sync.RestSynchronizationService;
 import cz.nic.tablexia.sync.work.DeleteUser;
 import cz.nic.tablexia.sync.work.DownloadUser;
 import cz.nic.tablexia.sync.work.PushDataToServer;
+import cz.nic.tablexia.screen.loader.LoaderScreen;
 import cz.nic.tablexia.util.Log;
 import cz.nic.tablexia.util.ui.TablexiaButton;
 import cz.nic.tablexia.util.ui.dialog.TablexiaDialog;
@@ -461,17 +462,6 @@ public abstract class TablexiaApplication implements ApplicationListener {
         }
     }
 
-    /**
-     * Change current screen if is different from actual screen.
-     *
-     * @param screen new screen to change for
-     */
-    public void setScreenIfIsDifferent(AbstractTablexiaScreen<?> screen) {
-        if (getScreen() == null || getScreen().getClass() != screen.getClass()) {
-            setScreen(screen);
-        }
-    }
-
     /**
      * Change current screen.
      *
@@ -503,6 +493,7 @@ public abstract class TablexiaApplication implements ApplicationListener {
     /**
      * Change current screen to new screen with screen transaction.
      * If new screen is same as current screen no change is performed.
+     * Unless it's LoaderScreen. That means, that language was changed.
      * If {@link ScreenTransaction} is <code>null</code> screen is changed without transaction.
      *
      * @param newScreen         new screen to change for
diff --git a/core/src/cz/nic/tablexia/TablexiaSettings.java b/core/src/cz/nic/tablexia/TablexiaSettings.java
index 4d61186a8873b6f3c1b80278d4244b96e41a61bf..e2d34fbd9d0dd607e4be34d7f98a5cfe50ab2029 100644
--- a/core/src/cz/nic/tablexia/TablexiaSettings.java
+++ b/core/src/cz/nic/tablexia/TablexiaSettings.java
@@ -14,12 +14,10 @@ import cz.nic.tablexia.game.GameDefinition;
 import cz.nic.tablexia.game.difficulty.GameDifficulty;
 import cz.nic.tablexia.loader.application.ApplicationTextManager;
 import cz.nic.tablexia.model.UserDAO;
-import cz.nic.tablexia.shared.model.User;
 import cz.nic.tablexia.screen.AbstractTablexiaScreen;
 import cz.nic.tablexia.screen.gamemenu.GameMenuScreen;
 import cz.nic.tablexia.screen.loader.LoaderScreen;
-import cz.nic.tablexia.sync.work.PushDataToServer;
-import cz.nic.tablexia.sync.RestSynchronizationService;
+import cz.nic.tablexia.shared.model.User;
 import cz.nic.tablexia.util.Log;
 
 public class TablexiaSettings {
diff --git a/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java b/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java
index 8153b6647bb525d53e456fcb1a13665091817a84..cdd0a60678f6a9f0e1f3d2e6c9811f00e211bc25 100644
--- a/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java
+++ b/core/src/cz/nic/tablexia/loader/zip/ZipAssetLoader.java
@@ -98,9 +98,7 @@ public class ZipAssetLoader extends TablexiaDataManager<Void> implements IApplic
         requestAccepted = false;
         downloadPaused = false;
 
-        if(Tablexia.connectionManager != null) {
-            usingMobileData = Tablexia.connectionManager.isUsingMobileData();
-        }
+		usingMobileData = Tablexia.getConnectionManager().isUsingMobileData();
 
         setAsyncTask(new ZipAssetLoaderTask(this, locale, buildChecksum));
     }
diff --git a/core/src/cz/nic/tablexia/menu/AbstractMenu.java b/core/src/cz/nic/tablexia/menu/AbstractMenu.java
index 8adf4830777d2c18cba2061ec2f75024ce7bb17d..4083480ac5e19c5fa5c5b9fdffbd68eb544aca0c 100644
--- a/core/src/cz/nic/tablexia/menu/AbstractMenu.java
+++ b/core/src/cz/nic/tablexia/menu/AbstractMenu.java
@@ -12,6 +12,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Button;
 import com.badlogic.gdx.scenes.scene2d.ui.Container;
 import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.scenes.scene2d.ui.Label;
 import com.badlogic.gdx.scenes.scene2d.ui.Stack;
 import com.badlogic.gdx.scenes.scene2d.ui.Table;
 import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
@@ -27,7 +28,9 @@ import cz.nic.tablexia.TablexiaSettings;
 import cz.nic.tablexia.bus.ApplicationBus;
 import cz.nic.tablexia.loader.application.ApplicationAtlasManager;
 import cz.nic.tablexia.loader.application.ApplicationExternalSoundManager;
+import cz.nic.tablexia.loader.application.ApplicationFontManager;
 import cz.nic.tablexia.loader.application.ApplicationInternalSoundManager;
+import cz.nic.tablexia.menu.main.locale.LocaleSelectBox;
 import cz.nic.tablexia.util.Log;
 import cz.nic.tablexia.util.ui.TablexiaNoBlendingImage;
 
@@ -121,6 +124,15 @@ public abstract class AbstractMenu extends Stack implements Disposable {
     private static final float                  REACTION_BORDER_WIDTH_RATIO         = 1f / 3;
     private static final int                    MAX_OPEN_CLOSE_BUTTON_WIDTH         = 65;
 
+    public static final float                               MAINMENU_PADDING                = 10f;
+    public static final float                               APP_NAME_TEXT_PADDING_LEFT      = 10f;
+
+    private static final int                                SELECTBOX_LOCALE_HEIGHT         = 40;
+    private static final float                              SELECTBOX_LOCALE_WIDTH_RATIO    = 2f/5;
+    private static final ApplicationFontManager.FontType    APP_NAME_TEXT_FONT              = ApplicationFontManager.FontType.ROBOTO_REGULAR_10;
+    private static final int                                APP_NAME_TEXT_ALIGN             = Align.center;
+    private static final float                              APP_NAME_WIDTH_RATIO            = 3f/5;
+
     private final Container<Group>  layoutContainer;
     private float                   menuHidePositionX;
     private float                   menuClosePositionX;
@@ -150,14 +162,37 @@ public abstract class AbstractMenu extends Stack implements Disposable {
 
         setBounds(0, 0, width > MENU_MINIMAL_WIDTH ? width : MENU_MINIMAL_WIDTH, height);
 
-        // layout container
+        // layout container - contains menu without language change button
         layoutContainer = new Container<Group>();
         layoutContainer.setDebug(TablexiaSettings.getInstance().isShowBoundingBoxes(), false);
         layoutContainer.align(LAYOUT_CONTAINER_ALIGN);
 
+        Table localeTable = getLocaleMenu();                            //Table with language change button and Tablexia version
+        Table completeMenuTable = new Table();                          //Table with complete menu
+        Container<Table> localeMenuContainer = new Container<Table>();
+        Container<Table> completeMenuContainer = new Container<Table>();
+
+        localeTable.setFillParent(true);
+        localeTable.bottom();
+        localeTable.pad(MAINMENU_PADDING);
+
+        localeMenuContainer.setFillParent(true);
+        localeMenuContainer.bottom();
+        localeMenuContainer.setActor(localeTable);
+
+        completeMenuTable.setFillParent(true);
+        completeMenuTable.bottom();
+
+        completeMenuTable.add(layoutContainer).expandY().fillY();
+        completeMenuTable.row();
+        completeMenuTable.add(localeMenuContainer).fill().bottom();
+
+        completeMenuContainer.bottom();
+        completeMenuContainer.setActor(completeMenuTable);
+
         backgroundStack = new Stack();
         backgroundStack.add(background);
-        backgroundStack.add(layoutContainer);
+        backgroundStack.add(completeMenuContainer);
         if (getMenuControlType().isDraggable()) {
             backgroundStack.addListener(dragListener);
         }
@@ -253,6 +288,18 @@ public abstract class AbstractMenu extends Stack implements Disposable {
         }
     }
 
+    private Table getLocaleMenu() {
+        Table footerTable = new Table();
+        float footerContentWidth = getBackground().getDrawable().getMinWidth() - (2 * MAINMENU_PADDING) - APP_NAME_TEXT_PADDING_LEFT;
+        footerTable.add(new LocaleSelectBox(SELECTBOX_LOCALE_HEIGHT)).width(footerContentWidth * SELECTBOX_LOCALE_WIDTH_RATIO).center();
+        Label appName = new Label(TablexiaSettings.getInstance().getAppName() + System.lineSeparator() + TablexiaSettings.getInstance().getVersionName(),
+                new Label.LabelStyle(ApplicationFontManager.getInstance().getFont(APP_NAME_TEXT_FONT), Color.BLACK));
+        appName.setAlignment(APP_NAME_TEXT_ALIGN);
+        appName.setWrap(true);
+        footerTable.add(appName).width(footerContentWidth * APP_NAME_WIDTH_RATIO).padLeft(APP_NAME_TEXT_PADDING_LEFT);
+        return footerTable;
+    }
+
     @Override
     protected void sizeChanged() {
         if (background != null && border != null) {
diff --git a/core/src/cz/nic/tablexia/menu/main/MainMenu.java b/core/src/cz/nic/tablexia/menu/main/MainMenu.java
index 4bb3153ab146fc27528e9dbad68ed489a22b2626..56b1f41dbd37a05dac0af1a5b1f73f0a40ff561f 100644
--- a/core/src/cz/nic/tablexia/menu/main/MainMenu.java
+++ b/core/src/cz/nic/tablexia/menu/main/MainMenu.java
@@ -1,11 +1,9 @@
 package cz.nic.tablexia.menu.main;
 
-import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.g2d.BitmapFont;
 import com.badlogic.gdx.scenes.scene2d.Group;
 import com.badlogic.gdx.scenes.scene2d.InputEvent;
 import com.badlogic.gdx.scenes.scene2d.ui.Container;
-import com.badlogic.gdx.scenes.scene2d.ui.Label;
 import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
 import com.badlogic.gdx.scenes.scene2d.ui.Table;
 import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup;
@@ -17,14 +15,12 @@ import net.engio.mbassy.listener.Handler;
 import java.util.HashMap;
 import java.util.Map;
 
-import cz.nic.tablexia.TablexiaSettings;
 import cz.nic.tablexia.bus.ApplicationBus;
 import cz.nic.tablexia.bus.event.SubMenuControlEvent;
 import cz.nic.tablexia.loader.application.ApplicationFontManager;
 import cz.nic.tablexia.loader.application.ApplicationInternalSoundManager;
 import cz.nic.tablexia.menu.AbstractMenu;
 import cz.nic.tablexia.menu.IMenuItem;
-import cz.nic.tablexia.menu.main.locale.LocaleSelectBox;
 import cz.nic.tablexia.menu.main.user.UserSelectBox;
 
 /**
@@ -37,16 +33,8 @@ public class MainMenu extends AbstractMenu {
     private static final MenuControlType                    MENU_CONTROL_TYPE               = MenuControlType.MANUAL;
     private static final boolean                            MENU_SCREEN_PAUSE               = true;
 
-    private static final float                              MAINMENU_PADDING                = 10f;
-    private static final float                              SCROLLBAR_PADDING_BOTTOM        = 10f;
     private static final float                              SCROLLBAR_PADDING_TOP           = 10f;
     private static final int                                SELECTBOX_USER_HEIGHT           = 70;
-    private static final int                                SELECTBOX_LOCALE_HEIGHT         = 40;
-    private static final float                              SELECTBOX_LOCALE_WIDTH_RATIO    = 2f/5;
-    private static final ApplicationFontManager.FontType    APP_NAME_TEXT_FONT              = ApplicationFontManager.FontType.ROBOTO_REGULAR_10;
-    private static final int                                APP_NAME_TEXT_ALIGN             = Align.left;
-    private static final float                              APP_NAME_TEXT_PADDING_LEFT      = 10f;
-    private static final float                              APP_NAME_WIDTH_RATIO            = 3f/5;
 
     private Map<IMenuItem, Group>   subMenus = new HashMap<IMenuItem, Group>();
     private VerticalGroup           menuItemsLayout;
@@ -74,7 +62,7 @@ public class MainMenu extends AbstractMenu {
 
         Table layoutTable = new Table();
         layoutTable.setFillParent(true);
-        layoutTable.pad(MAINMENU_PADDING);
+        layoutTable.padTop(MAINMENU_PADDING);
         BitmapFont font = ApplicationFontManager.getInstance().getDefaultApplicationRegularFont();
 
         // User SelectBox
@@ -85,20 +73,9 @@ public class MainMenu extends AbstractMenu {
         ScrollPane scrollPane = new ScrollPane(menuItemsLayout);
         scrollPane.setCancelTouchFocus(false);
         scrollPane.setScrollingDisabled(true, false);
-        layoutTable.add(scrollPane).fill().padBottom(SCROLLBAR_PADDING_BOTTOM).padTop(SCROLLBAR_PADDING_TOP).expandY();
+        layoutTable.add(scrollPane).fill().padTop(SCROLLBAR_PADDING_TOP).expandY();
         layoutTable.row();
 
-        // Locale SelectBox and App name
-        Table footerTable = new Table();
-        float footerContentWidth = getBackground().getDrawable().getMinWidth() - (2 * MAINMENU_PADDING) - APP_NAME_TEXT_PADDING_LEFT;
-        footerTable.add(new LocaleSelectBox(SELECTBOX_LOCALE_HEIGHT)).width(footerContentWidth * SELECTBOX_LOCALE_WIDTH_RATIO);
-        Label appName = new Label(TablexiaSettings.getInstance().getAppName() + System.lineSeparator() + TablexiaSettings.getInstance().getVersionName(),
-                                  new Label.LabelStyle(ApplicationFontManager.getInstance().getFont(APP_NAME_TEXT_FONT), Color.BLACK));
-        appName.setAlignment(APP_NAME_TEXT_ALIGN);
-        appName.setWrap(true);
-        footerTable.add(appName).width(footerContentWidth * APP_NAME_WIDTH_RATIO).padLeft(APP_NAME_TEXT_PADDING_LEFT);
-        layoutTable.add(footerTable).fillX();
-
 
         for (final IMenuItem menuItem : MainMenuDefinition.getItemsForMenu()) {
             Group menuItemContainer = getGroupForMenuItem(menuItem, getWidth());
@@ -129,7 +106,10 @@ public class MainMenu extends AbstractMenu {
             }
         }
 
+        float menuWidth = getBackground().getDrawable().getMinWidth() - MAINMENU_PADDING - APP_NAME_TEXT_PADDING_LEFT;
+
         layoutContainer.align(Align.bottom);
+        layoutTable.getCells().get(0).width(menuWidth);
         layoutContainer.setActor(layoutTable);
     }
 
diff --git a/core/src/cz/nic/tablexia/screen/halloffame/HallOfFameScreen.java b/core/src/cz/nic/tablexia/screen/halloffame/HallOfFameScreen.java
index 94e9555e2dcffa06d6dadec805dd4eb6cb08b1f5..955169171db26e2cc54b09e3205b2075325578ac 100644
--- a/core/src/cz/nic/tablexia/screen/halloffame/HallOfFameScreen.java
+++ b/core/src/cz/nic/tablexia/screen/halloffame/HallOfFameScreen.java
@@ -39,6 +39,7 @@ import cz.nic.tablexia.screen.halloffame.assets.HallOfFameAssets;
 import cz.nic.tablexia.screen.halloffame.trophy.TrophyDialog;
 import cz.nic.tablexia.screen.halloffame.trophy.TrophyHelper;
 import cz.nic.tablexia.screen.halloffame.trophy.TrophyThreeStarsGamesDialog;
+import cz.nic.tablexia.shared.model.User;
 import cz.nic.tablexia.util.Log;
 import cz.nic.tablexia.util.Point;
 import cz.nic.tablexia.util.structure.Trio;
@@ -184,12 +185,13 @@ public class HallOfFameScreen extends AbstractTablexiaScreen<Map<ITrophyDefiniti
         foregroundGroup.setSize(backgroundGroup.getWidth(), SCREEN_SIZE.y);
 
         int threeStarsCount = UserTrophy.AllStarsGame.getNumberOfAllStarsResults(getSelectedUser());
+        int trophiesCount = getAchievedTrophies(getSelectedUser());
 
         prepareCarpet();
         prepareDoorButton();
         prepareTrophyHeap(threeStarsCount);
         prepareTrophies();
-        prepareMouse(threeStarsCount);
+        prepareMouse(trophiesCount);
     }
 
     private void prepareTrophyHeap(int threeStarsCount) {
@@ -275,7 +277,7 @@ public class HallOfFameScreen extends AbstractTablexiaScreen<Map<ITrophyDefiniti
         }
     }
 
-    private void prepareMouse(final int threeStarsCount) {
+    private void prepareMouse(final int trophiesCount) {
         TrophyHelper.MouseTexts.resetAllTextCounters();
 
         final TextureRegion mouseTexture = getScreenTextureRegion(HallOfFameAssets.HALL_OF_FAME_MOUSE_UNPRESSED);
@@ -297,7 +299,7 @@ public class HallOfFameScreen extends AbstractTablexiaScreen<Map<ITrophyDefiniti
 
                 final Timer timer = new Timer();
 
-                final DynamicBubbleDialog mouseDialog = new MouseDialog(getText(TrophyHelper.MouseTexts.getMouseText(threeStarsCount)), dialogX, dialogY, MOUSE_DIALOG_WIDTH, MOUSE_DIALOG_HEIGHT);
+                final DynamicBubbleDialog mouseDialog = new MouseDialog(getText(TrophyHelper.MouseTexts.getMouseText(trophiesCount)), dialogX, dialogY, MOUSE_DIALOG_WIDTH, MOUSE_DIALOG_HEIGHT);
                 mouseDialog.addListener(new ClickListener() {
                     @Override
                     public void clicked(InputEvent event, float x, float y) {
@@ -348,4 +350,12 @@ public class HallOfFameScreen extends AbstractTablexiaScreen<Map<ITrophyDefiniti
         scrollPane.setScrollX(trophyX - TablexiaSettings.getSceneWidth(getStage()) / 2 + trophyWidth / 2);
         scrollPane.updateVisualScroll();
     }
+
+    private int getAchievedTrophies(User user) {
+        int achievedTrophies = 0;
+        for(GameTrophyDefinition trophyDefinition : GameTrophyDefinition.values()){
+            if(trophyDefinition.hasTrophy(user)) achievedTrophies++;
+        }
+        return achievedTrophies;
+    }
 }
diff --git a/core/src/cz/nic/tablexia/screen/halloffame/trophy/TrophyHelper.java b/core/src/cz/nic/tablexia/screen/halloffame/trophy/TrophyHelper.java
index 525fafe74fab9fd5c19d3a8217ffb4561da75d87..5332dc55ed63bcbc09e6f27f30921be4af3d9d78 100644
--- a/core/src/cz/nic/tablexia/screen/halloffame/trophy/TrophyHelper.java
+++ b/core/src/cz/nic/tablexia/screen/halloffame/trophy/TrophyHelper.java
@@ -107,10 +107,10 @@ public class TrophyHelper {
         trophiesProperties.put(GameTrophyDefinition.SHOOTING_RANGE_DIFF2, new Trio<Float, Float, Float>(4.27f, 0.7f, 0.4f));// shooting_range_2_limit,28
 
         trophiesProperties.put(GameTrophyDefinition.IN_THE_DARKNESS_PLAY1, new Trio<Float, Float, Float>(4.7f, 0.43f, 0.35f));// in_the_darkness_1_finished,32
-        trophiesProperties.put(GameTrophyDefinition.IN_THE_DARKNESS_PLAY2, new Trio<Float, Float, Float>(4.85f, 0.82f, 0.35f));// in_the_darkness_5_finished,33
-        trophiesProperties.put(GameTrophyDefinition.IN_THE_DARKNESS_PLAY3, new Trio<Float, Float, Float>(4.9f, 0.05f, 0.35f));// in_the_darkness_10_finished.34
-        trophiesProperties.put(GameTrophyDefinition.IN_THE_DARKNESS_DIFF1, new Trio<Float, Float, Float>(4.7f, 0.7f, 0.35f));// in_the_darkness_1_limit,31
-        trophiesProperties.put(GameTrophyDefinition.IN_THE_DARKNESS_DIFF2, new Trio<Float, Float, Float>(5.4f, 0.4f, 0.35f));// in_the_darkness_2_limit,35
+        trophiesProperties.put(GameTrophyDefinition.IN_THE_DARKNESS_PLAY2, new Trio<Float, Float, Float>(5.05f, 0.77f, 0.35f));// in_the_darkness_5_finished,33
+        trophiesProperties.put(GameTrophyDefinition.IN_THE_DARKNESS_PLAY3, new Trio<Float, Float, Float>(4.85f, 0.1f, 0.35f));// in_the_darkness_10_finished.34
+        trophiesProperties.put(GameTrophyDefinition.IN_THE_DARKNESS_DIFF1, new Trio<Float, Float, Float>(4.85f, 0.65f, 0.35f));// in_the_darkness_1_limit,31
+        trophiesProperties.put(GameTrophyDefinition.IN_THE_DARKNESS_DIFF2, new Trio<Float, Float, Float>(5.23f, 0.4f, 0.35f));// in_the_darkness_2_limit,35
 
         //USER TROPHIES
         trophiesProperties.put(UserTrophyDefinition.CONSECUTIVELY_DAYSBACK_3, new Trio<Float, Float, Float>(0.87f, 0.38f, 0.5f));//user_consecutively3days,2
diff --git a/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java b/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java
index 207978e0314f4d8ffa8ac46d293b2a884590dd8f..e7a45ced119f891f45584d98690c678d8807eab5 100644
--- a/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java
+++ b/core/src/cz/nic/tablexia/screen/loader/LoaderScreen.java
@@ -48,6 +48,7 @@ public class LoaderScreen extends AbstractTablexiaScreen<Void> {
 	//Please Login Text
 	private static final float LOGIN_TEXT_WIDTH 			= 0.43f;
 	private static final float LOGIN_TEXT_FADE_IN_TIME		= 1;
+	private static final float LOGIN_TEXT_FADE_OUT_TIME		= 1;
 
 	private TablexiaTextureManager textureManager;
     private String backgroundAsset = LoaderAssets.LOADER_BACKGROUND;
@@ -60,6 +61,7 @@ public class LoaderScreen extends AbstractTablexiaScreen<Void> {
 
     private String currentLanguage;
 	private boolean isDownloadingFile = false;
+	private boolean userLoggedIn = false;
 
 	public LoaderScreen() {
         this.textureManager = new TablexiaTextureManager(TablexiaAbstractFileManager.AssetsStorageType.INTERNAL);
@@ -100,6 +102,19 @@ public class LoaderScreen extends AbstractTablexiaScreen<Void> {
         prepareLoadingStatusText();
     }
 
+	@Override
+	protected void screenAct(float delta) {
+		if(!userLoggedIn) {
+			if(TablexiaSettings.getInstance().getSelectedUser() != null) {
+				//User has logged in... Hide loginText
+				userLoggedIn = true;
+				loginText.addAction(Actions.fadeOut(LOGIN_TEXT_FADE_OUT_TIME));
+			}
+		}
+
+		super.screenAct(delta);
+	}
+
     ////////////////// HANDLERS
 
     /**
@@ -115,7 +130,8 @@ public class LoaderScreen extends AbstractTablexiaScreen<Void> {
 		hideStatusText(STATUS_TEXT_FADE_OUT_TIME);
 
 		//Show please login text ?
-		if(TablexiaSettings.getInstance().getSelectedUser() == null) {
+		userLoggedIn = !(TablexiaSettings.getInstance().getSelectedUser() == null);
+		if(!userLoggedIn) {
 			loginText.addAction(Actions.fadeIn(LOGIN_TEXT_FADE_IN_TIME));
 		}
 	}
diff --git a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java
index 32fbc37d4c1d353511b4aebb2956d2599770dd35..32d8d008065b80eec8727573b0ef338eed1c4db9 100644
--- a/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java
+++ b/core/src/cz/nic/tablexia/screen/statistics/StatisticsScreen.java
@@ -35,15 +35,15 @@ import cz.nic.tablexia.game.difficulty.GameDifficulty;
 import cz.nic.tablexia.loader.application.ApplicationAtlasManager;
 import cz.nic.tablexia.loader.application.ApplicationFontManager;
 import cz.nic.tablexia.loader.application.ApplicationTextManager;
-import cz.nic.tablexia.model.game.GameDAO;
-import cz.nic.tablexia.shared.model.Game;
 import cz.nic.tablexia.menu.game.GameMenuDefinition;
+import cz.nic.tablexia.model.game.GameDAO;
 import cz.nic.tablexia.screen.AbstractTablexiaScreen;
 import cz.nic.tablexia.screen.statistics.enums.GraphStyle;
 import cz.nic.tablexia.screen.statistics.interfaces.GameClickListener;
 import cz.nic.tablexia.screen.statistics.views.BookmarkButton;
 import cz.nic.tablexia.screen.statistics.views.GraphPane;
 import cz.nic.tablexia.screen.statistics.views.StatisticsScoreDialog;
+import cz.nic.tablexia.shared.model.Game;
 import cz.nic.tablexia.util.Log;
 import cz.nic.tablexia.util.ScaleUtil;
 import cz.nic.tablexia.util.ui.ClickListenerWithSound;
@@ -58,18 +58,15 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
     private static final float COMPONENTS_PADDING = 10f, TITLE_PADDING = 50f;
     private static final float CLOSE_BUTTON_POSITION = 25f, CLOSE_BUTTON_SIZE = 35f;
     private static final float DRAWER_SCALE = 0.6f;
-    private static final float SWITCH_GRAPH_POSITION_X_SCALE = 0.4f, SWITCH_GRAPH_POSITION_Y_SCALE = 0.88f, SWITCH_GRAPH_PADDING = 30f;
-    private static final float DIFFICULTIES_SCALE = 0.8f, DIFFICULTIES_POSITION_X_SCALE = 0.65f, DIFFICULTIES_POSITION_Y_SCALE = 0.9f;
+    private static final float SWITCH_GRAPH_POSITION_X_SCALE = 0.33f, SWITCH_GRAPH_POSITION_Y_SCALE = 0.88f, SWITCH_GRAPH_PADDING = 48f;
+    private static final float DIFFICULTIES_SCALE = 0.8f, DIFFICULTIES_POSITION_X_SCALE = 0.63f, DIFFICULTIES_POSITION_Y_SCALE = 0.9f;
     private static final float NOTEBOOK_POSITION_SCALE = 0.3f, NOTEBOOK_WIDTH_SCALE = 0.7f, NOTEBOOK_HEIGHT_SCALE = 0.85f;
     private static final float BOOKMARK_SIZE_SCALE = 0.6f, BOOKMARKS_POSITION_X_SCALE = 0.24f, BOOKMARKS_POSITION_Y_SCALE = 0.7f;
-    private static final float SMALL_FONT_SCALE = 0.7f;
 
     public static final String GFX_PATH = "gfx/", BUTTON_PATH = "button/";
     private static final String[] BOOKMARKS_TEXTURES = {"1", "2", "3", "2", "1", "3"};
     private static final String SELECTED_SWITCH_KEY = "selected_switch", SELECTED_GAME_KEY = "selected_game", DIFFICULTY_EASY_KEY = "diff_easy", DIFFICULTY_MEDIUM_KEY = "diff_medium", DIFFICULTY_HARD_KEY = "diff_hard";
     private static final GameDefinition DEFAULT_GAME = GameDefinition.ROBBERY;
-    private static final BitmapFont DEFAULT_FONT = ApplicationFontManager.getInstance().getFont(ApplicationFontManager.FontType.ROBOTO_REGULAR_20);
-    private static final BitmapFont DEFAULT_BOLD_FONT = ApplicationFontManager.getInstance().getFont(ApplicationFontManager.FontType.ROBOTO_BOLD_20);
 
     private Group content;
     private Image background;
@@ -92,13 +89,10 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
     private Table graphPaneHolder;
     private GraphPane graphPane;
     private Map<GameDifficulty, Button> difficultyButtons;
-
-    public StatisticsScreen() {
-    }
+    private BitmapFont defaultBoldFont;
 
     @Override
     protected void screenPaused(Map<String, String> screenState) {
-
         screenState.put(DIFFICULTY_EASY_KEY, String.valueOf(selectedGameDifficulties.contains(GameDifficulty.EASY)));
         screenState.put(DIFFICULTY_MEDIUM_KEY, String.valueOf(selectedGameDifficulties.contains(GameDifficulty.MEDIUM)));
         screenState.put(DIFFICULTY_HARD_KEY, String.valueOf(selectedGameDifficulties.contains(GameDifficulty.HARD)));
@@ -108,11 +102,13 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
 
     @Override
     protected void screenLoaded(Map<String, String> screenState) {
+        loadFonts();
+
         getStage().setDebugAll(TablexiaSettings.getInstance().isShowBoundingBoxes());
         content = new Group();
 
         content.addActor(background = new TablexiaNoBlendingImage(getApplicationTextureRegion(ApplicationAtlasManager.BACKGROUND_WOODEN)));
-        content.addActor(titleLabel = new Label(getText("statistics_label"), new Label.LabelStyle(DEFAULT_FONT, Color.BLACK)));
+        content.addActor(titleLabel = new Label(getText("statistics_label"), new Label.LabelStyle(defaultBoldFont, Color.BLACK)));
         content.addActor(buttonClose = new Button(new TextureRegionDrawable(getApplicationTextureRegion(BUTTON_PATH + "closebutton_unpressed")), new TextureRegionDrawable(getApplicationTextureRegion(BUTTON_PATH + "closebutton_pressed"))));
         content.addListener(onScreenTouchListener);
         buttonClose.addListener(closeClickListener);
@@ -130,8 +126,8 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
         switchGraph.setSwitchSelectedListener(switchListener);
         switchGraph.setDisabledStep(1);
         switchGraphType = new WidgetGroup();
-        Label left = setSmallFont(new Label(getText("statistics_games"), new Label.LabelStyle(DEFAULT_FONT, Color.BLACK)));
-        Label right = setSmallFont(new Label(getText("statistics_average"), new Label.LabelStyle(DEFAULT_FONT, Color.BLACK)));
+        Label left = new Label(getText("statistics_games"), new Label.LabelStyle(defaultBoldFont, Color.BLACK));
+        Label right = new Label(getText("statistics_average"), new Label.LabelStyle(defaultBoldFont, Color.BLACK));
         left.addListener(leftButtonListener);
         right.addListener(rightButtonListener);
         switchGraphType.addActor(left);
@@ -149,7 +145,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
         for (GameDifficulty gameDifficulty : GameDifficulty.getVisibleGameDifficultyList()) {
             String diffString = gameDifficulty.name().toLowerCase();
             Button diffButton = new Button(new TextureRegionDrawable(getScreenTextureRegion(GFX_PATH + "difficultyradio_" + diffString + "_unpressed", false)), new TextureRegionDrawable(getScreenTextureRegion(GFX_PATH + "difficultyradio_" + diffString + "_pressed", false)), new TextureRegionDrawable(getScreenTextureRegion(GFX_PATH + "difficultyradio_" + diffString + "_pressed", false)));
-            Label diffLabel = setSmallFont(new Label(ApplicationTextManager.getInstance().getText("gamedifficulty_" + diffString), new Label.LabelStyle(DEFAULT_FONT, Color.BLACK)));
+            Label diffLabel = new Label(ApplicationTextManager.getInstance().getText("gamedifficulty_" + diffString), new Label.LabelStyle(defaultBoldFont, Color.BLACK));
             difficulties.addActor(diffButton);
             difficulties.addActor(diffLabel);
             diffButton.setUserObject(gameDifficulty);
@@ -172,7 +168,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
         boolean gameFromDBLoaded = false;
         for (int i = 0; i < GameMenuDefinition.values().length; i++) {
             GameMenuDefinition gameMenuDefinition = GameMenuDefinition.values()[i];
-            Button button = new BookmarkButton(gameMenuDefinition.getTitle(), getScreenTextureRegion(GFX_PATH + "gamelist_listitem_background" + BOOKMARKS_TEXTURES[i] + "_inactive", false), getScreenTextureRegion(GFX_PATH + "gamelist_listitem_background" + BOOKMARKS_TEXTURES[i] + "_active", false), DEFAULT_FONT);
+            Button button = new BookmarkButton(gameMenuDefinition.getTitle(), getScreenTextureRegion(GFX_PATH + "gamelist_listitem_background" + BOOKMARKS_TEXTURES[i] + "_inactive", false), getScreenTextureRegion(GFX_PATH + "gamelist_listitem_background" + BOOKMARKS_TEXTURES[i] + "_active", false), defaultBoldFont);
             button.setUserObject(gameMenuDefinition);
             button.addListener(bookmarkClickListener);
             bookmarks.addActor(button);
@@ -195,6 +191,10 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
 
     }
 
+    private void loadFonts() {
+        defaultBoldFont = ApplicationFontManager.getInstance().getFont(ApplicationFontManager.FontType.ROBOTO_BOLD_20);
+    }
+
     private void selectFirstGameAndDifficultyAvailable() {
 
         List<Game> games = null;
@@ -371,7 +371,7 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
     };
 
     private Label getLabel(DialogTextContent dialogTextContent) {
-        Label.LabelStyle labelStyle = new Label.LabelStyle(DEFAULT_BOLD_FONT, Color.BLACK);
+        Label.LabelStyle labelStyle = new Label.LabelStyle(defaultBoldFont, Color.BLACK);
         Label label = new Label(dialogTextContent.getContent(), labelStyle);
         label.setWrap(true);
         label.setAlignment(Align.center);
@@ -517,10 +517,6 @@ public class StatisticsScreen extends AbstractTablexiaScreen<Void> {
         return graphPane;
     }
 
-    private Label setSmallFont(Label label) {
-        label.setFontScale(SMALL_FONT_SCALE);
-        return label;
-    }
 
     public void position() {
         titleLabel.setPosition(TITLE_PADDING, getStage().getHeight() - TITLE_PADDING);
diff --git a/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java b/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java
index d80b3d941b42ff648b39768723c521d7fccb66b5..37d865ae0d55d5fd29a17316fc280082ff7f7c6b 100644
--- a/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java
+++ b/core/src/cz/nic/tablexia/screen/statistics/views/GraphPane.java
@@ -29,22 +29,24 @@ import static com.badlogic.gdx.scenes.scene2d.actions.Actions.moveTo;
  * Created by danilov on 11/6/15.
  */
 public class GraphPane extends WidgetGroup {
-    private List<Game> allGames, easyGames, mediumGames, hardGames;
-    private List<Float> easyAverageScores, mediumAverageScores, hardAverageScores;
+
+    public static final float POINT_SIZE = 20f, MIN_GRAPH_WIDTH = 593f;
+    private static final float LINE_SIZE = 5.5f, EFFECTS_SPEED = 0.4f, CLICK_AREA_SIZE = 50f;
+
+    private float maxScore, minScore;
+    private boolean screenResized, initialResize;
+    private GameDefinition selectedGameDefinition;
+    private StatisticsGameScoreResolver statisticsGameScoreResolver;
+    private GameDifficulty lastSelectedGameDifficulty;
+    private GameClickListener gameClickListener;
     private GraphStyle graphStyle;
     private StatisticsScreen statisticsScreen;
     private TextureRegion lineTextureRegion, pointTextureRegion;
-    private GameDefinition selectedGameDefinition;
-    public static final float POINT_SIZE = 20f, MIN_GRAPH_WIDTH = 593f;
-    private static final float LINE_SIZE = 8f, EFFECTS_SPEED = 0.4f, CLICK_AREA_SIZE = 50f;
+    private List<Game> allGames, easyGames, mediumGames, hardGames;
+    private List<Float> easyAverageScores, mediumAverageScores, hardAverageScores;
     private List<Image> easyPoints, mediumPoints, hardPoints;
-    private StatisticsGameScoreResolver statisticsGameScoreResolver;
-    private GameDifficulty lastSelectedGameDifficulty;
     private Set<GameDifficulty> selectedDifficulties;
-    private GameClickListener gameClickListener;
-    private float maxScore, minScore;
     private List<Actor> clickAreas;
-    private boolean screenResized, initialResize;
 
     public GraphPane(List<Game> allGames, GraphStyle graphStyle, StatisticsScreen screen, GameDefinition selectedGameDefinition, Set<GameDifficulty> selectedDifficulties, GameDifficulty lastSelectedGameDifficulty, GameClickListener gameClickListener) {
         this.allGames = allGames;
diff --git a/core/src/cz/nic/tablexia/screen/statistics/views/StatisticsScoreDialog.java b/core/src/cz/nic/tablexia/screen/statistics/views/StatisticsScoreDialog.java
index 36f9b59e7add07e6879b232099cdd70e29e6de09..21365c6f47f1ca84c9d4c56945df9e78f785fef4 100644
--- a/core/src/cz/nic/tablexia/screen/statistics/views/StatisticsScoreDialog.java
+++ b/core/src/cz/nic/tablexia/screen/statistics/views/StatisticsScoreDialog.java
@@ -14,7 +14,7 @@ import cz.nic.tablexia.util.ui.dialog.text.DialogTextContent;
 public class StatisticsScoreDialog extends DynamicBubbleDialog {
 
     public static final float DIALOG_PADDING = 20f, DIALOG_PADDING_BOTTOM = DIALOG_PADDING /2;
-    private static final float GRAPH_DIALOG_HEIGHT = 150f;
+    private static final float GRAPH_DIALOG_HEIGHT = 120f;
     private TextureRegion[] ratingStarsTextures;
     private ArrowType arrowType;
     private Label label;
diff --git a/core/src/cz/nic/tablexia/sync/RestSynchronizationService.java b/core/src/cz/nic/tablexia/sync/RestSynchronizationService.java
index 6714f96c1b3e175671caa22c2fb562da7f1117fa..011b89fba0c90539eac634fc358cf877789444f6 100644
--- a/core/src/cz/nic/tablexia/sync/RestSynchronizationService.java
+++ b/core/src/cz/nic/tablexia/sync/RestSynchronizationService.java
@@ -28,10 +28,18 @@ public class RestSynchronizationService {
         INCREMENT,
     }
 
-    private static final String LOCALHOST_REST_URL  = "http://localhost:8080";
-    public static final String  REST_URL            = TablexiaBuildConfig.TABLEXIA_SERVER_ADDRESS != null ? TablexiaBuildConfig.TABLEXIA_SERVER_ADDRESS : LOCALHOST_REST_URL;
+    private static final String PROTOCOL            = "http://";
+    private static final String PORT_DIVIDER        = ":";
+
+    private static final String FALLBACK_REST_HOST  = "localhost";
+    private static final int    FALLBACK_REST_PORT  = 8080;
     public static final String  SECRET_KEY          = TablexiaBuildConfig.TABLEXIA_SERVER_SECRET;
 
+    public static final String REST_ADDRESS = PROTOCOL +
+            (TablexiaBuildConfig.TABLEXIA_SERVER_HOST != null ? TablexiaBuildConfig.TABLEXIA_SERVER_HOST : FALLBACK_REST_HOST) +
+            PORT_DIVIDER +
+            (TablexiaBuildConfig.TABLEXIA_SERVER_PORT != null ? TablexiaBuildConfig.TABLEXIA_SERVER_PORT : FALLBACK_REST_PORT);
+
     public static AtomicLong secretTime;
 
     private HttpRequestBuilder builder;
@@ -72,7 +80,7 @@ public class RestSynchronizationService {
     }
 
     public static void doSyncWork(SyncWork work) {
-        if (Tablexia.connectionManager.isUsingMobileData()) {
+        if (Tablexia.getConnectionManager().isUsingMobileData()) {
             Log.debug(RestSynchronizationService.class, "Using mobile data connection - synchronization disabled");
             return;
         }
@@ -80,22 +88,22 @@ public class RestSynchronizationService {
     }
 
     public static String getCreateUserUrl() {
-        return REST_URL + UserRestPath.USER_PATH + UserRestPath.USER_CREATE;
+        return REST_ADDRESS + UserRestPath.USER_PATH + UserRestPath.USER_CREATE;
     }
 
     public static String getConfirmUserUrl(String uuid) {
-        return REST_URL + UserRestPath.USER_PATH + UserRestPath.USER_CONFIRM.replace("{" + UserRestPath.USER_UUID + "}", uuid);
+        return REST_ADDRESS + UserRestPath.USER_PATH + UserRestPath.USER_CONFIRM.replace("{" + UserRestPath.USER_UUID + "}", uuid);
     }
 
     public static String getDownloadUserUrl(String uuid) {
-        return REST_URL + UserRestPath.USER_PATH + UserRestPath.USER_GET.replace("{" + UserRestPath.USER_UUID + "}", uuid);
+        return REST_ADDRESS + UserRestPath.USER_PATH + UserRestPath.USER_GET.replace("{" + UserRestPath.USER_UUID + "}", uuid);
     }
 
     public static String getDeleteUserUrl(String uuid) {
-        return REST_URL + UserRestPath.USER_PATH + UserRestPath.USER_DELETE.replace("{" + UserRestPath.USER_UUID + "}", uuid);
+        return REST_ADDRESS + UserRestPath.USER_PATH + UserRestPath.USER_DELETE.replace("{" + UserRestPath.USER_UUID + "}", uuid);
     }
 
     public static String getSecurityGetUrl() {
-        return REST_URL + SecurityRestPath.SECURITY_PATH + SecurityRestPath.SECURITY_GET;
-    }
+        return REST_ADDRESS + SecurityRestPath.SECURITY_PATH + SecurityRestPath.SECURITY_GET;
+    }    
 }
diff --git a/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java b/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java
index e451ddaffe3df82be1a5e39efbf0a8bd479ba817..fa54fbc2ec5d1fe363cfc70876de5595e718ff44 100644
--- a/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java
+++ b/desktop/src/cz/nic/tablexia/desktop/DesktopLauncher.java
@@ -51,9 +51,7 @@ public class DesktopLauncher {
             config.addIcon(DESKTOP_ICON_128, Files.FileType.Internal);
         }
 
-        Tablexia.connectionManager = new DesktopConnectionManager();
-
-	    new LwjglApplication(new Tablexia(buildType, Locale.getDefault(), SQL_CONNECTION_TYPE, true), config);
+	    new LwjglApplication(new Tablexia(buildType, Locale.getDefault(), SQL_CONNECTION_TYPE, new DesktopConnectionManager(), true), config);
     }
 
     private static String loadAttributeFromManifest(String attributeName, String defaultValue) {
diff --git a/ios/src/cz/nic/tablexia/IOSLauncher.java b/ios/src/cz/nic/tablexia/IOSLauncher.java
index d303598f8cda2686472ff9b711051e79f627e01d..6bb2c89b313d241139a717385e86ecf29550f8ff 100644
--- a/ios/src/cz/nic/tablexia/IOSLauncher.java
+++ b/ios/src/cz/nic/tablexia/IOSLauncher.java
@@ -7,15 +7,24 @@ import org.robovm.apple.foundation.NSAutoreleasePool;
 import org.robovm.apple.foundation.NSBundle;
 import org.robovm.apple.foundation.NSDictionary;
 import org.robovm.apple.foundation.NSString;
+import org.robovm.apple.systemconfiguration.SCNetworkReachability;
+import org.robovm.apple.systemconfiguration.SCNetworkReachabilityFlags;
 import org.robovm.apple.uikit.UIApplication;
 
+import java.net.InetSocketAddress;
 import java.util.Locale;
 
 import cz.nic.tablexia.screen.loader.IConnectionManager;
 
 public class IOSLauncher extends IOSApplication.Delegate {
 
-    public static final Tablexia.SQLConnectionType SQL_CONNECTION_TYPE = new Tablexia.SQLConnectionType("SQLite.JDBCDriver", "jdbc:sqlite:");
+    public static final Tablexia.SQLConnectionType  SQL_CONNECTION_TYPE                 = new Tablexia.SQLConnectionType("SQLite.JDBCDriver", "jdbc:sqlite:");
+
+    private static final String                     FALLBACK_CONNECTION_CHECK_HOST      = "nic.cz";
+    private static final Integer                    FALLBACK_CONNECTION_CHECK_PORT      = 80;
+
+    private static final String                     CONNECTION_CHECK_HOST               = TablexiaBuildConfig.TABLEXIA_SERVER_HOST != null ? TablexiaBuildConfig.TABLEXIA_SERVER_HOST : FALLBACK_CONNECTION_CHECK_HOST;
+    private static final Integer                    CONNECTION_CHECK_PORT               = TablexiaBuildConfig.TABLEXIA_SERVER_PORT != null ? TablexiaBuildConfig.TABLEXIA_SERVER_PORT : FALLBACK_CONNECTION_CHECK_PORT;
 
     @Override
     protected IOSApplication createApplication() {
@@ -29,21 +38,21 @@ public class IOSLauncher extends IOSApplication.Delegate {
         return new IOSApplication(new Tablexia(buildType,
                                                Locale.getDefault(),
                                                SQL_CONNECTION_TYPE,
+				                               new IOSConnectionManager(),
                                                false), config);
     }
 
     public static void main(String[] argv) {
         NSAutoreleasePool pool = new NSAutoreleasePool();
         UIApplication.main(argv, null, IOSLauncher.class);
-        Tablexia.connectionManager = new IOSConnectionManager();
         pool.close();
     }
 
     private static class IOSConnectionManager implements IConnectionManager {
         @Override
         public boolean isUsingMobileData() {
-            //TODO - Use RoboVM to decide whether user is currently using mobile data
-			return false;
+            SCNetworkReachabilityFlags flags = SCNetworkReachability.create(new InetSocketAddress(CONNECTION_CHECK_HOST, CONNECTION_CHECK_PORT)).getFlags();
+            return flags.compareTo(SCNetworkReachabilityFlags.IsWWAN) == 1;
         }
     }
 }
\ No newline at end of file