diff --git a/plugin/pom.xml b/plugin/pom.xml
index c93342b..6404e09 100644
--- a/plugin/pom.xml
+++ b/plugin/pom.xml
@@ -4,7 +4,7 @@
   <groupId>de.ids_mannheim.korap</groupId>
   <artifactId>KalamarExportPlugin</artifactId>
   <packaging>jar</packaging>
-  <version>0.2.1</version>
+  <version>0.2.2</version>
   <name>KalamarExportPlugin</name>
   <url>http://maven.apache.org</url>
   
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");
