diff --git a/src/com/android/providers/downloads/DownloadInfo.java b/src/com/android/providers/downloads/DownloadInfo.java
index 36816b5..7b29168 100644
--- a/src/com/android/providers/downloads/DownloadInfo.java
+++ b/src/com/android/providers/downloads/DownloadInfo.java
@@ -73,7 +73,6 @@
             info.mNumFailed = getInt(Constants.FAILED_CONNECTIONS);
             int retryRedirect = getInt(Constants.RETRY_AFTER_X_REDIRECT_COUNT);
             info.mRetryAfter = retryRedirect & 0xfffffff;
-            info.mRedirectCount = retryRedirect >> 28;
             info.mLastMod = getLong(Downloads.Impl.COLUMN_LAST_MODIFICATION);
             info.mPackage = getString(info.mPackage, Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE);
             info.mClass = getString(info.mClass, Downloads.Impl.COLUMN_NOTIFICATION_CLASS);
@@ -223,7 +222,6 @@
     public int mStatus;
     public int mNumFailed;
     public int mRetryAfter;
-    public int mRedirectCount;
     public long mLastMod;
     public String mPackage;
     public String mClass;
@@ -506,7 +504,6 @@
         Log.v(Constants.TAG, "STATUS  : " + mStatus);
         Log.v(Constants.TAG, "FAILED_C: " + mNumFailed);
         Log.v(Constants.TAG, "RETRY_AF: " + mRetryAfter);
-        Log.v(Constants.TAG, "REDIRECT: " + mRedirectCount);
         Log.v(Constants.TAG, "LAST_MOD: " + mLastMod);
         Log.v(Constants.TAG, "PACKAGE : " + mPackage);
         Log.v(Constants.TAG, "CLASS   : " + mClass);
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java
index 7c10248..461d8ce 100644
--- a/src/com/android/providers/downloads/DownloadThread.java
+++ b/src/com/android/providers/downloads/DownloadThread.java
@@ -88,7 +88,6 @@
 
         public State(DownloadInfo info) {
             mMimeType = sanitizeMimeType(info.mMimeType);
-            mRedirectCount = info.mRedirectCount;
             mRequestUri = info.mUri;
             mFilename = info.mFileName;
         }
@@ -200,7 +199,7 @@
             }
             cleanupDestination(state, finalStatus);
             notifyDownloadCompleted(finalStatus, state.mCountRetry, state.mRetryAfter,
-                                    state.mRedirectCount, state.mGotData, state.mFilename,
+                                    state.mGotData, state.mFilename,
                                     state.mNewUri, state.mMimeType);
             mInfo.mHasActiveThread = false;
         }
@@ -854,17 +853,17 @@
      * Stores information about the completed download, and notifies the initiating application.
      */
     private void notifyDownloadCompleted(
-            int status, boolean countRetry, int retryAfter, int redirectCount, boolean gotData,
+            int status, boolean countRetry, int retryAfter, boolean gotData,
             String filename, String uri, String mimeType) {
         notifyThroughDatabase(
-                status, countRetry, retryAfter, redirectCount, gotData, filename, uri, mimeType);
+                status, countRetry, retryAfter, gotData, filename, uri, mimeType);
         if (Downloads.Impl.isStatusCompleted(status)) {
             mInfo.sendIntentIfRequested();
         }
     }
 
     private void notifyThroughDatabase(
-            int status, boolean countRetry, int retryAfter, int redirectCount, boolean gotData,
+            int status, boolean countRetry, int retryAfter, boolean gotData,
             String filename, String uri, String mimeType) {
         ContentValues values = new ContentValues();
         values.put(Downloads.Impl.COLUMN_STATUS, status);
@@ -874,7 +873,7 @@
         }
         values.put(Downloads.Impl.COLUMN_MIME_TYPE, mimeType);
         values.put(Downloads.Impl.COLUMN_LAST_MODIFICATION, mSystemFacade.currentTimeMillis());
-        values.put(Constants.RETRY_AFTER_X_REDIRECT_COUNT, retryAfter + (redirectCount << 28));
+        values.put(Constants.RETRY_AFTER_X_REDIRECT_COUNT, retryAfter);
         if (!countRetry) {
             values.put(Constants.FAILED_CONNECTIONS, 0);
         } else if (gotData) {
