diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestContentAssist.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestContentAssist.java
index 1c92309..64b22a2 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestContentAssist.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/manifest/ManifestContentAssist.java
@@ -16,9 +16,23 @@
 
 package com.android.ide.eclipse.adt.internal.editors.manifest;
 
+import static com.android.sdklib.xml.AndroidManifest.ATTRIBUTE_MIN_SDK_VERSION;
+
 import com.android.annotations.VisibleForTesting;
 import com.android.ide.eclipse.adt.internal.editors.AndroidContentAssist;
 import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData;
+import com.android.ide.eclipse.adt.internal.sdk.Sdk;
+import com.android.sdklib.AndroidVersion;
+import com.android.sdklib.IAndroidTarget;
+import com.android.util.Pair;
+
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.w3c.dom.Node;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * Content Assist Processor for AndroidManifest.xml
@@ -32,4 +46,54 @@
     public ManifestContentAssist() {
         super(AndroidTargetData.DESCRIPTOR_MANIFEST);
     }
+
+    @Override
+    protected void computeAttributeValues(List<ICompletionProposal> proposals, int offset,
+            String parentTagName, String attributeName, Node node, String wordPrefix,
+            boolean skipEndTag, int replaceLength) {
+        if (attributeName.endsWith(':' + ATTRIBUTE_MIN_SDK_VERSION)) {
+            // The user is completing the minSdkVersion attribute: it should be
+            // an integer for the API version, but we'll add full Android version
+            // names to make it more obvious what they're selecting
+
+            List<Pair<String, String>> choices = new ArrayList<Pair<String, String>>();
+            // Max: Look up what versions I have
+            IAndroidTarget[] targets = Sdk.getCurrent().getTargets();
+            Map<String, IAndroidTarget> versionMap = new HashMap<String, IAndroidTarget>();
+            List<String> codeNames = new ArrayList<String>();
+            int maxVersion = 1;
+            for (IAndroidTarget target : targets) {
+                AndroidVersion version = target.getVersion();
+                int apiLevel = version.getApiLevel();
+                String key;
+                if (version.isPreview()) {
+                    key = version.getCodename();
+                    codeNames.add(key);
+                    apiLevel--;
+                } else {
+                    key = Integer.toString(apiLevel);
+                }
+                if (apiLevel > maxVersion) {
+                    maxVersion = apiLevel;
+                }
+
+                versionMap.put(key, target);
+            }
+            for (String codeName : codeNames) {
+                choices.add(Pair.<String, String>of(codeName, null));
+            }
+            for (int i = maxVersion; i >= 1; i--) {
+                IAndroidTarget target = versionMap.get(Integer.toString(i));
+                String version = target != null ? target.getFullName() : null;
+                choices.add(Pair.of(Integer.toString(i), version));
+            }
+            char needTag = 0;
+            addMatchingProposals(proposals, choices.toArray(), offset, node, wordPrefix,
+                    needTag, true /* isAttribute */, false /* isNew */,
+                    skipEndTag /* skipEndTag */, replaceLength);
+        } else {
+            super.computeAttributeValues(proposals, offset, parentTagName, attributeName, node,
+                    wordPrefix, skipEndTag, replaceLength);
+        }
+    }
 }
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidContentAssistTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidContentAssistTest.java
index 8590b89..1b3cb3e 100644
--- a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidContentAssistTest.java
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/AndroidContentAssistTest.java
@@ -461,6 +461,11 @@
         checkResourceCompletion("completionvalues1.xml", "[^false]");
     }
 
+    public void testCompletion69() throws Exception {
+        // Test minimum SDK completion
+        checkManifestCompletion("manifest.xml", "<uses-sdk android:minSdkVersion=\"^11\" />");
+    }
+
     // ---- Test *applying* code completion ----
 
 
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/testdata/manifest-expected-completion69.txt b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/testdata/manifest-expected-completion69.txt
new file mode 100644
index 0000000..382011e
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/testdata/manifest-expected-completion69.txt
@@ -0,0 +1,26 @@
+Code completion in manifest.xml for <uses-sdk android:minSdkVersion="^11" />:
+AOSP
+14 : Android 4.0.1
+13 : Android 3.2
+12 : Android 3.1
+11 : Android 3.0
+10
+9 : Android 2.3
+8 : Android 2.2
+7
+6
+5 : Android 2.0
+4 : Android 1.6
+3 : Android 1.5
+2 : Android 1.1
+1
+@string/
+@android:
+@+id/
+@anim/
+@animator/
+@color/
+@drawable/
+@id/
+@layout/
+@style/
