Cleanup and refactor guided by Android Studio's code analysis.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c81e0f8..5ed9453 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1,24 +1,27 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.fairphone.updater"
-    android:versionCode="14"
-    android:versionName="14 (FP 1.8.2)" >
+          xmlns:tools="http://schemas.android.com/tools"
+          package="com.fairphone.updater"
+    android:versionCode="15"
+    android:versionName="15 (FP 1.8.2)" >
 
     <uses-sdk
         android:minSdkVersion="17"
-        android:targetSdkVersion="17" />
+        android:targetSdkVersion="21" />
 
     <uses-permission android:name="android.permission.ACCESS_SUPERUSER" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-    <uses-permission android:name="android.permission.REBOOT" />
+    <uses-permission android:name="android.permission.REBOOT"
+                     tools:ignore="ProtectedPermissions"/>
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
-    <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
+    <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM"
+                     tools:ignore="ProtectedPermissions"/>
     <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED" />
 
     <application
@@ -76,10 +79,10 @@
             android:screenOrientation="portrait"
             android:launchMode="singleTop" >
             <intent-filter>
-				<action android:name="android.intent.action.VIEW"></action>
-				<category android:name="android.intent.category.DEFAULT"></category>
-				<category android:name="android.intent.category.BROWSABLE"></category>
-				<data android:host="beta" android:scheme="fairphone"></data>
+				<action android:name="android.intent.action.VIEW"/>
+				<category android:name="android.intent.category.DEFAULT"/>
+				<category android:name="android.intent.category.BROWSABLE"/>
+				<data android:host="beta" android:scheme="fairphone"/>
 			</intent-filter>
         </activity>
     </application>
diff --git a/crashlytics.properties b/crashlytics.properties
index 863b593..68feadc 100644
--- a/crashlytics.properties
+++ b/crashlytics.properties
@@ -1,3 +1,4 @@
 #Contains API Secret used to validate your application. Commit to internal source control; avoid making secret public.
 #Wed Jun 25 11:27:21 BST 2014
+# suppress inspection "UnusedProperty"
 apiSecret=063db1d511c06cd4ced4fb6d5a39b3bf633d741323cc0312266f5abe2d6881dc
diff --git a/res/layout/activity_updater.xml b/res/layout/activity_updater.xml
index b3c25f2..17f6a34 100644
--- a/res/layout/activity_updater.xml
+++ b/res/layout/activity_updater.xml
@@ -1,9 +1,8 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/background"
-    android:orientation="vertical" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:background="@color/background"
+              android:orientation="vertical">
 
     <include layout="@layout/header" />
 
diff --git a/res/layout/fragment_app_store_detail.xml b/res/layout/fragment_app_store_detail.xml
index 30058a0..b664c0a 100644
--- a/res/layout/fragment_app_store_detail.xml
+++ b/res/layout/fragment_app_store_detail.xml
@@ -1,13 +1,12 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/pink"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:paddingBottom="@dimen/main_padding"
-    android:paddingLeft="@dimen/main_padding"
-    android:paddingRight="@dimen/main_padding" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:background="@color/pink"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:paddingBottom="@dimen/main_padding"
+              android:paddingLeft="@dimen/main_padding"
+              android:paddingRight="@dimen/main_padding">
 
     <TextView
         android:id="@+id/version_details_title_text"
diff --git a/res/layout/fragment_app_store_options_list.xml b/res/layout/fragment_app_store_options_list.xml
index b9624cd..0a9b7c2 100644
--- a/res/layout/fragment_app_store_options_list.xml
+++ b/res/layout/fragment_app_store_options_list.xml
@@ -1,32 +1,23 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:gravity="center_horizontal"
-    android:orientation="vertical" >
+              android:id="@+id/older_versions_group"
+              android:layout_width="match_parent"
+              android:layout_height="wrap_content"
+              android:gravity="center_horizontal"
+              android:orientation="vertical" >
 
-    <LinearLayout
-        android:id="@+id/older_versions_group"
+    <ScrollView
+        android:id="@+id/version_list_scroll"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:gravity="center_horizontal"
+        android:layout_height="0dp"
+        android:layout_marginTop="@dimen/main_padding"
+        android:layout_weight="1"
         android:orientation="vertical" >
 
-        <ScrollView
-            android:id="@+id/version_list_scroll"
+        <LinearLayout
+            android:id="@+id/version_list_container"
             android:layout_width="match_parent"
-            android:layout_height="0dp"
-            android:layout_marginTop="@dimen/main_padding"
-            android:layout_weight="1"
-            android:orientation="vertical" >
-
-            <LinearLayout
-                android:id="@+id/version_list_container"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:clickable="true"
-                android:orientation="vertical" />
-        </ScrollView>
-    </LinearLayout>
-
+            android:layout_height="wrap_content"
+            android:clickable="true"
+            android:orientation="vertical" />
+    </ScrollView>
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/fragment_download_android.xml b/res/layout/fragment_download_android.xml
index 2bc8f50..0758906 100644
--- a/res/layout/fragment_download_android.xml
+++ b/res/layout/fragment_download_android.xml
@@ -1,14 +1,13 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/download_info_group"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/green"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:paddingBottom="@dimen/main_padding"
-    android:paddingLeft="@dimen/main_padding"
-    android:paddingRight="@dimen/main_padding" >
+              android:id="@+id/download_info_group"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:background="@color/green"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:paddingBottom="@dimen/main_padding"
+              android:paddingLeft="@dimen/main_padding"
+              android:paddingRight="@dimen/main_padding">
 
     <TextView
         android:id="@+id/download_version_name_text"
diff --git a/res/layout/fragment_download_android_confirmation_popup.xml b/res/layout/fragment_download_android_confirmation_popup.xml
index ee327de..2a8a63e 100644
--- a/res/layout/fragment_download_android_confirmation_popup.xml
+++ b/res/layout/fragment_download_android_confirmation_popup.xml
@@ -1,10 +1,9 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:padding="@dimen/alert_padding" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:padding="@dimen/alert_padding">
 
     <TextView
         style="@style/TextLight24GreenDark"
diff --git a/res/layout/fragment_download_app_store.xml b/res/layout/fragment_download_app_store.xml
index b795c7c..5285e28 100644
--- a/res/layout/fragment_download_app_store.xml
+++ b/res/layout/fragment_download_app_store.xml
@@ -1,14 +1,13 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/download_info_group"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/pink"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:paddingBottom="@dimen/main_padding"
-    android:paddingLeft="@dimen/main_padding"
-    android:paddingRight="@dimen/main_padding" >
+              android:id="@+id/download_info_group"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:background="@color/pink"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:paddingBottom="@dimen/main_padding"
+              android:paddingLeft="@dimen/main_padding"
+              android:paddingRight="@dimen/main_padding">
 
     <TextView
         android:id="@+id/download_version_name_text"
diff --git a/res/layout/fragment_download_fairphone.xml b/res/layout/fragment_download_fairphone.xml
index 1cf80e4..10c2487 100644
--- a/res/layout/fragment_download_fairphone.xml
+++ b/res/layout/fragment_download_fairphone.xml
@@ -1,14 +1,13 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/download_info_group"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/blue"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:paddingBottom="@dimen/main_padding"
-    android:paddingLeft="@dimen/main_padding"
-    android:paddingRight="@dimen/main_padding" >
+              android:id="@+id/download_info_group"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:background="@color/blue"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:paddingBottom="@dimen/main_padding"
+              android:paddingLeft="@dimen/main_padding"
+              android:paddingRight="@dimen/main_padding">
 
     <TextView
         android:id="@+id/download_version_name_text"
diff --git a/res/layout/fragment_download_fairphone_confirmation_popup.xml b/res/layout/fragment_download_fairphone_confirmation_popup.xml
index 2dcc5ed..1ed17cf 100644
--- a/res/layout/fragment_download_fairphone_confirmation_popup.xml
+++ b/res/layout/fragment_download_fairphone_confirmation_popup.xml
@@ -1,10 +1,9 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:padding="@dimen/alert_padding" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:padding="@dimen/alert_padding">
 
     <TextView
         style="@style/TextLight24BlueDark"
diff --git a/res/layout/fragment_info_android_popup.xml b/res/layout/fragment_info_android_popup.xml
index 1512a64..a241d5d 100644
--- a/res/layout/fragment_info_android_popup.xml
+++ b/res/layout/fragment_info_android_popup.xml
@@ -1,10 +1,9 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:padding="@dimen/alert_padding" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:padding="@dimen/alert_padding">
 
     <TextView
         style="@style/TextLight24GreenDark"
diff --git a/res/layout/fragment_info_fairphone_popup.xml b/res/layout/fragment_info_fairphone_popup.xml
index 503bbdf..6271069 100644
--- a/res/layout/fragment_info_fairphone_popup.xml
+++ b/res/layout/fragment_info_fairphone_popup.xml
@@ -1,10 +1,9 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:padding="@dimen/alert_padding" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:padding="@dimen/alert_padding">
 
     <TextView
         style="@style/TextLight24BlueDark"
diff --git a/res/layout/fragment_main.xml b/res/layout/fragment_main.xml
index b2b897b..41fadca 100644
--- a/res/layout/fragment_main.xml
+++ b/res/layout/fragment_main.xml
@@ -1,8 +1,7 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:orientation="vertical">
 
     <RelativeLayout
         android:layout_width="match_parent"
diff --git a/res/layout/fragment_main_update_available_android.xml b/res/layout/fragment_main_update_available_android.xml
index 718fd39..b6029ea 100644
--- a/res/layout/fragment_main_update_available_android.xml
+++ b/res/layout/fragment_main_update_available_android.xml
@@ -1,14 +1,13 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/update_available_group"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/green"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:paddingLeft="@dimen/main_padding"
-    android:paddingRight="@dimen/main_padding"
-    android:visibility="visible" >
+              android:id="@+id/update_available_group"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:background="@color/green"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:paddingLeft="@dimen/main_padding"
+              android:paddingRight="@dimen/main_padding"
+              android:visibility="visible">
 
     <TextView
         style="@style/TextRegular16GreenDark"
diff --git a/res/layout/fragment_main_update_available_fairphone.xml b/res/layout/fragment_main_update_available_fairphone.xml
index 7b67503..b397d8e 100644
--- a/res/layout/fragment_main_update_available_fairphone.xml
+++ b/res/layout/fragment_main_update_available_fairphone.xml
@@ -1,14 +1,13 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/update_available_group"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/blue"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:paddingLeft="@dimen/main_padding"
-    android:paddingRight="@dimen/main_padding"
-    android:visibility="visible" >
+              android:id="@+id/update_available_group"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:background="@color/blue"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:paddingLeft="@dimen/main_padding"
+              android:paddingRight="@dimen/main_padding"
+              android:visibility="visible">
 
     <TextView
         style="@style/TextRegular16BlueDark"
diff --git a/res/layout/fragment_other_os_options.xml b/res/layout/fragment_other_os_options.xml
index b808722..54c799e 100644
--- a/res/layout/fragment_other_os_options.xml
+++ b/res/layout/fragment_other_os_options.xml
@@ -1,8 +1,7 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:orientation="vertical">
 
     <LinearLayout
         android:id="@+id/other_os_options_group"
diff --git a/res/layout/fragment_other_os_options_android_list.xml b/res/layout/fragment_other_os_options_android_list.xml
index 2bf04bd..95f00bd 100644
--- a/res/layout/fragment_other_os_options_android_list.xml
+++ b/res/layout/fragment_other_os_options_android_list.xml
@@ -1,9 +1,8 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:gravity="center_horizontal"
-    android:orientation="vertical" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:gravity="center_horizontal"
+              android:orientation="vertical">
 
     <LinearLayout
         android:id="@+id/other_os_options_android_latest_version_group"
diff --git a/res/layout/fragment_other_os_options_fairphone_list.xml b/res/layout/fragment_other_os_options_fairphone_list.xml
index 7e23377..8b018be 100644
--- a/res/layout/fragment_other_os_options_fairphone_list.xml
+++ b/res/layout/fragment_other_os_options_fairphone_list.xml
@@ -1,9 +1,8 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:gravity="center_horizontal"
-    android:orientation="vertical" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:gravity="center_horizontal"
+              android:orientation="vertical">
 
     <LinearLayout
         android:id="@+id/other_os_options_fairphone_latest_version_group"
