diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java
index 6450c27..f703fcd 100755
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/sdkman2/PackagesPage.java
@@ -280,8 +280,8 @@
         });
 
         mButtonInstall = new Button(mGroupOptions, SWT.NONE);
-        mButtonInstall.setText("Install Selected...");
-        mButtonInstall.setToolTipText("Install all the selected packages");
+        mButtonInstall.setText("");  //$NON-NLS-1$  placeholder, filled in updateButtonsState()
+        mButtonInstall.setToolTipText("Install one or more packages");
         GridDataBuilder.create(mButtonInstall).hFill().vCenter().hGrab();
         mButtonInstall.addSelectionListener(new SelectionAdapter() {
             @Override
@@ -339,8 +339,8 @@
         });
 
         mButtonDelete = new Button(mGroupOptions, SWT.NONE);
-        mButtonDelete.setText("Delete...");
-        mButtonDelete.setToolTipText("Delete an installed package");
+        mButtonDelete.setText("");  //$NON-NLS-1$  placeholder, filled in updateButtonsState()
+        mButtonDelete.setToolTipText("Delete one ore more installed packages");
         GridDataBuilder.create(mButtonDelete).hFill().vCenter().hGrab();
         mButtonDelete.addSelectionListener(new SelectionAdapter() {
             @Override
@@ -888,6 +888,7 @@
         }
 
         boolean canInstall = false;
+        int numPackages = 0;
 
         if (mDisplayArchives) {
             // In detail mode, we display archives so we can install if at
@@ -899,7 +900,7 @@
                     if (c instanceof Archive) {
                         if (((Archive) c).isCompatible()) {
                             canInstall = true;
-                            break;
+                            numPackages++;
                         }
                     }
                 }
@@ -916,12 +917,12 @@
                         // This is an update package
                         if (((Package) c).hasCompatibleArchive()) {
                             canInstall = true;
-                            break;
+                            numPackages++;
                         }
                     } else if (c instanceof PkgItem) {
                         if (((PkgItem) c).getMainPackage().hasCompatibleArchive()) {
                             canInstall = true;
-                            break;
+                            numPackages++;
                         }
                     }
                 }
@@ -929,9 +930,15 @@
         }
 
         mButtonInstall.setEnabled(canInstall);
+        mButtonInstall.setText(
+                numPackages == 0 ? "Install packages..." :
+                    numPackages == 1 ? "Install 1 package..." :
+                        String.format("Install %d packages...", numPackages));
 
         // We can only delete local archives
         boolean canDelete = false;
+        numPackages = 0;
+
         Object[] checked = mTreeViewer.getCheckedElements();
         if (checked != null) {
             for (Object c : checked) {
@@ -939,13 +946,17 @@
                     PkgState state = ((PkgItem) c).getState();
                     if (state == PkgState.INSTALLED) {
                         canDelete = true;
-                        break;
+                        numPackages++;
                     }
                 }
             }
         }
 
         mButtonDelete.setEnabled(canDelete);
+        mButtonDelete.setText(
+                numPackages == 0 ? "Delete packages..." :
+                    numPackages == 1 ? "Delete 1 package..." :
+                        String.format("Delete %d packages...", numPackages));
     }
 
     private void onButtonInstall() {
