diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
index 3c7b8c6..b28019f 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/AddonPackage.java
@@ -196,9 +196,9 @@
     /** Returns a long description for an {@link IDescription}. */
     @Override
     public String getLongDescription() {
-        return String.format("%1$s.\n%2$s",
+        return String.format("%1$s,\nRevision %2$d.",
                 getShortDescription(),
-                super.getLongDescription());
+                getRevision());
     }
 
     /**
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java
index 3bd731b..75879b8 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/DocPackage.java
@@ -113,9 +113,9 @@
     /** Returns a long description for an {@link IDescription}. */
     @Override
     public String getLongDescription() {
-        return String.format("%1$s.\n%2$s",
+        return String.format("%1$s,\nRevision %2$d.",
                 getShortDescription(),
-                super.getLongDescription());
+                getRevision());
     }
 
     /**
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java
index f11523d..74e1c59 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ExtraPackage.java
@@ -192,8 +192,7 @@
             s += String.format(" (min tools rev.: %1$d)", mMinToolsRevision);
         }
 
-        s += ".\n";
-        s += super.getLongDescription();
+        s += ".";
 
         return s;
     }
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
index ca78b0b..23ec892 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/LocalSdkParser.java
@@ -44,7 +44,11 @@
     }
 
     /**
-     * Returns the packages found by the last call to {@link #parseSdk(String, SdkManager, ISdkLog)}.
+     * Returns the packages found by the last call to
+     * {@link #parseSdk(String, SdkManager, ISdkLog)}.
+     * <p/>
+     * This returns initially returns null.
+     * Once the parseSdk() method has been called, this returns a possibly empty but non-null array.
      */
     public Package[] getPackages() {
         return mPackages;
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java
index 5afe73c..69d526b 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Package.java
@@ -336,8 +336,11 @@
         if (s != null) {
             sb.append(s);
         }
+        if (sb.length() > 0) {
+            sb.append("\n");
+        }
 
-        sb.append(String.format("\nRevision %1$d", getRevision()));
+        sb.append(String.format("Revision %1$d", getRevision()));
 
         s = getDescUrl();
         if (s != null && s.length() > 0) {
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
index 1c5790d..e95656a 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/PlatformPackage.java
@@ -160,9 +160,7 @@
     /** Returns a long description for an {@link IDescription}. */
     @Override
     public String getLongDescription() {
-        return String.format("%1$s.\n%2$s",
-                getShortDescription(),
-                super.getLongDescription());
+        return getShortDescription() + ".";
     }
 
     /**
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java
index bb17874..ee13379 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/ToolPackage.java
@@ -76,9 +76,7 @@
     /** Returns a long description for an {@link IDescription}. */
     @Override
     public String getLongDescription() {
-        return String.format("Android SDK Tools, revision %1$d.\n%2$s",
-                getRevision(),
-                super.getLongDescription());
+        return getShortDescription() + ".";
     }
 
     /**
diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java
index 636b9ab..8f5c4d2 100755
--- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java
+++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/RemotePackagesPage.java
@@ -117,26 +117,31 @@
         mDescriptionLabel.setText("Line1\nLine2\nLine3");
 
         mAddSiteButton = new Button(parent, SWT.NONE);
+        mAddSiteButton.setText("Add Site...");
+        mAddSiteButton.setToolTipText("Allows you to enter a new user external site. " +
+                "Such site can only contribute add-ons and extra packages.");
         mAddSiteButton.addSelectionListener(new SelectionAdapter() {
             @Override
             public void widgetSelected(SelectionEvent e) {
                 onAddSiteSelected(); //$hide$
             }
         });
-        mAddSiteButton.setText("Add Site...");
 
         mDeleteSiteButton = new Button(parent, SWT.NONE);
+        mDeleteSiteButton.setText("Delete Site...");
+        mDeleteSiteButton.setToolTipText("Allows you to remove an external site. " +
+                "Built-in sites cannot be removed.");
         mDeleteSiteButton.addSelectionListener(new SelectionAdapter() {
             @Override
             public void widgetSelected(SelectionEvent e) {
                 onRemoveSiteSelected(); //$hide$
             }
         });
-        mDeleteSiteButton.setText("Delete Site...");
 
         mUpdateOnlyCheckBox = new Button(parent, SWT.CHECK);
         mUpdateOnlyCheckBox.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1));
         mUpdateOnlyCheckBox.setText("Display updates only");
+        mUpdateOnlyCheckBox.setToolTipText("When selected, only compatible update packages are shown in the list above.");
         mUpdateOnlyCheckBox.setSelection(mUpdaterData.getSettingsController().getShowUpdateOnly());
         mUpdateOnlyCheckBox.addSelectionListener(new SelectionAdapter() {
             @Override
@@ -146,22 +151,25 @@
         });
 
         mRefreshButton = new Button(parent, SWT.NONE);
+        mRefreshButton.setText("Refresh");
+        mRefreshButton.setToolTipText("Refreshes the list of packages from open sites.");
         mRefreshButton.addSelectionListener(new SelectionAdapter() {
             @Override
             public void widgetSelected(SelectionEvent e) {
                 onRefreshSelected(); //$hide$
             }
         });
-        mRefreshButton.setText("Refresh");
 
         mInstallSelectedButton = new Button(parent, SWT.NONE);
+        mInstallSelectedButton.setText("Install Selected");
+        mInstallSelectedButton.setToolTipText("Allows you to review all selected packages " +
+                "and install them.");
         mInstallSelectedButton.addSelectionListener(new SelectionAdapter() {
             @Override
             public void widgetSelected(SelectionEvent e) {
                 onInstallSelectedArchives();  //$hide$
             }
         });
-        mInstallSelectedButton.setText("Install Selected");
     }
 
     @Override
@@ -275,7 +283,9 @@
     }
 
     private void onShowUpdateOnly() {
-        mUpdaterData.getSettingsController().setShowUpdateOnly(mUpdateOnlyCheckBox.getSelection());
+        SettingsController controller = mUpdaterData.getSettingsController();
+        controller.setShowUpdateOnly(mUpdateOnlyCheckBox.getSelection());
+        controller.saveSettings();
         mTreeViewerSources.refresh();
     }
 
@@ -405,6 +415,9 @@
         mDeleteSiteButton.setEnabled(hasSelectedUserSource);
         mRefreshButton.setEnabled(true);
         mInstallSelectedButton.setEnabled(hasCheckedArchive);
+
+        // set value on the show only update checkbox
+        mUpdateOnlyCheckBox.setSelection(mUpdaterData.getSettingsController().getShowUpdateOnly());
     }
 
     // End of hiding from SWT Designer
diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java
index 94f68fb..d7d3a90 100755
--- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java
+++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdateChooserDialog.java
Binary files differ
diff --git a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java
index 486095c..a605e3d 100755
--- a/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java
+++ b/tools/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/UpdaterData.java
@@ -366,7 +366,7 @@
 
     /**
      * Tries to update all the *existing* local packages.
-     * This first refreshes all sources, then compares the available remote packages when
+     * This first refreshes all sources, then compares the available remote packages with
      * the current local ones and suggest updates to be done to the user. Finally all
      * selected updates are installed.
      *
@@ -386,13 +386,13 @@
             // selected archives. If they do not match an update, list them anyway
             // except they map themselves to null (no "old" archive)
             for (Archive a : selectedArchives) {
-                if (!updates.containsValue(a)) {
+                if (!updates.containsKey(a)) {
                     updates.put(a, null);
                 }
             }
         }
 
-        UpdateChooserDialog dialog = new UpdateChooserDialog(this, updates);
+        UpdateChooserDialog dialog = new UpdateChooserDialog(getWindowShell(), this, updates);
         dialog.open();
 
         Collection<Archive> result = dialog.getResult();
@@ -444,9 +444,9 @@
         // Map [remote archive => local archive] of suitable update candidates
         Map<Archive, Archive> result = new HashMap<Archive, Archive>();
 
-        // First go thru all sources and make a local list of all available archives
+        // First go thru all sources and make a list of all available remote archives
         // sorted by package class.
-        HashMap<Class<? extends Package>, ArrayList<Archive>> availPkgs =
+        HashMap<Class<? extends Package>, ArrayList<Archive>> availablePkgs =
             new HashMap<Class<? extends Package>, ArrayList<Archive>>();
 
         if (selectedArchives != null) {
@@ -457,9 +457,9 @@
                 if (a.isCompatible()) {
                     Class<? extends Package> clazz = a.getParentPackage().getClass();
 
-                    ArrayList<Archive> list = availPkgs.get(clazz);
+                    ArrayList<Archive> list = availablePkgs.get(clazz);
                     if (list == null) {
-                        availPkgs.put(clazz, list = new ArrayList<Archive>());
+                        availablePkgs.put(clazz, list = new ArrayList<Archive>());
                     }
 
                     list.add(a);
@@ -476,9 +476,9 @@
                     for (Package remotePkg : remotePkgs) {
                         Class<? extends Package> clazz = remotePkg.getClass();
 
-                        ArrayList<Archive> list = availPkgs.get(clazz);
+                        ArrayList<Archive> list = availablePkgs.get(clazz);
                         if (list == null) {
-                            availPkgs.put(clazz, list = new ArrayList<Archive>());
+                            availablePkgs.put(clazz, list = new ArrayList<Archive>());
                         }
 
                         for (Archive a : remotePkg.getArchives()) {
@@ -500,7 +500,7 @@
 
         for (Package localPkg : localPkgs) {
             // get the available archive list for this package type
-            ArrayList<Archive> list = availPkgs.get(localPkg.getClass());
+            ArrayList<Archive> list = availablePkgs.get(localPkg.getClass());
 
             // if this list is empty, we'll never find anything that matches
             if (list == null || list.size() == 0) {
@@ -511,7 +511,7 @@
             Archive[] localArchives = localPkg.getArchives();
             if (localArchives != null && localArchives.length > 0) {
                 Archive localArchive = localArchives[0];
-                // only consider archive compatible with the current platform
+                // only consider archives compatible with the current platform
                 if (localArchive != null && localArchive.isCompatible()) {
 
                     // We checked all this archive stuff because that's what eventually gets
