diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000000000000000000000000000000000000..f1b424510da51fd82143bc74a0a801ae5a1e2fcd
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 29171d2ac1e9ded2c627bc33d9a15a8bad892613..f98b411f83d0084f82afb28811b999d4f40bd210 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,30 +1,31 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     package="de.itstall.freifunkfranken">
-
     <!--
          The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
          Google Maps Android API v2, but you must specify either coarse or fine
          location permissions for the 'MyLocation' functionality.
     -->
-    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
     <uses-permission android:name="android.permission.INTERNET" />
-    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission
+        android:name="android.permission.WRITE_SETTINGS"
+        tools:ignore="ProtectedPermissions" />
 
     <application
         android:allowBackup="true"
         android:fullBackupContent="@xml/backup_descriptor"
-        android:icon="@mipmap/ic_launcher"
+        android:icon="@mipmap/app_icon"
         android:label="@string/app_name"
-        android:roundIcon="@mipmap/ic_launcher_round"
+        android:roundIcon="@mipmap/app_icon"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <service
-            android:name=".LocationService"
-            android:enabled="true"
-            android:exported="true"></service>
-
         <activity android:name=".view.AboutActivity" />
         <activity android:name=".view.SettingsActivity" />
         <!--
diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/MyLocationListener.java b/app/src/main/java/de/itstall/freifunkfranken/controller/MyLocationListener.java
deleted file mode 100644
index 96201ccaba3ea1e407cdbfdaf4e0d823fa0b902c..0000000000000000000000000000000000000000
--- a/app/src/main/java/de/itstall/freifunkfranken/controller/MyLocationListener.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package de.itstall.freifunkfranken.controller;
-
-import android.Manifest;
-import android.app.Activity;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.location.Location;
-import android.location.LocationListener;
-import android.location.LocationManager;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-
-import androidx.core.app.ActivityCompat;
-
-import de.itstall.freifunkfranken.view.MainActivity;
-
-public class MyLocationListener {
-    public static LocationManager locationManager;
-    public static Location myLocation;
-    public static double longitude;
-    public static double latitude;
-    private static Location gps_loc;
-    private static Location network_loc;
-    private static Location final_loc;
-    private MainActivity mainActivity;
-
-    public MyLocationListener(MainActivity mainActivity) {
-        this.mainActivity = mainActivity;
-        locationManager = (LocationManager) mainActivity.getSystemService(Context.LOCATION_SERVICE);
-        myLocation = getLocation();
-    }
-
-    public Location getLocation() {
-        if (ActivityCompat.checkSelfPermission(mainActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
-                && ActivityCompat.checkSelfPermission(mainActivity, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
-                && ActivityCompat.checkSelfPermission(mainActivity, Manifest.permission.ACCESS_NETWORK_STATE) != PackageManager.PERMISSION_GRANTED) {
-        }
-        ActivityCompat.requestPermissions(mainActivity, new String[] { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_NETWORK_STATE }, 1);
-
-        try {
-            gps_loc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
-            network_loc = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        if (gps_loc != null) {
-            final_loc = gps_loc;
-            latitude = final_loc.getLatitude();
-            longitude = final_loc.getLongitude();
-        } else if (network_loc != null) {
-            final_loc = network_loc;
-            latitude = final_loc.getLatitude();
-            longitude = final_loc.getLongitude();
-        } else {
-            latitude = 0.0;
-            longitude = 0.0;
-        }
-
-
-        //locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener);
-        //locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mLocationListener);
-
-        Location gpsLocation = new Location("");
-        gpsLocation.setLatitude(latitude);
-        gpsLocation.setLongitude(longitude);
-
-        return gpsLocation;
-    }
-
-    private final LocationListener mLocationListener = new LocationListener() {
-        @Override
-        public void onLocationChanged(final Location location) {
-            //your code here
-            if(MyLocationListener.latitude != location.getLatitude() && MyLocationListener.longitude != location.getLongitude()) {
-                MyLocationListener.latitude = location.getLatitude();
-                MyLocationListener.longitude = location.getLongitude();
-                Log.v("LOCATION UPDATE", "IN ON LOCATION CHANGE, lat=" + location.getLatitude() + ", lon=" + location.getLongitude());
-            }
-
-            /*
-            LatLng userPosition = new LatLng(location.getLatitude(),location.getLongitude());
-
-            googleMap.addMarker(new MarkerOptions()
-                    .position(userPosition)
-                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_pin_fill))
-                    .title("Test Pin"));*/
-        }
-
-        @Override
-        public void onStatusChanged(String provider, int status, Bundle extras) {
-
-        }
-
-        @Override
-        public void onProviderEnabled(String provider) {
-
-        }
-
-        @Override
-        public void onProviderDisabled(String provider) {
-
-        }
-    };
-}
diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/NextApAdapter.java b/app/src/main/java/de/itstall/freifunkfranken/controller/NextApAdapter.java
index 3311304fa7215baec13bf48f562aaa4ce806c864..207a9d9532e5f52e8bb098d3cad415b8c5fa5062 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/controller/NextApAdapter.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/controller/NextApAdapter.java
@@ -9,8 +9,6 @@ import android.widget.TextView;
 import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
 
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 
 import de.itstall.freifunkfranken.R;
@@ -26,7 +24,7 @@ public class NextApAdapter extends RecyclerView.Adapter<NextApAdapter.ViewHolder
     @NonNull
     @Override
     public NextApAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-        @SuppressLint("InflateParams") View viewApsItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.aps_item, null);
+        @SuppressLint("InflateParams") View viewApsItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.nextap_item, null);
 
         return new ViewHolder(viewApsItem);
     }
diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/RequestAps.java b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestAps.java
index c804304ae8763b06732289f696c47237e0c71eed..a6d79c21507e3dee04a54f07a4479e9721c9e2f5 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/controller/RequestAps.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestAps.java
@@ -45,7 +45,6 @@ public class RequestAps {
             AccessPoint ap;
             for (int i = 0; i < nodes.length(); i++) {
                 node = nodes.getJSONObject(i);
-                Log.i("node: ", node.getString("name"));
                 ap = new AccessPoint(
                         node.getString("name"),
                         node.getDouble("lat"),
diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/RequestSsids.java b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestSsids.java
index 62efd11beaa103c9a359252d3bda7f791a85408b..c708e01edcffdfe4905f21fc0378f17f87cc811f 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/controller/RequestSsids.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/controller/RequestSsids.java
@@ -1,30 +1,19 @@
 package de.itstall.freifunkfranken.controller;
 
-import android.app.ProgressDialog;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.util.Log;
 
-import androidx.recyclerview.widget.DefaultItemAnimator;
-
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import java.io.BufferedInputStream;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
-import de.itstall.freifunkfranken.controller.SsidsAdapter;
 import de.itstall.freifunkfranken.model.Ssid;
 
 public class RequestSsids {
diff --git a/app/src/main/java/de/itstall/freifunkfranken/controller/SsidsFragmentListener.java b/app/src/main/java/de/itstall/freifunkfranken/controller/SsidsFragmentListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..6bc3324573bdcccdb10773e302f6dc45458502e5
--- /dev/null
+++ b/app/src/main/java/de/itstall/freifunkfranken/controller/SsidsFragmentListener.java
@@ -0,0 +1,143 @@
+package de.itstall.freifunkfranken.controller;
+
+import android.Manifest;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
+import android.net.NetworkCapabilities;
+import android.net.NetworkRequest;
+import android.net.Uri;
+import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiManager;
+import android.net.wifi.WifiNetworkSpecifier;
+import android.net.wifi.WifiNetworkSuggestion;
+import android.os.Build;
+import android.provider.Settings;
+import android.util.Log;
+import android.view.View;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import de.itstall.freifunkfranken.view.SsidsFragment;
+
+import static android.content.Context.WIFI_SERVICE;
+
+public class SsidsFragmentListener implements View.OnClickListener {
+    private static final String TAG = SsidsFragmentListener.class.getSimpleName();
+    private View view;
+    private SsidsFragment ssidsFragment;
+
+    public SsidsFragmentListener(SsidsFragment ssidsFragment) {
+        this.ssidsFragment = ssidsFragment;
+    }
+
+    @Override
+    public void onClick(View view) {
+        this.view = view;
+        ssidsFragment.checkPermission(Manifest.permission.ACCESS_WIFI_STATE, ssidsFragment.REQUEST_ID_ACCESS_WIFI_STATE);
+        ssidsFragment.checkPermission(Manifest.permission.CHANGE_WIFI_STATE, ssidsFragment.REQUEST_ID_CHANGE_WIFI_STATE);
+        ssidsFragment.checkPermission(Manifest.permission.WRITE_SETTINGS, ssidsFragment.REQUEST_ID_WRITE_SETTINGS);
+        try {
+            if(checkSystemWritePermission()) {
+                Log.d(TAG, "Allow modify system settings is on");
+                addSsidsToMobile();
+            } else {
+                Log.d(TAG, "Allow modify system settings is off");
+                Toast.makeText(view.getContext(), "Allow modify system settings => ON", Toast.LENGTH_SHORT).show();
+            }
+        } catch (Exception e) {
+            Log.i(TAG, e.toString());
+            Toast.makeText(view.getContext(), "unable to set SSIDs", Toast.LENGTH_LONG).show();
+        }
+    }
+
+    private boolean checkSystemWritePermission() {
+        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            if(Settings.System.canWrite(view.getContext())) {
+                return true;
+            } else {
+                openAndroidPermissionsMenu();
+            }
+        }
+        return false;
+    }
+
+    private void openAndroidPermissionsMenu() {
+        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
+            intent.setData(Uri.parse("package:" + view.getContext().getPackageName()));
+            view.getContext().startActivity(intent);
+        }
+    }
+
+    private void addSsidsToMobile() {
+        WifiConfiguration wifiConfig;
+        WifiManager wifiManager;
+        WifiNetworkSpecifier wifiNetworkSpecifier;
+        NetworkRequest networkRequest;
+        ConnectivityManager connectivityManager;
+        WifiNetworkSuggestion wifiNetworkSuggestion;
+        final List<WifiNetworkSuggestion> suggestionList = new ArrayList<>();
+        int netId;
+
+        for(int i = 0; i < SsidsFragment.ssidList.size(); i++) {
+            if (Build.VERSION.SDK_INT >= 29) {
+                /*wifiNetworkSpecifier = new WifiNetworkSpecifier.Builder()
+                        .setSsid(SsidsFragment.ssidList.get(i).getSsid())
+                        .build();
+                networkRequest = new NetworkRequest.Builder()
+                        .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+                        .setNetworkSpecifier(wifiNetworkSpecifier)
+                        .build();
+                connectivityManager = (ConnectivityManager) view.getContext().getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
+                assert connectivityManager != null;
+                connectivityManager.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback());*/
+                wifiNetworkSuggestion = new WifiNetworkSuggestion.Builder()
+                        .setSsid(SsidsFragment.ssidList.get(i).getSsid())
+                        .setIsAppInteractionRequired(false)
+                        .build();
+
+                suggestionList.add(wifiNetworkSuggestion);
+            } else {
+                wifiConfig = new WifiConfiguration();
+                wifiConfig.SSID = String.format("\"%s\"", SsidsFragment.ssidList.get(i).getSsid());
+                wifiConfig.preSharedKey = String.format("\"%s\"", SsidsFragment.ssidList.get(i).getKey());
+                wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
+
+                wifiManager = (WifiManager) view.getContext().getApplicationContext().getSystemService(WIFI_SERVICE);
+                //remember id
+                assert wifiManager != null;
+                // Turn wifi connection on
+                wifiManager.setWifiEnabled(true);
+                netId = wifiManager.addNetwork(wifiConfig);
+                Log.e(TAG, "adding ssid:" + SsidsFragment.ssidList.get(i).getSsid() + " returned netId: " + netId);
+            }
+        }
+        if(Build.VERSION.SDK_INT >= 29) {
+            Log.d(TAG, "Array size: " + suggestionList.size());
+            wifiManager = (WifiManager) view.getContext().getApplicationContext().getSystemService(WIFI_SERVICE);
+            assert wifiManager != null;
+            final int status = wifiManager.addNetworkSuggestions(suggestionList);
+            if(status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
+                Log.e(TAG, "Add wifi suggestion list failed " + status);
+            }
+
+            final IntentFilter intentFilter = new IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION);
+            final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
+                @Override
+                public void onReceive(Context context, Intent intent) {
+                    if(!Objects.equals(intent.getAction(), WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) return;
+                }
+            };
+            view.getContext().registerReceiver(broadcastReceiver, intentFilter);
+        }
+        /*wifiManager.disconnect();
+        wifiManager.enableNetwork(netId, true);
+        wifiManager.reconnect();*/
+    }
+}
diff --git a/app/src/main/java/de/itstall/freifunkfranken/model/MyLocationProvider.java b/app/src/main/java/de/itstall/freifunkfranken/model/MyLocationProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..a80eed8b1517eec17e580c8fa83130951770285a
--- /dev/null
+++ b/app/src/main/java/de/itstall/freifunkfranken/model/MyLocationProvider.java
@@ -0,0 +1,107 @@
+package de.itstall.freifunkfranken.model;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.IntentSender;
+import android.location.Location;
+import android.os.Bundle;
+import android.util.Log;
+
+import com.google.android.gms.common.ConnectionResult;
+import com.google.android.gms.common.api.GoogleApiClient;
+import com.google.android.gms.location.LocationListener;
+import com.google.android.gms.location.LocationRequest;
+import com.google.android.gms.location.LocationServices;
+
+public class MyLocationProvider implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {
+
+    public static final String TAG = MyLocationProvider.class.getSimpleName();
+    /*
+     * Define a request code to send to Google Play services This code is returned in
+     * Activity.onActivityResult
+     */
+    private final static int CONNECTION_FAILURE_RESOLUTION_REQUEST = 9000;
+    private LocationCallback mLocationCallback;
+    private Context mContext;
+    private GoogleApiClient mGoogleApiClient;
+    private LocationRequest mLocationRequest;
+    public MyLocationProvider(Context context, LocationCallback callback) {
+        mGoogleApiClient = new GoogleApiClient.Builder(context)
+                .addConnectionCallbacks(this)
+                .addOnConnectionFailedListener(this)
+                .addApi(LocationServices.API)
+                .build();
+
+        mLocationCallback = callback;
+
+        // Create the LocationRequest object
+        mLocationRequest = LocationRequest.create()
+                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
+                .setInterval(10 * 1000)        // 10 seconds, in milliseconds
+                .setFastestInterval(1 * 1000); // 1 second, in milliseconds
+
+        mContext = context;
+    }
+
+    public void connect() {
+        Log.i(TAG, "connect: " + mContext.getClass().getSimpleName());
+        mGoogleApiClient.connect();
+    }
+
+    public void disconnect() {
+        if (mGoogleApiClient.isConnected()) {
+            LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
+            mGoogleApiClient.disconnect();
+        }
+    }
+
+    @Override
+    public void onConnected(Bundle bundle) {
+        Log.i(TAG, "Location services connected.");
+
+        Location location = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
+        if (location == null) {
+            LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
+        } else {
+            mLocationCallback.handleNewLocation(location);
+        }
+    }
+
+    @Override
+    public void onConnectionSuspended(int i) {
+
+    }
+
+    @Override
+    public void onConnectionFailed(ConnectionResult connectionResult) {
+        /*
+         * Google Play services can resolve some errors it detects.
+         * If the error has a resolution, try sending an Intent to
+         * start a Google Play services activity that can resolve
+         * error.
+         */
+        if (connectionResult.hasResolution() && mContext instanceof Activity) {
+            try {
+                Activity activity = (Activity) mContext;
+                // Start an Activity that tries to resolve the error
+                connectionResult.startResolutionForResult(activity, CONNECTION_FAILURE_RESOLUTION_REQUEST);
+                // Thrown if Google Play services canceled the original PendingIntent
+            } catch (IntentSender.SendIntentException e) {
+                // Log the error
+                e.printStackTrace();
+            }
+        } else {
+            // If no resolution is available, display a dialog to the user with the error.
+            Log.i(TAG, "Location services connection failed with code " + connectionResult.getErrorCode());
+        }
+    }
+
+    @Override
+    public void onLocationChanged(Location location) {
+        mLocationCallback.handleNewLocation(location);
+    }
+
+    public abstract interface LocationCallback {
+        public void handleNewLocation(Location location);
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/de/itstall/freifunkfranken/model/Ssid.java b/app/src/main/java/de/itstall/freifunkfranken/model/Ssid.java
index 33b866f7e562b05ae09dc37f9044ea6c937a888f..7ca26cbd9dc035221598303e2e5cc4d3faf8e6f1 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/model/Ssid.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/model/Ssid.java
@@ -2,12 +2,23 @@ package de.itstall.freifunkfranken.model;
 
 public class Ssid {
     private String ssid;
+    private String key;
 
     public Ssid(String ssid) {
         this.ssid = ssid;
+        this.key = "";
+    }
+
+    public Ssid(String ssid, String key) {
+        this.ssid = ssid;
+        this.key = key;
     }
 
     public String getSsid() {
         return ssid;
     }
+
+    public String getKey() {
+        return key;
+    }
 }
diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/AboutActivity.java b/app/src/main/java/de/itstall/freifunkfranken/view/AboutActivity.java
index 5546cdae7a1b118efbf1827f6fa3c96eb8fb71a8..ebb7ca48d4cea713345d238cc9155330f7a818fc 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/view/AboutActivity.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/view/AboutActivity.java
@@ -1,20 +1,30 @@
 package de.itstall.freifunkfranken.view;
 
+import android.annotation.SuppressLint;
 import android.os.Bundle;
+import android.text.Html;
+import android.text.method.LinkMovementMethod;
 import android.view.View;
 import android.widget.Button;
+import android.widget.TextView;
 
 import androidx.appcompat.app.AppCompatActivity;
 
 import de.itstall.freifunkfranken.R;
 
 public class AboutActivity extends AppCompatActivity {
+    @SuppressLint("ResourceType")
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_about);
 
-        Button aboutBtnClose = (Button) findViewById(R.id.AboutBtnClose);
+        Button aboutBtnClose = findViewById(R.id.AboutBtnClose);
+        TextView aboutTvLizencesApp = findViewById(R.id.aboutTvLizencesApp);
+
+        aboutTvLizencesApp.setText(Html.fromHtml(getResources().getString(R.string.aboutTvAppLizence)));
+        aboutTvLizencesApp.setMovementMethod(LinkMovementMethod.getInstance());
+
         aboutBtnClose.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/MainActivity.java b/app/src/main/java/de/itstall/freifunkfranken/view/MainActivity.java
index 4596c03e6a3e4af6382a22fc94ef68974751fcf7..388d725a9b4bed5c53d45fc53b0ef048d1459be6 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/view/MainActivity.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/view/MainActivity.java
@@ -3,6 +3,7 @@ package de.itstall.freifunkfranken.view;
 import android.content.Intent;
 import android.location.Location;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -12,18 +13,21 @@ import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
+import com.google.android.gms.maps.model.LatLng;
 import com.google.android.material.tabs.TabLayout;
 
 import java.util.Objects;
 
 import de.itstall.freifunkfranken.R;
 import de.itstall.freifunkfranken.controller.FileDownloader;
+import de.itstall.freifunkfranken.model.MyLocationProvider;
 
-public class MainActivity extends AppCompatActivity {
+public class MainActivity extends AppCompatActivity implements MyLocationProvider.LocationCallback {
+    public static final String TAG = MainActivity.class.getSimpleName();
     public Fragment fragment = null;
     public boolean downloadDone = false;
     TabLayout tabLayout;
-    public static Location myLocation;
+    private MyLocationProvider mLocationProvider;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -68,6 +72,8 @@ public class MainActivity extends AppCompatActivity {
             }
         });
 
+        //mLocationProvider = new MyLocationProvider(this, this);
+
         downloadFiles();
     }
 
@@ -110,5 +116,20 @@ public class MainActivity extends AppCompatActivity {
         super.onResume();
         Objects.requireNonNull(tabLayout.getTabAt(1)).select();
         Objects.requireNonNull(tabLayout.getTabAt(0)).select();
+        //mLocationProvider.connect();
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        //mLocationProvider.disconnect();
+    }
+
+    public void handleNewLocation(Location location) {
+        Log.d(TAG, location.toString());
+
+        double currentLatitude = location.getLatitude();
+        double currentLongitude = location.getLongitude();
+        LatLng latLng = new LatLng(currentLatitude, currentLongitude);
     }
 }
diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java b/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java
index c8a6d7c5047756cc78d3799f6fbfa129912b6864..6c33fc0e7c3a9ce17cdc396e027ab1362043f46f 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/view/MapsFragment.java
@@ -1,12 +1,18 @@
 package de.itstall.freifunkfranken.view;
 
+import android.Manifest;
 import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.location.Location;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Toast;
 
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
 import androidx.fragment.app.Fragment;
 
 import com.google.android.gms.maps.CameraUpdateFactory;
@@ -21,14 +27,18 @@ import java.util.List;
 import java.util.Objects;
 
 import de.itstall.freifunkfranken.R;
-import de.itstall.freifunkfranken.model.AccessPoint;
 import de.itstall.freifunkfranken.controller.RequestAps;
+import de.itstall.freifunkfranken.model.AccessPoint;
+import de.itstall.freifunkfranken.model.MyLocationProvider;
 
-public class MapsFragment extends Fragment implements OnMapReadyCallback {
+public class MapsFragment extends Fragment implements OnMapReadyCallback, MyLocationProvider.LocationCallback {
     private static final String TAG = MapsFragment.class.getSimpleName();
     private GoogleMap mMap;
     private View rootView;
     private SharedPreferences sharedPreferences;
+    //private MyLocationProvider mLocationProvider;
+    public static final int REQUEST_ID_ACCESS_FINE_LOCATION = 100;
+    public static final int REQUEST_ID_ACCESS_COARSE_LOCATION = 101;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -39,12 +49,17 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback {
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         rootView = inflater.inflate(R.layout.maps_fragment, container, false);
 
-
         SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapFragment);
         if (mapFragment != null) mapFragment.getMapAsync(this);
 
         sharedPreferences = rootView.getContext().getSharedPreferences("FreifunkFrankenApp", 0);
 
+        //mLocationProvider = new MyLocationProvider(this.getContext(), this);
+        //mLocationProvider.connect();
+
+        checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, REQUEST_ID_ACCESS_COARSE_LOCATION);
+        checkPermission(Manifest.permission.ACCESS_COARSE_LOCATION, REQUEST_ID_ACCESS_COARSE_LOCATION);
+
         return rootView;
     }
 
@@ -52,16 +67,13 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback {
     public void onMapReady(GoogleMap googleMap) {
         mMap = googleMap;
 
-        updateLocationUI();
-        getDeviceLocation();
-
-        LatLng schonungen = new LatLng(50.0544, 10.3128);
-        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(schonungen, 10));
+        LatLng latLng = new LatLng(50.0544, 10.3128);
+        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
         mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() {
             @Override
             public void onCameraIdle() {
                 LatLng latLng = mMap.getCameraPosition().target;
-                Toast.makeText(rootView.getContext(), latLng.latitude + "+" + latLng.longitude, Toast.LENGTH_SHORT).show();
+                //Toast.makeText(rootView.getContext(), latLng.latitude + "+" + latLng.longitude, Toast.LENGTH_SHORT).show();
             }
         });
         showApsOnMap();
@@ -79,11 +91,76 @@ public class MapsFragment extends Fragment implements OnMapReadyCallback {
         }
     }
 
