diff --git a/Changes b/Changes
index e54e88c..910ce3d 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,6 @@
+0.58.3 2018-12-12
+    - [feature] Introduced attachements as meta data fields (diewald).
+
 0.58.2 2018-12-05
     - [bugfix] Fixed the candidate list in NextSpans, see de.ids_mannheim.
       korap.index.TestNextIndex.testNextExpansionBug() (margaretha)  
diff --git a/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java b/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java
index 95c65a2..a244282 100644
--- a/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java
+++ b/src/main/java/de/ids_mannheim/korap/index/FieldDocument.java
@@ -109,6 +109,9 @@
         doc.add(new StringField(key, value, Field.Store.YES));
     };
 
+    public void addAttachement (String key, String value) {
+        doc.add(new StoredField(key, value));
+    };    
 
     public void addStored (String key, String value) {
         doc.add(new StoredField(key, value));
diff --git a/src/main/java/de/ids_mannheim/korap/response/MetaFields.java b/src/main/java/de/ids_mannheim/korap/response/MetaFields.java
index e28a404..86607fd 100644
--- a/src/main/java/de/ids_mannheim/korap/response/MetaFields.java
+++ b/src/main/java/de/ids_mannheim/korap/response/MetaFields.java
@@ -110,8 +110,14 @@
 
 			// Stored
 			if (iFieldType.indexOptions() == IndexOptions.NONE) {
-				mf.type = "type:store";
-				mf.values.add(s.toString());
+                String value = s.toString();
+                if (value.startsWith("data:")) {
+                    mf.type = "type:attachement";
+                }
+                else {
+                    mf.type = "type:store";
+                };
+				mf.values.add(value);
 			}
 
 			// Keywords
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
index 77f7e87..513185e 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
@@ -23,8 +23,6 @@
 import de.ids_mannheim.korap.response.Result;
 import de.ids_mannheim.korap.util.QueryException;
 
-// mvn -Dtest=TestWithinIndex#indexExample1 test
-
 @RunWith(JUnit4.class)
 public class TestFieldDocument {
 
@@ -44,6 +42,7 @@
         fd.addInt("lastModified", 20130717);
         fd.addTV("tokens", "abc", "[(0-1)s:a|i:a|_0$<i>0<i>1|-:t$<i>10]"
                 + "[(1-2)s:b|i:b|_1$<i>1<i>2]" + "[(2-3)s:c|i:c|_2$<i>2<i>3]");
+        fd.addAttachement("Wikilink", "data:application/x.korap-link,https://de.wikipedia.org/wiki/Beispiel");
 
         assertEquals(fd.doc.getField("title").name(), "title");
         assertEquals(fd.doc.getField("title").stringValue(), "Wikipedia");
@@ -78,6 +77,10 @@
         assertEquals(fd.doc.getField("textClass").name(), "textClass");
         assertEquals(fd.doc.getField("textClass").stringValue(),
                 "music entertainment");
+        assertEquals(fd.doc.getField("Wikilink").name(), "Wikilink");
+        assertEquals(fd.doc.getField("Wikilink").stringValue(),
+                     "data:application/x.korap-link,https://de.wikipedia.org/wiki/Beispiel"
+            );
     };
 
 
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestKrillIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestKrillIndex.java
index 23f928e..f643944 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestKrillIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestKrillIndex.java
@@ -196,6 +196,7 @@
         fd.addString("textSigle", "a/b/c");
         fd.addInt("zahl1", 56);
 		fd.addStored("ref", "My reference");
+		fd.addAttachement("ref2", "data:text/plain;charset=UTF-8,My reference2");
 
 		fd.addKeyword("keyword", "baum");
 		fd.addKeyword("keyword", "wald");
@@ -227,6 +228,13 @@
 				checkC++;
 				break;
 
+			case "ref2":
+				assertEquals("type:attachement", field.at("/type").asText());
+				assertEquals("koral:field", field.at("/@type").asText());
+				assertEquals("data:text/plain;charset=UTF-8,My reference2", field.at("/value").asText());
+				checkC++;
+				break;
+                
 			case "title":
 				assertEquals("type:text", field.at("/type").asText());
 				assertEquals("koral:field", field.at("/@type").asText());
@@ -265,7 +273,7 @@
 			};
 		};
 		
-		assertEquals(6, checkC);
+		assertEquals(7, checkC);
 
 
 		// Test with real document
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
index 022a6f6..4bf61c7 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
@@ -317,4 +317,29 @@
         assertTrue(ks.getMeta().getContext().isSpanDefined());
         assertEquals("base/p", ks.getMeta().getContext().getSpanContext());
     };
+
+
+    @Test
+    public void searchMetaAssets () throws IOException {
+        KrillIndex ki = new KrillIndex();
+        FieldDocument fd = new FieldDocument();
+        fd.addString("textSigle", "ABC-123-0002");
+        fd.addText("title", "Die Wahlverwandtschaften");
+        fd.addText("author", "Johann Wolfgang von Goethe");
+        fd.addKeyword("textClass", "reisen wissenschaft");
+        fd.addInt("pubDate", 20130617);
+        fd.addTV("tokens", "abc", "[(0-1)s:a|i:a|_0#0-1|-:t$<i>10]"
+                + "[(1-2)s:b|i:b|_1#1-2]" + "[(2-3)s:c|i:c|_2#2-3]");
+        fd.addAttachement("WikiLink", "data:application/x.korap-link,https://de.wikipedia.org/wiki/Beispiel");
+        ki.addDoc(fd);
+        ki.commit();
+
+        assertEquals(fd.doc.getField("textSigle").stringValue(), "ABC-123-0002");
+        assertEquals(fd.doc.getField("title").stringValue(), "Die Wahlverwandtschaften");
+        assertEquals(fd.doc.getField("author").stringValue(), "Johann Wolfgang von Goethe");
+        assertEquals(fd.doc.getField("textClass").stringValue(), "reisen wissenschaft");
+        assertEquals(fd.doc.getField("pubDate").stringValue(), "20130617");
+        assertEquals(fd.doc.getField("WikiLink").stringValue(), "data:application/x.korap-link,https://de.wikipedia.org/wiki/Beispiel");
+    }
+
 };
