diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
index 333ed60..7fe4233 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
@@ -18,7 +18,7 @@
     // Version of Export Plugin
     public static final int VERSION_MAJOR = 0;
     public static final int VERSION_MINOR = 2;
-    public static final int VERSION_PATCHLEVEL = 1;
+    public static final int VERSION_PATCHLEVEL = 2;
 
     private static Properties prop;
 
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
index 972fb12..d8f3a0e 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
@@ -10,12 +10,12 @@
 import java.net.URLEncoder;
 import java.net.ConnectException;
 import java.util.HashMap;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.Properties;
 import java.util.Base64;
+import java.util.ResourceBundle;
+import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -48,6 +48,7 @@
 
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
+import org.glassfish.jersey.server.ContainerRequest;
 
 import static de.ids_mannheim.korap.plkexport.Util.*;
 
@@ -67,6 +68,7 @@
  * - Improve Readme.
  * - 100 matches as default for export form.
  * - Test ExWsConf.
+ * - Change "count" to "number of results" in RTF.
  *
  * TODO:
  * - Abort processing when eventsource is closed.
@@ -89,6 +91,9 @@
  *   matches per export, while external users
  *   should be limited to 10.000.
  * - Add 1000-separator to numbers.
+ * - Get the list of availables locales based
+ *   on the given ResourceBundle.
+ * - Check for q/ql definition in JS.
  *
  * IDEAS:
  * - Create a template mechanism for RTF export.
@@ -123,7 +128,10 @@
     private final static Base64.Decoder b64Dec = Base64.getDecoder();
 
     @Context
-    private HttpServletRequest req;     
+    private HttpServletRequest servletReq;
+
+    @Context
+    private ContainerRequest req;
 
 
     /*
@@ -208,12 +216,12 @@
         // Get client IP, in case service is behind a proxy
         // Get auth (temporarily) via Session riding
         String xff = "", auth = "";
-        if (req != null) {
-            xff = getClientIP(req.getHeader("X-Forwarded-For"));
+        if (servletReq != null) {
+            xff = getClientIP(servletReq.getHeader("X-Forwarded-For"));
             if (xff == "")
-                xff = req.getRemoteAddr();
+                xff = servletReq.getRemoteAddr();
 
-            auth = authFromCookie(req);
+            auth = authFromCookie(servletReq);
         };
     
         String resp;
@@ -632,7 +640,6 @@
                 };
             };
         };
-
         return "";
     };
 
@@ -678,6 +685,16 @@
             templateData.put("msg", msg);            
         };
 
+        try {
+            templateData.put("dict", this.getDictionary());
+
+        } catch (Exception e) {
+            return Response
+                .ok(new String("Dictionary not found"))
+                .status(Status.INTERNAL_SERVER_ERROR)
+                .build();
+        };
+
         // Generate template
         try {
             Template template = cfg.getTemplate("export.ftl");
@@ -721,4 +738,33 @@
 
         return "";
     };
+
+
+    /*
+     * Load dictionary for a chosen locale as a resource bundle
+     */
+    private ResourceBundle getDictionary () throws IOException {
+
+        // Load prefered dictionary
+        Locale prefered = new Locale("en");
+
+        if (req != null) {
+
+        CHOOSE:
+            for (Locale l : req.getAcceptableLanguages()) {
+                switch (l.getLanguage()) {
+                case "de":
+                    prefered = l;
+                    break CHOOSE;
+                case "en":
+                    prefered = l;
+                    break CHOOSE;
+                };
+            };
+        };
+
+        return ResourceBundle.getBundle(
+            "locales/export", prefered
+            );
+    };
 };
diff --git a/plugin/src/main/resources/assets/templates/export.ftl b/plugin/src/main/resources/assets/templates/export.ftl
index 424a79c..0b23d0e 100644
--- a/plugin/src/main/resources/assets/templates/export.ftl
+++ b/plugin/src/main/resources/assets/templates/export.ftl
@@ -1,5 +1,4 @@
 <!DOCTYPE html>
-<!-- TODO: localization ... -->
 <html>
   <head>
     <meta charset="UTF-8">
@@ -50,11 +49,20 @@
         background-color: #f6a800;
       }
 
+      label > .desc {
+        font-size: 90%;
+        display: block;
+      }
+
+      #export input[type=radio] {
+        vertical-align: top;
+      }
+
     </style>   
   </head>
   <body>
-    <div class="banner" data-note="Experimental"></div>
-    <h1>Export: <code id="export-query"></code></h1>
+    <div class="banner" data-note="${dict.banner}"></div>
+    <h1>${dict.export}: <code id="export-query"></code></h1>
     <section>
       <form id="export" class="form-table" action="export" method="POST">
         <fieldset>
@@ -63,44 +71,48 @@
           <input type="hidden" id="cq" name="cq">
 
           <fieldset class="form-line">