-    private void getDeviceLocation() {
+    @Override
+    public void handleNewLocation(Location location) {
+        Log.d(TAG, location.toString());
 
+        double currentLatitude = location.getLatitude();
+        double currentLongitude = location.getLongitude();
+        LatLng latLng = new LatLng(currentLatitude, currentLongitude);
+        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
     }
 
-    private void updateLocationUI() {
+    public void checkPermission(String permission, int requestCode) {
+        // Checking if permission is not granted
+        if (ContextCompat.checkSelfPermission(
+                rootView.getContext(),
+                permission) == PackageManager.PERMISSION_DENIED) {
+            ActivityCompat.requestPermissions(
+                    Objects.requireNonNull(getActivity()),
+                    new String[]{permission},
+                    requestCode);
+        } else {
+            Toast.makeText(
+                    rootView.getContext(),
+                    "Permission already granted",
+                    Toast.LENGTH_SHORT)
+                    .show();
+        }
+    }
 
+    @Override
+    public void onRequestPermissionsResult(int requestCode,
+                                           String[] permissions,
+                                           int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+
+        switch (requestCode) {
+            case REQUEST_ID_ACCESS_FINE_LOCATION:
+                // Checking whether user granted the permission or not.
+                if (grantResults.length > 0
+                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    // Showing the toast message
+                    Toast.makeText(
+                            getActivity(),
+                            "Fine Location Permission Granted",
+                            Toast.LENGTH_SHORT)
+                            .show();
+                } else {
+                    Toast.makeText(getActivity(),
+                            "Fine Location Permission Denied",
+                            Toast.LENGTH_SHORT)
+                            .show();
+                }
+                break;
+
+            case REQUEST_ID_ACCESS_COARSE_LOCATION:
+                // Checking whether user granted the permission or not.
+                if (grantResults.length > 0
+                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    // Showing the toast message
+                    Toast.makeText(
+                            getActivity(),
+                            "Coarse Location Permission Granted",
+                            Toast.LENGTH_SHORT)
+                            .show();
+                } else {
+                    Toast.makeText(getActivity(),
+                            "Coarse Location Permission Denied",
+                            Toast.LENGTH_SHORT)
+                            .show();
+                }
+                break;
+        }
     }
 }
diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/SettingsActivity.java b/app/src/main/java/de/itstall/freifunkfranken/view/SettingsActivity.java
index af991a56b31463075893f7653fadac1b1d5accbc..f95227a16dc79ac9a29db8dad6418bde13f1967f 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/view/SettingsActivity.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/view/SettingsActivity.java
@@ -24,12 +24,12 @@ public class SettingsActivity extends AppCompatActivity {
         setContentView(R.layout.activity_settings);
 
         sharedPreferences = getApplicationContext().getSharedPreferences("FreifunkFrankenApp", 0);
-        settingsSwOfflineRouter = (Switch) findViewById(R.id.settingsSwOfflineRouter);
-        settingsSwMapOfflineRouter = (Switch) findViewById(R.id.settingsSwMapOfflineRouter);
-        settingsTxtRouterCount = (EditText) findViewById(R.id.settingsTxtRouterCount);
+        settingsSwOfflineRouter = findViewById(R.id.settingsSwOfflineRouter);
+        settingsSwMapOfflineRouter = findViewById(R.id.settingsSwMapOfflineRouter);
+        settingsTxtRouterCount = findViewById(R.id.settingsTxtRouterCount);
 
         settingsTxtRouterCount.setText(String.valueOf(sharedPreferences.getInt("RouterCount", 10)));
-        settingsBtnClose = (Button) findViewById(R.id.SettingsBtnClose);
+        settingsBtnClose = findViewById(R.id.SettingsBtnClose);
         settingsSwOfflineRouter.setChecked(sharedPreferences.getBoolean("OfflineRouter", false));
         settingsSwMapOfflineRouter.setChecked(sharedPreferences.getBoolean("MapOfflineRouter", false));
         settingsBtnClose.setOnClickListener(new View.OnClickListener() {
diff --git a/app/src/main/java/de/itstall/freifunkfranken/view/SsidsFragment.java b/app/src/main/java/de/itstall/freifunkfranken/view/SsidsFragment.java
index 419965c40e1092ca7b73f6ef5a7db91054a09de6..86d43e519bbde685179e7680b45884a034899df7 100644
--- a/app/src/main/java/de/itstall/freifunkfranken/view/SsidsFragment.java
+++ b/app/src/main/java/de/itstall/freifunkfranken/view/SsidsFragment.java
@@ -1,10 +1,16 @@
 package de.itstall.freifunkfranken.view;
 
+import android.content.pm.PackageManager;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.Toast;
 
+import androidx.core.app.ActivityCompat;
+import androidx.core.content.ContextCompat;
 import androidx.recyclerview.widget.DefaultItemAnimator;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -13,13 +19,20 @@ import java.util.List;
 import java.util.Objects;
 
 import de.itstall.freifunkfranken.R;
-import de.itstall.freifunkfranken.controller.SsidsAdapter;
 import de.itstall.freifunkfranken.controller.RequestSsids;
+import de.itstall.freifunkfranken.controller.SsidsAdapter;
+import de.itstall.freifunkfranken.controller.SsidsFragmentListener;
 import de.itstall.freifunkfranken.model.Ssid;
 
 public class SsidsFragment extends androidx.fragment.app.Fragment {
+    private static final String TAG = SsidsFragment.class.getSimpleName();
+    public static List<Ssid> ssidList;
     private RecyclerView rvSsids;
     private View rootView;
+    private SsidsFragmentListener ssidsFragmentListener;
+    public static final int REQUEST_ID_ACCESS_WIFI_STATE = 102;
+    public static final int REQUEST_ID_CHANGE_WIFI_STATE = 103;
+    public static final int REQUEST_ID_WRITE_SETTINGS = 104;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -32,17 +45,100 @@ public class SsidsFragment extends androidx.fragment.app.Fragment {
         rvSsids = rootView.findViewById(R.id.rvSsids);
         rvSsids.setLayoutManager(new LinearLayoutManager(getActivity()));
 
-        /*RequestSsids requestSsids = new RequestSsids(this);
-        AsyncTask runner = requestSsids.execute();*/
+        ssidsFragmentListener = new SsidsFragmentListener(this);
+
+        Button ssidsFragmentBtnAddAll = rootView.findViewById(R.id.ssidsFragmentBtnAddAll);
+        ssidsFragmentBtnAddAll.setOnClickListener(ssidsFragmentListener);
 
-        List<Ssid> ssidList = new RequestSsids(Objects.requireNonNull(this.getContext())).getSsidList();
+        ssidList = new RequestSsids(Objects.requireNonNull(this.getContext())).getSsidList();
         showSsidList(ssidList);
 
         return rootView;
     }
+
     private void showSsidList(List<Ssid> ssidList) {
         SsidsAdapter ssidsAdapter = new SsidsAdapter(ssidList);
         rvSsids.setAdapter(ssidsAdapter);
         rvSsids.setItemAnimator(new DefaultItemAnimator());
     }
+
+    public void checkPermission(String permission, int requestCode) {
+        // Checking if permission is not granted
+        if (ContextCompat.checkSelfPermission(
+                rootView.getContext(),
+                permission) == PackageManager.PERMISSION_DENIED) {
+            ActivityCompat.requestPermissions(
+                    Objects.requireNonNull(getActivity()),
+                    new String[]{permission},
+                    requestCode);
+        } else {
+            Log.d(TAG, "Permission " + permission + " already granted");
+        }
+    }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode,
+                                           String[] permissions,
+                                           int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+
+        switch (requestCode) {
+            case REQUEST_ID_ACCESS_WIFI_STATE:
+                // Checking whether user granted the permission or not.
+                if (grantResults.length > 0
+                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    Log.d(TAG, "Permission " + permissions[requestCode] + " granted");
+                    Toast.makeText(
+                            getActivity(),
+                            "Access Wifi state Permission Granted",
+                            Toast.LENGTH_SHORT)
+                            .show();
+                } else {
+                    Log.d(TAG, "Permission " + permissions[requestCode] + " denied");
+                    Toast.makeText(getActivity(),
+                            "Access Wifi state Permission Denied",
+                            Toast.LENGTH_SHORT)
+                            .show();
+                }
+                break;
+
+            case REQUEST_ID_CHANGE_WIFI_STATE:
+                // Checking whether user granted the permission or not.
+                if (grantResults.length > 0
+                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    Log.d(TAG, "Permission " + permissions[requestCode] + " granted");
+                    Toast.makeText(
+                            getActivity(),
+                            "Change Wifi Permission Granted",
+                            Toast.LENGTH_SHORT)
+                            .show();
+                } else {
+                    Log.d(TAG, "Permission " + permissions[requestCode] + " denied");
+                    Toast.makeText(getActivity(),
+                            "Change Wifi Permission Denied",
+                            Toast.LENGTH_SHORT)
+                            .show();
+                }
+                break;
+
+            case REQUEST_ID_WRITE_SETTINGS:
+                // Checking whether user granted the permission or not.
+                if (grantResults.length > 0
+                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+                    Log.d(TAG, "Permission " + permissions[requestCode] + " granted");
+                    Toast.makeText(
+                            getActivity(),
+                            "Write Settings Permission Granted",
+                            Toast.LENGTH_SHORT)
+                            .show();
+                } else {
+                    Log.d(TAG, "Permission " + permissions[requestCode] + " denied");
+                    Toast.makeText(getActivity(),
+                            "Write Settings Permission Denied",
+                            Toast.LENGTH_SHORT)
+                            .show();
+                }
+                break;
+        }
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml
index a6c0d205527b62c67b04220614cdbde7e4d8f927..a1e8dcc14acbeaff230bd78d613afb3ebfbdc575 100644
--- a/app/src/main/res/layout/activity_about.xml
+++ b/app/src/main/res/layout/activity_about.xml
@@ -7,46 +7,40 @@
     tools:context=".view.AboutActivity">
 
     <TextView
-        android:id="@+id/textView2"
+        android:id="@+id/aboutTvAppName"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="16dp"
         android:layout_marginTop="24dp"
-        android:text="Freifunk Franken App"
+        android:text="@string/aboutTvTitle"
+        android:textColor="@color/freifunk_magenta"
+        android:textSize="24sp"
         android:textStyle="bold"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
 
     <TextView
-        android:id="@+id/textView3"
+        android:id="@+id/aboutTvLizences"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="16dp"
         android:layout_marginTop="16dp"
-        android:text="Lizenzen:"
+        android:text="@string/aboutTvLizences"
+        android:textColor="@color/freifunk_blau"
+        android:textStyle="bold"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/textView2"
+        app:layout_constraintTop_toBottomOf="@+id/aboutTvAppName"
         tools:ignore="MissingConstraints" />
 
     <TextView
-        android:id="@+id/textView4"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="16dp"
-        android:layout_marginTop="8dp"
-        android:text="Diese APP ist unter GNU GPLv3 lizenziert."
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/textView3" />
-
-    <TextView
-        android:id="@+id/textView5"
+        android:id="@+id/aboutTvLizencesApp"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="16dp"
         android:layout_marginTop="8dp"
-        android:text="Freifunk Logo von freifunk.net lizenziert unter CC BY-SA 3.0"
+        android:textSize="12sp"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/textView4" />
+        app:layout_constraintTop_toBottomOf="@+id/aboutTvLizences" />
 
     <Button
         android:id="@+id/AboutBtnClose"
diff --git a/app/src/main/res/layout/maps_fragment.xml b/app/src/main/res/layout/maps_fragment.xml
index 91c6a777ee0fe72e5ef23ec190ec1d1340231cb0..9ba373033bddde75ef466bc6abc7f099e89d5287 100644
--- a/app/src/main/res/layout/maps_fragment.xml
+++ b/app/src/main/res/layout/maps_fragment.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<fragment xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/mapFragment"
     android:name="com.google.android.gms.maps.SupportMapFragment"
     android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/aps_item.xml b/app/src/main/res/layout/nextap_item.xml
similarity index 100%
rename from app/src/main/res/layout/aps_item.xml
rename to app/src/main/res/layout/nextap_item.xml
diff --git a/app/src/main/res/layout/ssids_fragment.xml b/app/src/main/res/layout/ssids_fragment.xml
index 3245f384f0f68e3a0f765f1aaeaac2932ac7d0ee..539928778af6e3f8c8a8f2446d7c16b578e0fcf5 100644
--- a/app/src/main/res/layout/ssids_fragment.xml
+++ b/app/src/main/res/layout/ssids_fragment.xml
@@ -8,7 +8,7 @@
         android:id="@+id/rvSsids"
         android:layout_width="match_parent"
         android:layout_height="0dp"
-        app:layout_constraintBottom_toTopOf="@+id/button"
+        app:layout_constraintBottom_toTopOf="@+id/ssidsFragmentBtnAddAll"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0.0"
         app:layout_constraintStart_toStartOf="parent"
@@ -18,7 +18,7 @@
     </androidx.recyclerview.widget.RecyclerView>
 
     <Button
-        android:id="@+id/button"
+        android:id="@+id/ssidsFragmentBtnAddAll"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:background="@color/freifunk_magenta"
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
deleted file mode 100644
index eca70cfe52eac1ba66ba280a68ca7be8fcf88a16..0000000000000000000000000000000000000000
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
-    <background android:drawable="@drawable/ic_launcher_background" />
-    <foreground android:drawable="@drawable/ic_launcher_foreground" />
-</adaptive-icon>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index eca70cfe52eac1ba66ba280a68ca7be8fcf88a16..0000000000000000000000000000000000000000
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
-    <background android:drawable="@drawable/ic_launcher_background" />
-    <foreground android:drawable="@drawable/ic_launcher_foreground" />
-</adaptive-icon>
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/app_icon.png b/app/src/main/res/mipmap-hdpi/app_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..2ee1f32996dd5b5fe93c3c519efc7a096db2e368
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/app_icon.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index a571e60098c92c2baca8a5df62f2929cbff01b52..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 61da551c5594a1f9d26193983d2cd69189014603..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/app_icon.png b/app/src/main/res/mipmap-mdpi/app_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c1e39443df0a3808f98f333112304fcfd0914e2
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/app_icon.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index c41dd28531901b2c23927768c84bb6765ebcc1db..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index db5080a752731b34d38d7c634732b2cd999125d0..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/app_icon.png b/app/src/main/res/mipmap-xhdpi/app_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..c9652686ca2510734ef38cfef73c6e1e8d779e77
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/app_icon.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 6dba46dab19242bf475ddf2e0a10042de6a0be16..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index da31a871c8dc461a1ea114510bfac640307b0a90..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/app_icon.png b/app/src/main/res/mipmap-xxhdpi/app_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9c69e3583f8f13665d9f2d5a4982061b986687d
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/app_icon.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 15ac681720f3df43c647bf0c081f0314ee34eae1..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index b216f2d313cc673d8b8c4da591c174ebed52795c..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index f25a419744727fb48b4b4137b6c6a3a8f2620d51..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index e96783ccce844001359f968f5cd9d85b341bd3fb..0000000000000000000000000000000000000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0cfb320abfa1d79a8c1e1a0e55363344f85e1bfc..fd7f8f290eba17f56a5ef17bcbdc68d87949b8e4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -11,16 +11,9 @@
     <string name="menuItemAbout">Info</string>
 
     <!-- TODO: Remove or change this placeholder text -->
-    <string name="hello_blank_fragment">Hello blank fragment</string>
     <string name="title_activity_settings">SettingsActivity</string>
     <!-- Strings used for fragments for navigation -->
-    <string name="first_fragment_label">First Fragment</string>
-    <string name="second_fragment_label">Second Fragment</string>
-    <string name="next">Next</string>
-    <string name="previous">Previous</string>
 
-    <string name="hello_first_fragment">Hello first fragment</string>
-    <string name="hello_second_fragment">Hello second fragment. Arg: %1$s</string>
     <string name="btnClose">Schließen</string>
     <string name="settingsTvOfflineRouter">Zeige offline Router an</string>
     <string name="settingsTvRouterCount">Anzahl der anzuzeigenden Router</string>
@@ -28,4 +21,16 @@
     <string name="settingsTvNextRouter">Nächste Router</string>
     <string name="settingsSwMapOfflineRouter">Zeige offline Router an</string>
     <string name="settingsTvMap">Karte</string>
+    <string name="aboutTvLizences">Lizenzen:</string>
+    <string name="aboutTvAppLizence">
+        &lt;ul&gt;
+            &lt;li&gt;
+                &amp;nbsp;&amp;copy; 2020 Dennis Eisold, lizensiert unter GNU GPLv3&lt;br/&gt;
+                &amp;nbsp;Quellcode auf &lt;a href="https://www.gitrepo.de/freifunk/freifunkfrankenapp"&gt;gitrepo.de&lt;/a&gt;
+            &lt;/li&gt;
+            &lt;li&gt;&amp;nbsp;Freifunk Logo von &lt;a href="https://wiki.freifunk.net/Freifunk-Styles#Logo"&gt;freifunk.net&lt;/a&gt; lizenziert unter CC BY-SA 3.0&lt;/li&gt;
+        &lt;/ul&gt;
+    </string>
+    <string name="aboutTvTitle">Über die Freifunk Franken App</string>
+    <string name="popupWritePermissionFragmentTitle">Zugriff benötigt</string>
 </resources>
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..f6b961fd5a86aa5fbfe90f707c3138408be7c718
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000000000000000000000000000000000000..82d85f4764f3fb9cb08e4979622ae554b0252450
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon Mar 23 20:01:44 CET 2020
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip