diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4bc4129..0343a15 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -695,11 +695,11 @@
     <!-- Fingerprint managment category title - configuration options for managing enrolled fingerprints [CHAR LIMIT=22] -->
     <string name="fingerprint_manage_category_title">Manage fingerprints</string>
     <!-- Fingerprint category title - configuration options for managing fingerprint enrollment [CHAR LIMIT=22] -->
-	<string name="fingerprint_usage_category_title">Use fingerprint for</string>
-	<!-- Preference to add another fingerprint -->
-	<string name="fingerprint_add_title">Add fingerprint</string>
-	<!-- switch for allowing fingerprint to be used for keyguard -->
-	<string name="fingerprint_enable_keyguard_toggle_title">screen lock</string>
+    <string name="fingerprint_usage_category_title">Use fingerprint for</string>
+    <!-- Preference to add another fingerprint -->
+    <string name="fingerprint_add_title">Add fingerprint</string>
+    <!-- switch for allowing fingerprint to be used for keyguard -->
+    <string name="fingerprint_enable_keyguard_toggle_title">screen lock</string>
     <!-- message shown for menu item that launches fingerprint settings or enrollment -->
     <plurals name="security_settings_fingerprint_preference_summary">
         <item quantity="one"><xliff:g id="count">%1$d</xliff:g> fingerprint set up</item>
@@ -772,6 +772,9 @@
     <!-- Text shown in fingerprint enroll when we didn't observe progress for a few seconds. [CHAR LIMIT=100] -->
     <string name="security_settings_fingerprint_enroll_lift_touch_again">Lift finger, then touch sensor again</string>
 
+    <!-- Text shown when "Add fingerprint" button is disabled -->
+    <string name="fingerprint_add_max">You can add up to <xliff:g id="count" example="5">%d</xliff:g> fingerprints</string>
+
     <!-- Title of the preferences category for preference items to control encryption -->
     <string name="crypt_keeper_settings_title">Encryption</string>
 
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
index b87e029..d45f3c2 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollFinish.java
@@ -16,10 +16,18 @@
 
 package com.android.settings.fingerprint;
 
+import android.content.Context;
+import android.hardware.fingerprint.Fingerprint;
+import android.hardware.fingerprint.FingerprintManager;
 import android.os.Bundle;
+import android.preference.Preference;
 import android.view.View;
+import android.widget.Button;
 
 import com.android.settings.R;
+import com.android.settings.fingerprint.FingerprintSettings.FingerprintPreference;
+
+import java.util.List;
 
 /**
  * Activity which concludes fingerprint enrollment.
@@ -31,7 +39,18 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.fingerprint_enroll_finish);
         setHeaderText(R.string.security_settings_fingerprint_enroll_finish_title);
-        findViewById(R.id.add_another_button).setOnClickListener(this);
+        Button addButton = (Button) findViewById(R.id.add_another_button);
+
+        FingerprintManager fpm = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
+        int enrolled = fpm.getEnrolledFingerprints().size();
+        int max = getResources().getInteger(
+                com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
+        if (enrolled >= max) {
+            /* Don't show "Add" button if too many fingerprints already added */
+            addButton.setVisibility(View.INVISIBLE);
+        } else {
+            addButton.setOnClickListener(this);
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/fingerprint/FingerprintSettings.java b/src/com/android/settings/fingerprint/FingerprintSettings.java
index 5cbab66..fce46fa 100644
--- a/src/com/android/settings/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/fingerprint/FingerprintSettings.java
@@ -179,6 +179,7 @@
                 switch (msg.what) {
                     case MSG_REFRESH_FINGERPRINT_TEMPLATES:
                         removeFingerprintPreference(msg.arg1);
+                        updateAddPreference();
                     break;
                     case MSG_FINGER_AUTH_SUCCESS:
                         mFingerprintCancel = null;
@@ -330,6 +331,19 @@
             addPreference.setIcon(R.drawable.ic_add_24dp);
             root.addPreference(addPreference);
             addPreference.setOnPreferenceChangeListener(this);
+            updateAddPreference();
+        }
+
+        private void updateAddPreference() {
+            /* Disable preference if too many fingerprints added */
+            final int max = getContext().getResources().getInteger(
+                    com.android.internal.R.integer.config_fingerprintMaxTemplatesPerUser);
+            boolean tooMany = mFingerprintManager.getEnrolledFingerprints().size() >= max;
+            CharSequence maxSummary = tooMany ?
+                    getContext().getString(R.string.fingerprint_add_max, max) : "";
+            Preference addPreference = findPreference(KEY_FINGERPRINT_ADD);
+            addPreference.setSummary(maxSummary);
+            addPreference.setEnabled(!tooMany);
         }
 
         private static String genKey(int id) {
