diff --git a/app/assets/urls/riseup.url b/app/assets/urls/riseup.url
index e250e93f036cb0bf98b8a2a64a81c2a2ba2a3fad..4c565076c36f2c84cd5b9926244b98697a8274e1 100644
--- a/app/assets/urls/riseup.url
+++ b/app/assets/urls/riseup.url
@@ -1,4 +1,4 @@
 {
 	"main_url" : "https://riseup.net/",
-	"ca_cert_fingerprint" : "c429750763322fcc20b6402d7b508ba9e754b176"
+	"ca_cert_fingerprint" : "aef7a642d7f8e046770521b354961a95cd4a76a8"
 }
diff --git a/app/build.gradle b/app/build.gradle
index 0f73442c9e48222c0469dba2003ab5923d02b73e..994f8b7b00252be103ae7dc1f9fc6838ccf7dd1d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,5 +1,4 @@
-apply plugin: 'android'
-import org.ajoberstar.grgit.Grgit
+apply plugin: 'com.android.application'
 
 android {
   compileSdkVersion 21
@@ -14,6 +13,15 @@ android {
     }
   }
 
+    productFlavors {
+        production {
+
+        }
+        insecure {
+
+        }
+    }
+
   buildTypes {
     release {
       //runProguard true
@@ -22,9 +30,9 @@ android {
     }
   }
 
-  lintOptions {
-    abortOnError false
-  }
+    lintOptions {
+        abortOnError false
+    }
 
   sourceSets {
     main {
diff --git a/app/src/androidTest/java/se/leap/bitmaskclient/test/ConnectionManager.java b/app/src/androidTest/java/se/leap/bitmaskclient/test/ConnectionManager.java
index a664c88521fd8ae8943ad1c9db814f0ba2f5ea5b..f7ab4b1e0d1369f7a700e87bac22fbee79890bb2 100644
--- a/app/src/androidTest/java/se/leap/bitmaskclient/test/ConnectionManager.java
+++ b/app/src/androidTest/java/se/leap/bitmaskclient/test/ConnectionManager.java
@@ -16,7 +16,7 @@ public class ConnectionManager {
                 try {
                     method.invoke(conman, enabled);
                 } catch (InvocationTargetException | IllegalAccessException e) {
-                    e.printStackTrace();
+                    //e.printStackTrace();
                 }
             }
         }
diff --git a/app/src/androidTest/java/se/leap/bitmaskclient/test/testVpnFragment.java b/app/src/androidTest/java/se/leap/bitmaskclient/test/testVpnFragment.java
index 106d5cf23e1ac195c16d6204e611ba6a2d788756..d23be601383364156cff78ec14513908c306eb35 100644
--- a/app/src/androidTest/java/se/leap/bitmaskclient/test/testVpnFragment.java
+++ b/app/src/androidTest/java/se/leap/bitmaskclient/test/testVpnFragment.java
@@ -54,13 +54,28 @@ public class testVpnFragment extends BaseTestDashboard {
     }
 
     public void testVpnEveryProvider() {
-        String[] providers = {"demo.bitmask.net", "riseup.net", "calyx.net"};
-        for(String provider : providers) {
-            changeProviderAndLogIn(provider);
-            vpn_controller.sleepSeconds(1);
-            vpn_controller.turnVpnOndAndOff(provider);
-            vpn_controller.sleepSeconds(1);
-        }
+        testDemoBitmaskNet();
+        testRiseupNet();
+        testCalyxNet();
+    }
+
+    private void testDemoBitmaskNet() {
+        testProvider("demo.bitmask.net");
+    }
+
+    private void testRiseupNet() {
+        testProvider("riseup.net");
+    }
+
+    private void testCalyxNet() {
+        testProvider("calyx.net");
+    }
+
+    private void testProvider(String provider) {
+        changeProviderAndLogIn(provider);
+        vpn_controller.sleepSeconds(1);
+        vpn_controller.turnVpnOndAndOff(provider);
+        vpn_controller.sleepSeconds(1);
     }
 
     public void testVpnIconIsDisplayed() {
diff --git a/app/src/debug/AndroidManifest.xml b/app/src/insecure/AndroidManifest.xml
similarity index 100%
rename from app/src/debug/AndroidManifest.xml
rename to app/src/insecure/AndroidManifest.xml
diff --git a/app/src/debug/assets/urls/cdev.bitmask.net.url b/app/src/insecure/assets/urls/cdev.bitmask.net.url
similarity index 100%
rename from app/src/debug/assets/urls/cdev.bitmask.net.url
rename to app/src/insecure/assets/urls/cdev.bitmask.net.url
diff --git a/app/src/debug/assets/urls/dev.bitmask.net.url b/app/src/insecure/assets/urls/dev.bitmask.net.url
similarity index 95%
rename from app/src/debug/assets/urls/dev.bitmask.net.url
rename to app/src/insecure/assets/urls/dev.bitmask.net.url
index a1e53f694ab6d8a021f9fbf8eb8c94b3eb94f814..5d4ae4858f1e33a66ee155c12578fe77d214be67 100644
--- a/app/src/debug/assets/urls/dev.bitmask.net.url
+++ b/app/src/insecure/assets/urls/dev.bitmask.net.url
@@ -1,3 +1,3 @@
-{
-	"main_url" : "https://dev.bitmask.net/"
+{
+	"main_url" : "https://dev.bitmask.net/"
 }
\ No newline at end of file
diff --git a/app/src/debug/java/se/leap/bitmaskclient/ConfigurationWizard.java b/app/src/insecure/java/se/leap/bitmaskclient/ConfigurationWizard.java
similarity index 100%
rename from app/src/debug/java/se/leap/bitmaskclient/ConfigurationWizard.java
rename to app/src/insecure/java/se/leap/bitmaskclient/ConfigurationWizard.java
diff --git a/app/src/debug/java/se/leap/bitmaskclient/NewProviderDialog.java b/app/src/insecure/java/se/leap/bitmaskclient/NewProviderDialog.java
similarity index 100%
rename from app/src/debug/java/se/leap/bitmaskclient/NewProviderDialog.java
rename to app/src/insecure/java/se/leap/bitmaskclient/NewProviderDialog.java
diff --git a/app/src/debug/java/se/leap/bitmaskclient/ProviderAPI.java b/app/src/insecure/java/se/leap/bitmaskclient/ProviderAPI.java
similarity index 100%
rename from app/src/debug/java/se/leap/bitmaskclient/ProviderAPI.java
rename to app/src/insecure/java/se/leap/bitmaskclient/ProviderAPI.java
diff --git a/app/src/debug/java/se/leap/bitmaskclient/ProviderDetailFragment.java b/app/src/insecure/java/se/leap/bitmaskclient/ProviderDetailFragment.java
similarity index 97%
rename from app/src/debug/java/se/leap/bitmaskclient/ProviderDetailFragment.java
rename to app/src/insecure/java/se/leap/bitmaskclient/ProviderDetailFragment.java
index bd21f91ef204ea409cd211a7e0505e969dc1336f..6d9a16cd8c91a52346e9c76aa30f8546dfee6899 100644
--- a/app/src/debug/java/se/leap/bitmaskclient/ProviderDetailFragment.java
+++ b/app/src/insecure/java/se/leap/bitmaskclient/ProviderDetailFragment.java
@@ -1,111 +1,111 @@
-package se.leap.bitmaskclient;
-
-import org.json.*;
-
-import se.leap.bitmaskclient.eip.*;
-import se.leap.bitmaskclient.ProviderListContent.ProviderItem;
-
-import android.app.*;
-import android.content.*;
-import android.os.*;
-import android.view.*;
-import android.widget.*;
-
-public class ProviderDetailFragment extends DialogFragment {
-
-    final public static String TAG = "providerDetailFragment";
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        try {
-
-            LayoutInflater inflater = getActivity().getLayoutInflater();
-            View provider_detail_view = inflater.inflate(R.layout.provider_detail_fragment, null);
-
-            JSONObject provider_json = new JSONObject(getActivity().getSharedPreferences(Dashboard.SHARED_PREFERENCES, getActivity().MODE_PRIVATE).getString(Provider.KEY, ""));
-
-            final TextView domain = (TextView) provider_detail_view.findViewById(R.id.provider_detail_domain);
-            domain.setText(provider_json.getString(Provider.DOMAIN));
-            final TextView name = (TextView) provider_detail_view.findViewById(R.id.provider_detail_name);
-            name.setText(provider_json.getJSONObject(Provider.NAME).getString("en"));
-            final TextView description = (TextView) provider_detail_view.findViewById(R.id.provider_detail_description);
-            description.setText(provider_json.getJSONObject(Provider.DESCRIPTION).getString("en"));
-
-            builder.setView(provider_detail_view);
-            builder.setTitle(R.string.provider_details_fragment_title);
-
-            if (anon_allowed(provider_json)) {
-                builder.setPositiveButton(R.string.use_anonymously_button, new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialog, int id) {
-                        interface_with_configuration_wizard.use_anonymously();
-                    }
-                });
-            }
-
-            if (registration_allowed(provider_json)) {
-                builder.setNegativeButton(R.string.signup_or_login_button, new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialog, int id) {
-                        interface_with_configuration_wizard.login();
-                    }
-                });
-            }
-
-            return builder.create();
-        } catch (JSONException e) {
-            return null;
-        }
-    }
-
-    private boolean anon_allowed(JSONObject provider_json) {
-        try {
-            JSONObject service_description = provider_json.getJSONObject(Provider.SERVICE);
-            return service_description.has(Constants.ALLOWED_ANON) && service_description.getBoolean(Constants.ALLOWED_ANON);
-        } catch (JSONException e) {
-            return false;
-        }
-    }
-
-    private boolean registration_allowed(JSONObject provider_json) {
-        try {
-            JSONObject service_description = provider_json.getJSONObject(Provider.SERVICE);
-            return service_description.has(Provider.ALLOW_REGISTRATION) && service_description.getBoolean(Provider.ALLOW_REGISTRATION);
-        } catch (JSONException e) {
-            return false;
-        }
-    }
-
-    @Override
-    public void onCancel(DialogInterface dialog) {
-        super.onCancel(dialog);
-        SharedPreferences.Editor editor = getActivity().getSharedPreferences(Dashboard.SHARED_PREFERENCES, Activity.MODE_PRIVATE).edit();
-        editor.remove(Provider.KEY).remove(ProviderItem.DANGER_ON).remove(Constants.ALLOWED_ANON).remove(Constants.KEY).commit();
-        interface_with_configuration_wizard.showAllProviders();
-    }
-
-    public static DialogFragment newInstance() {
-        ProviderDetailFragment provider_detail_fragment = new ProviderDetailFragment();
-        return provider_detail_fragment;
-    }
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-        try {
-            interface_with_configuration_wizard = (ProviderDetailFragmentInterface) activity;
-        } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString()
-                    + " must implement LogInDialogListener");
-        }
-    }
-
-    public interface ProviderDetailFragmentInterface {
-        public void login();
-
-        public void use_anonymously();
-
-        public void showAllProviders();
-    }
-
-    ProviderDetailFragmentInterface interface_with_configuration_wizard;
-}
+package se.leap.bitmaskclient;
+
+import org.json.*;
+
+import se.leap.bitmaskclient.eip.*;
+import se.leap.bitmaskclient.ProviderListContent.ProviderItem;
+
+import android.app.*;
+import android.content.*;
+import android.os.*;
+import android.view.*;
+import android.widget.*;
+
+public class ProviderDetailFragment extends DialogFragment {
+
+    final public static String TAG = "providerDetailFragment";
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        try {
+
+            LayoutInflater inflater = getActivity().getLayoutInflater();
+            View provider_detail_view = inflater.inflate(R.layout.provider_detail_fragment, null);
+
+            JSONObject provider_json = new JSONObject(getActivity().getSharedPreferences(Dashboard.SHARED_PREFERENCES, getActivity().MODE_PRIVATE).getString(Provider.KEY, ""));
+
+            final TextView domain = (TextView) provider_detail_view.findViewById(R.id.provider_detail_domain);
+            domain.setText(provider_json.getString(Provider.DOMAIN));
+            final TextView name = (TextView) provider_detail_view.findViewById(R.id.provider_detail_name);
+            name.setText(provider_json.getJSONObject(Provider.NAME).getString("en"));
+            final TextView description = (TextView) provider_detail_view.findViewById(R.id.provider_detail_description);
+            description.setText(provider_json.getJSONObject(Provider.DESCRIPTION).getString("en"));
+
+            builder.setView(provider_detail_view);
+            builder.setTitle(R.string.provider_details_fragment_title);
+
+            if (anon_allowed(provider_json)) {
+                builder.setPositiveButton(R.string.use_anonymously_button, new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int id) {
+                        interface_with_configuration_wizard.use_anonymously();
+                    }
+                });
+            }
+
+            if (registration_allowed(provider_json)) {
+                builder.setNegativeButton(R.string.signup_or_login_button, new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int id) {
+                        interface_with_configuration_wizard.login();
+                    }
+                });
+            }
+
+            return builder.create();
+        } catch (JSONException e) {
+            return null;
+        }
+    }
+
+    private boolean anon_allowed(JSONObject provider_json) {
+        try {
+            JSONObject service_description = provider_json.getJSONObject(Provider.SERVICE);
+            return service_description.has(Constants.ALLOWED_ANON) && service_description.getBoolean(Constants.ALLOWED_ANON);
+        } catch (JSONException e) {
+            return false;
+        }
+    }
+
+    private boolean registration_allowed(JSONObject provider_json) {
+        try {
+            JSONObject service_description = provider_json.getJSONObject(Provider.SERVICE);
+            return service_description.has(Provider.ALLOW_REGISTRATION) && service_description.getBoolean(Provider.ALLOW_REGISTRATION);
+        } catch (JSONException e) {
+            return false;
+        }
+    }
+
+    @Override
+    public void onCancel(DialogInterface dialog) {
+        super.onCancel(dialog);
+        SharedPreferences.Editor editor = getActivity().getSharedPreferences(Dashboard.SHARED_PREFERENCES, Activity.MODE_PRIVATE).edit();
+        editor.remove(Provider.KEY).remove(ProviderItem.DANGER_ON).remove(Constants.ALLOWED_ANON).remove(Constants.KEY).commit();
+        interface_with_configuration_wizard.showAllProviders();
+    }
+
+    public static DialogFragment newInstance() {
+        ProviderDetailFragment provider_detail_fragment = new ProviderDetailFragment();
+        return provider_detail_fragment;
+    }
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        try {
+            interface_with_configuration_wizard = (ProviderDetailFragmentInterface) activity;
+        } catch (ClassCastException e) {
+            throw new ClassCastException(activity.toString()
+                    + " must implement LogInDialogListener");
+        }
+    }
+
+    public interface ProviderDetailFragmentInterface {
+        public void login();
+
+        public void use_anonymously();
+
+        public void showAllProviders();
+    }
+
+    ProviderDetailFragmentInterface interface_with_configuration_wizard;
+}
diff --git a/app/src/debug/java/se/leap/bitmaskclient/ProviderListContent.java b/app/src/insecure/java/se/leap/bitmaskclient/ProviderListContent.java
similarity index 96%
rename from app/src/debug/java/se/leap/bitmaskclient/ProviderListContent.java
rename to app/src/insecure/java/se/leap/bitmaskclient/ProviderListContent.java
index 0a05e83992ba9229249e688ad9e4a1c6eeec4c8b..c8dfc092363a31586e9793554424b15ee656bc88 100644
--- a/app/src/debug/java/se/leap/bitmaskclient/ProviderListContent.java
+++ b/app/src/insecure/java/se/leap/bitmaskclient/ProviderListContent.java
@@ -1,82 +1,82 @@
-/**
- * Copyright (c) 2013 LEAP Encryption Access Project and contributers
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package se.leap.bitmaskclient;
-
-import java.util.*;
-import java.net.*;
-
-/**
- * Models the provider list shown in the ConfigurationWizard.
- *
- * @author parmegv
- */
-public class ProviderListContent {
-
-    public static List<ProviderItem> ITEMS = new ArrayList<ProviderItem>();
-
-    public static Map<String, ProviderItem> ITEM_MAP = new HashMap<String, ProviderItem>();
-
-    /**
-     * Adds a new provider item to the end of the items map, and to the items list.
-     *
-     * @param item
-     */
-    public static void addItem(ProviderItem item) {
-        ITEMS.add(item);
-        ITEM_MAP.put(String.valueOf(ITEMS.size()), item);
-    }
-
-    public static void removeItem(ProviderItem item) {
-        ITEMS.remove(item);
-        ITEM_MAP.remove(item);
-    }
-
-    /**
-     * A provider item.
-     */
-    public static class ProviderItem {
-        final public static String CUSTOM = "custom";
-        final public static String DANGER_ON = "danger_on";
-        private String provider_main_url;
-        private String name;
-
-        /**
-         * @param name              of the provider
-         * @param provider_main_url used to download provider.json file of the provider
-         */
-        public ProviderItem(String name, String provider_main_url) {
-            this.name = name;
-            this.provider_main_url = provider_main_url;
-        }
-
-        public String name() {
-            return name;
-        }
-
-        public String providerMainUrl() {
-            return provider_main_url;
-        }
-
-        public String domain() {
-            try {
-                return new URL(provider_main_url).getHost();
-            } catch (MalformedURLException e) {
-                return provider_main_url.replaceFirst("http[s]?://", "").replaceFirst("/.*", "");
-            }
-        }
-    }
-}
+/**
+ * Copyright (c) 2013 LEAP Encryption Access Project and contributers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package se.leap.bitmaskclient;
+
+import java.util.*;
+import java.net.*;
+
+/**
+ * Models the provider list shown in the ConfigurationWizard.
+ *
+ * @author parmegv
+ */
+public class ProviderListContent {
+
+    public static List<ProviderItem> ITEMS = new ArrayList<ProviderItem>();
+
+    public static Map<String, ProviderItem> ITEM_MAP = new HashMap<String, ProviderItem>();
+
+    /**
+     * Adds a new provider item to the end of the items map, and to the items list.
+     *
+     * @param item
+     */
+    public static void addItem(ProviderItem item) {
+        ITEMS.add(item);
+        ITEM_MAP.put(String.valueOf(ITEMS.size()), item);
+    }
+
+    public static void removeItem(ProviderItem item) {
+        ITEMS.remove(item);
+        ITEM_MAP.remove(item);
+    }
+
+    /**
+     * A provider item.
+     */
+    public static class ProviderItem {
+        final public static String CUSTOM = "custom";
+        final public static String DANGER_ON = "danger_on";
+        private String provider_main_url;
+        private String name;
+
+        /**
+         * @param name              of the provider
+         * @param provider_main_url used to download provider.json file of the provider
+         */
+        public ProviderItem(String name, String provider_main_url) {
+            this.name = name;
+            this.provider_main_url = provider_main_url;
+        }
+
+        public String name() {
+            return name;
+        }
+
+        public String providerMainUrl() {
+            return provider_main_url;
+        }
+
+        public String domain() {
+            try {
+                return new URL(provider_main_url).getHost();
+            } catch (MalformedURLException e) {
+                return provider_main_url.replaceFirst("http[s]?://", "").replaceFirst("/.*", "");
+            }
+        }
+    }
+}
diff --git a/app/src/debug/res/layout-xlarge/new_provider_dialog.xml b/app/src/insecure/res/layout-xlarge/new_provider_dialog.xml
similarity index 100%
rename from app/src/debug/res/layout-xlarge/new_provider_dialog.xml
rename to app/src/insecure/res/layout-xlarge/new_provider_dialog.xml
diff --git a/app/src/debug/res/layout/new_provider_dialog.xml b/app/src/insecure/res/layout/new_provider_dialog.xml
similarity index 100%
rename from app/src/debug/res/layout/new_provider_dialog.xml
rename to app/src/insecure/res/layout/new_provider_dialog.xml
diff --git a/app/src/debug/res/values/strings.xml b/app/src/insecure/res/values/strings.xml
similarity index 100%
rename from app/src/debug/res/values/strings.xml
rename to app/src/insecure/res/values/strings.xml
diff --git a/app/src/release/java/se/leap/bitmaskclient/ConfigurationWizard.java b/app/src/production/java/se/leap/bitmaskclient/ConfigurationWizard.java
similarity index 100%
rename from app/src/release/java/se/leap/bitmaskclient/ConfigurationWizard.java
rename to app/src/production/java/se/leap/bitmaskclient/ConfigurationWizard.java
diff --git a/app/src/release/java/se/leap/bitmaskclient/NewProviderDialog.java b/app/src/production/java/se/leap/bitmaskclient/NewProviderDialog.java
similarity index 100%
rename from app/src/release/java/se/leap/bitmaskclient/NewProviderDialog.java
rename to app/src/production/java/se/leap/bitmaskclient/NewProviderDialog.java
diff --git a/app/src/release/java/se/leap/bitmaskclient/ProviderAPI.java b/app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java
similarity index 100%
rename from app/src/release/java/se/leap/bitmaskclient/ProviderAPI.java
rename to app/src/production/java/se/leap/bitmaskclient/ProviderAPI.java
diff --git a/app/src/release/java/se/leap/bitmaskclient/ProviderDetailFragment.java b/app/src/production/java/se/leap/bitmaskclient/ProviderDetailFragment.java
similarity index 97%
rename from app/src/release/java/se/leap/bitmaskclient/ProviderDetailFragment.java
rename to app/src/production/java/se/leap/bitmaskclient/ProviderDetailFragment.java
index 24d048a6933f673ed9ed57763d9a16acf336baac..08fc5f3df1d54fac777df488cd73343a19f82fae 100644
--- a/app/src/release/java/se/leap/bitmaskclient/ProviderDetailFragment.java
+++ b/app/src/production/java/se/leap/bitmaskclient/ProviderDetailFragment.java
@@ -1,111 +1,111 @@
-package se.leap.bitmaskclient;
-
-import org.json.*;
-
-import se.leap.bitmaskclient.eip.*;
-import se.leap.bitmaskclient.ProviderListContent.ProviderItem;
-
-import android.app.*;
-import android.content.*;
-import android.os.*;
-import android.view.*;
-import android.widget.*;
-
-public class ProviderDetailFragment extends DialogFragment {
-
-    final public static String TAG = "providerDetailFragment";
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        try {
-
-            LayoutInflater inflater = getActivity().getLayoutInflater();
-            View provider_detail_view = inflater.inflate(R.layout.provider_detail_fragment, null);
-
-            JSONObject provider_json = new JSONObject(getActivity().getSharedPreferences(Dashboard.SHARED_PREFERENCES, getActivity().MODE_PRIVATE).getString(Provider.KEY, ""));
-
-            final TextView domain = (TextView) provider_detail_view.findViewById(R.id.provider_detail_domain);
-            domain.setText(provider_json.getString(Provider.DOMAIN));
-            final TextView name = (TextView) provider_detail_view.findViewById(R.id.provider_detail_name);
-            name.setText(provider_json.getJSONObject(Provider.NAME).getString("en"));
-            final TextView description = (TextView) provider_detail_view.findViewById(R.id.provider_detail_description);
-            description.setText(provider_json.getJSONObject(Provider.DESCRIPTION).getString("en"));
-
-            builder.setView(provider_detail_view);
-            builder.setTitle(R.string.provider_details_fragment_title);
-
-            if (anon_allowed(provider_json)) {
-                builder.setPositiveButton(R.string.use_anonymously_button, new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialog, int id) {
-                        interface_with_configuration_wizard.use_anonymously();
-                    }
-                });
-            }
-
-            if (registration_allowed(provider_json)) {
-                builder.setNegativeButton(R.string.signup_or_login_button, new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialog, int id) {
-                        interface_with_configuration_wizard.login();
-                    }
-                });
-            }
-
-            return builder.create();
-        } catch (JSONException e) {
-            return null;
-        }
-    }
-
-    private boolean anon_allowed(JSONObject provider_json) {
-        try {
-            JSONObject service_description = provider_json.getJSONObject(Provider.SERVICE);
-            return service_description.has(Constants.ALLOWED_ANON) && service_description.getBoolean(Constants.ALLOWED_ANON);
-        } catch (JSONException e) {
-            return false;
-        }
-    }
-
-    private boolean registration_allowed(JSONObject provider_json) {
-        try {
-            JSONObject service_description = provider_json.getJSONObject(Provider.SERVICE);
-            return service_description.has(Provider.ALLOW_REGISTRATION) && service_description.getBoolean(Provider.ALLOW_REGISTRATION);
-        } catch (JSONException e) {
-            return false;
-        }
-    }
-
-    @Override
-    public void onCancel(DialogInterface dialog) {
-        super.onCancel(dialog);
-        SharedPreferences.Editor editor = getActivity().getSharedPreferences(Dashboard.SHARED_PREFERENCES, Activity.MODE_PRIVATE).edit();
-        editor.remove(Provider.KEY).remove(Constants.ALLOWED_ANON).remove(Constants.KEY).commit();
-        interface_with_configuration_wizard.showAllProviders();
-    }
-
-    public static DialogFragment newInstance() {
-        ProviderDetailFragment provider_detail_fragment = new ProviderDetailFragment();
-        return provider_detail_fragment;
-    }
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-        try {
-            interface_with_configuration_wizard = (ProviderDetailFragmentInterface) activity;
-        } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString()
-                    + " must implement LogInDialogListener");
-        }
-    }
-
-    public interface ProviderDetailFragmentInterface {
-        public void login();
-
-        public void use_anonymously();
-
-        public void showAllProviders();
-    }
-
-    ProviderDetailFragmentInterface interface_with_configuration_wizard;
-}
+package se.leap.bitmaskclient;
+
+import org.json.*;
+
+import se.leap.bitmaskclient.eip.*;
+import se.leap.bitmaskclient.ProviderListContent.ProviderItem;
+
+import android.app.*;
+import android.content.*;
+import android.os.*;
+import android.view.*;
+import android.widget.*;
+
+public class ProviderDetailFragment extends DialogFragment {
+
+    final public static String TAG = "providerDetailFragment";
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        try {
+
+            LayoutInflater inflater = getActivity().getLayoutInflater();
+            View provider_detail_view = inflater.inflate(R.layout.provider_detail_fragment, null);
+
+            JSONObject provider_json = new JSONObject(getActivity().getSharedPreferences(Dashboard.SHARED_PREFERENCES, getActivity().MODE_PRIVATE).getString(Provider.KEY, ""));
+
+            final TextView domain = (TextView) provider_detail_view.findViewById(R.id.provider_detail_domain);
+            domain.setText(provider_json.getString(Provider.DOMAIN));
+            final TextView name = (TextView) provider_detail_view.findViewById(R.id.provider_detail_name);
+            name.setText(provider_json.getJSONObject(Provider.NAME).getString("en"));
+            final TextView description = (TextView) provider_detail_view.findViewById(R.id.provider_detail_description);
+            description.setText(provider_json.getJSONObject(Provider.DESCRIPTION).getString("en"));
+
+            builder.setView(provider_detail_view);
+            builder.setTitle(R.string.provider_details_fragment_title);
+
+            if (anon_allowed(provider_json)) {
+                builder.setPositiveButton(R.string.use_anonymously_button, new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int id) {
+                        interface_with_configuration_wizard.use_anonymously();
+                    }
+                });
+            }
+
+            if (registration_allowed(provider_json)) {
+                builder.setNegativeButton(R.string.signup_or_login_button, new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int id) {
+                        interface_with_configuration_wizard.login();
+                    }
+                });
+            }
+
+            return builder.create();
+        } catch (JSONException e) {
+            return null;
+        }
+    }
+
+    private boolean anon_allowed(JSONObject provider_json) {
+        try {
+            JSONObject service_description = provider_json.getJSONObject(Provider.SERVICE);
+            return service_description.has(Constants.ALLOWED_ANON) && service_description.getBoolean(Constants.ALLOWED_ANON);
+        } catch (JSONException e) {
+            return false;
+        }
+    }
+
+    private boolean registration_allowed(JSONObject provider_json) {
+        try {
+            JSONObject service_description = provider_json.getJSONObject(Provider.SERVICE);
+            return service_description.has(Provider.ALLOW_REGISTRATION) && service_description.getBoolean(Provider.ALLOW_REGISTRATION);
+        } catch (JSONException e) {
+            return false;
+        }
+    }
+
+    @Override
+    public void onCancel(DialogInterface dialog) {
+        super.onCancel(dialog);
+        SharedPreferences.Editor editor = getActivity().getSharedPreferences(Dashboard.SHARED_PREFERENCES, Activity.MODE_PRIVATE).edit();
+        editor.remove(Provider.KEY).remove(Constants.ALLOWED_ANON).remove(Constants.KEY).commit();
+        interface_with_configuration_wizard.showAllProviders();
+    }
+
+    public static DialogFragment newInstance() {
+        ProviderDetailFragment provider_detail_fragment = new ProviderDetailFragment();
+        return provider_detail_fragment;
+    }
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        try {
+            interface_with_configuration_wizard = (ProviderDetailFragmentInterface) activity;
+        } catch (ClassCastException e) {
+            throw new ClassCastException(activity.toString()
+                    + " must implement LogInDialogListener");
+        }
+    }
+
+    public interface ProviderDetailFragmentInterface {
+        public void login();
+
+        public void use_anonymously();
+
+        public void showAllProviders();
+    }
+
+    ProviderDetailFragmentInterface interface_with_configuration_wizard;
+}
diff --git a/app/src/release/java/se/leap/bitmaskclient/ProviderListContent.java b/app/src/production/java/se/leap/bitmaskclient/ProviderListContent.java
similarity index 96%
rename from app/src/release/java/se/leap/bitmaskclient/ProviderListContent.java
rename to app/src/production/java/se/leap/bitmaskclient/ProviderListContent.java
index 235ae5ab8e4e99c81aeb166130f29d5ca53b9028..6466e76921bd801dbfb8b48d381230e2069bc768 100644
--- a/app/src/release/java/se/leap/bitmaskclient/ProviderListContent.java
+++ b/app/src/production/java/se/leap/bitmaskclient/ProviderListContent.java
@@ -1,81 +1,81 @@
-/**
- * Copyright (c) 2013 LEAP Encryption Access Project and contributers
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package se.leap.bitmaskclient;
-
-import java.util.*;
-import java.net.*;
-
-/**
- * Models the provider list shown in the ConfigurationWizard.
- *
- * @author parmegv
- */
-public class ProviderListContent {
-
-    public static List<ProviderItem> ITEMS = new ArrayList<ProviderItem>();
-
-    public static Map<String, ProviderItem> ITEM_MAP = new HashMap<String, ProviderItem>();
-
-    /**
-     * Adds a new provider item to the end of the items map, and to the items list.
-     *
-     * @param item
-     */
-    public static void addItem(ProviderItem item) {
-        ITEMS.add(item);
-        ITEM_MAP.put(String.valueOf(ITEMS.size()), item);
-    }
-
-    public static void removeItem(ProviderItem item) {
-        ITEMS.remove(item);
-        ITEM_MAP.remove(item);
-    }
-
-    /**
-     * A provider item.
-     */
-    public static class ProviderItem {
-        final public static String CUSTOM = "custom";
-        private String provider_main_url;
-        private String name;
-
-        /**
-         * @param name              of the provider
-         * @param provider_main_url used to download provider.json file of the provider
-         */
-        public ProviderItem(String name, String provider_main_url) {
-            this.name = name;
-            this.provider_main_url = provider_main_url;
-        }
-
-        public String name() {
-            return name;
-        }
-
-        public String providerMainUrl() {
-            return provider_main_url;
-        }
-
-        public String domain() {
-            try {
-                return new URL(provider_main_url).getHost();
-            } catch (MalformedURLException e) {
-                return provider_main_url.replaceFirst("http[s]?://", "").replaceFirst("/.*", "");
-            }
-        }
-    }
-}
+/**
+ * Copyright (c) 2013 LEAP Encryption Access Project and contributers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package se.leap.bitmaskclient;
+
+import java.util.*;
+import java.net.*;
+
+/**
+ * Models the provider list shown in the ConfigurationWizard.
+ *
+ * @author parmegv
+ */
+public class ProviderListContent {
+
+    public static List<ProviderItem> ITEMS = new ArrayList<ProviderItem>();
+
+    public static Map<String, ProviderItem> ITEM_MAP = new HashMap<String, ProviderItem>();
+
+    /**
+     * Adds a new provider item to the end of the items map, and to the items list.
+     *
+     * @param item
+     */
+    public static void addItem(ProviderItem item) {
+        ITEMS.add(item);
+        ITEM_MAP.put(String.valueOf(ITEMS.size()), item);
+    }
+
+    public static void removeItem(ProviderItem item) {
+        ITEMS.remove(item);
+        ITEM_MAP.remove(item);
+    }
+
+    /**
+     * A provider item.
+     */
+    public static class ProviderItem {
+        final public static String CUSTOM = "custom";
+        private String provider_main_url;
+        private String name;
+
+        /**
+         * @param name              of the provider
+         * @param provider_main_url used to download provider.json file of the provider
+         */
+        public ProviderItem(String name, String provider_main_url) {
+            this.name = name;
+            this.provider_main_url = provider_main_url;
+        }
+
+        public String name() {
+            return name;
+        }
+
+        public String providerMainUrl() {
+            return provider_main_url;
+        }
+
+        public String domain() {
+            try {
+                return new URL(provider_main_url).getHost();
+            } catch (MalformedURLException e) {
+                return provider_main_url.replaceFirst("http[s]?://", "").replaceFirst("/.*", "");
+            }
+        }
+    }
+}
diff --git a/app/src/release/res/layout-xlarge/new_provider_dialog.xml b/app/src/production/res/layout-xlarge/new_provider_dialog.xml
similarity index 100%
rename from app/src/release/res/layout-xlarge/new_provider_dialog.xml
rename to app/src/production/res/layout-xlarge/new_provider_dialog.xml
diff --git a/app/src/release/res/layout/new_provider_dialog.xml b/app/src/production/res/layout/new_provider_dialog.xml
similarity index 100%
rename from app/src/release/res/layout/new_provider_dialog.xml
rename to app/src/production/res/layout/new_provider_dialog.xml