diff --git a/java/res/layout/dictionary_line.xml b/java/res/layout/dictionary_line.xml
index 9ddbcf7..7a06fb0 100644
--- a/java/res/layout/dictionary_line.xml
+++ b/java/res/layout/dictionary_line.xml
@@ -52,23 +52,27 @@
         android:ellipsize="marquee"
         android:fadingEdge="horizontal" />
 
-    <TextView
-        android:id="@+android:id/summary"
-        android:layout_marginLeft="5dip"
-        android:layout_marginStart="5dip"
+    <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-        android:textColor="?android:attr/textColorSecondary"
-        android:maxLines="1" />
+        android:layout_marginStart="5dip">
 
-    <!-- <ProgressBar -->
-    <!--     android:id="@+id/dictionary_line_progress_bar" -->
-    <!--     style="@android:style/Widget.Holo.ProgressBar.Horizontal" -->
-    <!--     android:layout_width="match_parent" -->
-    <!--     android:layout_height="match_parent" -->
-    <!--     android:gravity="center" /> -->
+      <TextView
+          android:id="@+android:id/summary"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:textAppearance="?android:attr/textAppearanceSmall"
+          android:textColor="?android:attr/textColorSecondary"
+          android:maxLines="1" />
 
+      <ProgressBar
+          android:id="@+id/dictionary_line_progress_bar"
+          style="@android:style/Widget.Holo.ProgressBar.Horizontal"
+          android:layout_width="match_parent"
+          android:layout_height="match_parent"
+          android:gravity="center" />
+
+    </FrameLayout>
   </LinearLayout>
 
   <com.android.inputmethod.dictionarypack.ButtonSwitcher
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java b/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
index aa1e9b9..fb75d6d 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
@@ -285,6 +285,7 @@
             final int localeIndex = cursor.getColumnIndex(MetadataDbHelper.LOCALE_COLUMN);
             final int descriptionIndex = cursor.getColumnIndex(MetadataDbHelper.DESCRIPTION_COLUMN);
             final int statusIndex = cursor.getColumnIndex(MetadataDbHelper.STATUS_COLUMN);
+            final int filesizeIndex = cursor.getColumnIndex(MetadataDbHelper.FILESIZE_COLUMN);
             do {
                 final String wordlistId = cursor.getString(idIndex);
                 final int version = cursor.getInt(versionIndex);
@@ -294,6 +295,7 @@
                 final int status = cursor.getInt(statusIndex);
                 final int matchLevel = LocaleUtils.getMatchLevel(systemLocaleString, localeString);
                 final String matchLevelString = LocaleUtils.getMatchLevelSortedString(matchLevel);
+                final int filesize = cursor.getInt(filesizeIndex);
                 // The key is sorted in lexicographic order, according to the match level, then
                 // the description.
                 final String key = matchLevelString + "." + description + "." + wordlistId;
@@ -301,7 +303,7 @@
                 if (null == existingPref || hasPriority(status, existingPref.mStatus)) {
                     final WordListPreference pref = new WordListPreference(activity,
                             mDictionaryListInterfaceState, mClientId, wordlistId, version, locale,
-                            description, status);
+                            description, status, filesize);
                     prefList.put(key, pref);
                 }
             } while (cursor.moveToNext());
diff --git a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
index e14055b..1340a41 100644
--- a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
+++ b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
@@ -24,6 +24,8 @@
 import android.view.ViewGroup;
 import android.view.ViewParent;
 import android.widget.ListView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
 
 import com.android.inputmethod.latin.R;
 
@@ -59,6 +61,8 @@
     public final int mVersion;
     // The status
     public int mStatus;
+    // The size of the dictionary file
+    private final int mFilesize;
 
     private final DictionaryListInterfaceState mInterfaceState;
     private final OnWordListPreferenceClick mPreferenceClickHandler =
@@ -69,13 +73,14 @@
     public WordListPreference(final Context context,
             final DictionaryListInterfaceState dictionaryListInterfaceState, final String clientId,
             final String wordlistId, final int version, final Locale locale,
-            final String description, final int status) {
+            final String description, final int status, final int filesize) {
         super(context, null);
         mContext = context;
         mInterfaceState = dictionaryListInterfaceState;
         mClientId = clientId;
         mVersion = version;
         mWordlistId = wordlistId;
+        mFilesize = filesize;
 
         setLayoutResource(R.layout.dictionary_line);
 
@@ -189,6 +194,15 @@
     protected void onBindView(final View view) {
         super.onBindView(view);
         ((ViewGroup)view).setLayoutTransition(null);
+
+        final ProgressBar progressBar =
+                (ProgressBar)view.findViewById(R.id.dictionary_line_progress_bar);
+        final TextView status = (TextView)view.findViewById(android.R.id.summary);
+        progressBar.setMax(mFilesize);
+        final boolean showProgressBar = (MetadataDbHelper.STATUS_DOWNLOADING == mStatus);
+        status.setVisibility(showProgressBar ? View.INVISIBLE : View.VISIBLE);
+        progressBar.setVisibility(showProgressBar ? View.VISIBLE : View.INVISIBLE);
+
         final ButtonSwitcher buttonSwitcher =
                 (ButtonSwitcher)view.findViewById(R.id.wordlist_button_switcher);
         if (mInterfaceState.isOpen(mWordlistId)) {
