diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index bed3be5..4edda7d 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -745,9 +745,13 @@
 
         long start = currentTime;
         long end = currentTime;
-        if (history.bucketCount > 0) {
-            start = history.bucketStart[0];
-            end = history.bucketStart[history.bucketCount - 1];
+
+        NetworkStatsHistory.Entry entry = null;
+        if (history.size() > 0) {
+            entry = history.getValues(0, entry);
+            start = entry.bucketStart;
+            entry = history.getValues(history.size() - 1, entry);
+            end = entry.bucketStart + entry.bucketDuration;
         }
 
         return new long[] { start, end };
@@ -1081,11 +1085,12 @@
             mItems.clear();
 
             if (stats != null) {
-                for (int i = 0; i < stats.size; i++) {
-                    final long total = stats.rx[i] + stats.tx[i];
+                NetworkStats.Entry entry = null;
+                for (int i = 0; i < stats.size(); i++) {
+                    entry = stats.getValues(i, entry);
                     final AppUsageItem item = new AppUsageItem();
-                    item.uid = stats.uid[i];
-                    item.total = total;
+                    item.uid = entry.uid;
+                    item.total = entry.rxBytes + entry.txBytes;
                     mItems.add(item);
                 }
             }
diff --git a/src/com/android/settings/widget/ChartNetworkSeriesView.java b/src/com/android/settings/widget/ChartNetworkSeriesView.java
index 83c10cd..10d8976 100644
--- a/src/com/android/settings/widget/ChartNetworkSeriesView.java
+++ b/src/com/android/settings/widget/ChartNetworkSeriesView.java
@@ -140,7 +140,7 @@
         mPathFill.reset();
 
         // bail when not enough stats to render
-        if (mStats == null || mStats.bucketCount < 2) return;
+        if (mStats == null || mStats.size() < 2) return;
 
         final int width = getWidth();
         final int height = getHeight();
@@ -155,8 +155,11 @@
 
         long totalData = 0;
 
-        for (int i = 0; i < mStats.bucketCount; i++) {
-            final float x = mHoriz.convertToPoint(mStats.bucketStart[i]);
+        NetworkStatsHistory.Entry entry = null;
+        for (int i = 0; i < mStats.size(); i++) {
+            entry = mStats.getValues(i, entry);
+
+            final float x = mHoriz.convertToPoint(entry.bucketStart);
             final float y = mVert.convertToPoint(totalData);
 
             // skip until we find first stats on screen
@@ -170,7 +173,7 @@
             if (started) {
                 mPathStroke.lineTo(x, y);
                 mPathFill.lineTo(x, y);
-                totalData += mStats.rx[i] + mStats.tx[i];
+                totalData += entry.rxBytes + entry.txBytes;
             }
 
             // skip if beyond view
