diff --git a/app/build.gradle b/app/build.gradle
index 9e758c65829d8146f4c010207d6503460287bed2..1190ef781187836e07c8c3182661b68666f2043d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -155,10 +155,11 @@ dependencies {
     compile 'com.mikepenz:google-material-typeface:2.2.0.1.original@aar'
     compile 'uk.co.chrisjenx:calligraphy:2.2.0'
     compile 'com.bugfender.sdk:android:0.6.2'
-    compile 'com.github.PhilJay:MPAndroidChart:v3.0.0-beta1'
-    compile 'com.github.PhilJay:MPAndroidChart-Realm:v1.1.0@aar'
+    compile 'com.github.PhilJay:MPAndroidChart-Realm:v2.0.2@aar'
+    compile 'com.github.PhilJay:MPAndroidChart:v3.0.1'
     compile 'com.android.support:support-v4:23.4.0'
     compile 'com.google.code.gson:gson:2.7'
     compile 'com.squareup.retrofit2:retrofit:2.1.0'
     compile 'com.squareup.retrofit2:converter-gson:2.1.0'
+    compile 'com.google.android.gms:play-services-appindexing:8.4.0'
 }
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4f075c37ba2f7387d322e3ed95c22c04eb2b6368..17456ec980eb0686f523c15b44c12a3d4973e906 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -80,7 +80,11 @@
 
         <receiver android:name=".medtronic.service.MedtronicCnlAlarmReceiver" />
         <receiver android:name=".upload.nightscout.NightscoutUploadReceiver" />
-        <receiver android:name=".xdrip_plus.XDripPlusUploadReceiver" />
+        <receiver android:name=".xdrip_plus.XDripPlusUploadReceiver" /><!-- ATTENTION: This was auto-generated to add Google Play services to your project for
+     App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information. -->
+        <meta-data
+            android:name="com.google.android.gms.version"
+            android:value="@integer/google_play_services_version" />
 
     </application>
 
diff --git a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java
index c7eae6e812f07531849b4842a71feb4bcac4cf20..21d22f36feaed777184809f957423c51459524f7 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java
@@ -6,11 +6,11 @@ import android.app.PendingIntent;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.SharedPreferences;
 import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.graphics.Color;
 import android.hardware.usb.UsbDevice;
 import android.hardware.usb.UsbManager;
 import android.net.Uri;
@@ -23,7 +23,6 @@ import android.preference.PreferenceManager;
 import android.provider.Settings;
 import android.support.v4.app.TaskStackBuilder;
 import android.support.v4.content.LocalBroadcastManager;
-import android.support.v7.app.AlertDialog;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.app.NotificationCompat;
 import android.support.v7.view.menu.ActionMenuItemView;
@@ -39,10 +38,23 @@ import android.widget.TextView;
 import android.widget.TextView.BufferType;
 
 import com.github.mikephil.charting.charts.LineChart;
+import com.github.mikephil.charting.components.AxisBase;
+import com.github.mikephil.charting.components.Description;
+import com.github.mikephil.charting.components.XAxis;
+import com.github.mikephil.charting.components.YAxis;
+import com.github.mikephil.charting.data.Entry;
 import com.github.mikephil.charting.data.LineData;
 import com.github.mikephil.charting.data.realm.implementation.RealmLineDataSet;
+import com.github.mikephil.charting.formatter.DefaultAxisValueFormatter;
+import com.github.mikephil.charting.formatter.IAxisValueFormatter;
+import com.github.mikephil.charting.formatter.IValueFormatter;
 import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
 import com.github.mikephil.charting.utils.ColorTemplate;
+import com.github.mikephil.charting.utils.ViewPortHandler;
+import com.google.android.gms.appindexing.Action;
+import com.google.android.gms.appindexing.AppIndex;
+import com.google.android.gms.appindexing.Thing;
+import com.google.android.gms.common.api.GoogleApiClient;
 import com.mikepenz.google_material_typeface_library.GoogleMaterial;
 import com.mikepenz.materialdrawer.AccountHeaderBuilder;
 import com.mikepenz.materialdrawer.Drawer;
@@ -52,6 +64,7 @@ import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
 
 import java.text.DateFormat;
 import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Locale;
@@ -64,11 +77,11 @@ import info.nightscout.android.eula.Eula;
 import info.nightscout.android.eula.Eula.OnEulaAgreedTo;
 import info.nightscout.android.medtronic.service.MedtronicCnlAlarmReceiver;
 import info.nightscout.android.medtronic.service.MedtronicCnlIntentService;
-import info.nightscout.android.model.medtronicNg.ContourNextLinkInfo;
 import info.nightscout.android.model.medtronicNg.PumpInfo;
 import info.nightscout.android.model.medtronicNg.PumpStatusEvent;
 import info.nightscout.android.settings.SettingsActivity;
 import info.nightscout.android.upload.nightscout.NightscoutUploadIntentService;