diff --git a/res/layout/fragment_version_detail_android.xml b/res/layout/fragment_version_detail_android.xml
index 86af886..327b007 100644
--- a/res/layout/fragment_version_detail_android.xml
+++ b/res/layout/fragment_version_detail_android.xml
@@ -1,13 +1,12 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/green"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:paddingBottom="@dimen/main_padding"
-    android:paddingLeft="@dimen/main_padding"
-    android:paddingRight="@dimen/main_padding" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:background="@color/green"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:paddingBottom="@dimen/main_padding"
+              android:paddingLeft="@dimen/main_padding"
+              android:paddingRight="@dimen/main_padding">
 
     <TextView
         android:id="@+id/version_details_title_text"
diff --git a/res/layout/fragment_version_detail_fairphone.xml b/res/layout/fragment_version_detail_fairphone.xml
index 42ed084..715d8f9 100644
--- a/res/layout/fragment_version_detail_fairphone.xml
+++ b/res/layout/fragment_version_detail_fairphone.xml
@@ -1,13 +1,12 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/blue"
-    android:gravity="center_horizontal"
-    android:orientation="vertical"
-    android:paddingBottom="@dimen/main_padding"
-    android:paddingLeft="@dimen/main_padding"
-    android:paddingRight="@dimen/main_padding" >
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:background="@color/blue"
+              android:gravity="center_horizontal"
+              android:orientation="vertical"
+              android:paddingBottom="@dimen/main_padding"
+              android:paddingLeft="@dimen/main_padding"
+              android:paddingRight="@dimen/main_padding">
 
     <TextView
         android:id="@+id/version_details_title_text"
diff --git a/res/layout/header.xml b/res/layout/header.xml
index da0ede6..8566ae6 100644
--- a/res/layout/header.xml
+++ b/res/layout/header.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <merge xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools" >
+    >
 
     <FrameLayout
         android:layout_width="match_parent"
diff --git a/res/values/config.xml b/res/values/config.xml
index 9495cc4..0c0fadb 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -1,42 +1,42 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
 
-    <string name="downloadUrl">http://www.fairphone.com/ota/</string>
+    <string name="downloadUrl" translatable="false">http://www.fairphone.com/ota/</string>
     <string name="supportAppStoreUrl">https://fairphone.zendesk.com/hc/en-us/articles/201295267-How-to-re-install-the-App-Store</string>
-    <string name="configFilename">updater</string>
-    <string name="config_zip">.zip</string>
-	<string name="config_xml">.xml</string>
-	<string name="config_sig">.sig</string>
+    <string name="configFilename" translatable="false">updater</string>
+    <string name="config_zip" translatable="false">.zip</string>
+	<string name="config_xml" translatable="false">.xml</string>
+	<string name="config_sig" translatable="false">.sig</string>
 	
     <integer name="defaultVersionNumber">1</integer>
-    <string name="defaultVersionName">Almond</string>
-    <string name="defaultBuildNumber">1.0</string>
-    <string name="defaultBuildDate">0</string>
-    <string name="defaultAndroidVersionNumber">4.2.2</string>
-    <string name="defaultImageType">fairphone</string>
-    <string name="defaultBetaStatus">1</string>
+    <string name="defaultVersionName" translatable="false">Almond</string>
+    <string name="defaultBuildNumber" translatable="false">1.0</string>
+    <string name="defaultBuildDate" translatable="false">0</string>
+    <string name="defaultAndroidVersionNumber" translatable="false">4.2.2</string>
+    <string name="defaultImageType" translatable="false">fairphone</string>
+    <string name="defaultBetaStatus" translatable="false">1</string>
     
     <!-- Device Model without spaces separated by semicolon. Ex: FP1;FP1U;FP2 -->
-    <string name="knownFPDevices">FP1;FP1U</string>
+    <string name="knownFPDevices" translatable="false">FP1;FP1U</string>
     
-    <string name="oneGBDataPartition">/originalPartition</string>
-	<string name="unifiedDataPartition">/unifiedPartition</string>
-	<string name="FP1Model">FP1</string>
-	<string name="recoveryCachePath">cache</string>
-	<string name="recoverySdCardPath">sdcard</string>
-	<string name="updaterFolder">/updater/</string>
+    <string name="oneGBDataPartition" translatable="false">/originalPartition</string>
+	<string name="unifiedDataPartition" translatable="false">/unifiedPartition</string>
+	<string name="FP1Model" translatable="false">FP1</string>
+	<string name="recoveryCachePath" translatable="false">cache</string>
+	<string name="recoverySdCardPath" translatable="false">sdcard</string>
+	<string name="updaterFolder" translatable="false">/updater/</string>
 	<integer name="FP1CachePartitionSizeMb">130</integer>
 	<integer name="minimalCachePartitionSizeMb">300</integer>
 	<integer name="FP1DataPartitionSizeMb">1100</integer>
 	
 	<!-- Packager -->
-	<string name="removePlayStoreCommand">rm /data/app/com.android.vending-*.apk</string>
-	<string name="removeGooglePlusCommand">rm /data/app/com.google.android.apps.plus-*.apk</string>
-	<string name="removeSoundSearchCommand">rm /data/app/com.google.android.ears-*.apk</string>
-	<string name="removeGmailCommand">rm /data/app/com.google.android.gm-*.apk</string>
-	<string name="removePlayServicesCommand">rm /data/app/com.google.android.gms-*.apk</string>
-	<string name="removeQuicksearchCommand">rm /data/app/com.google.android.googlequicksearchbox-*.apk</string>
-	<string name="removeTalkbackCommand">rm /data/app/com.google.android.marvin.talkback-*.apk</string>
-	<string name="removeText2SpeechCommand">rm /data/app/com.google.android.tts-*.apk</string>
+	<string name="removePlayStoreCommand" translatable="false">rm /data/app/com.android.vending-*.apk</string>
+	<string name="removeGooglePlusCommand" translatable="false">rm /data/app/com.google.android.apps.plus-*.apk</string>
+	<string name="removeSoundSearchCommand" translatable="false">rm /data/app/com.google.android.ears-*.apk</string>
+	<string name="removeGmailCommand" translatable="false">rm /data/app/com.google.android.gm-*.apk</string>
+	<string name="removePlayServicesCommand" translatable="false">rm /data/app/com.google.android.gms-*.apk</string>
+	<string name="removeQuicksearchCommand" translatable="false">rm /data/app/com.google.android.googlequicksearchbox-*.apk</string>
+	<string name="removeTalkbackCommand" translatable="false">rm /data/app/com.google.android.marvin.talkback-*.apk</string>
+	<string name="removeText2SpeechCommand" translatable="false">rm /data/app/com.google.android.tts-*.apk</string>
 	
 </resources>
diff --git a/src/com/fairphone/updater/BetaEnabler.java b/src/com/fairphone/updater/BetaEnabler.java
index 8401e7f..6247e22 100644
--- a/src/com/fairphone/updater/BetaEnabler.java
+++ b/src/com/fairphone/updater/BetaEnabler.java
@@ -2,7 +2,6 @@
 package com.fairphone.updater;
 
 import android.app.Activity;
-import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
@@ -17,12 +16,6 @@
     private static final String BETA_ENABLED = "1";
     
     @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        
