diff --git a/.idea/misc.xml b/.idea/misc.xml
index 7c1371c54da8eafc01d4252c2465d08c996e6451..5d19981032aa01b060f5a568641d7a8840cc90dc 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="EntryPointsManager">
+    <entry_points version="2.0" />
+  </component>
   <component name="NullableNotNullManager">
     <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
     <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
diff --git a/app/app.iml b/app/app.iml
index f64eb4dcc617f8a77e76420415ebeeaf7bc35043..9f0af9f5e54157bc1e53893096e51d4b5d166036 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -82,6 +82,7 @@
       <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
+      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
diff --git a/app/src/main/java/info/nightscout/android/upload/UploadHelper.java b/app/src/main/java/info/nightscout/android/upload/UploadHelper.java
index a9df4ed621e7242318b009312ee652c438c46dc8..f12e8d58f56fcbf4cffc1e3381adc4f795fb39b8 100644
--- a/app/src/main/java/info/nightscout/android/upload/UploadHelper.java
+++ b/app/src/main/java/info/nightscout/android/upload/UploadHelper.java
@@ -18,6 +18,8 @@ import com.mongodb.ServerAddress;
 import com.mongodb.client.MongoCollection;
 import com.mongodb.client.MongoCursor;
 import com.mongodb.client.MongoDatabase;
+
+import info.nightscout.android.R;
 import info.nightscout.android.medtronic.Medtronic640gActivity;
 import info.nightscout.android.dexcom.EGVRecord;
 import info.nightscout.android.medtronic.MedtronicConstants;