+import io.realm.DynamicRealmObject;
 import io.realm.Realm;
 import io.realm.RealmResults;
 import io.realm.Sort;
@@ -240,6 +253,34 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
 
         mTextViewLog = (TextView) findViewById(R.id.textview_log);
         mChart = (LineChart) findViewById(R.id.chart);
+
+        mChart.setDescription(null);    // Hide the description
+
+        XAxis xAxis = mChart.getXAxis();
+        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
+        xAxis.setTextSize(10f);
+        xAxis.setTextColor(Color.WHITE);
+        xAxis.setDrawAxisLine(true);
+        xAxis.setDrawGridLines(true);
+        xAxis.setDrawLabels(true);
+        xAxis.setValueFormatter(new IAxisValueFormatter() {
+            private DateFormat mFormat = DateFormat.getTimeInstance(DateFormat.SHORT);
+
+            @Override
+            public String getFormattedValue(float value, AxisBase axis) {
+                return mFormat.format(new Date((long) value));
+            }
+        });
+
+        // left axis
+        mChart.getAxisLeft().setDrawLabels(false);
+
+        // right axis
+        YAxis yAxis = mChart.getAxisRight();
+        yAxis.setTextSize(10f);
+        yAxis.setTextColor(Color.WHITE);
+
+        mChart.getLegend().setEnabled(false);   // Hide the legend
     }
 
     @Override
@@ -409,7 +450,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
                     Long.toString(MedtronicCnlIntentService.POLL_PERIOD_MS)));
         } else if (key.equals("lowBatPollInterval")) {
             MainActivity.lowBatteryPollInterval = Long.parseLong(sharedPreferences.getString("lowBatPollInterval",
-                    Long.toString( MedtronicCnlIntentService.LOW_BATTERY_POLL_PERIOD_MS)));
+                    Long.toString(MedtronicCnlIntentService.LOW_BATTERY_POLL_PERIOD_MS)));
         }
     }
 
@@ -471,6 +512,23 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
         return mActivePump;
     }
 
+    /**
+     * ATTENTION: This was auto-generated to implement the App Indexing API.
+     * See https://g.co/AppIndexing/AndroidStudio for more information.
+     */
+    public Action getIndexApiAction() {
+        Thing object = new Thing.Builder()
+                .setName("Main Page") // TODO: Define a title for the content shown.
+                // TODO: Make sure this auto-generated URL is correct.
+                .setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]"))
+                .build();
+        return new Action.Builder(Action.TYPE_VIEW)
+                .setObject(object)
+                .setActionStatus(Action.STATUS_TYPE_COMPLETED)
+                .build();
+    }
+
+
     private class StatusMessageReceiver extends BroadcastReceiver {
         private class StatusMessage {
             private long timestamp;
@@ -566,20 +624,23 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
             // FIXME - grab the last item from the activePump's getPumpHistory
             RealmResults<PumpStatusEvent> results =
                     mRealm.where(PumpStatusEvent.class)
+                            .greaterThan("eventDate", new Date(System.currentTimeMillis() - 1000*60*60*24))
                             .findAllSorted("eventDate", Sort.ASCENDING);
 
+            updateChart(results);
+
             if (pumpStatusData == null) {
                 return;
             }
 
-            DecimalFormat df;
-            if (prefs.getBoolean("mmolDecimals", false))
-                df = new DecimalFormat("0.00");
-            else
-                df = new DecimalFormat("0.0");
-
             String sgvString, units;
             if (prefs.getBoolean("mmolxl", false)) {
+                DecimalFormat df;
+                if (prefs.getBoolean("mmolDecimals", false))
+                    df = new DecimalFormat("0.00");
+                else
+                    df = new DecimalFormat("0.0");
+
                 float fBgValue = (float) pumpStatusData.getSgv();
                 sgvString = df.format(fBgValue / 18.016f);
                 units = "mmol/L";
@@ -598,50 +659,66 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
             textViewIOB.setText(String.format(Locale.getDefault(), "%.2f", pumpStatusData.getActiveInsulin()));
 
             ActionMenuItemView batIcon = ((ActionMenuItemView) findViewById(R.id.status_battery));
-
-            switch (pumpStatusData.getBatteryPercentage()) {
-                case 0:
-                    batIcon.setTitle("0%");
-                    batIcon.setIcon(getResources().getDrawable(R.drawable.battery_0));
-                    break;
-                case 25:
-                    batIcon.setTitle("25%");
-                    batIcon.setIcon(getResources().getDrawable(R.drawable.battery_25));
-                    break;
-                case 50:
-                    batIcon.setTitle("50%");
-                    batIcon.setIcon(getResources().getDrawable(R.drawable.battery_50));
-                    break;
-                case 75:
-                    batIcon.setTitle("75%");
-                    batIcon.setIcon(getResources().getDrawable(R.drawable.battery_75));
-                    break;
-                case 100:
-                    batIcon.setTitle("100%");
-                    batIcon.setIcon(getResources().getDrawable(R.drawable.battery_100));
-                    break;
-                default:
-                    batIcon.setTitle(getResources().getString(R.string.menu_name_status));
-                    batIcon.setIcon(getResources().getDrawable(R.drawable.battery_unknown));
+            if (batIcon != null) {
+                switch (pumpStatusData.getBatteryPercentage()) {
+                    case 0:
+                        batIcon.setTitle("0%");
+                        batIcon.setIcon(getResources().getDrawable(R.drawable.battery_0));
+                        break;
+                    case 25:
+                        batIcon.setTitle("25%");
+                        batIcon.setIcon(getResources().getDrawable(R.drawable.battery_25));
+                        break;
+                    case 50:
+                        batIcon.setTitle("50%");
+                        batIcon.setIcon(getResources().getDrawable(R.drawable.battery_50));
+                        break;
+                    case 75:
+                        batIcon.setTitle("75%");
+                        batIcon.setIcon(getResources().getDrawable(R.drawable.battery_75));
+                        break;
+                    case 100:
+                        batIcon.setTitle("100%");
+                        batIcon.setIcon(getResources().getDrawable(R.drawable.battery_100));
+                        break;
+                    default:
+                        batIcon.setTitle(getResources().getString(R.string.menu_name_status));
+                        batIcon.setIcon(getResources().getDrawable(R.drawable.battery_unknown));
+                }
             }
 
-            // TODO - waiting for MPAndroidCharts 3.0.0. This will fix:
-            // Date support
-            // Realm v1.0.0 support
-            //updateChart(results);
 
             // Run myself again in 60 seconds;
             mUiRefreshHandler.postDelayed(this, 60000L);
         }
 
         private void updateChart(RealmResults<PumpStatusEvent> results) {
-            RealmLineDataSet<PumpStatusEvent> lineDataSet = new RealmLineDataSet<>(results, "eventDate", "sgv");
+            if (results.size() == 0) return;
+            PumsStatusLineDataSet lineDataSet = new PumsStatusLineDataSet(results, "eventDate", "sgv");
 
             lineDataSet.setDrawCircleHole(false);
             lineDataSet.setColor(ColorTemplate.rgb("#FF5722"));
             lineDataSet.setCircleColor(ColorTemplate.rgb("#FF5722"));
             lineDataSet.setLineWidth(1.8f);
-            lineDataSet.setCircleSize(3.6f);
+            lineDataSet.setCircleRadius(3.6f);
+            lineDataSet.setValueTextColor(Color.WHITE);
+            lineDataSet.setValueFormatter(new IValueFormatter() {
+                @Override
+                public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
+                    DecimalFormat df;
+
+                    if (prefs.getBoolean("mmolxl", false)) {
+                        if (prefs.getBoolean("mmolDecimals", false))
+                            df = new DecimalFormat("0.00");
+                        else
+                            df = new DecimalFormat("0.0");
+
+                        return df.format(value / 18.016f);
+                    } else {
+                        return new DecimalFormat("0").format(value);
+                    }
+                }
+            });
 
             ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
             dataSets.add(lineDataSet);
@@ -651,6 +728,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
             // set data
             mChart.setMinimumHeight(200);
             mChart.setData(lineData);
+            mChart.getXAxis().setAxisMaximum(System.currentTimeMillis());
         }
     }
 
@@ -762,4 +840,32 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc
             }
         }
     }
+
+    private class PumsStatusLineDataSet extends RealmLineDataSet<PumpStatusEvent> {
+
+        public PumsStatusLineDataSet(RealmResults<PumpStatusEvent> result, String yValuesField) {
+            super(result, yValuesField);
+        }
+
+        public PumsStatusLineDataSet(RealmResults<PumpStatusEvent> result, String xValuesField, String yValuesField) {
+            super(result, xValuesField, yValuesField);
+        }
+
+        public Entry buildEntryFromResultObject(PumpStatusEvent realmObject, float x) {
+            DynamicRealmObject dynamicObject = new DynamicRealmObject(realmObject);
+            float xFloat, yFloat;
+
+            if (mXValuesField == null) {
+                xFloat = x;
+            } else {
+                xFloat = dynamicObject.getDate(mXValuesField).getTime();
+            }
+            yFloat = dynamicObject.getInt(mYValuesField);
+
+            return new Entry(mXValuesField == null ? x : xFloat, yFloat);
+        }
+
+    }
+
+
 }
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index af14d6804fd460697687fa207ac50f610a4bf518..b4286d36062032a97b2ba2059e0dd507e71f98ee 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -123,7 +123,7 @@
         android:id="@+id/chart"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:visibility="invisible" />
+        android:visibility="visible" />
 
     <ScrollView
         android:id="@+id/scrollView"