-    }
-    
-    @Override
     protected void onResume() {
         super.onResume();
         setContentView(R.layout.activity_beta_enabler);
@@ -35,7 +28,7 @@
             b.setOnClickListener(new OnClickListener() {
                 @Override
                 public void onClick(View v) {
-                    Utils.setprop(getApplicationContext(), FAIRPHONE_BETA_PROPERTY, BETA_ENABLED);
+                    Utils.setprop(FAIRPHONE_BETA_PROPERTY, BETA_ENABLED);
                     if (isBetaEnabled()) {
                         Button b = (Button) findViewById(R.id.beta_activator);
                         b.setEnabled(false);
diff --git a/src/com/fairphone/updater/BootBroadcastReceiver.java b/src/com/fairphone/updater/BootBroadcastReceiver.java
index 505c705..6c0f909 100644
--- a/src/com/fairphone/updater/BootBroadcastReceiver.java
+++ b/src/com/fairphone/updater/BootBroadcastReceiver.java
@@ -27,7 +27,7 @@
 public class BootBroadcastReceiver extends BroadcastReceiver
 {
 
-    final static long NOTIFICATION_INTERVAL_MILLIS = 1000 * 60 * 60 * 8;
+    private final static long NOTIFICATION_INTERVAL_MILLIS = 1000 * 60 * 60 * 8;
 
     @Override
     public void onReceive(Context context, Intent intent)
diff --git a/src/com/fairphone/updater/FairphoneUpdater.java b/src/com/fairphone/updater/FairphoneUpdater.java
index 7dd7ffb..8840f62 100644
--- a/src/com/fairphone/updater/FairphoneUpdater.java
+++ b/src/com/fairphone/updater/FairphoneUpdater.java
@@ -17,7 +17,6 @@
 import android.widget.Toast;
 
 import com.crashlytics.android.Crashlytics;
-import com.crashlytics.android.internal.f;
 import com.fairphone.updater.data.DownloadableItem;
 import com.fairphone.updater.data.Store;
 import com.fairphone.updater.data.UpdaterData;
@@ -31,8 +30,6 @@
 import com.fairphone.updater.gappsinstaller.GappsInstallerHelper;
 import com.fairphone.updater.tools.Utils;
 
-import java.util.List;
-
 public class FairphoneUpdater extends FragmentActivity
 {
 
@@ -40,21 +37,21 @@
 
     public static final String FAIRPHONE_UPDATER_NEW_VERSION_RECEIVED = "FairphoneUpdater.NEW.VERSION.RECEIVED";
 
-    public static final String PREFERENCE_FIRST_TIME_ANDROID = "FirstTimeAndroid";
+    private static final String PREFERENCE_FIRST_TIME_ANDROID = "FirstTimeAndroid";
 
-    public static final String PREFERENCE_FIRST_TIME_FAIRPHONE = "FirstTimeFairphone";
+    private static final String PREFERENCE_FIRST_TIME_FAIRPHONE = "FirstTimeFairphone";
 
-    public static final String PREFERENCE_FIRST_TIME_APP_STORE = "FirstTimeAppStore";
+    private static final String PREFERENCE_FIRST_TIME_APP_STORE = "FirstTimeAppStore";
 
-    public static final String PREFERENCE_CURRENT_UPDATER_STATE = "CurrentUpdaterState";
+    private static final String PREFERENCE_CURRENT_UPDATER_STATE = "CurrentUpdaterState";
 
     private static final String PREFERENCE_DOWNLOAD_ID = "LatestUpdateDownloadId";
 
     public static final String FAIRPHONE_UPDATER_PREFERENCES = "FairphoneUpdaterPreferences";
 
-    public static final String PREFERENCE_SELECTED_VERSION_NUMBER = "SelectedVersionNumber";
+    private static final String PREFERENCE_SELECTED_VERSION_NUMBER = "SelectedVersionNumber";
 
-    public static final String PREFERENCE_SELECTED_VERSION_TYPE = "SelectedVersionImageType";
+    private static final String PREFERENCE_SELECTED_VERSION_TYPE = "SelectedVersionImageType";
 
     public static final String FAIRPHONE_UPDATER_CONFIG_DOWNLOAD_FAILED = "FairphoneUpdater.Config.File.Download.FAILED";
 
@@ -70,7 +67,7 @@
     public static enum UpdaterState
     {
         NORMAL, DOWNLOAD, PREINSTALL
-    };
+    }
 
     private Version mDeviceVersion;
     private Version mLatestVersion;
@@ -106,7 +103,7 @@
     public static enum HeaderType
     {
         MAIN_FAIRPHONE, MAIN_ANDROID, MAIN_APP_STORE, FAIRPHONE, ANDROID, OTHER_OS, APP_STORE
-    };
+    }
 
     @Override
     protected void onCreate(Bundle savedInstanceState)
@@ -131,6 +128,7 @@
         mIsFirstTimeAppStore = false;//mSharedPreferences.getBoolean(PREFERENCE_FIRST_TIME_APP_STORE, true);
         
         mOtaDownloadUrl = mSharedPreferences.getString(PREFERENCE_OTA_DOWNLOAD_URL, getResources().getString(R.string.downloadUrl));
+	    Log.wtf("SHIT FPU ", "PREFERENCE_OTA_DOWNLOAD_URL "+mOtaDownloadUrl);
 
         // get system data
         mDeviceVersion = VersionParserHelper.getDeviceVersion(this);
@@ -166,28 +164,28 @@
         setupFragments(savedInstanceState);
     }
     
-    public void setupBetaStatus()
+    void setupBetaStatus()
     {
         BETA_MODE_ENABLED = mDeviceVersion.getBetaStatus().equals("1");
     }
 
     private void isDeviceSupported()
     {
-        if(!Utils.isDeviceSupported(this))
+        if(Utils.isDeviceUnsupported(this))
         {
             Toast.makeText(this, R.string.device_not_supported_message, Toast.LENGTH_LONG).show();
             finish();
         }
     }
 
-    protected void getSelectedVersionFromSharedPreferences()
+    void getSelectedVersionFromSharedPreferences()
     {
         String versionImageType = mSharedPreferences.getString(PREFERENCE_SELECTED_VERSION_TYPE, "");
         int versionNumber = mSharedPreferences.getInt(PREFERENCE_SELECTED_VERSION_NUMBER, 0);
         mSelectedVersion = UpdaterData.getInstance().getVersion(versionImageType, versionNumber);
     }
 
-    protected void getSelectedStoreFromSharedPreferences()
+    void getSelectedStoreFromSharedPreferences()
     {
         int storeNumber = mSharedPreferences.getInt(PREFERENCE_SELECTED_STORE_NUMBER, 0);
         mSelectedStore = UpdaterData.getInstance().getStore(storeNumber);
@@ -196,7 +194,7 @@
     public UpdaterState getCurrentUpdaterState()
     {
 
-        String currentState = getStringPreference(PREFERENCE_CURRENT_UPDATER_STATE);
+        String currentState = mSharedPreferences.getString(PREFERENCE_CURRENT_UPDATER_STATE, null);
 
         if (TextUtils.isEmpty(currentState))
         {
@@ -208,12 +206,7 @@
         return UpdaterState.valueOf(currentState);
     }
 
-    public String getStringPreference(String key)
-    {
-        return mSharedPreferences.getString(key, null);
-    }
-
-    public long getLongPreference(String key)
+    long getLongPreference(String key)
     {
         return mSharedPreferences.getLong(key, 0);
     }
@@ -241,7 +234,7 @@
         editor.commit();
     }
 
-    public void savePreference(String key, long value)
+    void savePreference(String key, long value)
     {
         Editor editor = mSharedPreferences.edit();
 
@@ -345,7 +338,7 @@
 
                     mIsFirstTimeFairphone = false;
 
-                    editor.putBoolean(PREFERENCE_FIRST_TIME_FAIRPHONE, mIsFirstTimeFairphone);
+                    editor.putBoolean(PREFERENCE_FIRST_TIME_FAIRPHONE, false);
                     editor.commit();
                 }
 
@@ -371,7 +364,7 @@
 
                     mIsFirstTimeAndroid = false;
 
-                    editor.putBoolean(PREFERENCE_FIRST_TIME_ANDROID, mIsFirstTimeAndroid);
+                    editor.putBoolean(PREFERENCE_FIRST_TIME_ANDROID, false);
                     editor.commit();
                 }
 
@@ -396,7 +389,7 @@
 
                     mIsFirstTimeAppStore = false;
 
-                    editor.putBoolean(PREFERENCE_FIRST_TIME_APP_STORE, mIsFirstTimeAppStore);
+                    editor.putBoolean(PREFERENCE_FIRST_TIME_APP_STORE, false);
                     editor.commit();
                 }
 
@@ -482,7 +475,7 @@
             // an
             // Intent, pass the Intent's extras to the fragment as arguments
             Intent intent = getIntent();
-            if (firstFragment != null && intent != null)
+            if (intent != null)
             {
                 Bundle bundle = intent.getExtras();
                 if (bundle != null)
@@ -493,7 +486,7 @@
 
             // Add the fragment to the 'fragment_container' FrameLayout
             FragmentManager fragManager = getSupportFragmentManager();
-            if (firstFragment != null && fragManager != null)
+            if (fragManager != null)
             {
                 FragmentTransaction transation = fragManager.beginTransaction();
                 transation.add(R.id.fragment_holder, firstFragment, TAG_FIRST_FRAGMENT);
@@ -509,7 +502,7 @@
 
     public Fragment getFragmentFromState()
     {
-        Fragment firstFragment = null;
+        Fragment firstFragment;
         switch (mCurrentState)
         {
             case PREINSTALL:
@@ -581,7 +574,7 @@
         }
     }
 
-    public Fragment getTopFragment()
+    Fragment getTopFragment()
     {
         Fragment topFragment = null;
         FragmentManager fragManager = getSupportFragmentManager();
@@ -622,14 +615,7 @@
         boolean update = false;
         if (mLatestVersion != null)
         {
-	        if (BETA_MODE_ENABLED)
-	        {
-		        update = true;
-	        }
-	        else
-	        {
-		        update = mLatestVersion.isNewerVersionThan(mDeviceVersion);
-	        }
+	        update = BETA_MODE_ENABLED || mLatestVersion.isNewerVersionThan(mDeviceVersion);
         }
         return update;
     }
@@ -771,7 +757,7 @@
         mLatestVersion = getLatestVersionFromConfig();
     }
 
-    boolean mLaunchGapps = false;
+    private boolean mLaunchGapps = false;
 
     @Override
     protected void onNewIntent(Intent intent)
@@ -836,7 +822,7 @@
 
         if (mSelectedStore != null)
         {
-            fragment.setupFragment(mSelectedStore, DetailLayoutType.APP_STORE);
+            fragment.setupAppStoreFragment(mSelectedStore);
         }
         else
         {
@@ -858,12 +844,6 @@
         }
     }
 
-    public void changeState(UpdaterState newState)
-    {
-        updateStatePreference(newState);
-        changeFragment(getFragmentFromState());
-    }
-
     public void updateStatePreference(UpdaterState newState)
     {
         mCurrentState = newState;
@@ -875,13 +855,6 @@
         editor.commit();
     }
 
-    @Override
-    protected void onStop()
-    {
-        super.onStop();
-
-    }
-
     public long getLatestDownloadId()
     {
         return mLatestUpdateDownloadId;
@@ -907,8 +880,8 @@
         return getLongPreference(UpdaterService.PREFERENCE_LAST_CONFIG_DOWNLOAD_ID);
     }
     
-    public void saveConfigFileDownloadId(long latestUpdateDownloadId)
+    public void clearConfigFileDownloadId()
     {
-        savePreference(UpdaterService.PREFERENCE_LAST_CONFIG_DOWNLOAD_ID, latestUpdateDownloadId);
+        savePreference(UpdaterService.PREFERENCE_LAST_CONFIG_DOWNLOAD_ID, 0L);
     }
 }
diff --git a/src/com/fairphone/updater/UpdaterService.java b/src/com/fairphone/updater/UpdaterService.java
index ae43c9d..f769840 100644
--- a/src/com/fairphone/updater/UpdaterService.java
+++ b/src/com/fairphone/updater/UpdaterService.java
@@ -82,22 +82,18 @@
     private int mDownloadRetries;
     private long mLatestFileDownloadId;
     private boolean mInternetConnectionAvailable;
-    private NotificationCompat.Builder mBuilder;
 
-    private SharedPreferences mSharedPreferences;
+	private SharedPreferences mSharedPreferences;
 
-    final static long DOWNLOAD_GRACE_PERIOD_IN_MS = 4 /* hour */ * 60 /* minute */ * 60 /* second */ * 1000 /* millisecond */;
+    private final static long DOWNLOAD_GRACE_PERIOD_IN_MS = 4 /* hour */ * 60 /* minute */ * 60 /* second */ * 1000 /* millisecond */;
 
-    private BroadcastReceiver mBCastConfigFileDownload;
-    private NotificationManager mNotificationManager;
-
-    @Override
+	@Override
     public int onStartCommand(Intent intent, int flags, int startId)
     {
         // remove the logs
         clearDataLogs();
         
-        if(!Utils.isDeviceSupported(getApplicationContext())){
+        if(Utils.isDeviceUnsupported(getApplicationContext())){
             stopSelf();
             return START_NOT_STICKY;
         }
@@ -118,19 +114,16 @@
         // setup the gapps installer
         new GappsInstallerHelper(getApplicationContext());
 
-        mBCastConfigFileDownload = new BroadcastReceiver()
-        {
+	    BroadcastReceiver mBCastConfigFileDownload = new BroadcastReceiver() {
 
-            @Override
-            public void onReceive(Context context, Intent intent)
-            {
-                if (hasInternetConnection())
-                {
-                    boolean forceDownload = intent.getBooleanExtra(EXTRA_FORCE_CONFIG_FILE_DOWNLOAD, false);
-                    downloadConfigFile(forceDownload);
-                }
-            }
-        };
+		    @Override
+		    public void onReceive(Context context, Intent intent) {
+			    if (hasInternetConnection()) {
+				    boolean forceDownload = intent.getBooleanExtra(EXTRA_FORCE_CONFIG_FILE_DOWNLOAD, false);
+				    downloadConfigFile(forceDownload);
+			    }
+		    }
+	    };
 
         getApplicationContext().registerReceiver(mBCastConfigFileDownload, new IntentFilter(ACTION_FAIRPHONE_UPDATER_CONFIG_FILE_DOWNLOAD));
 
@@ -151,18 +144,18 @@
             Editor editor = mSharedPreferences.edit();
             editor.putBoolean(PREFERENCE_REINSTALL_GAPPS, false);
 
-            editor.commit();
+            editor.apply();
         }
     }
 
-    public void showReinstallAlert()
+    void showReinstallAlert()
     {
 
         if ( FairphoneUpdater.BETA_MODE_ENABLED )
             return;
         Context context = getApplicationContext();
-        
-        mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+
+	    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
         
         //Intent notificationIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(context.getResources().getString(R.string.supportAppStoreUrl)));
 
@@ -170,14 +163,13 @@
         notificationIntent.setAction(GappsInstallerHelper.EXTRA_START_GAPPS_INSTALL);
         
         PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
-        
-        mBuilder =
-                new NotificationCompat.Builder(context).setSmallIcon(R.drawable.updater_tray_icon)
-                        .setContentTitle(getResources().getString(R.string.app_name))
-                        .setContentText(context.getResources().getString(R.string.appStoreReinstall))
-                        .setAutoCancel(true)
-                        .setDefaults(Notification.DEFAULT_SOUND)
-                        .setContentIntent(contentIntent);
+
+	    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context).setSmallIcon(R.drawable.updater_tray_icon)
+			    .setContentTitle(getResources().getString(R.string.app_name))
+			    .setContentText(context.getResources().getString(R.string.appStoreReinstall))
+			    .setAutoCancel(true)
+			    .setDefaults(Notification.DEFAULT_SOUND)
+			    .setContentIntent(contentIntent);
         
         mNotificationManager.notify(0, mBuilder.build());
     }
@@ -208,19 +200,14 @@
         }
     }
 
-    protected void clearDataLogs()
+    void clearDataLogs()
     {
         try
         {
             Log.d(TAG, "Clearing dump log data...");
             Shell.runCommand(new CommandCapture(0, "rm /data/log_other_mode/*_log"));
-        } catch (IOException e)
+        } catch (IOException | TimeoutException e)
         {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (TimeoutException e)
-        {
-            // TODO Auto-generated catch block
             e.printStackTrace();
         }
     }
@@ -231,7 +218,7 @@
         return null;
     }
 
