diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 62100b4..d3f4d54 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -74,5 +74,8 @@
     <string name="wifi_discaimer_message_startup">Du musst dich mit einem WLAN-Netzwerk verbinden um nach Updates zu suchen oder um Software zu installieren.</string>
     <string name="appStoreReinstall">Reinstalliere den app store</string>
     <string name="app_store">App Stores</string>
+    <string name="got_it">Ich verstehe</string>
+    <string name="connect_to_wifi">Stell eine Verbindung zum WLAN her</string>
+    <string name="charge_battery">Bitte lade die Batterie mindestens 80% auf</string>
 
 </resources>
\ No newline at end of file
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 800ded3..f5f897f 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -74,5 +74,8 @@
     <string name="wifi_discaimer_message_startup">Debes conectarte a un punto Wi-Fi para comprobar si existen nuevas actualizaciones o para instalar software.</string>
     <string name="appStoreReinstall">Reinstalar la tienda de aplicaciones (app store)</string>
     <string name="app_store">App Stores</string>
+    <string name="got_it">Lo entiendo</string>
+    <string name="connect_to_wifi">Conéctate a la red Wi-Fi</string>
+    <string name="charge_battery">Asegúrate de que tu batería está cargada al menos un 80%</string>
 
 </resources>
\ No newline at end of file
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index aa5e9cb..f0f8777 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -74,5 +74,8 @@
     <string name="wifi_discaimer_message_startup">Vous devez vous connecter à un réseau Wi-Fi pour vérifier l\'existence de mises à jour ou installer le logiciel.</string>
     <string name="appStoreReinstall">Réinstaller la boutique d\'applications</string>
     <string name="app_store">App Stores</string>
+    <string name="got_it">OK</string>
+    <string name="connect_to_wifi">Merci de vous connecter à un réseau Wi-Fi</string>
+    <string name="charge_battery">Chargez votre batterie à au moins 80%</string>
 
 </resources>
\ No newline at end of file
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 57ea902..07c3abe 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -74,5 +74,8 @@
     <string name="wifi_discaimer_message_startup">Je dient verbonden te zijn met een Wi-Fi netwerk voor het controleren op updates en het installeren van software.</string>
     <string name="appStoreReinstall">Herinstalleer de app store</string>
     <string name="app_store">App Stores</string>
+    <string name="got_it">Ik snap het</string>
+    <string name="connect_to_wifi">Maak verbinding met een Wi-Fi netwerk</string>
+    <string name="charge_battery">Zorg er voor dat je batterij minstens 80% opgeladen is</string>
 
 </resources>
\ No newline at end of file
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 0e11cb9..4a033bb 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -74,5 +74,8 @@
     <string name="wifi_discaimer_message_startup">Precisa de ligar o Wi-Fi para verificar se existem actualizações ou para instalar software.</string>
     <string name="appStoreReinstall">Reinstale a app store</string>
     <string name="app_store">App Stores</string>
+    <string name="got_it">Entendi</string>
+    <string name="connect_to_wifi">Por favor ligue-se a uma rede Wi-Fi</string>
+    <string name="charge_battery">Por favor carregue a bateria até pelo menos 80%</string>
 
 </resources>
\ No newline at end of file
diff --git a/res/values/config.xml b/res/values/config.xml
index bdc372e..8975c21 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -15,7 +15,7 @@
     
     <!-- Device Model without spaces separated by semicolon. Ex: FP1;FP1U;FP2 -->
     <string name="knownFPDevices" translatable="false">FP1;FP1U;FP2</string>
-    
+
     <string name="oneGBDataPartition" translatable="false">/originalPartition</string>
 	<string name="unifiedDataPartition" translatable="false">/unifiedPartition</string>
 	<string name="FP1Model" translatable="false">FP1</string>
@@ -25,6 +25,8 @@
 	<integer name="FP1DataPartitionSizeMb">1100</integer>
 
 	<string name="FP2Model" translatable="false">FP2</string>
+
+	<string name="minimumBatteryLevel" translatable="false">0.8</string>
 	
 	<!-- Packager -->
 	<string name="removePlayStoreCommand" translatable="false">rm /data/app/com.android.vending-*.apk</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3398f8b..4d290e2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -75,5 +75,7 @@
     <string name="wifi_discaimer_message_startup">You need to connect to a Wi-Fi network to check for updates or install software.</string>
     <string name="appStoreReinstall">Reinstall the app store</string>
     <string name="app_store">App Stores</string>