@@ -57,13 +59,15 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import ch.qos.logback.classic.Logger;
 
 import static com.mongodb.client.model.Filters.eq;
 
 public class UploadHelper extends AsyncTask<Record, Integer, Long> {
-	
+
 	private Logger log = (Logger) LoggerFactory.getLogger(MedtronicReader.class.getName());
     private static final String TAG = "DexcomUploadHelper";
     private SharedPreferences settings = null;// common application preferences
@@ -397,29 +401,41 @@ public class UploadHelper extends AsyncTask<Record, Integer, Long> {
     }
 
     private void doRESTUpload(SharedPreferences prefs, Record... records) {
-        String baseURLSettings = prefs.getString("API Base URL", "");
-        ArrayList<String> baseURIs = new ArrayList<String>();
+        String apiScheme = "https://";
+		String apiUrl = "";
+		String apiSecret = prefs.getString(context.getString(R.string.preference_api_secret), "YOURAPISECRET");
 
-        try {
-            for (String baseURLSetting : baseURLSettings.split(" ")) {
-                String baseURL = baseURLSetting.trim();
-                if (baseURL.isEmpty()) continue;
-                baseURIs.add(baseURL + (baseURL.endsWith("/") ? "" : "/"));
-            }
-        } catch (Exception e) {
-            Log.e(TAG, "Unable to process API Base URL setting: " + baseURLSettings, e);
-            log.error("Unable to process API Base URL setting: " + baseURLSettings, e);
-            return;
-        }
+		// Add the extra match for "KEY@" to support the previous single field
+		Pattern p = Pattern.compile("(.*\\/\\/)?(.*@)?([^\\/]*)(.*)");
+		Matcher m = p.matcher(prefs.getString(context.getString(R.string.preference_nightscout_url), ""));
 
-        for (String baseURI : baseURIs) {
-            try {
-                doRESTUploadTo(baseURI, records);
-            } catch (Exception e) {
-                Log.e(TAG, "Unable to do REST API Upload to: " + baseURI, e);
-                log.error("Unable to do REST API Upload to: " + baseURI, e);
-            }
-        }
+		if( m.find() ) {
+			apiUrl = m.group(3);
+
+			// Only override apiSecret from URL (the "old" way), if the API secret preference is empty
+			if( apiSecret.equals("YOURAPISECRET") || apiSecret.equals("") ) {
+				apiSecret = ( m.group(2) == null ) ? "" : m.group(2).replace("@", "");
+			}
+
+			// Override the URI scheme if it's been provided in the preference)
+			if( m.group(1) != null && !m.group(1).equals("") ) {
+				apiScheme = m.group(1);
+			}
+		}
+
+		// Update the preferences to match what we expect. Only really used from converting from the
+		// old format to the new format. Aren't we nice for managing backward compatibility?
+		prefs.edit().putString(context.getString(R.string.preference_api_secret), apiSecret ).apply();
+		prefs.edit().putString(context.getString(R.string.preference_nightscout_url), String.format("%s%s", apiScheme, apiUrl ) ).apply();
+
+		String uploadUrl = String.format("%s%s@%s/api/v1/", apiScheme, apiSecret, apiUrl );
+
+		try {
+			doRESTUploadTo(uploadUrl, records);
+		} catch (Exception e) {
+			Log.e(TAG, "Unable to do REST API Upload to: " + uploadUrl, e);
+			log.error("Unable to do REST API Upload to: " + uploadUrl, e);
+		}
     }
     @SuppressWarnings({ "rawtypes", "unchecked" })
     private void doRESTUploadTo(String baseURI, Record[] records) {
diff --git a/app/src/main/res/layout/adb.xml b/app/src/main/res/layout/adb.xml
index 6fbbfb4b0db2d2d61ea9f29d3a51d0adc5ed1a15..43a947b6c3765ddb25fed48257b36e1033617155 100644
--- a/app/src/main/res/layout/adb.xml
+++ b/app/src/main/res/layout/adb.xml
@@ -5,42 +5,43 @@
     android:orientation="vertical"
     android:paddingTop="15dp">
 
-    <ScrollView
-        android:id="@+id/demoScroller"
+    <LinearLayout
+        android:orientation="vertical"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:padding="10dp">
+        android:layout_height="wrap_content">
 
-        <LinearLayout
-            android:orientation="vertical"
+        <TextView
+            android:id="@+id/demoTitle"
             android:layout_width="match_parent"
-            android:layout_height="wrap_content">
+            android:layout_height="wrap_content"
+            android:textSize="50sp"
+            android:gravity="center"
+            android:textStyle="bold"
 
-            <TextView
-                android:id="@+id/demoTitle"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:textSize="50sp"
-                android:gravity="center"
-                android:textStyle="bold"
+            android:text="@string/hello" />
 
-                android:text="@string/hello" />
+        <TextView
+            android:id="@+id/demoText"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:textSize="20sp"
 
-            <TextView
-                android:id="@+id/demoText"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:textSize="20sp"
+             android:gravity="left" />
 
-                 android:gravity="left" />
+        <ScrollView
+            android:id="@+id/demoScroller"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:padding="10dp">
 
             <LinearLayout android:id="@+id/container"
               android:orientation="vertical"
               android:layout_width="fill_parent"
               android:layout_height="fill_parent">
           </LinearLayout>
-        </LinearLayout>
-    </ScrollView>
+        </ScrollView>
+
+    </LinearLayout>
 
 
 </LinearLayout>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a2690291ce0c02d5867399d4e490c96fe199bc85..7f609a6f5e25ccfa6d8884763273d89e83a4ba1b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -113,4 +113,6 @@
     <string name="permission_rationale">"Contacts permissions are needed for providing email
         completions."
     </string>
+    <string name="preference_nightscout_url">Nightscout URL</string>
+    <string name="preference_api_secret">API SECRET</string>
 </resources>
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 360bd0a66baad239a50c755fe12bb9f229add661..5117963ca0ab87de86467d211309dbc14bbb6a05 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -30,12 +30,20 @@
     </info.nightscout.android.utils.CustomSwitchPreference>
     <EditTextPreference
             android:dependency="EnableRESTUpload"
-            android:title="API Base URL"
-            android:key="API Base URL"
-            android:dialogTitle="Enter Base API URL"
-            android:defaultValue="{YOURAPISECRET}@https://{YOUR.NIGHTSCOUT.SITE}/api/v1/"
-            android:dialogMessage="This only the base URL, the uploader will automatically append /entries for the POST of CGM data and /gdentries for the POST of glucometer data values">
+            android:title="Nightscout URL"
+            android:key="@string/preference_nightscout_url"
+            android:dialogTitle="Enter Nightscout URL"
+            android:defaultValue="https://YOUR.NIGHTSCOUT.SITE"
+            android:dialogMessage="The hostname of your Nightscout site">
     </EditTextPreference>
+	<EditTextPreference
+		android:dependency="EnableRESTUpload"
+		android:title="API Secret"
+		android:key="@string/preference_api_secret"
+		android:dialogTitle="Enter your Nightscout API secret"
+		android:defaultValue="YOURAPISECRET"
+		android:dialogMessage="Your Nightscout API secret">
+	</EditTextPreference>
     <info.nightscout.android.utils.CustomSwitchPreference
             android:title="Wifi Hack"
             android:key="EnableWifiHack"