-            <legend>Dateiformat</legend>
+            <legend>${dict.file_format}</legend>
 
             <div style="margin-top: 1em">
-              <input type="radio" checked="checked" id="formatrtf" name="format" value="rtf" style="vertical-align: top">
+              <input type="radio"
+                     checked="checked"
+                     id="formatrtf"
+                     name="format"
+                     value="rtf">
               <label for="formatrtf">
-                RTF
-                <br /><span style="font-size:8pt">Rich Text Format (Word etc.)</span>
+                RTF <span class="desc">Rich Text Format (Word etc.)</span>
               </label>
             </div>
 
             <div style="margin-top: 1em">
-              <input type="radio" id="formatcsv" name="format" value="csv" style="vertical-align: top">
+              <input type="radio"
+                     id="formatcsv"
+                     name="format"
+                     value="csv">
               <label for="formatcsv">
-                CSV
-                <br /><span style="font-size:8pt">Comma-separated Values (Excel etc.)</span>
+                CSV <span class="desc">Comma-separated Values (Excel etc.)</span>
               </label>
             </div>
 
             <div style="margin-top: 1em">
-              <input type="radio" id="formatjson" name="format" value="json" style="vertical-align: top">
+              <input type="radio"
+                     id="formatjson"
+                     name="format"
+                     value="json">
               <label for="formatjson">
-                JSON
-                <br /><span style="font-size:8pt">JavaScript Object Notation (JavaScript etc.)</span>
+                JSON <span class="desc">JavaScript Object Notation (JavaScript etc.)</span>
               </label>
             </div>
           </fieldset>
 
-          <!-- <input type="checkbox" name="islimit" checked="checked" value="limited"> -->
-          
           <fieldset class="form-line">
-            <legend>Zu exportierender Treffer</legend>
+            <legend>${dict.hitc}</legend>
             <input name="hitc" id="hitc" type="number" min="1" max="10000" value="20" />
           </fieldset>
 
           <progress id="progress" value="0" max="100" style="display: none;">0%</progress>
           
-          <input type="submit" value="Exportieren">
-
+          <input type="submit" value="${dict.export_button}">
         </fieldset>
       </form>
     </section>
diff --git a/plugin/src/main/resources/locales/export.properties b/plugin/src/main/resources/locales/export.properties
new file mode 100644
index 0000000..221e9ba
--- /dev/null
+++ b/plugin/src/main/resources/locales/export.properties
@@ -0,0 +1,5 @@
+export = Export
+file_format = File format
+hitc = Limit to the first matches:
+export_button = Exportieren
+banner = Experimental
\ No newline at end of file
diff --git a/plugin/src/main/resources/locales/export_de.properties b/plugin/src/main/resources/locales/export_de.properties
new file mode 100644
index 0000000..845042f
--- /dev/null
+++ b/plugin/src/main/resources/locales/export_de.properties
@@ -0,0 +1,8 @@
+# Needs to be converted using
+# $ native2ascii -encoding UTF-8 \
+#   export_utf8.properties export_de.properties
+
+file_format = Dateiformat
+hitc = Einschr\u00e4nken auf die ersten Treffer:
+export_button = Exportieren
+banner = Experimentell
\ No newline at end of file
diff --git a/plugin/src/main/resources/locales/export_en.properties b/plugin/src/main/resources/locales/export_en.properties
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugin/src/main/resources/locales/export_en.properties
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/AssetTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/AssetTest.java
index 444e34b..a3dc27b 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/AssetTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/AssetTest.java
@@ -40,6 +40,35 @@
     }
 
     @Test
+    public void testFormHtmlLocalization () {
+
+        // Check german
+        Response responsehtml = target("/export").request()
+            .header("Accept-Language","fr-CH, fr;q=0.9, de;q=0.8, en;q=0.7, *;q=0.5").get();
+        assertEquals("HTTP Code",
+                     Status.OK.getStatusCode(), responsehtml.getStatus());
+        String str = responsehtml.readEntity(String.class);
+        assertTrue("HTTP Body (de)", str.contains("Dateiformat"));
+
+        // Check English
+        responsehtml = target("/export").request()
+            .header("Accept-Language","fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5").get();
+        assertEquals("HTTP Code",
+                     Status.OK.getStatusCode(), responsehtml.getStatus());
+        str = responsehtml.readEntity(String.class);
+        assertTrue("HTTP Body (en)", str.contains("File format"));
+
+        // Check German (2)
+        responsehtml = target("/export").request()
+            .header("Accept-Language","de-DE, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5").get();
+        assertEquals("HTTP Code",
+                     Status.OK.getStatusCode(), responsehtml.getStatus());
+        str = responsehtml.readEntity(String.class);
+        assertTrue("HTTP Body (de)", str.contains("Dateiformat"));
+    };
+
+    
+    @Test
     public void testFormHtmlAssets () {
         Properties properties = ExWSConf.properties(null);
         String hostTemp = properties.getProperty("asset.host");