-
+    <string name="connect_to_wifi">Please connect to a Wi-Fi network</string>
+    <string name="charge_battery">Please charge your battery to at least 80%</string>
+    <string name="got_it">Got it</string>
 </resources>
\ No newline at end of file
diff --git a/src/com/fairphone/updater/FairphoneUpdater.java b/src/com/fairphone/updater/FairphoneUpdater.java
index 285afbb..e297f33 100644
--- a/src/com/fairphone/updater/FairphoneUpdater.java
+++ b/src/com/fairphone/updater/FairphoneUpdater.java
@@ -864,11 +864,10 @@
 
 		    AlertDialog.Builder wifiOffDialogBuilder = new AlertDialog.Builder(this);
 
-		    wifiOffDialogBuilder.setTitle(resources.getString(R.string.wifi_disabled));
+		    wifiOffDialogBuilder.setTitle(resources.getString(R.string.connect_to_wifi));
+            wifiOffDialogBuilder.setIcon(resources.getDrawable(R.drawable.ic_signal_wifi_4_bar_fpblue_24dp));
 
-		    // Setting Dialog Message
-		    wifiOffDialogBuilder.setMessage(resources.getString(R.string.wifi_discaimer_message_startup));
-		    wifiOffDialogBuilder.setPositiveButton(resources.getString(android.R.string.ok), new DialogInterface.OnClickListener() {
+		    wifiOffDialogBuilder.setPositiveButton(resources.getString(R.string.got_it), new DialogInterface.OnClickListener() {
 			    public void onClick(DialogInterface dialog, int id) {
 				    // do nothing, since the state is still the same
 			    }
diff --git a/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java b/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
index d176505..735393e 100644
--- a/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
+++ b/src/com/fairphone/updater/fragments/DownloadAndRestartFragment.java
@@ -180,13 +180,23 @@
                     @Override
                     public void onClick(View v)
                     {
-                        if (mIsVersion)
-                        {
-                            showEraseAllDataWarning();
-                        }
-                        else if (mSelectedStore != null)
-                        {
-                            startPreInstall();
+                        if(Utils.isBatteryLevelOk(mainActivity)) {
+                            if (mIsVersion) {
+                                showEraseAllDataWarning();
+                            } else if (mSelectedStore != null) {
+                                startPreInstall();
+                            }
+                        } else {
+                            AlertDialog.Builder batteryDialog = new AlertDialog.Builder(mainActivity);
+                            batteryDialog.setIcon(R.drawable.ic_battery_std_fpblue_24dp);
+                            batteryDialog.setTitle(R.string.charge_battery);
+                            batteryDialog.setPositiveButton(R.string.got_it, new DialogInterface.OnClickListener() {
+                                public void onClick(DialogInterface dialog, int id) {
+                                    // do nothing, since the state is still the same
+                                }
+                            });
+                            batteryDialog.create();
+                            batteryDialog.show();
                         }
                     }
                 });
diff --git a/src/com/fairphone/updater/fragments/VersionDetailFragment.java b/src/com/fairphone/updater/fragments/VersionDetailFragment.java
index b03a643..37dc5be 100644
--- a/src/com/fairphone/updater/fragments/VersionDetailFragment.java
+++ b/src/com/fairphone/updater/fragments/VersionDetailFragment.java
@@ -121,7 +121,41 @@
             @Override
             public void onClick(View v)
             {
-                startDownload();
+                boolean isWifiEnabled = Utils.isWiFiEnabled(mainActivity);
+                boolean isBatteryLevelOk = Utils.isBatteryLevelOk(mainActivity);
+
+                if (isWifiEnabled && isBatteryLevelOk)
+                {
+                    startDownload();
+                }
+                else
+                {
+                    if(!isWifiEnabled) {
+                        AlertDialog.Builder wifiDialog = new AlertDialog.Builder(mainActivity);
+                        wifiDialog.setIcon(R.drawable.ic_signal_wifi_4_bar_fpblue_24dp);
+                        wifiDialog.setTitle(R.string.connect_to_wifi);
+                        wifiDialog.setPositiveButton(R.string.got_it, new DialogInterface.OnClickListener() {
+                            public void onClick(DialogInterface dialog, int id) {
+                                // do nothing, since the state is still the same
+                            }
+                        });
+                        wifiDialog.create();
+                        wifiDialog.show();
+                    }
+
+                    if(!isBatteryLevelOk) {
+                        AlertDialog.Builder batteryDialog = new AlertDialog.Builder(mainActivity);
+                        batteryDialog.setIcon(R.drawable.ic_battery_std_fpblue_24dp);
+                        batteryDialog.setTitle(R.string.charge_battery);
+                        batteryDialog.setPositiveButton(R.string.got_it, new DialogInterface.OnClickListener() {
+                            public void onClick(DialogInterface dialog, int id) {
+                                // do nothing, since the state is still the same
+                            }
+                        });
+                        batteryDialog.create();
+                        batteryDialog.show();
+                    }
+                }
             }
         });
     }
