diff --git a/res/values/strings.xml b/res/values/strings.xml
index daabe25af..5ea16fd1b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -75,7 +75,7 @@
 	<string name="download_server">Getting application from</string>
 
 	<string name="repo_add_url">Repository address</string>
-	<string name="repo_add_fingerprint">fingerprint (optional)</string>
+	<string name="repo_add_fingerprint">Fingerprint (optional)</string>
 	<string name="repo_exists">This repo already exists!</string>
 	<string name="repo_exists_add_fingerprint">This repo is already setup, this will add new key information.</string>
 	<string name="repo_exists_enable">This repo is already setup, confirm that you want to re-enable it.</string>
diff --git a/src/org/fdroid/fdroid/ManageRepo.java b/src/org/fdroid/fdroid/ManageRepo.java
index 7b6c593a7..63412360a 100644
--- a/src/org/fdroid/fdroid/ManageRepo.java
+++ b/src/org/fdroid/fdroid/ManageRepo.java
@@ -261,7 +261,14 @@ public class ManageRepo extends ListActivity {
     }
 
     private void updateRepos() {
-        UpdateService.updateNow(this);
+        UpdateService.updateNow(this).setListener(new ProgressListener() {
+            @Override
+            public void onProgress(Event event) {
+                // No need to prompt to update any more, we just did it!
+                changed = false;
+                refreshList();
+            }
+        });
     }
 
     private void showAddRepo() {
diff --git a/src/org/fdroid/fdroid/RepoXMLHandler.java b/src/org/fdroid/fdroid/RepoXMLHandler.java
index 29648f7c9..1cb4b1b33 100644
--- a/src/org/fdroid/fdroid/RepoXMLHandler.java
+++ b/src/org/fdroid/fdroid/RepoXMLHandler.java
@@ -61,9 +61,9 @@ public class RepoXMLHandler extends DefaultHandler {
     private DB.Apk curapk = null;
     private StringBuilder curchars = new StringBuilder();
 
-    // After processing the XML, this will be null if the index didn't specify
+    // After processing the XML, this will be -1 if the index didn't specify
     // a maximum age - otherwise it will be the value specified.
-    private String maxage;
+    private int maxage = -1;
 
     // After processing the XML, this will be null if the index specified a
     // public key - otherwise a public key. This is used for TOFU where an
@@ -247,6 +247,8 @@ public class RepoXMLHandler extends DefaultHandler {
             } else if (curel.equals("requirements")) {
                 curapp.requirements = DB.CommaSeparatedList.make(str);
             }
+        } else if (curel.equals("description")) {
+            description = str;
         }
     }
 
