diff --git a/src/main/java/de/idrinth/waraddonclient/gui/Window.java b/src/main/java/de/idrinth/waraddonclient/gui/Window.java
index 7ae4697..08401c3 100644
--- a/src/main/java/de/idrinth/waraddonclient/gui/Window.java
+++ b/src/main/java/de/idrinth/waraddonclient/gui/Window.java
@@ -5,6 +5,7 @@
 import de.idrinth.waraddonclient.service.Backup;
 import de.idrinth.waraddonclient.model.addon.Addon;
 import de.idrinth.waraddonclient.model.GuiAddonList;
+import de.idrinth.waraddonclient.model.addon.ActualAddon;
 import de.idrinth.waraddonclient.model.addon.NoAddon;
 import java.io.IOException;
 import java.net.URISyntaxException;
@@ -796,6 +797,9 @@ public void valueChanged(ListSelectionEvent event) {
          */
         public void updateUi() {
             description.setText(activeAddon.getDescription(config.getLanguage()));
+            if (ActualAddon.class.isInstance(activeAddon)) {
+                new Thread(((ActualAddon) activeAddon).loadDescription(description, config.getLanguage())).start();
+            }
             addonTitle.setText(activeAddon.getName());
             installButton.setEnabled(true);
             removeButton.setEnabled(true);
diff --git a/src/main/java/de/idrinth/waraddonclient/model/addon/ActualAddon.java b/src/main/java/de/idrinth/waraddonclient/model/addon/ActualAddon.java
index cc37601..ca668d1 100644
--- a/src/main/java/de/idrinth/waraddonclient/model/addon/ActualAddon.java
+++ b/src/main/java/de/idrinth/waraddonclient/model/addon/ActualAddon.java
@@ -16,9 +16,11 @@
 import java.util.Objects;
 import javax.json.JsonArray;
 import javax.json.JsonObject;
+import javax.swing.JEditorPane;
 import javax.xml.parsers.FactoryConfigurationError;
 import net.lingala.zip4j.ZipFile;
 import org.apache.commons.io.FileUtils;
+import org.w3c.dom.Document;
 import org.w3c.dom.NodeList;
 import org.xml.sax.SAXException;
 
@@ -55,6 +57,8 @@ public class ActualAddon implements de.idrinth.waraddonclient.model.addon.Addon
     private final XmlParser parser;
     
     private final Config config;
+    
+    private String defaultDescription = "";
 
     public ActualAddon(javax.json.JsonObject addon, Request client, BaseLogger logger, XmlParser parser, Config config) throws InvalidArgumentException {
         if (addon == null) {
@@ -168,24 +172,7 @@ public Object[] getTableRow() {
         return row;
     }
 
-    /**
-     * return a languages description if avaible, otherwise a default
-     *
-     * @param language
-     * @return String
-     */
     public String getDescription(String language) {
-        if (descriptions.isEmpty()) {
-            try {
-                JsonObject addon = client.getAddon(slug);
-                descriptions.put("en", getStringFromObject("description", addon));
-                descriptions.put("de", getStringFromObject("description_de", addon));
-                descriptions.put("fr", getStringFromObject("description_fr", addon));
-            } catch (IOException ex) {
-                logger.error("Failed loading addon-data from server.");
-            }
-        }
-        String defaultDescription = "";
         String description = "<p><strong>There is currently no Description for " + name + ".</strong></p>"
                 + "<p>You can help by adding one at <a href=\"http://tools.idrinth.de/addons/" + slug
                 + "/\">http://tools.idrinth.de/addons/" + slug + "/</a>.</p>"
@@ -195,7 +182,24 @@ public String getDescription(String language) {
         } else if (descriptions.get("en") != null &&  !descriptions.get("en").isEmpty()) {
             description = descriptions.get("en");
         }
-        return "<html>" + description;
+        return "<html>" + description.replaceAll("(\\\\n|\\\\r)+", " ").replaceAll("\\\\\"", "\"");
+    }
+
+    public Runnable loadDescription(JEditorPane field, String language) {
+        if (!descriptions.isEmpty()) {
+            return () -> {};
+        }
+        return () -> {
+            try {
+                JsonObject addon = client.getAddon(slug);
+                descriptions.put("en", getStringFromObject("description", addon));
+                descriptions.put("de", getStringFromObject("description_de", addon));
+                descriptions.put("fr", getStringFromObject("description_fr", addon));
+                field.setText(getDescription(language));
+            } catch (IOException ex) {
+                logger.error("Failed loading addon-data from server.");
+            }
+        };
     }
 
     /**
@@ -355,8 +359,13 @@ private boolean processDirectory() {
                 if (!fileEntry.isDirectory()
                         && org.apache.commons.io.FilenameUtils.getExtension(fileEntry.getName()).equalsIgnoreCase("mod")) {
                     try {
-                        NodeList list = parser.parse(fileEntry).getElementsByTagName("UiMod");
+                        Document doc = parser.parse(fileEntry);
+                        NodeList list = doc.getElementsByTagName("UiMod");
                         installed = list.item(0).getAttributes().getNamedItem("version").getTextContent();
+                        NodeList description = doc.getElementsByTagName("Description");
+                        if (description.getLength() > 0) {
+                            defaultDescription = description.item(0).getAttributes().getNamedItem("text").getTextContent();
+                        }
                         return true;
                     } catch (FactoryConfigurationError | SAXException | IOException exception) {
                         logger.error(exception);