@@ -271,8 +305,11 @@
     void startUpdateDownload()
     {
         DownloadableItem item = mIsVersion ? mSelectedVersion : mSelectedStore;
-        // use only on WiFi
-        if (Utils.isWiFiEnabled(mainActivity))
+
+        boolean isWifiEnabled = Utils.isWiFiEnabled(mainActivity);
+        boolean isBatteryLevelOk = Utils.isBatteryLevelOk(mainActivity);
+
+        if (isWifiEnabled && isBatteryLevelOk)
         {
             if (item != null)
             {
@@ -324,21 +361,31 @@
         {
             Resources resources = this.getResources();
 
-            AlertDialog.Builder wifiOffDialog = new AlertDialog.Builder(mainActivity);
+            if(!isWifiEnabled) {
+                AlertDialog.Builder wifiDialog = new AlertDialog.Builder(mainActivity);
+                wifiDialog.setIcon(R.drawable.ic_signal_wifi_4_bar_fpblue_24dp);
+                wifiDialog.setTitle(resources.getString(R.string.connect_to_wifi));
+                wifiDialog.setPositiveButton(resources.getString(R.string.got_it), new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int id) {
+                        // do nothing, since the state is still the same
+                    }
+                });
+                wifiDialog.create();
+                wifiDialog.show();
+            }
 
-            wifiOffDialog.setTitle(resources.getString(R.string.wifi_disabled));
-
-            // Setting Dialog Message
-            wifiOffDialog.setMessage(resources.getString(R.string.wifi_discaimer_message));
-            wifiOffDialog.setPositiveButton(resources.getString(android.R.string.ok), new DialogInterface.OnClickListener()
-            {
-                public void onClick(DialogInterface dialog, int id)
-                {
-                    // do nothing, since the state is still the same
-                }
-            });
-            wifiOffDialog.create();
-            wifiOffDialog.show();
+            if(!isBatteryLevelOk) {
+                AlertDialog.Builder batteryDialog = new AlertDialog.Builder(mainActivity);
+                batteryDialog.setIcon(R.drawable.ic_battery_std_fpblue_24dp);
+                batteryDialog.setTitle(resources.getString(R.string.charge_battery));
+                batteryDialog.setPositiveButton(resources.getString(R.string.got_it), new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int id) {
+                        // do nothing, since the state is still the same
+                    }
+                });
+                batteryDialog.create();
+                batteryDialog.show();
+            }
         }
     }
 
diff --git a/src/com/fairphone/updater/tools/Utils.java b/src/com/fairphone/updater/tools/Utils.java
index f766aca..b42f558 100644
--- a/src/com/fairphone/updater/tools/Utils.java
+++ b/src/com/fairphone/updater/tools/Utils.java
@@ -19,10 +19,12 @@
 import android.app.DownloadManager;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.net.ConnectivityManager;
 import android.net.Uri;
+import android.os.BatteryManager;
 import android.os.Build;
 import android.os.Environment;
 import android.os.PowerManager;
@@ -662,6 +664,20 @@
 		return manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();
 	}
 
+    public static boolean isBatteryLevelOk(Context context) {
+        IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+        Intent batteryStatus = context.registerReceiver(null, ifilter);
+        int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+        int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+        float batteryPct = level / (float)scale;
+
+        if(batteryPct >= Float.parseFloat(context.getResources().getString(R.string.minimumBatteryLevel))) {
+            return true;
+        }
+        return false;
+    }
+
     public static Store getGappsStore()
     {
         return UpdaterData.getInstance().getStore(GAPPS_STORE_NUMBER);