@@ -264,7 +266,13 @@ public class RepoXMLHandler extends DefaultHandler {
             String pk = attributes.getValue("", "pubkey");
             if (pk != null)
                 pubkey = pk;
-            maxage = attributes.getValue("", "maxage");
+            String maxAgeAttr = attributes.getValue("", "maxage");
+            if (maxAgeAttr != null) {
+                try {
+                    maxage = Integer.parseInt(maxAgeAttr);
+                } catch (NumberFormatException nfe) {}
+            }
+
             String nm = attributes.getValue("", "name");
             if (nm != null)
                 name = nm;
@@ -453,35 +461,7 @@ public class RepoXMLHandler extends DefaultHandler {
 
                 InputSource is = new InputSource(r);
                 xr.parse(is);
-
-                if (handler.pubkey != null && repo.pubkey == null) {
-                    // We read an unsigned index, but that indicates that
-                    // a signed version is now available...
-                    Log.d("FDroid",
-                            "Public key found - switching to signed repo for future updates");
-                    repo.pubkey = handler.pubkey;
-                    try {
-                        DB db = DB.getDB();
-                        db.updateRepoByAddress(repo);
-                    } finally {
-                        DB.releaseDB();
-                    }
-                }
-
-                if (handler.maxage != null) {
-                    int maxage = Integer.parseInt(handler.maxage);
-                    if (maxage != repo.maxage) {
-                        Log.d("FDroid",
-                                "Repo specified a new maximum age - updated");
-                        repo.maxage = maxage;
-                        try {
-                            DB db = DB.getDB();
-                            db.updateRepoByAddress(repo);
-                        } finally {
-                            DB.releaseDB();
-                        }
-                    }
-                }
+                handler.updateRepoDetails(repo);
 
             } else if (code == 304) {
                 // The index is unchanged since we last read it. We just mark
@@ -514,6 +494,46 @@ public class RepoXMLHandler extends DefaultHandler {
         return null;
     }
 
+    public void updateRepoDetails(DB.Repo repo) {
+
+        boolean repoChanged = false;
+
+        if (pubkey != null && repo.pubkey == null) {
+            // We read an unsigned index, but that indicates that
+            // a signed version is now available...
+            Log.d("FDroid",
+                    "Public key found - switching to signed repo for future updates");
+            repo.pubkey = pubkey;
+            repoChanged = true;
+        }
+
+        if (maxage != -1 && maxage != repo.maxage) {
+            Log.d("FDroid",
+                    "Repo specified a new maximum age - updated");
+            repo.maxage = maxage;
+            repoChanged = true;
+        }
+
+        if (description != null && !description.equals(repo.description)) {
+            repo.description = description;
+            repoChanged = true;
+        }
+
+        if (name != null && !name.equals(repo.name)) {
+            repo.name = name;
+            repoChanged = true;
+        }
+
+        if (repoChanged) {
+            try {
+                DB db = DB.getDB();
+                db.updateRepoByAddress(repo);
+            } finally {
+                DB.releaseDB();
+            }
+        }
+    }
+
     public void setTotalAppCount(int totalAppCount) {
         this.totalAppCount = totalAppCount;
     }
diff --git a/src/org/fdroid/fdroid/views/RepoAdapter.java b/src/org/fdroid/fdroid/views/RepoAdapter.java
index 891fce3cd..71c9f73dd 100644
--- a/src/org/fdroid/fdroid/views/RepoAdapter.java
+++ b/src/org/fdroid/fdroid/views/RepoAdapter.java
@@ -83,10 +83,8 @@ public class RepoAdapter extends BaseAdapter {
         // height of each list item varies.
         View signedView = view.findViewById(R.id.repo_unsigned);
         if (repository.isSigned()) {
-            nameViewLayout.addRule(RelativeLayout.CENTER_VERTICAL);
             signedView.setVisibility(View.INVISIBLE);
         } else {
-            nameViewLayout.addRule(RelativeLayout.ALIGN_PARENT_TOP);
             signedView.setVisibility(View.VISIBLE);
         }
 
diff --git a/src/org/fdroid/fdroid/views/fragments/RepoDetailsFragment.java b/src/org/fdroid/fdroid/views/fragments/RepoDetailsFragment.java
index 704a8c9d9..84c3d347b 100644
--- a/src/org/fdroid/fdroid/views/fragments/RepoDetailsFragment.java
+++ b/src/org/fdroid/fdroid/views/fragments/RepoDetailsFragment.java
@@ -199,7 +199,9 @@ public class RepoDetailsFragment extends Fragment {
             description.setVisibility(View.VISIBLE);
         }
 
-        description.setText(repo.description);
+        String descriptionText = repo.description == null
+                ? "" : repo.description.replaceAll("\n", " ");
+        description.setText(descriptionText);
 
     }
 
@@ -208,6 +210,7 @@ public class RepoDetailsFragment extends Fragment {
      * list can be updated. We will perform the update ourselves though.
      */
     private void performUpdate() {
+        repo.enable((FDroidApp)getActivity().getApplication());
         UpdateService.updateNow(getActivity()).setListener(new ProgressListener() {
             @Override
             public void onProgress(Event event) {