-    public void startDownloadLatest()
+    void startDownloadLatest()
     {
         Resources resources = getApplicationContext().getResources();
         String downloadLink = getConfigDownloadLink(getApplicationContext());
@@ -290,7 +277,8 @@
 
         StringBuilder sb = new StringBuilder();
         String download_url = mSharedPreferences.getString(FairphoneUpdater.PREFERENCE_OTA_DOWNLOAD_URL, getResources().getString(R.string.downloadUrl));
-        sb.append(download_url);
+
+	    sb.append(download_url);
         sb.append(Build.MODEL.replaceAll("\\s", ""));
         sb.append(Utils.getPartitionDownloadPath(resources));
         sb.append("/");
@@ -312,19 +300,19 @@
     {
         // attach the model and the os
         sb.append("?");
-        sb.append("model=" + Build.MODEL.replaceAll("\\s", ""));
+        sb.append("model=").append(Build.MODEL.replaceAll("\\s", ""));
         Version currentVersion = VersionParserHelper.getDeviceVersion(context.getApplicationContext());
 
         if (currentVersion != null)
         {
             try {
                 final String defaultCharset = Charset.defaultCharset().displayName();
-                sb.append("&os=" + URLEncoder.encode(currentVersion.getAndroidVersion(), defaultCharset));
-                sb.append("&b_n=" + URLEncoder.encode(currentVersion.getBuildNumber(), defaultCharset));
-                sb.append("&ota_v_n=" + URLEncoder.encode(String.valueOf(currentVersion.getNumber()), defaultCharset));
-                sb.append("&d=" + URLEncoder.encode(currentVersion.getReleaseDate(), defaultCharset));
-                sb.append("&beta=" + URLEncoder.encode(currentVersion.getBetaStatus(), defaultCharset));
-                sb.append("&dev=" + (FairphoneUpdater.DEV_MODE_ENABLED ? "1" : "0"));
+                sb.append("&os=").append(URLEncoder.encode(currentVersion.getAndroidVersion(), defaultCharset));
+                sb.append("&b_n=").append(URLEncoder.encode(currentVersion.getBuildNumber(), defaultCharset));
+                sb.append("&ota_v_n=").append(URLEncoder.encode(String.valueOf(currentVersion.getNumber()), defaultCharset));
+                sb.append("&d=").append(URLEncoder.encode(currentVersion.getReleaseDate(), defaultCharset));
+                sb.append("&beta=").append(URLEncoder.encode(currentVersion.getBetaStatus(), defaultCharset));
+                sb.append("&dev=").append(FairphoneUpdater.DEV_MODE_ENABLED ? "1" : "0");
             } catch (UnsupportedEncodingException e) {
                 Log.e(TAG, "Failed to add extra info on update request: "+e.getLocalizedMessage());
             }
@@ -372,9 +360,13 @@
         try
         {
             request = new Request(Uri.parse(url));
-            Environment.getExternalStoragePublicDirectory(Environment.getExternalStorageDirectory() + resources.getString(R.string.updaterFolder)).mkdirs();
+	        final File externalStoragePublicDirectory = Environment.getExternalStoragePublicDirectory(Environment.getExternalStorageDirectory() + resources.getString(R.string.updaterFolder));
+	        final boolean mkdirs = externalStoragePublicDirectory.mkdirs();
+	        if(!mkdirs && !externalStoragePublicDirectory.exists()) {
+		        throw new Exception("Couldn't create updater dir structures.");
+	        }
 
-            request.setDestinationInExternalPublicDir(resources.getString(R.string.updaterFolder), fileName);
+	        request.setDestinationInExternalPublicDir(resources.getString(R.string.updaterFolder), fileName);
             request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
             request.setAllowedOverRoaming(false);
             request.setTitle(resources.getString(R.string.fairphone_update_message_title));
@@ -499,7 +491,11 @@
             else
             {
                 //Toast.makeText(context, resources.getString(R.string.invalid_signature_download_message), Toast.LENGTH_LONG).show();
-                file.delete();
+                final boolean delete = file.delete();
+	            if(!delete) {
+		            Log.d(TAG, "Unable to delete "+file.getAbsolutePath());
+	            }
+
             }
         }
 
diff --git a/src/com/fairphone/updater/data/DownloadableItem.java b/src/com/fairphone/updater/data/DownloadableItem.java
index 9ebc697..f99a497 100644
--- a/src/com/fairphone/updater/data/DownloadableItem.java
+++ b/src/com/fairphone/updater/data/DownloadableItem.java
@@ -31,25 +31,25 @@
 
     private static final String DEPENDENCY_SEPARATOR = ",";
 
-    protected int mNumber;
+    int mNumber;
 
-    protected String mName;
+    String mName;
 
-    protected String mOTADownloadLink;
+    String mOTADownloadLink;
 
-    protected String mOTAMd5Sum;
+    String mOTAMd5Sum;
 
-    protected String mBuildNumber;
+    String mBuildNumber;
     
-    protected Map<String, String> mReleaseNotesMap;
+    private final Map<String, String> mReleaseNotesMap;
 
-    protected String mReleaseDate;
+    String mReleaseDate;
 
-    protected String mThumbnailImageLink;
+    String mThumbnailImageLink;
 
-    protected ArrayList<Integer> mDependencies;
+    ArrayList<Integer> mDependencies;
 
-    public DownloadableItem()
+    DownloadableItem()
     {
         setNumber(0);
         setName("");
@@ -59,7 +59,7 @@
         setReleaseDate("");
         setThumbnailLink("");
 
-        mReleaseNotesMap = new HashMap<String, String>();
+        mReleaseNotesMap = new HashMap<>();
     }
 
     public int getNumber()
@@ -207,7 +207,7 @@
         return TextUtils.isEmpty(releaseNotes) ? "" : releaseNotes;
     }
 
-    public void resetReleaseNotes()
+    void resetReleaseNotes()
     {
         mReleaseNotesMap.clear();
     }
diff --git a/src/com/fairphone/updater/data/Store.java b/src/com/fairphone/updater/data/Store.java
index d7402d7..f055544 100644
--- a/src/com/fairphone/updater/data/Store.java
+++ b/src/com/fairphone/updater/data/Store.java
@@ -22,7 +22,7 @@
     }
 
     @Override
-    public int compareTo(Store another)
+    public int compareTo(@SuppressWarnings("NullableProblems") Store another)
     {
         int retVal;
         if (another != null)
diff --git a/src/com/fairphone/updater/data/UpdaterData.java b/src/com/fairphone/updater/data/UpdaterData.java
index 9e92653..53bd111 100644
--- a/src/com/fairphone/updater/data/UpdaterData.java
+++ b/src/com/fairphone/updater/data/UpdaterData.java
@@ -7,12 +7,6 @@
 import java.util.List;
 import java.util.Map;
 
-import android.os.Build;
-
-import com.fairphone.updater.R;
-import com.fairphone.updater.gappsinstaller.GappsInstallerHelper;
-import com.fairphone.updater.tools.Utils;
-
 public class UpdaterData
 {
 
@@ -22,11 +16,11 @@
 
     private int mLatestFairphoneVersionNumber;
 
-    private Map<Integer, Version> mAOSPVersionMap;
+    private final Map<Integer, Version> mAOSPVersionMap;
 
-    private Map<Integer, Version> mFairphoneVersionMap;
+    private final Map<Integer, Version> mFairphoneVersionMap;
     
-    private Map<Integer, Store> mAppStoresMap;
+    private final Map<Integer, Store> mAppStoresMap;
 
     public static UpdaterData getInstance()
     {
@@ -41,9 +35,9 @@
     {
         mLatestAOSPVersionNumber = 0;
         mLatestFairphoneVersionNumber = 0;
-        mAOSPVersionMap = new HashMap<Integer, Version>();
-        mFairphoneVersionMap = new HashMap<Integer, Version>();
-        mAppStoresMap = new HashMap<Integer, Store>();
+        mAOSPVersionMap = new HashMap<>();
+        mFairphoneVersionMap = new HashMap<>();
+        mAppStoresMap = new HashMap<>();
     }
 
     public void resetUpdaterData()
@@ -65,7 +59,7 @@
         int latestVersionNumber;
         try
         {
-            latestVersionNumber = Integer.valueOf(latestVersion).intValue();
+            latestVersionNumber = Integer.valueOf(latestVersion);
         } catch (NumberFormatException e)
         {
             latestVersionNumber = 0;
@@ -108,9 +102,9 @@
         return version;
     }
 
-    public ArrayList<Version> mapToOrderedVersionList(Collection<Version> a)
+    ArrayList<Version> mapToOrderedVersionList(Collection<Version> a)
     {
-        ArrayList<Version> retval = new ArrayList<Version>();
+        ArrayList<Version> retval = new ArrayList<>();
         for (Version version : a)
         {
             retval.add(version);
@@ -119,9 +113,9 @@
         return retval;
     }
     
-    public ArrayList<Store> mapToOrderedStoreList(Collection<Store> a)
+    ArrayList<Store> mapToOrderedStoreList(Collection<Store> a)
     {
-        ArrayList<Store> retval = new ArrayList<Store>();
+        ArrayList<Store> retval = new ArrayList<>();
         for (Store store : a)
         {
             retval.add(store);
@@ -132,21 +126,18 @@
 
     public List<Version> getAOSPVersionList()
     {
-        ArrayList<Version> retval = mapToOrderedVersionList(mAOSPVersionMap.values());
-        return retval;
+	    return mapToOrderedVersionList(mAOSPVersionMap.values());
     }
 
     public List<Version> getFairphoneVersionList()
     {
-        ArrayList<Version> retval = mapToOrderedVersionList(mFairphoneVersionMap.values());
-        return retval;
+	    return mapToOrderedVersionList(mFairphoneVersionMap.values());
     }
     
     public List<Store> getAppStoreList()
     {
-        ArrayList<Store> retval = mapToOrderedStoreList(mAppStoresMap.values());
 
-        return retval;
+	    return mapToOrderedStoreList(mAppStoresMap.values());
     }
 
     public Version getVersion(String imageType, int versionNumber)
@@ -169,14 +160,14 @@
         return mAppStoresMap.get(storeNumber);
     }
 
-    public boolean isAOSPVersionListEmpty()
+    public boolean isAOSPVersionListNotEmpty()
     {
-        return mAOSPVersionMap.isEmpty();
+        return !mAOSPVersionMap.isEmpty();
     }
 
-    public boolean isFairphoneVersionListEmpty()
+    public boolean isFairphoneVersionListNotEmpty()
     {
-        return mFairphoneVersionMap.isEmpty();
+        return !mFairphoneVersionMap.isEmpty();
     }
     
     public boolean isAppStoreListEmpty()
diff --git a/src/com/fairphone/updater/data/Version.java b/src/com/fairphone/updater/data/Version.java
index 2e4c31a..c3285a8 100644
--- a/src/com/fairphone/updater/data/Version.java
+++ b/src/com/fairphone/updater/data/Version.java
@@ -29,35 +29,35 @@
 
 public class Version extends DownloadableItem implements Comparable<Version>
 {
-    public static final String FAIRPHONE_VERSION_NUMBER = "FairphoneUpdateVersionNumber";
+    private static final String FAIRPHONE_VERSION_NUMBER = "FairphoneUpdateVersionNumber";
 
-    public static final String FAIRPHONE_VERSION_NAME = "FairphoneUpdateVersionName";
+    private static final String FAIRPHONE_VERSION_NAME = "FairphoneUpdateVersionName";
 
-    public static final String FAIRPHONE_VERSION_BUILD_NUMBER = "FairphoneUpdateVersionBuildNumber";
+    private static final String FAIRPHONE_VERSION_BUILD_NUMBER = "FairphoneUpdateVersionBuildNumber";
 
-    public static final String FAIRPHONE_ANDROID_VERSION = "FairphoneUpdateAndroidVersion";
+    private static final String FAIRPHONE_ANDROID_VERSION = "FairphoneUpdateAndroidVersion";
 
-    public static final String FAIRPHONE_VERSION_OTA_DOWNLOAD_LINK = "FairphoneUpdateVersionOTADownloadLink";
+    private static final String FAIRPHONE_VERSION_OTA_DOWNLOAD_LINK = "FairphoneUpdateVersionOTADownloadLink";
 
-    public static final String FAIRPHONE_VERSION_THUMBNAIL_DOWNLOAD_LINK = "FairphoneUpdateVersionThumbnailDownloadLink";
+    private static final String FAIRPHONE_VERSION_THUMBNAIL_DOWNLOAD_LINK = "FairphoneUpdateVersionThumbnailDownloadLink";
 
-    public static final String FAIRPHONE_VERSION_OTA_MD5 = "FairphoneUpdateVersionOTAMD5";
+    private static final String FAIRPHONE_VERSION_OTA_MD5 = "FairphoneUpdateVersionOTAMD5";
 
     public static final String IMAGE_TYPE_AOSP = "AOSP";
 
     public static final String IMAGE_TYPE_FAIRPHONE = "FAIRPHONE";
 
-    protected String mImageType;
+    private String mImageType;
 
-    protected String mAndroidVersion;
+    private String mAndroidVersion;
 
-    protected String mBetaStatus;
+    private String mBetaStatus;
 
-    protected boolean mErasePartitionsWarning;
+    private boolean mErasePartitionsWarning;
 
     public Version()
     {
-        mDependencies = new ArrayList<Integer>();
+        mDependencies = new ArrayList<>();
 
         mNumber = 0;
         mName = "";
@@ -106,7 +106,7 @@
         return version;
     }
 
-    public void saveToSharedPreferences(Context context)
+    void saveToSharedPreferences(Context context)
     {
         SharedPreferences sharedPrefs = context.getSharedPreferences(FairphoneUpdater.FAIRPHONE_UPDATER_PREFERENCES, Context.MODE_PRIVATE);
 
@@ -180,7 +180,7 @@
         return Version.getImageTypeDescription(mImageType, resources);
     }
 
-    public static String getImageTypeDescription(String imageType, Resources resources)
+    private static String getImageTypeDescription(String imageType, Resources resources)
     {
         String description = resources.getString(R.string.fairphone);
         if (!TextUtils.isEmpty(imageType))
@@ -202,17 +202,13 @@
         String retVal = "";
         if (!TextUtils.isEmpty(mAndroidVersion))
         {
-            StringBuilder sb = new StringBuilder();
-            sb.append(resources.getString(R.string.android));
-            sb.append(" ");
-            sb.append(mAndroidVersion);
-            retVal = sb.toString();
+	        retVal = resources.getString(R.string.android) + " " + mAndroidVersion;
         }
         return retVal;
     }
-    
+
     @Override
-    public int compareTo(Version another)
+    public int compareTo(@SuppressWarnings("NullableProblems") Version another)
     {
         int retVal;
         if (another != null)
diff --git a/src/com/fairphone/updater/data/VersionParserHelper.java b/src/com/fairphone/updater/data/VersionParserHelper.java
index 6c12ac3..7d2b3c8 100644
--- a/src/com/fairphone/updater/data/VersionParserHelper.java
+++ b/src/com/fairphone/updater/data/VersionParserHelper.java
@@ -80,39 +80,37 @@
         return version;
     }
 
-    public static String getSystemData(Context context, String property, boolean useDefaults)
+    private static String getSystemData(Context context, String property, boolean useDefaults)
     {
+		String result;
+	    switch (property) {
+		    case CURRENT_VERSION_NUMBER:
+			    result = Utils.getprop(CURRENT_VERSION_NUMBER, useDefaults ? String.valueOf(context.getResources().getInteger(R.integer.defaultVersionNumber)) : "");
+			    break;
+		    case CURRENT_VERSION_NAME:
+			    result = Utils.getprop(CURRENT_VERSION_NAME, useDefaults ? context.getResources().getString(R.string.defaultVersionName) : "");
+			    break;
+		    case CURRENT_ANDROID_VERSION:
+			    result = Utils.getprop(CURRENT_ANDROID_VERSION, useDefaults ? context.getResources().getString(R.string.defaultAndroidVersionNumber) : "");
+			    break;
+		    case CURRENT_VERSION_BUILD_NUMBER:
+			    result = Utils.getprop(CURRENT_VERSION_BUILD_NUMBER, useDefaults ? context.getResources().getString(R.string.defaultBuildNumber) : "");
+			    break;
+		    case CURRENT_VERSION_IMAGE_TYPE:
+			    result = Utils.getprop(CURRENT_VERSION_IMAGE_TYPE, useDefaults ? context.getResources().getString(R.string.defaultImageType) : "");
+			    break;
+		    case CURRENT_VERSION_BUILD_DATE:
+			    result = Utils.getprop(CURRENT_VERSION_BUILD_DATE, useDefaults ? context.getResources().getString(R.string.defaultBuildDate) : "");
+			    break;
+		    case CURRENT_BETA_STATUS:
+			    result = Utils.getprop(CURRENT_BETA_STATUS, useDefaults ? context.getResources().getString(R.string.defaultBetaStatus) : "0");
+			    break;
+		    default:
+			    result = "";
+			    break;
+	    }
 
-        if (property.equals(CURRENT_VERSION_NUMBER))
-        {
-            return Utils.getprop(CURRENT_VERSION_NUMBER, useDefaults ? String.valueOf(context.getResources().getInteger(R.integer.defaultVersionNumber)) : "");
-        }
-        else if (property.equals(CURRENT_VERSION_NAME))
-        {
-            return Utils.getprop(CURRENT_VERSION_NAME, useDefaults ? context.getResources().getString(R.string.defaultVersionName) : "");
-        }
-        else if (property.equals(CURRENT_ANDROID_VERSION))
-        {
-            return Utils.getprop(CURRENT_ANDROID_VERSION, useDefaults ? context.getResources().getString(R.string.defaultAndroidVersionNumber) : "");
-        }
-        else if (property.equals(CURRENT_VERSION_BUILD_NUMBER))
-        {
-            return Utils.getprop(CURRENT_VERSION_BUILD_NUMBER, useDefaults ? context.getResources().getString(R.string.defaultBuildNumber) : "");
-        }
-        else if (property.equals(CURRENT_VERSION_IMAGE_TYPE))
-        {
-            return Utils.getprop(CURRENT_VERSION_IMAGE_TYPE, useDefaults ? context.getResources().getString(R.string.defaultImageType) : "");
-        }
-        else if (property.equals(CURRENT_VERSION_BUILD_DATE))
-        {
-            return Utils.getprop(CURRENT_VERSION_BUILD_DATE, useDefaults ? context.getResources().getString(R.string.defaultBuildDate) : "");
-        }
-        else if (property.equals(CURRENT_BETA_STATUS))
-        {
-            return Utils.getprop(CURRENT_BETA_STATUS, useDefaults ? context.getResources().getString(R.string.defaultBetaStatus) : "0");
-        }
-
-        return null;
+        return result;
     }
 
     public static Version getLatestVersion(Context context)
@@ -153,7 +151,7 @@
 
     public enum XML_TAGS
     {
-        RELEASES, AOSP, FAIRPHONE, VERSION, NAME, BUILD_NUMBER, ANDROID_VERSION, RELEASE_NOTES, RELEASE_DATE, MD5SUM, THUMBNAIL_LINK, UPDATE_LINK, ERASE_DATA_WARNING, DEPENDENCIES, STORES, STORE, SHOW_DISCLAIMER;
+        RELEASES, AOSP, FAIRPHONE, VERSION, NAME, BUILD_NUMBER, ANDROID_VERSION, RELEASE_NOTES, RELEASE_DATE, MD5SUM, THUMBNAIL_LINK, UPDATE_LINK, ERASE_DATA_WARNING, DEPENDENCIES, STORES, STORE, SHOW_DISCLAIMER
     }
 
     // @formatter:on
@@ -182,7 +180,7 @@
 
         while (eventType != XmlPullParser.END_DOCUMENT)
         {
-            String tagName = null;
+            String tagName;
             switch (eventType)
             {
                 case XmlPullParser.START_DOCUMENT:
@@ -255,7 +253,7 @@
         return update.getLatestVersion(getSystemData(context, CURRENT_VERSION_IMAGE_TYPE, true));
     }
 
-    public static Version readVersion(Version version, XmlPullParser xpp, String tagName) throws XmlPullParserException, IOException
+    private static Version readVersion(Version version, XmlPullParser xpp, String tagName) throws XmlPullParserException, IOException
     {
 
         if (version == null)
@@ -281,7 +279,7 @@
         return version;
     }
 
-    public static Store readStore(Store store, XmlPullParser xpp, String tagName) throws XmlPullParserException, IOException
+    private static Store readStore(Store store, XmlPullParser xpp, String tagName) throws XmlPullParserException, IOException
     {
 
         if (store == null)
@@ -374,7 +372,7 @@
         removeZipContents(context);
     }
 
-    public static void removeZipContents(Context context)
+    private static void removeZipContents(Context context)
     {
         Resources resources = context.getResources();
         String filePath =
@@ -389,7 +387,10 @@
         File file = new File(filePath);
         if (file.exists())
         {
-            file.delete();
+	        final boolean delete = file.delete();
+	        if (!delete) {
+		        Log.d(TAG, "Couldn't delete file: " + file.getAbsolutePath());
+	        }
         }
     }
 
diff --git a/src/com/fairphone/updater/fragments/BaseFragment.java b/src/com/fairphone/updater/fragments/BaseFragment.java
index 90fb006..61f198c 100644
--- a/src/com/fairphone/updater/fragments/BaseFragment.java
+++ b/src/com/fairphone/updater/fragments/BaseFragment.java
@@ -9,8 +9,8 @@
 
 public class BaseFragment extends Fragment
 {
-    protected FairphoneUpdater mainActivity;
-    protected SharedPreferences mSharedPreferences;
+    FairphoneUpdater mainActivity;
+    SharedPreferences mSharedPreferences;
 
     @Override
     public void onAttach(Activity activity)
diff --git a/src/com/fairphone/updater/fragments/ConfirmationPopupDialog.java b/src/com/fairphone/updater/fragments/ConfirmationPopupDialog.java
index 2cf31ba..d58289d 100644
--- a/src/com/fairphone/updater/fragments/ConfirmationPopupDialog.java
+++ b/src/com/fairphone/updater/fragments/ConfirmationPopupDialog.java
@@ -1,5 +1,6 @@
 package com.fairphone.updater.fragments;
 
+import android.annotation.SuppressLint;
 import android.os.Bundle;
 import android.support.v4.app.DialogFragment;
 import android.view.KeyEvent;
@@ -19,6 +20,7 @@
 import com.fairphone.updater.R;
 import com.fairphone.updater.fragments.VersionDetailFragment.DetailLayoutType;
 
+@SuppressLint("ValidFragment")
 public class ConfirmationPopupDialog extends DialogFragment implements OnEditorActionListener
 {
     public interface ConfirmationPopupDialogListener
@@ -26,15 +28,13 @@
         void onFinishPopUpDialog(boolean result);
     }
 
-    private String mVersion;
-    private ConfirmationPopupDialogListener mCallback;
-    private DetailLayoutType mLayoutType;
+    private final String mVersion;
+    private final ConfirmationPopupDialogListener mCallback;
+    private final DetailLayoutType mLayoutType;
     private Button mOkButton;
-    private Button mCancelButton;
-    private CheckBox mConfirmationCheckbox;
-    private boolean mIsOSChange;
-    private boolean mIsOlderVersion;
-    private boolean mHasEraseAllDataWarning;
+	private final boolean mIsOSChange;
+    private final boolean mIsOlderVersion;
+    private final boolean mHasEraseAllDataWarning;
 
     public ConfirmationPopupDialog(String version, boolean isOSChange, boolean isOlderVersion, boolean hasEraseAllDataWarning, DetailLayoutType layoutType,
             ConfirmationPopupDialogListener callback)
@@ -54,8 +54,8 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
     {
         getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
-        View view = null;
-        TextView versionNameText = null;
+        View view;
+        TextView versionNameText;
 
         switch (mLayoutType)
         {
@@ -108,28 +108,24 @@
             }
         });
 
-        mCancelButton = (Button) view.findViewById(R.id.confirmation_no_button);
+	    Button mCancelButton = (Button) view.findViewById(R.id.confirmation_no_button);
 
-        mCancelButton.setOnClickListener(new OnClickListener()
-        {
+        mCancelButton.setOnClickListener(new OnClickListener() {
 
-            @Override
-            public void onClick(View v)
-            {
-                ConfirmationPopupDialog.this.dismiss();
-                mCallback.onFinishPopUpDialog(false);
-            }
+	        @Override
+	        public void onClick(View v) {
+		        ConfirmationPopupDialog.this.dismiss();
+		        mCallback.onFinishPopUpDialog(false);
+	        }
         });
 
-        mConfirmationCheckbox = (CheckBox) view.findViewById(R.id.confirmation_checkbox);
-        mConfirmationCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener()
-        {
+	    CheckBox mConfirmationCheckbox = (CheckBox) view.findViewById(R.id.confirmation_checkbox);
+        mConfirmationCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
 
-            @Override
-            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
-            {
-                mOkButton.setEnabled(isChecked);
-            }
+	        @Override
+	        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+		        mOkButton.setEnabled(isChecked);
+	        }
         });
 
         return view;
diff --git a/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java b/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
index 17a7cec..c899a56 100644
--- a/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
+++ b/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
@@ -4,6 +4,7 @@
 import java.io.IOException;
 import java.util.concurrent.TimeoutException;
 
+import android.annotation.SuppressLint;
 import android.app.AlertDialog;
 import android.app.DownloadManager;
 import android.app.ProgressDialog;
@@ -12,7 +13,6 @@
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.SharedPreferences;
 import android.content.SharedPreferences.Editor;
 import android.content.res.Resources;
 import android.content.res.Resources.NotFoundException;
@@ -32,7 +32,6 @@
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.fairphone.updater.FairphoneUpdater;
 import com.fairphone.updater.FairphoneUpdater.HeaderType;
 import com.fairphone.updater.FairphoneUpdater.UpdaterState;
 import com.fairphone.updater.R;
@@ -47,12 +46,13 @@
 import com.stericson.RootTools.execution.CommandCapture;
 import com.stericson.RootTools.execution.Shell;
 
+@SuppressLint("ValidFragment")
 public class DownloadAndRestartFragment extends BaseFragment
 {
 
     private static final int PROGRESS_BAR_UPDATE_FREQUENCY_IN_MILLIS = 1000;
 
-    protected static final String TAG = DownloadAndRestartFragment.class.getSimpleName();
+    private static final String TAG = DownloadAndRestartFragment.class.getSimpleName();
 
     private TextView mDownloadVersionName;
     private LinearLayout mVersionDownloadingGroup;
@@ -63,7 +63,7 @@
     private Version mSelectedVersion;
     private Store mSelectedStore;
 
-    private boolean mIsVersion;
+    private final boolean mIsVersion;
 
     private DownloadManager mDownloadManager;
 
@@ -84,7 +84,7 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
     {
         // Inflate the layout for this fragment
-        View view = null;
+        View view;
         if (mIsVersion)
         {
             mSelectedVersion = mainActivity.getSelectedVersion();
@@ -122,9 +122,8 @@
 
     private View inflateStoreView(LayoutInflater inflater, ViewGroup container)
     {
-        View view = inflater.inflate(R.layout.fragment_download_app_store, container, false);
 
-        return view;
+	    return inflater.inflate(R.layout.fragment_download_app_store, container, false);
     }
 
     private void toggleDownloadProgressAndRestart()
@@ -512,7 +511,6 @@
                 if (Utils.checkMD5(item.getMd5Sum(), file))
                 {
                     copyUpdateToCache(file);
-                    return;
                 }
                 else
                 {
@@ -527,7 +525,7 @@
     // DOWNLOAD UPDATE
     // ************************************************************************************
 
-    public void setupDownloadState()
+    void setupDownloadState()
     {
         DownloadableItem item = mIsVersion ? mSelectedVersion : mSelectedStore;
 
@@ -539,9 +537,12 @@
             // we don't have the lastest.xml so get back to initial state
             File updateDir = new File(Environment.getExternalStorageDirectory() + resources.getString(R.string.updaterFolder));
 
-            updateDir.delete();
+	        final boolean delete = updateDir.delete();
+	        if(!delete) {
+		        Log.d(TAG, "Unable to delete "+updateDir.getAbsolutePath());
+	        }
 
-            abortUpdateProcess();
+	        abortUpdateProcess();
 
             return;
         }
@@ -594,27 +595,12 @@
                     Shell.runRootCommand(new CommandCapture(0, "echo '--update_package=/" + resources.getString(R.string.recoverySdCardPath)
                             + resources.getString(R.string.updaterFolder) + Utils.getFilenameFromDownloadableItem(item) + "' >> /cache/recovery/command"));
                 }
-            } catch (IOException e)
+            } catch (IOException | NotFoundException | TimeoutException | RootDeniedException e)
             {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            } catch (NotFoundException e)
-            {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            } catch (TimeoutException e)
-            {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            } catch (RootDeniedException e)
-            {
-                // TODO Auto-generated catch block
                 e.printStackTrace();
             }
 
-            SharedPreferences sharedPreferences = getActivity().getSharedPreferences(FairphoneUpdater.FAIRPHONE_UPDATER_PREFERENCES, Context.MODE_PRIVATE);
-
-            Editor editor = sharedPreferences.edit();
+            Editor editor = mSharedPreferences.edit();
             editor.remove(UpdaterService.PREFERENCE_REINSTALL_GAPPS);
             editor.commit();
 
@@ -632,20 +618,13 @@
                 mainActivity.updateStatePreference(UpdaterState.NORMAL);
                 mainActivity.clearSelectedItems();
                 clearConfigFile();
-                mSharedPreferences.edit().remove(UpdaterService.LAST_CONFIG_DOWNLOAD_IN_MS).commit();
-                mSharedPreferences.edit().remove(MainFragment.SHARED_PREFERENCES_ENABLE_GAPPS).commit();
+	            editor = mSharedPreferences.edit();
+	            editor.remove(UpdaterService.LAST_CONFIG_DOWNLOAD_IN_MS);
+                editor.remove(MainFragment.SHARED_PREFERENCES_ENABLE_GAPPS);
+		        editor.commit();
                 Shell.runRootCommand(new CommandCapture(0, "reboot recovery"));
-            } catch (IOException e)
+            } catch (IOException | TimeoutException | RootDeniedException e)
             {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            } catch (TimeoutException e)
-            {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            } catch (RootDeniedException e)
-            {
-                // TODO Auto-generated catch block
                 e.printStackTrace();
             }
         }
@@ -662,7 +641,7 @@
         {
             mDownloadManager.remove(cfgFile);
         }
-        mainActivity.saveConfigFileDownloadId(0);
+        mainActivity.clearConfigFileDownloadId();
         VersionParserHelper.removeConfigFiles(mainActivity);
     }
 
@@ -706,19 +685,13 @@
                     R.string.removeGmailCommand), getResources().getString(R.string.removePlayServicesCommand), getResources().getString(
                     R.string.removeQuicksearchCommand), getResources().getString(R.string.removeTalkbackCommand), getResources().getString(
                     R.string.removeText2SpeechCommand)));
-        } catch (IOException e)
-        {
-            e.printStackTrace();
-        } catch (TimeoutException e)
-        {
-            e.printStackTrace();
-        } catch (RootDeniedException e)
+        } catch (IOException | TimeoutException | RootDeniedException e)
         {
             e.printStackTrace();
         }
     }
 
