diff --git a/ma-impl.sublime-workspace b/ma-impl.sublime-workspace
index c8f2f55db8de2f92a1e5ee8e0d9112eb625758f3..4b3b0a708aeed2cda93146dc37a68b32c572d830 100644
--- a/ma-impl.sublime-workspace
+++ b/ma-impl.sublime-workspace
@@ -275,6 +275,14 @@
 	},
 	"buffers":
 	[
+		{
+			"file": "vipra-ui/app/routes/words/show.js",
+			"settings":
+			{
+				"buffer_size": 178,
+				"line_ending": "Unix"
+			}
+		}
 	],
 	"build_system": "",
 	"build_system_choices":
@@ -459,29 +467,32 @@
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/components",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/models",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/articles",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/topics",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/topics/show",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/components",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics/show",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words",
-		"/home/eike/repos/master/ma-impl/vm/data"
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words"
 	],
 	"file_history":
 	[
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words/show.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words/index.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/models/word.js",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words/index.js",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics/index.hbs",
+		"/home/eike/.config/sublime-text-3/Packages/User/Preferences.sublime-settings",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles/index.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/components/items-list.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/components/items-list.hbs",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words/index.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics/show/index.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/index.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/router.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words/index.js",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/models/word.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/models/topic.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/models/article.js",
 		"/home/eike/repos/master/ma-impl/vm/data/test-10.json",
@@ -489,7 +500,6 @@
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles/show.hbs",
 		"/home/eike/.local/share/vipra/jgibb/jgibb.twords",
 		"/home/eike/.local/share/vipra/jgibb/jgibb.tassign",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics/index.hbs",
 		"/home/eike/Downloads/FRITZ.Box 7490 113.06.30_17.01.16_2147.export",
 		"/home/eike/repos/master/ma-impl/vm/data/test-1.json",
 		"/home/eike/repos/master/ma-impl/vm/data/test-2.json",
@@ -525,7 +535,6 @@
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/helpers/topic-numi.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/helpers/topicname.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/helpers/topic-name.js",
-		"/home/eike/.config/sublime-text-3/Packages/User/Preferences.sublime-settings",
 		"/home/eike/.config/sublime-text-3/Packages/Default/Preferences.sublime-settings",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/components/dynamic-high-charts.js",
 		"/home/eike/repos/master/ma-impl/vipra-cmd.sh",
@@ -921,8 +930,38 @@
 	"groups":
 	[
 		{
+			"selected": 0,
 			"sheets":
 			[
+				{
+					"buffer": 0,
+					"file": "vipra-ui/app/routes/words/show.js",
+					"semi_transient": false,
+					"settings":
+					{
+						"buffer_size": 178,
+						"regions":
+						{
+						},
+						"selection":
+						[
+							[
+								178,
+								178
+							]
+						],
+						"settings":
+						{
+							"open_with_edit": true,
+							"syntax": "Packages/JavaScriptNext - ES6 Syntax/JavaScriptNext.tmLanguage"
+						},
+						"translation.x": 0.0,
+						"translation.y": 0.0,
+						"zoom_level": 1.0
+					},
+					"stack_index": 0,
+					"type": "text"
+				}
 			]
 		}
 	],
diff --git a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java b/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java
index 5945e5cf4ac76a455be14a2e59bac44d431eb422..9566837fb104fba9892f624077908809ef03a9f3 100644
--- a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java
+++ b/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java
@@ -20,7 +20,7 @@ import com.fasterxml.jackson.databind.JsonDeserializer;
 import de.vipra.util.an.JsonWrap;
 import de.vipra.util.model.Model;
 
-public class GenericDeserializer<T extends Model> extends JsonDeserializer<T> {
+public class GenericDeserializer<T extends Model<?>> extends JsonDeserializer<T> {
 
 	private final Class<T> clazz;
 	private final Set<String> nestingPrefixes = new HashSet<>();
diff --git a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java b/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java
index 7d76f86ea5ee4b35001e2166c9a4dc5ad6a039d5..fe7cc73cfb0e7e452077fbc7238f06ed211af4a1 100644
--- a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java
+++ b/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java
@@ -22,7 +22,7 @@ import de.vipra.util.an.JsonType;
 import de.vipra.util.an.JsonWrap;
 import de.vipra.util.model.Model;
 
-public class GenericSerializer<T extends Model> extends JsonSerializer<T> {
+public class GenericSerializer<T extends Model<?>> extends JsonSerializer<T> {
 
 	private final String typeName;
 	private final List<Entry<String, Field>> allFields;
diff --git a/vipra-util/src/main/java/de/vipra/util/model/Article.java b/vipra-util/src/main/java/de/vipra/util/model/Article.java
index 4122d62395b268f4927c68f808ad81b1199c253d..131a99a288d4ad8134d81b07eab89488bc34ee73 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/Article.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/Article.java
@@ -28,7 +28,7 @@ import de.vipra.util.an.QueryIgnore;
 @JsonType("article")
 @Entity(value = "articles", noClassnameStored = true)
 @Indexes({ @Index("title"), @Index("date") })
-public class Article extends FileModel implements Serializable {
+public class Article extends FileModel<ObjectId> implements Serializable {
 
 	@Id
 	private ObjectId id;
@@ -62,10 +62,12 @@ public class Article extends FileModel implements Serializable {
 	@JsonWrap("attributes")
 	private Date modified;
 
+	@Override
 	public ObjectId getId() {
 		return id;
 	}
 
+	@Override
 	public void setId(ObjectId id) {
 		this.id = id;
 	}
diff --git a/vipra-util/src/main/java/de/vipra/util/model/FileModel.java b/vipra-util/src/main/java/de/vipra/util/model/FileModel.java
index 09742a02e8a223e0c272fb2c7f52171e19793c6b..de0ade9e45771ccf477a7032e8fd14d551ceee2b 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/FileModel.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/FileModel.java
@@ -8,7 +8,7 @@ import org.apache.commons.io.FileUtils;
 import de.vipra.util.Constants;
 
 @SuppressWarnings("serial")
-public abstract class FileModel implements Model {
+public abstract class FileModel<IdType> implements Model<IdType> {
 
 	public void writeToFile(File file) throws IOException {
 		FileUtils.writeStringToFile(file, toFileString(), Constants.FB_ENCODING, false);
diff --git a/vipra-util/src/main/java/de/vipra/util/model/Model.java b/vipra-util/src/main/java/de/vipra/util/model/Model.java
index 0d133d54efd7a951c064d5ac15000c1d57b3c81d..eba05fd5f2067c862d0d3d5fe781143c746cb035 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/Model.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/Model.java
@@ -2,4 +2,10 @@ package de.vipra.util.model;
 
 import java.io.Serializable;
 
-public interface Model extends Serializable {}
\ No newline at end of file
+public interface Model<IdType> extends Serializable {
+
+	IdType getId();
+
+	void setId(IdType id);
+
+}
\ No newline at end of file
diff --git a/vipra-util/src/main/java/de/vipra/util/model/Topic.java b/vipra-util/src/main/java/de/vipra/util/model/Topic.java
index 0ac387d906e9c2fb0a7e42b682645392d494f6f1..075681280fb26f2e7107b4526ec3560c3cd6c8a6 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/Topic.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/Topic.java
@@ -15,16 +15,18 @@ import de.vipra.util.an.JsonType;
 @JsonType("topic")
 @Entity(value = "topics", noClassnameStored = true)
 @Indexes(@Index("name"))
-public class Topic implements Model, Serializable {
+public class Topic implements Model<ObjectId>, Serializable {
 
 	@Id
 	private ObjectId id;
 	private String name;
 
+	@Override
 	public ObjectId getId() {
 		return id;
 	}
 
+	@Override
 	public void setId(ObjectId id) {
 		this.id = id;
 	}
diff --git a/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java b/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java
index 412232b735518b5b1c35d40ebe6c2c3a567025c9..8797b6b6fdc0da85fc5c0298b5339c663fdc3089 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java
@@ -21,7 +21,7 @@ import de.vipra.util.an.QueryIgnore;
 @SuppressWarnings("serial")
 @JsonType("topic")
 @Entity(value = "topics", noClassnameStored = true)
-public class TopicFull implements Model, Serializable {
+public class TopicFull implements Model<ObjectId>, Serializable {
 
 	@Id
 	private ObjectId id;
@@ -43,10 +43,12 @@ public class TopicFull implements Model, Serializable {
 	@JsonWrap("attributes")
 	private Date modified;
 
+	@Override
 	public ObjectId getId() {
 		return id;
 	}
 
+	@Override
 	public void setId(ObjectId id) {
 		this.id = id;
 	}
diff --git a/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java b/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java
index ef00fc43600162798ce4f8b6a5086ce16f4f8e1b..7d84a4d650b374b32d8387f15825cef2f51d0cad 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java
@@ -12,7 +12,7 @@ public class TopicRef implements Comparable<TopicRef>, Serializable {
 
 	@Transient
 	private String topicId;
-	@Reference
+	@Reference(ignoreMissing = true)
 	private Topic topic;
 	private int count;
 
diff --git a/vipra-util/src/main/java/de/vipra/util/model/Word.java b/vipra-util/src/main/java/de/vipra/util/model/Word.java
index 62ee93d059a5b91bd2d495aa1002dad6d0dcb7bd..e32e4e9cdbde4218838618ee9422f93fc507f5b1 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/Word.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/Word.java
@@ -15,7 +15,7 @@ import de.vipra.util.an.JsonType;
 @SuppressWarnings("serial")
 @JsonType("word")
 @Entity(value = "words", noClassnameStored = true)
-public class Word implements Model, Serializable {
+public class Word implements Model<String>, Serializable {
 
 	/**
 	 * This is the id. It is used by the frontend, which expects an 'id' field.
@@ -47,10 +47,12 @@ public class Word implements Model, Serializable {
 		this.word = word;
 	}
 
+	@Override
 	public String getId() {
 		return id;
 	}
 
+	@Override
 	public void setId(String id) {
 		this.id = id;
 	}
diff --git a/vipra-util/src/main/java/de/vipra/util/service/DatabaseService.java b/vipra-util/src/main/java/de/vipra/util/service/DatabaseService.java
index 9a1d4e0560c9193dafca7770c1187705b0dd07c8..324e978c96d3ddf258f53e207060e1a54e370274 100644
--- a/vipra-util/src/main/java/de/vipra/util/service/DatabaseService.java
+++ b/vipra-util/src/main/java/de/vipra/util/service/DatabaseService.java
@@ -18,7 +18,7 @@ import de.vipra.util.ex.ConfigException;
 import de.vipra.util.ex.DatabaseException;
 import de.vipra.util.model.Model;
 
-public class DatabaseService<T extends Model, U> implements Service<T, U, DatabaseException> {
+public class DatabaseService<T extends Model<?>, U> implements Service<T, U, DatabaseException> {
 
 	private final Datastore datastore;
 	private final Class<T> clazz;
@@ -110,7 +110,7 @@ public class DatabaseService<T extends Model, U> implements Service<T, U, Databa
 		return datastore.getCount(clazz);
 	}
 
-	public static <T extends Model, U> DatabaseService<T, U> getDatabaseService(Config config, Class<T> clazz)
+	public static <T extends Model<?>, U> DatabaseService<T, U> getDatabaseService(Config config, Class<T> clazz)
 			throws ConfigException {
 		Mongo mongo = Mongo.getInstance(config);
 		return new DatabaseService<T, U>(mongo, clazz);
diff --git a/vipra-util/src/main/java/de/vipra/util/service/Service.java b/vipra-util/src/main/java/de/vipra/util/service/Service.java
index 4fb210eb71017a874806edb094e74ebfe744b8ff..b38d35af0429b46bb0314406e05edee326efd505 100644
--- a/vipra-util/src/main/java/de/vipra/util/service/Service.java
+++ b/vipra-util/src/main/java/de/vipra/util/service/Service.java
@@ -4,7 +4,7 @@ import java.util.List;
 
 import de.vipra.util.model.Model;
 
-public interface Service<Type extends Model, IdType, E extends Exception> {
+public interface Service<Type extends Model<?>, IdType, E extends Exception> {
 
 	Type getSingle(IdType id, String... fields) throws E;