-    public boolean removeLastUpdateDownload()
+    void removeLastUpdateDownload()
     {
         long latestUpdateDownloadId = mainActivity.getLatestUpdateDownloadIdFromSharedPreference();
         if (latestUpdateDownloadId != 0 && mDownloadManager != null)
@@ -728,7 +701,6 @@
 
             mainActivity.resetLastUpdateDownloadId();
         }
-        return latestUpdateDownloadId != 0; // report if something was canceled
     }
 
     private class CopyFileToCacheTask extends AsyncTask<String, Integer, Integer>
diff --git a/src/com/fairphone/updater/fragments/InfoPopupDialog.java b/src/com/fairphone/updater/fragments/InfoPopupDialog.java
index 76e9d74..b23d9bb 100644
--- a/src/com/fairphone/updater/fragments/InfoPopupDialog.java
+++ b/src/com/fairphone/updater/fragments/InfoPopupDialog.java
@@ -1,5 +1,6 @@
 package com.fairphone.updater.fragments;
 
+import android.annotation.SuppressLint;
 import android.os.Bundle;
 import android.support.v4.app.DialogFragment;
 import android.view.KeyEvent;
@@ -16,12 +17,12 @@
 import com.fairphone.updater.R;
 import com.fairphone.updater.fragments.VersionDetailFragment.DetailLayoutType;
 
+@SuppressLint("ValidFragment")
 public class InfoPopupDialog extends DialogFragment implements OnEditorActionListener
 {
-    private DetailLayoutType mLayoutType;
-    private Button mOkButton;
+    private final DetailLayoutType mLayoutType;
 
-    public InfoPopupDialog(DetailLayoutType layoutType)
+	public InfoPopupDialog(DetailLayoutType layoutType)
     {
         // Empty constructor required for DialogFragment
         super();
@@ -33,7 +34,7 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
     {
         getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
-        View view = null;
+        View view;
 
         switch (mLayoutType)
         {
@@ -48,15 +49,13 @@
                 break;
         }
 
-        mOkButton = (Button) view.findViewById(R.id.confirmation_yes_button);
+	    Button mOkButton = (Button) view.findViewById(R.id.confirmation_yes_button);
 
-        mOkButton.setOnClickListener(new OnClickListener()
-        {
-            @Override
-            public void onClick(View v)
-            {
-                InfoPopupDialog.this.dismiss();
-            }
+        mOkButton.setOnClickListener(new OnClickListener() {
+	        @Override
+	        public void onClick(View v) {
+		        InfoPopupDialog.this.dismiss();
+	        }
         });
 
         return view;
diff --git a/src/com/fairphone/updater/fragments/MainFragment.java b/src/com/fairphone/updater/fragments/MainFragment.java
index 58a339b..70c36d0 100644
--- a/src/com/fairphone/updater/fragments/MainFragment.java
+++ b/src/com/fairphone/updater/fragments/MainFragment.java
@@ -30,7 +30,7 @@
 public class MainFragment extends BaseFragment
 {
 
-    public static String SHARED_PREFERENCES_ENABLE_GAPPS = "SHARED_PREFERENCES_ENABLE_GAPPS_POPUP";
+    public static final String SHARED_PREFERENCES_ENABLE_GAPPS = "SHARED_PREFERENCES_ENABLE_GAPPS_POPUP";
 
     private LinearLayout mVersionUpToDateGroup;
     private TextView mVersionUpToDateCurrentVersionNameText;
@@ -42,9 +42,8 @@
     private Button mOtherOSOptionsButton;
     private Version mDeviceVersion;
     private BroadcastReceiver newVersionbroadcastReceiver;
-    private LinearLayout mCurrentVersionGroup;
 
-    private RelativeLayout mGappsIcon;
+	private RelativeLayout mGappsIcon;
     private Button mGappsButton;
     private Button mGappsDismissButton;
 
@@ -103,36 +102,35 @@
         return  showGappsGroup && gappsNotInstalled && hasStoreInfo;
     }
     
-    protected Store getSelectedStoreFromSharedPreferences()
+    Store getSelectedStoreFromSharedPreferences()
     {
         return UpdaterData.getInstance().getStore(mSharedPreferences.getInt(FairphoneUpdater.PREFERENCE_SELECTED_STORE_NUMBER, 0));
     }
 
-    private void setGappsInstalationButtonState(boolean enableGapps)
+    private void disableGappsInstalationButton()
     {
         Editor edit = mSharedPreferences.edit();
-        edit.putBoolean(SHARED_PREFERENCES_ENABLE_GAPPS, enableGapps);
+        edit.putBoolean(SHARED_PREFERENCES_ENABLE_GAPPS, false);
 
         edit.commit();
     }
 
     private void setupCurrentVersionGroup(LayoutInflater inflater, View view)
     {
-        mCurrentVersionGroup = (LinearLayout) view.findViewById(R.id.current_version_group);
+	    LinearLayout mCurrentVersionGroup = (LinearLayout) view.findViewById(R.id.current_version_group);
 
         View updateGroupView = null;
         if (Version.IMAGE_TYPE_FAIRPHONE.equalsIgnoreCase(mainActivity.getDeviceVersion().getImageType()))
         {
-            updateGroupView = inflater.inflate(R.layout.fragment_main_update_available_fairphone, null);
+            updateGroupView = inflater.inflate(R.layout.fragment_main_update_available_fairphone, mCurrentVersionGroup);
         }
         else if (Version.IMAGE_TYPE_AOSP.equalsIgnoreCase(mainActivity.getDeviceVersion().getImageType()))
         {
-            updateGroupView = inflater.inflate(R.layout.fragment_main_update_available_android, null);
+            updateGroupView = inflater.inflate(R.layout.fragment_main_update_available_android, mCurrentVersionGroup);
         }
         if (updateGroupView != null)
         {
             updateGroupView.setLayoutParams(mCurrentVersionGroup.getLayoutParams());
-            mCurrentVersionGroup.addView(updateGroupView);
         }
     }
 
@@ -159,7 +157,7 @@
                 public void onClick(View v)
                 {
                     mGappsIcon.setVisibility(View.GONE);
-                    setGappsInstalationButtonState(false);
+                    disableGappsInstalationButton();
                 }
             });
         }
@@ -177,7 +175,7 @@
 
     private void updateOtherOSOptionsGroup()
     {
-        if (!UpdaterData.getInstance().isFairphoneVersionListEmpty() || !UpdaterData.getInstance().isAOSPVersionListEmpty())
+        if (UpdaterData.getInstance().isFairphoneVersionListNotEmpty() || UpdaterData.getInstance().isAOSPVersionListNotEmpty())
         {
             mOtherOSOptionsGroup.setVisibility(View.VISIBLE);
             mOtherOSOptionsButton.setOnClickListener(new OnClickListener()
@@ -197,7 +195,7 @@
         }
     }
 
-    public void toogleUpdateAvailableGroup()
+    void toogleUpdateAvailableGroup()
     {
         updateCurrentVersionGroup();
 
@@ -312,7 +310,7 @@
         unregisterBroadCastReceiver();
     }
 
-    protected void setupBroadcastReceiver()
+    void setupBroadcastReceiver()
     {
         newVersionbroadcastReceiver = new BroadcastReceiver()
         {
diff --git a/src/com/fairphone/updater/fragments/OtherOSOptionsFragment.java b/src/com/fairphone/updater/fragments/OtherOSOptionsFragment.java
index e344c5d..068930f 100644
--- a/src/com/fairphone/updater/fragments/OtherOSOptionsFragment.java
+++ b/src/com/fairphone/updater/fragments/OtherOSOptionsFragment.java
@@ -70,7 +70,7 @@
 
     private void setupAndroidVersionsButton()
     {
-        if (!UpdaterData.getInstance().isAOSPVersionListEmpty())
+        if (UpdaterData.getInstance().isAOSPVersionListNotEmpty())
         {
             androidOSButton.setVisibility(View.VISIBLE);
             androidOSButton.setOnClickListener(new OnClickListener()
@@ -93,7 +93,7 @@
 
     private void setupOlderFairphoneVersionsButton()
     {
-        if (!UpdaterData.getInstance().isFairphoneVersionListEmpty())
+        if (UpdaterData.getInstance().isFairphoneVersionListNotEmpty())
         {
             olderFairphoneOSButton.setVisibility(View.VISIBLE);
             olderFairphoneOSButton.setOnClickListener(new OnClickListener()
diff --git a/src/com/fairphone/updater/fragments/VersionDetailFragment.java b/src/com/fairphone/updater/fragments/VersionDetailFragment.java
index 93e7e51..a77606d 100644
--- a/src/com/fairphone/updater/fragments/VersionDetailFragment.java
+++ b/src/com/fairphone/updater/fragments/VersionDetailFragment.java
@@ -1,9 +1,6 @@
 package com.fairphone.updater.fragments;
 
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Locale;
-
+import android.annotation.SuppressLint;
 import android.app.AlertDialog;
 import android.app.DownloadManager;
 import android.app.DownloadManager.Request;
@@ -26,7 +23,6 @@
 
 import com.fairphone.updater.FairphoneUpdater.HeaderType;
 import com.fairphone.updater.FairphoneUpdater.UpdaterState;
-import com.fairphone.updater.FairphoneUpdater;
 import com.fairphone.updater.R;
 import com.fairphone.updater.data.DownloadableItem;
 import com.fairphone.updater.data.Store;
@@ -34,6 +30,12 @@
 import com.fairphone.updater.fragments.ConfirmationPopupDialog.ConfirmationPopupDialogListener;
 import com.fairphone.updater.tools.Utils;
 
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Locale;
+
+@SuppressLint("ValidFragment")
 public class VersionDetailFragment extends BaseFragment
 {
 
@@ -57,7 +59,7 @@
     private boolean mIsOSChange;
     private boolean mIsOlderVersion;
     private Store mSelectedStore;
-    private boolean mIsVersion;
+    private final boolean mIsVersion;
 
     public VersionDetailFragment(boolean isVersion)
     {
@@ -79,7 +81,7 @@
 
     private View setLayoutType(LayoutInflater inflater, ViewGroup container)
     {
-        View view = null;
+        View view;
         switch (mDetailLayoutType)
         {
             case UPDATE_ANDROID:
@@ -168,11 +170,11 @@
         mSelectedStore = null;
     }
 
-    public void setupFragment(Store selectedStore, DetailLayoutType detailType)
+    public void setupAppStoreFragment(Store selectedStore)
     {
         mSelectedStore = selectedStore;
 
-        mDetailLayoutType = detailType;
+        mDetailLayoutType = DetailLayoutType.APP_STORE;
         mSelectedVersion = null;
     }
 
@@ -184,7 +186,7 @@
 
         if (mIsVersion && mSelectedVersion != null)
         {
-            mHeaderType = mainActivity.getHeaderTypeFromImageType(mSelectedVersion != null ? mSelectedVersion.getImageType() : "");
+            mHeaderType = mainActivity.getHeaderTypeFromImageType(mSelectedVersion.getImageType());
         }
         else if (mSelectedStore != null)
         {
@@ -234,9 +236,7 @@
 
         ConnectivityManager manager = (ConnectivityManager) mainActivity.getSystemService(Context.CONNECTIVITY_SERVICE);
 
-        boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
-
-        return isWifi;
+	    return manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
     }
 
     private Request createDownloadRequest(String url, String fileName, String downloadTitle)
@@ -247,9 +247,13 @@
         try
         {
             request = new Request(Uri.parse(url));
-            Environment.getExternalStoragePublicDirectory(Environment.getExternalStorageDirectory() + resources.getString(R.string.updaterFolder)).mkdirs();
+	        final File externalStoragePublicDirectory = Environment.getExternalStoragePublicDirectory(Environment.getExternalStorageDirectory() + resources.getString(R.string.updaterFolder));
+	        final boolean mkdirs = externalStoragePublicDirectory.mkdirs();
+	        if(!mkdirs && !externalStoragePublicDirectory.exists()) {
+		        throw new Exception("Couldn't create updater dir structures.");
+	        }
 
-            request.setDestinationInExternalPublicDir(resources.getString(R.string.updaterFolder), fileName);
+	        request.setDestinationInExternalPublicDir(resources.getString(R.string.updaterFolder), fileName);
             request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
             request.setAllowedOverRoaming(false);
 
@@ -262,7 +266,7 @@
         return request;
     }
 
-    public void startUpdateDownload()
+    void startUpdateDownload()
     {
         DownloadableItem item = mIsVersion ? mSelectedVersion : mSelectedStore;
         // use only on WiFi
@@ -305,7 +309,8 @@
                     mainActivity.saveLatestUpdateDownloadId(mLatestUpdateDownloadId);
 
                     // change state to download
-                    mainActivity.changeState(UpdaterState.DOWNLOAD);
+	                mainActivity.updateStatePreference(UpdaterState.DOWNLOAD);
+	                mainActivity.changeFragment(mainActivity.getFragmentFromState());
                 }
                 else
                 {
@@ -357,7 +362,7 @@
         popupDialog.show(fm, version);
     }
 
-    public void startDownload()
+    void startDownload()
     {
         if (mIsVersion && mSelectedVersion != null)
         {
@@ -431,7 +436,7 @@
         }
     }
 
-    protected void showStoreDisclaimer()
+    void showStoreDisclaimer()
     {
         final UpdaterState currentState = mainActivity.getCurrentUpdaterState();
 
diff --git a/src/com/fairphone/updater/fragments/VersionListFragment.java b/src/com/fairphone/updater/fragments/VersionListFragment.java
index c6ee0a8..8905c78 100644
--- a/src/com/fairphone/updater/fragments/VersionListFragment.java
+++ b/src/com/fairphone/updater/fragments/VersionListFragment.java
@@ -31,8 +31,7 @@
 
     private ListLayoutType mListLayoutType;
     private List<Version> mVersionList;
-    private List<Store> mStoreList;
-    private LinearLayout mVersionListContainer;
+	private LinearLayout mVersionListContainer;
     private Button mLatestVersionDetailsButton;
     private TextView mLatestVersionInstalledIndicator;
     private LinearLayout mOlderVersionsGroup;
@@ -41,15 +40,14 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
     {
         // Inflate the layout for this fragment
-        View view = setupLayout(inflater, container);
 
-        return view;
+	    return setupLayout(inflater, container);
     }
 
     private View setupLayout(LayoutInflater inflater, ViewGroup container)
     {
 
-        View view = null;
+        View view;
         Resources resources = mainActivity.getResources();
         switch (mListLayoutType)
         {
@@ -60,7 +58,6 @@
                 mOlderVersionsGroup = (LinearLayout) view.findViewById(R.id.older_versions_group);
                 mVersionListContainer = (LinearLayout) view.findViewById(R.id.version_list_container);
 
-                setupAppStoresLatestVersion();
                 setupAppStoreVersions(container);
                 break;
             case ANDROID:
@@ -99,7 +96,7 @@
         Button storeLayout;
         LayoutInflater inflater = getActivity().getLayoutInflater();
 
-        mStoreList = UpdaterData.getInstance().getAppStoreList();
+	    List<Store> mStoreList = UpdaterData.getInstance().getAppStoreList();
 
         for (Store store : mStoreList)
         {
@@ -122,7 +119,7 @@
                     {
                         VersionDetailFragment versionDetail = new VersionDetailFragment(false);
 
-                        versionDetail.setupFragment(selectedStore, DetailLayoutType.APP_STORE);
+                        versionDetail.setupAppStoreFragment(selectedStore);
 
                         mainActivity.changeFragment(versionDetail);
                     }
@@ -140,18 +137,6 @@
         }
     }
 
-    private void setupAppStoresLatestVersion()
-    {
-        // TODO Auto-generated method stub
-        
-    }
-
-    @Override
-    public void onDetach()
-    {
-        super.onDetach();
-    }
-
     private void setupFairphoneVersions(ViewGroup root)
     {
         Button versionLayout;
diff --git a/src/com/fairphone/updater/gappsinstaller/GappsInstallerHelper.java b/src/com/fairphone/updater/gappsinstaller/GappsInstallerHelper.java
index 04ad88a..e84267f 100644
--- a/src/com/fairphone/updater/gappsinstaller/GappsInstallerHelper.java
+++ b/src/com/fairphone/updater/gappsinstaller/GappsInstallerHelper.java
@@ -15,8 +15,6 @@
  */
 package com.fairphone.updater.gappsinstaller;
 
-import java.io.File;
-
 import android.appwidget.AppWidgetManager;
 import android.content.ComponentName;
 import android.content.Context;
@@ -24,6 +22,8 @@
 
 import com.fairphone.updater.widgets.gapps.GoogleAppsInstallerWidget;
 
+import java.io.File;
+
 public class GappsInstallerHelper
 {
     protected static final String TAG = GappsInstallerHelper.class.getSimpleName();
@@ -34,10 +34,10 @@
     public static final int GAPPS_STATES_INITIAL = 0;
     public static final int GAPPS_INSTALLED_STATE = 1;
 
-    public static String EXTRA_START_GAPPS_INSTALL = "com.fairphone.updater.gapps.EXTRA_START_GAPPS_INSTALL";
+    public static final String EXTRA_START_GAPPS_INSTALL = "com.fairphone.updater.gapps.EXTRA_START_GAPPS_INSTALL";
 
-    private Context mContext;
-    private SharedPreferences mSharedPrefs;
+    private final Context mContext;
+    private final SharedPreferences mSharedPrefs;
 
     public GappsInstallerHelper(Context context)
     {
@@ -55,17 +55,16 @@
         return f.exists();
     }
 
-    private boolean checkGappsAreInstalled()
+    private void checkGappsAreInstalled()
     {
         if (areGappsInstalled())
         {
             updateWidgetState(GAPPS_INSTALLED_STATE);
-            return true;
+	        return;
         }
 
         updateWidgetState(GAPPS_STATES_INITIAL);
 
-        return false;
     }
 
     private void updateGoogleAppsIntallerWidgets()
@@ -86,7 +85,7 @@
         prefEdit.commit();
     }
 
-    public void updateWidgetState(int state)
+    void updateWidgetState(int state)
     {
         updateInstallerState(state);
 
diff --git a/src/com/fairphone/updater/tools/Cleaner.java b/src/com/fairphone/updater/tools/Cleaner.java
deleted file mode 100644
index 891c0a6..0000000
--- a/src/com/fairphone/updater/tools/Cleaner.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.fairphone.updater.tools;
-
-import java.io.File;
-
-import android.content.Context;
-
-import com.fairphone.updater.R;
-
-public class Cleaner
-{
-    public static void deleteFile(String file, String location)
-    {
-        File f = new File(location + file);
-
-        if (f.exists())
-        {
-            deleteRecursive(f);
-        }
-    }
-
-    public static void deleteRecursive(File fileOrDirectory)
-    {
-        if (fileOrDirectory.isDirectory())
-        {
-            for (File child : fileOrDirectory.listFiles())
-            {
-                deleteRecursive(child);
-            }
-        }
-
-        fileOrDirectory.delete();
-    }
-    
-    public static void createDirPath(String dir, String location)
-    {
-        File f = new File(location + dir);
-
-        if (!f.isDirectory())
-        {
-            f.mkdirs();
-        }
-    }
-}
diff --git a/src/com/fairphone/updater/tools/RSAUtils.java b/src/com/fairphone/updater/tools/RSAUtils.java
index a87011d..670341c 100644
--- a/src/com/fairphone/updater/tools/RSAUtils.java
+++ b/src/com/fairphone/updater/tools/RSAUtils.java
@@ -49,7 +49,7 @@
 
     private static final String TAG = RSAUtils.class.getSimpleName();
 
-    public static final String SIGNATURE_ALGORITHM = "SHA1withRSA";
+    private static final String SIGNATURE_ALGORITHM = "SHA1withRSA";
 
     public static PublicKey readPublicKeyFormCertificate(Context context, int certificateResourceId) throws IOException, CertificateException
     {
@@ -74,21 +74,21 @@
         return pubKey;
     }
 
-    public static PublicKey readPublicKeyFromPemFormat(Context context, int publicKeyId) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException
+    private static PublicKey readPublicKeyFromPemFormat(Context context) throws IOException, NoSuchAlgorithmException, InvalidKeySpecException
     {
 
-        InputStream in = context.getResources().openRawResource(publicKeyId);
+        InputStream in = context.getResources().openRawResource(R.raw.public_key);
         BufferedReader pemReader = new BufferedReader(new InputStreamReader(in));
 
-        StringBuffer content = new StringBuffer();
-        String line = null;
+        StringBuilder content = new StringBuilder();
+        String line;
         while ((line = pemReader.readLine()) != null)
         {
-            if (line.indexOf("-----BEGIN PUBLIC KEY-----") != -1)
+            if (line.contains("-----BEGIN PUBLIC KEY-----"))
             {
                 while ((line = pemReader.readLine()) != null)
                 {
-                    if (line.indexOf("-----END PUBLIC KEY") != -1)
+                    if (line.contains("-----END PUBLIC KEY"))
                     {
                         break;
                     }
@@ -107,7 +107,7 @@
         return keyFactory.generatePublic(new X509EncodedKeySpec(Base64.decode(content.toString(), Base64.DEFAULT)));
     }
 
-    public static byte[] readSignature(String input) throws IOException
+    private static byte[] readSignature(String input) throws IOException
     {
         FileInputStream signStream = new FileInputStream(input);
         byte[] signBytes = new byte[signStream.available()];
@@ -116,9 +116,9 @@
         return signBytes;
     }
 
-    public static boolean verifySignature(String input, String algorithm, byte[] sign, PublicKey pubKey) throws Exception
+    private static boolean verifySignature(String input, byte[] sign, PublicKey pubKey) throws Exception
     {
-        Signature sg = Signature.getInstance(algorithm);
+        Signature sg = Signature.getInstance(RSAUtils.SIGNATURE_ALGORITHM);
         sg.initVerify(pubKey);
         Log.i(TAG, "Signature Object Info: ");
         Log.i(TAG, "Algorithm = " + sg.getAlgorithm());
@@ -149,21 +149,12 @@
             String fileXmlExt = resources.getString(R.string.config_xml);
             String fileSigExt = resources.getString(R.string.config_sig);
 
-            PublicKey pubKey = RSAUtils.readPublicKeyFromPemFormat(context, R.raw.public_key);
+            PublicKey pubKey = RSAUtils.readPublicKeyFromPemFormat(context);
             byte[] sign = RSAUtils.readSignature(targetPath + filename + fileSigExt);
-            valid = RSAUtils.verifySignature(targetPath + filename + fileXmlExt, RSAUtils.SIGNATURE_ALGORITHM, sign, pubKey);
-        } catch (CertificateException e)
-        {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (IOException e)
-        {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+            valid = RSAUtils.verifySignature(targetPath + filename + fileXmlExt, sign, pubKey);
         } catch (Exception e)
         {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+            Log.d(TAG, "File signature verification failed: "+ e.getLocalizedMessage());
         }
         return valid;
     }
@@ -175,7 +166,7 @@
         {
             FileInputStream fin = new FileInputStream(filePath);
             ZipInputStream zin = new ZipInputStream(fin);
-            ZipEntry ze = null;
+            ZipEntry ze;
 
             while ((ze = zin.getNextEntry()) != null)
             {
@@ -190,7 +181,7 @@
                     FileOutputStream fout = new FileOutputStream(targetPath + ze.getName());
                     byte buffer[] = new byte[2048];
 
-                    int count = 0;
+                    int count;
 
                     while ((count = zin.read(buffer)) != -1)
                     {
diff --git a/src/com/fairphone/updater/tools/Utils.java b/src/com/fairphone/updater/tools/Utils.java
index 6995806..fcfc53e 100644
--- a/src/com/fairphone/updater/tools/Utils.java
+++ b/src/com/fairphone/updater/tools/Utils.java
@@ -16,18 +16,6 @@
 
 package com.fairphone.updater.tools;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.NoSuchElementException;
-import java.util.Scanner;
-import java.util.concurrent.TimeoutException;
-
 import android.app.ActivityManager;
 import android.app.ActivityManager.RunningServiceInfo;
 import android.content.Context;
@@ -49,15 +37,27 @@
 import com.stericson.RootTools.execution.CommandCapture;
 import com.stericson.RootTools.execution.Shell;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.NoSuchElementException;
+import java.util.Scanner;
+import java.util.concurrent.TimeoutException;
+
 public class Utils
 {
 
     private static final String TAG = Utils.class.getSimpleName();
 
-    public static double getPartitionSizeInGBytes(File path)
+    private static double getPartitionSizeInGBytes(File path)
     {
         double availableBlocks = getPartitionSizeInBytes(path);
-        double sizeInGB = (((double) availableBlocks / 1024d) / 1024d) / 1024d;
+        double sizeInGB = ((availableBlocks / 1024d) / 1024d) / 1024d;
         Log.d(TAG, path.getPath() + " size(GB): " + sizeInGB);
         return sizeInGB;
     }
@@ -65,25 +65,44 @@
     public static double getPartitionSizeInMBytes(File path)
     {
         double availableBlocks = getPartitionSizeInBytes(path);
-        double sizeInMB = (((double) availableBlocks / 1024d)) / 1024d;
+        double sizeInMB = ((availableBlocks / 1024d)) / 1024d;
         Log.d(TAG, path.getPath() + " size(MB): " + sizeInMB);
         return sizeInMB;
     }
 
-    public static long getPartitionSizeInBytes(File path)
+    private static long getPartitionSizeInBytes(File path)
     {
         android.os.StatFs stat = new android.os.StatFs(path.getPath());
-        long blockSize = stat.getBlockSize();
-        long availableBlocks = stat.getBlockCount() * blockSize;
-        return availableBlocks;
+	    long blockSize, blockCount;
+	    if (Build.VERSION.SDK_INT >= 18) {
+		    blockSize = stat.getBlockSizeLong();
+		    blockCount = stat.getBlockCountLong();
+	    } else {
+		    // deprectation warnings disabled due to the need to support SDK 17 (FP1)
+		    //noinspection deprecation
+		    blockSize = stat.getBlockSize();
+		    //noinspection deprecation
+		    blockCount = stat.getBlockCount();
+	    }
+	    return blockCount * blockSize;
     }
 
     public static long getAvailablePartitionSizeInBytes(File path)
     {
         android.os.StatFs stat = new android.os.StatFs(path.getPath());
-        long blockSize = stat.getBlockSize();
-        long availableBlocks = stat.getAvailableBlocks() * blockSize;
-        return availableBlocks;
+
+	    long blockSize, blockCount;
+	    if (Build.VERSION.SDK_INT >= 18) {
+		    blockSize = stat.getBlockSizeLong();
+		    blockCount = stat.getAvailableBlocksLong();
+	    } else {
+		    // deprectation warnings disabled due to the need to support SDK 17 (FP1)
+		    //noinspection deprecation
+		    blockSize = stat.getBlockSize();
+		    //noinspection deprecation
+		    blockCount = stat.getAvailableBlocks();
+	    }
+	    return blockCount * blockSize;
     }
 
     public static void startUpdaterService(Context context, boolean forceDownload)
@@ -110,7 +129,7 @@
         }
     }
 
-    public static boolean isServiceRunning(Context context)
+    private static boolean isServiceRunning(Context context)
     {
         boolean isRunning = false;
         ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
@@ -145,7 +164,7 @@
         }
     }
     
-    public static void downloadConfigFile(Context context) {
+    private static void downloadConfigFile(Context context) {
         downloadConfigFile(context, false);
     }
 
@@ -163,12 +182,12 @@
     public static boolean checkMD5(String md5, File updateFile)
     {
 
-        if (!updateFile.exists())
+        if (updateFile == null || !updateFile.exists())
         {
             return false;
         }
 
-        if (md5 == null || md5.equals("") || updateFile == null)
+        if (md5 == null || md5.equals("") )
         {
             Log.e(TAG, "MD5 String NULL or UpdateFile NULL");
             return false;
@@ -184,7 +203,7 @@
         return calculatedDigest.equalsIgnoreCase(md5);
     }
 
-    public static String calculateMD5(File updateFile)
+    private static String calculateMD5(File updateFile)
     {
         MessageDigest digest;
         try
@@ -243,13 +262,13 @@
 
         // attach the model and the os
         sb.append("?");
-        sb.append("model=" + Build.MODEL.replaceAll("\\s", ""));
+        sb.append("model=").append(Build.MODEL.replaceAll("\\s", ""));
         Version currentVersion = VersionParserHelper.getDeviceVersion(context);
 
         if (currentVersion != null)
         {
             sb.append("&");
-            sb.append("os=" + currentVersion.getAndroidVersion());
+            sb.append("os=").append(currentVersion.getAndroidVersion());
         }
 
         return sb.toString();
@@ -262,16 +281,18 @@
         if (files != null)
         {
             Log.d(TAG, "Size: " + files.length);
-            for (int i = 0; i < files.length; i++)
-            {
-                String filename = files[i].getName();
+	        for (File file : files) {
+		        String filename = file.getName();
 
-                if (filename.endsWith(".zip"))
-                {
-                    files[i].delete();
-                    Log.d(TAG, "Deleted file " + filename);
-                }
-            }
+		        if (filename.endsWith(".zip")) {
+			        final boolean delete = file.delete();
+			        if (delete) {
+				        Log.d(TAG, "Deleted file " + filename);
+			        } else {
+				        Log.d(TAG, "Failed to delete file " + filename);
+			        }
+		        }
+	        }
         }
     }
 
@@ -279,7 +300,7 @@
     {
         File path = Environment.getDataDirectory();
         double sizeInGB = Utils.getPartitionSizeInGBytes(path);
-        double roundedSize = (double) Math.ceil(sizeInGB * 100d) / 100d;
+        double roundedSize = Math.ceil(sizeInGB * 100d) / 100d;
         Log.d(TAG, "/data size: " + roundedSize + "Gb");
 
         double fp1DataPartitionSize = (double) resources.getInteger(R.integer.FP1DataPartitionSizeMb) / 100d;
@@ -343,10 +364,10 @@
         return title;
     }
 
-    public static boolean isDeviceSupported(Context context)
+    public static boolean isDeviceUnsupported(Context context)
     {
         Version deviceVersion = VersionParserHelper.getDeviceVersion(context);
-        return deviceVersion != null && !TextUtils.isEmpty(deviceVersion.getName());
+        return deviceVersion == null || TextUtils.isEmpty(deviceVersion.getName());
     }
     
     public static String getprop(String name, String defaultValue)
@@ -354,7 +375,7 @@
         ProcessBuilder pb = new ProcessBuilder("/system/bin/getprop", name);
         pb.redirectErrorStream(true);
 
-        Process p = null;
+        Process p;
         InputStream is = null;
         try
         {
@@ -383,24 +404,21 @@
                     is.close();
                 } catch (Exception e)
                 {
+	                Log.d(TAG, "Unexpected issue: "+e.getLocalizedMessage() );
                 }
             }
         }
         return defaultValue;
     }
     
-    public static void setprop(Context context, String key, String value)
+    public static void setprop(String key, String value)
     {
         if(RootTools.isAccessGiven()) {
             CommandCapture command = new CommandCapture(0, "setprop "+key+" "+value);
             try {
                 Shell.runRootCommand(command);
-            } catch (IOException e) {
-                e.printStackTrace();
-            } catch (TimeoutException e) {
-                e.printStackTrace();
-            } catch (RootDeniedException e) {
-                e.printStackTrace();
+            } catch (IOException | TimeoutException | RootDeniedException e) {
+	            Log.d(TAG, "Failed to setprop: " + e.getLocalizedMessage());
             }
         }
     }
diff --git a/src/com/fairphone/updater/widgets/gapps/GoogleAppsInstallerWidget.java b/src/com/fairphone/updater/widgets/gapps/GoogleAppsInstallerWidget.java
index e7b3ccc..dceb490 100644
--- a/src/com/fairphone/updater/widgets/gapps/GoogleAppsInstallerWidget.java
+++ b/src/com/fairphone/updater/widgets/gapps/GoogleAppsInstallerWidget.java
@@ -35,20 +35,6 @@
     private static final String TAG = GoogleAppsInstallerWidget.class.getSimpleName();
 
     @Override
-    public void onEnabled(Context context)
-    {
-        super.onEnabled(context);
-    }
-
-    @Override
-    public void onDisabled(Context context)
-    {
-        // Called once the last instance of your widget is removed from the
-        // homescreen
-        super.onDisabled(context);
-    }
-
-    @Override
     public void onDeleted(Context context, int[] appWidgetIds)
     {
         // Widget instance is removed from the homescreen