diff --git a/ma-impl.sublime-workspace b/ma-impl.sublime-workspace
index bcf2ba250998973e5303cc6cf25e210d4d7d7769..7b33cb727a672a0499b9aaab0160892403b77e9c 100644
--- a/ma-impl.sublime-workspace
+++ b/ma-impl.sublime-workspace
@@ -275,6 +275,38 @@
 	},
 	"buffers":
 	[
+		{
+			"file": "vipra-ui/app/templates/topics/show/index.hbs",
+			"settings":
+			{
+				"buffer_size": 408,
+				"line_ending": "Unix"
+			}
+		},
+		{
+			"file": "vipra-ui/app/templates/application.hbs",
+			"settings":
+			{
+				"buffer_size": 1378,
+				"line_ending": "Unix"
+			}
+		},
+		{
+			"file": "vipra-ui/app/routes/articles/show.js",
+			"settings":
+			{
+				"buffer_size": 692,
+				"line_ending": "Unix"
+			}
+		},
+		{
+			"file": "vipra-ui/app/templates/articles/show.hbs",
+			"settings":
+			{
+				"buffer_size": 699,
+				"line_ending": "Unix"
+			}
+		}
 	],
 	"build_system": "",
 	"build_system_choices":
@@ -283,18 +315,18 @@
 	"build_varint": "",
 	"command_palette":
 	{
-		"height": 102.0,
-		"last_filter": "remove",
+		"height": 148.0,
+		"last_filter": "insta",
 		"selected_items":
 		[
-			[
-				"remove",
-				"Package Control: Remove Package"
-			],
 			[
 				"insta",
 				"Package Control: Install Package"
 			],
+			[
+				"remove",
+				"Package Control: Remove Package"
+			],
 			[
 				"close",
 				"Project: Close"
@@ -453,12 +485,37 @@
 	},
 	"expanded_folders":
 	[
-		"/home/eike/repos/master/ma-impl"
+		"/home/eike/repos/master/ma-impl",
+		"/home/eike/repos/master/ma-impl/vipra-ui",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/helpers",
+		"/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/templates",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics/show"
 	],
 	"file_history":
 	[
-		"/home/eike/repos/master/ma-impl/vipra-ui/ember-cli-build.js",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles/menu.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/articles/menu.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words/index.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles/show.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/components/items-list.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/helpers/pluralize.js",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/helpers/uppercase.js",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles/index.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words_loading.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/styles/app.scss",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/application.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/bower.json",
+		"/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/topics.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/adapters/application.js",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/ember-cli-build.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/index.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/loading.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/styles/app.css",
@@ -466,37 +523,27 @@
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/index.html",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words/show.js",
 		"/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/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/router.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words",
 		"/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",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/components/topic-link.js",
-		"/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/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",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/topics/index.js",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/adapters/application.js",
 		"/home/eike/.local/share/vipra/jgibb/jgibb",
 		"/home/eike/repos/master/ma-doc/thesis/thesis.tex",
 		"/home/eike/repos/master/ma-impl/Vagrantfile",
 		"/home/eike/repos/master/ma-impl/vm/bootstrap.sh",
 		"/home/eike/repos/master/ma-impl/vm/webapps/ROOT/index.html",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles.hbs",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/topics/show/edit.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/components/topics-list.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/topics/show.js",
@@ -524,7 +571,6 @@
 		"/home/eike/repos/master/ma-impl/vipra-cmd.sh",
 		"/home/eike/repos/master/ma-impl/vipra-cmd/build2.xml",
 		"/home/eike/repos/master/ma-impl/vipra-ui/README.md",
-		"/home/eike/repos/master/ma-impl/vipra-ui/bower.json",
 		"/home/eike/repos/testasd/bower.json",
 		"/home/eike/repos/master/ma-impl/vipra-ui2/package.json",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/articles/list.js",
@@ -578,13 +624,7 @@
 		"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/templates/articles/index.hbs",
 		"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/templates/articles/new.hbs",
 		"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/routes/article/show.js",
-		"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/templates/article.hbs",
-		"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/routes/articles.js",
-		"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/templates/articles.show.hbs",
-		"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/routes/articles.show.js",
-		"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/templates/articles/test.hbs",
-		"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/.ember-cli",
-		"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/bower_components/ember-data/ember-data.js"
+		"/home/eike/Repositories/fu/ss15/ma/impl/vipra-ui/app/templates/article.hbs"
 	],
 	"find":
 	{
@@ -908,8 +948,129 @@
 	"groups":
 	[
 		{
+			"selected": 2,
 			"sheets":
 			[
+				{
+					"buffer": 0,
+					"file": "vipra-ui/app/templates/topics/show/index.hbs",
+					"semi_transient": false,
+					"settings":
+					{
+						"buffer_size": 408,
+						"regions":
+						{
+						},
+						"selection":
+						[
+							[
+								408,
+								408
+							]
+						],
+						"settings":
+						{
+							"syntax": "Packages/Handlebars/grammars/Handlebars.tmLanguage",
+							"tab_size": 2,
+							"translate_tabs_to_spaces": true
+						},
+						"translation.x": 0.0,
+						"translation.y": 0.0,
+						"zoom_level": 1.0
+					},
+					"stack_index": 3,
+					"type": "text"
+				},
+				{
+					"buffer": 1,
+					"file": "vipra-ui/app/templates/application.hbs",
+					"semi_transient": false,
+					"settings":
+					{
+						"buffer_size": 1378,
+						"regions":
+						{
+						},
+						"selection":
+						[
+							[
+								1378,
+								1378
+							]
+						],
+						"settings":
+						{
+							"syntax": "Packages/Handlebars/grammars/Handlebars.tmLanguage",
+							"tab_size": 2,
+							"translate_tabs_to_spaces": true
+						},
+						"translation.x": 0.0,
+						"translation.y": 0.0,
+						"zoom_level": 1.0
+					},
+					"stack_index": 1,
+					"type": "text"
+				},
+				{
+					"buffer": 2,
+					"file": "vipra-ui/app/routes/articles/show.js",
+					"semi_transient": false,
+					"settings":
+					{
+						"buffer_size": 692,
+						"regions":
+						{
+						},
+						"selection":
+						[
+							[
+								692,
+								692
+							]
+						],
+						"settings":
+						{
+							"syntax": "Packages/JavaScriptNext - ES6 Syntax/JavaScriptNext.tmLanguage",
+							"tab_size": 2,
+							"translate_tabs_to_spaces": true
+						},
+						"translation.x": 0.0,
+						"translation.y": 0.0,
+						"zoom_level": 1.0
+					},
+					"stack_index": 0,
+					"type": "text"
+				},
+				{
+					"buffer": 3,
+					"file": "vipra-ui/app/templates/articles/show.hbs",
+					"semi_transient": true,
+					"settings":
+					{
+						"buffer_size": 699,
+						"regions":
+						{
+						},
+						"selection":
+						[
+							[
+								0,
+								0
+							]
+						],
+						"settings":
+						{
+							"syntax": "Packages/Handlebars/grammars/Handlebars.tmLanguage",
+							"tab_size": 2,
+							"translate_tabs_to_spaces": true
+						},
+						"translation.x": 0.0,
+						"translation.y": 0.0,
+						"zoom_level": 1.0
+					},
+					"stack_index": 2,
+					"type": "text"
+				}
 			]
 		}
 	],
@@ -1059,12 +1220,12 @@
 	},
 	"select_symbol":
 	{
-		"height": 375.0,
+		"height": 263.0,
 		"last_filter": "",
 		"selected_items":
 		[
 		],
-		"width": 741.0
+		"width": 378.0
 	},
 	"selected_group": 0,
 	"settings":
diff --git a/vipra-cmd/build.xml b/vipra-cmd/build.xml
index 469d63d89ba8a5d977e882b1e34f8e7b295e22f5..37709cab9530c96539b00325c5f9edd67467fbf6 100644
--- a/vipra-cmd/build.xml
+++ b/vipra-cmd/build.xml
@@ -59,6 +59,8 @@
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/hdrhistogram/HdrHistogram/2.1.6/HdrHistogram-2.1.6.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/commons-cli/commons-cli/1.3.1/commons-cli-1.3.1.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/twitter/jsr166e/1.1.0/jsr166e-1.1.0.jar"/>
+            <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.7.0/jackson-databind-2.7.0.jar"/>
+            <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.7.0/jackson-annotations-2.7.0.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/args4j/args4j/2.0.6/args4j-2.0.6.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/edu/stanford/nlp/stanford-corenlp/3.5.2/stanford-corenlp-3.5.2.jar"/>
@@ -70,8 +72,10 @@
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/javax/xml/bind/jaxb-api/2.2.7/jaxb-api-2.2.7.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/com/googlecode/efficient-java-matrix-library/ejml/0.23/ejml-0.23.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/javax/json/javax.json-api/1.0/javax.json-api-1.0.jar"/>
+            <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/edu/stanford/nlp/stanford-corenlp/3.5.2/stanford-corenlp-3.5.2-models.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-core/5.4.0/lucene-core-5.4.0.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/apache/lucene/lucene-analyzers-common/5.4.0/lucene-analyzers-common-5.4.0.jar"/>
+            <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/uk/org/lidalia/sysout-over-slf4j/1.0.2/sysout-over-slf4j-1.0.2.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/junit/junit/4.12/junit-4.12.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="/home/eike/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar"/>
         </jar>
diff --git a/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java b/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java
index 79d0ccc09c2d8d4979f603d7d45f476fc9d99227..9a3ec6a8f6fb8781bd6db59f62f561a50c136bd1 100644
--- a/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java
+++ b/vipra-rest/src/main/java/de/vipra/rest/resource/ArticleResource.java
@@ -38,6 +38,8 @@ import de.vipra.util.ex.DatabaseException;
 import de.vipra.util.model.Article;
 import de.vipra.util.service.DatabaseService;
 
+import static de.vipra.rest.resource.ResourceHelper.*;
+
 @Path("articles")
 public class ArticleResource {
 
@@ -171,7 +173,7 @@ public class ArticleResource {
 	}
 
 	private Article getSingle(String id, String[] fields) {
-		if (fields.length == 0) {
+		if (fields == null || fields.length == 0) {
 			Article article = cache.get(id);
 			if (article == null) {
 				article = service.getSingle(MongoUtils.objectId(id));
@@ -183,13 +185,4 @@ public class ArticleResource {
 			return service.getSingle(MongoUtils.objectId(id), fields);
 	}
 
-	private String[] getFields(String fields) {
-		if (fields == null)
-			return null;
-		fields = fields.trim();
-		if (fields.length() == 0)
-			return null;
-		return fields.split(",");
-	}
-
 }
diff --git a/vipra-rest/src/main/java/de/vipra/rest/resource/ResourceHelper.java b/vipra-rest/src/main/java/de/vipra/rest/resource/ResourceHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..af609e9719a99a34086abf88ab6f50cc12a28586
--- /dev/null
+++ b/vipra-rest/src/main/java/de/vipra/rest/resource/ResourceHelper.java
@@ -0,0 +1,14 @@
+package de.vipra.rest.resource;
+
+public class ResourceHelper {
+
+	public static String[] getFields(String fields) {
+		if (fields == null)
+			return null;
+		fields = fields.trim();
+		if (fields.length() == 0)
+			return null;
+		return fields.split(",");
+	}
+
+}
diff --git a/vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java b/vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java
index bf471644813542a3ae88a257b75c44aaae96ee5e..20f7c1661ef1a42b0ddbc5c3fe0b08ff0491c169 100644
--- a/vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java
+++ b/vipra-rest/src/main/java/de/vipra/rest/resource/TopicResource.java
@@ -32,6 +32,8 @@ import de.vipra.util.ex.DatabaseException;
 import de.vipra.util.model.TopicFull;
 import de.vipra.util.service.DatabaseService;
 
+import static de.vipra.rest.resource.ResourceHelper.*;
+
 @Path("topics")
 public class TopicResource {
 
@@ -56,7 +58,7 @@ public class TopicResource {
 	@GET
 	@Produces(APIMediaType.APPLICATION_JSONAPI)
 	public Response getTopics(@QueryParam("skip") Integer skip, @QueryParam("limit") Integer limit,
-			@QueryParam("sort") @DefaultValue("date") String sortBy, @QueryParam("fields") String fields) {
+			@QueryParam("sort") @DefaultValue("name") String sortBy, @QueryParam("fields") String fields) {
 		Wrapper<List<TopicFull>> res = new Wrapper<>();
 
 		if (skip != null && limit != null)
@@ -122,7 +124,7 @@ public class TopicResource {
 	}
 
 	private TopicFull getSingle(String id, String[] fields) {
-		if (fields.length == 0) {
+		if (fields == null || fields.length == 0) {
 			TopicFull topic = cache.get(id);
 			if (topic == null) {
 				topic = service.getSingle(MongoUtils.objectId(id));
@@ -134,13 +136,4 @@ public class TopicResource {
 			return service.getSingle(MongoUtils.objectId(id), fields);
 	}
 
-	private String[] getFields(String fields) {
-		if (fields == null)
-			return null;
-		fields = fields.trim();
-		if (fields.length() == 0)
-			return null;
-		return fields.split(",");
-	}
-
 }
diff --git a/vipra-rest/src/main/java/de/vipra/rest/resource/WordResource.java b/vipra-rest/src/main/java/de/vipra/rest/resource/WordResource.java
index b765eafbb94b409a582d605bdc506069fb898a13..fbb002e9131d7ad48f1165cca71eee23793c6e24 100644
--- a/vipra-rest/src/main/java/de/vipra/rest/resource/WordResource.java
+++ b/vipra-rest/src/main/java/de/vipra/rest/resource/WordResource.java
@@ -28,6 +28,8 @@ import de.vipra.util.ex.ConfigException;
 import de.vipra.util.model.Word;
 import de.vipra.util.service.DatabaseService;
 
+import static de.vipra.rest.resource.ResourceHelper.*;
+
 @Path("words")
 public class WordResource {
 
@@ -100,7 +102,7 @@ public class WordResource {
 	}
 
 	private Word getSingle(String id, String[] fields) {
-		if (fields.length > 0) {
+		if (fields == null || fields.length == 0) {
 			Word word = cache.get(id);
 			if (word == null) {
 				word = service.getSingle(id);
@@ -112,13 +114,4 @@ public class WordResource {
 			return service.getSingle(id, fields);
 	}
 
-	private String[] getFields(String fields) {
-		if (fields == null)
-			return null;
-		fields = fields.trim();
-		if (fields.length() == 0)
-			return null;
-		return fields.split(",");
-	}
-
 }
diff --git a/vipra-ui/app/adapters/application.js b/vipra-ui/app/adapters/application.js
index 0d442b61c170d4fa40db3aae849cc2e0cc783dc3..c14dc91b50c796761e9b28c764ce301880937f35 100644
--- a/vipra-ui/app/adapters/application.js
+++ b/vipra-ui/app/adapters/application.js
@@ -1,7 +1,7 @@
 import DS from 'ember-data';
 
 export default DS.JSONAPIAdapter.extend({
-  host: `http://${window.location.hostname}:8080`,
+  host: `http://${window.location.hostname}:8000`,
   namespace: 'vipra-rest',
   updateRecord(store, type, snapshot) {
     var data = {};
diff --git a/vipra-ui/app/helpers/pluralize.js b/vipra-ui/app/helpers/pluralize.js
new file mode 100644
index 0000000000000000000000000000000000000000..56141b218fd1167469292a067fb4d9828d9b687a
--- /dev/null
+++ b/vipra-ui/app/helpers/pluralize.js
@@ -0,0 +1,10 @@
+import Ember from 'ember';
+
+export function pluralize(params) {
+  let number = params[0],
+      singular = params[1],
+      plural = params[2] || singular + 's';
+ return number === 1 ? singular : plural;
+}
+
+export default Ember.Helper.helper(pluralize);
diff --git a/vipra-ui/app/routes/articles/show.js b/vipra-ui/app/routes/articles/show.js
index f825a14d961dea9a0dc15397b32bc1913ff02020..ce7f5d05452b96d35ccc8fcf14c713738a63987c 100644
--- a/vipra-ui/app/routes/articles/show.js
+++ b/vipra-ui/app/routes/articles/show.js
@@ -1,6 +1,10 @@
 import Ember from 'ember';
 
 export default Ember.Route.extend({
+  renderTemplate() {
+    this.render();
+  },
+
   model(params) {
     return Ember.RSVP.hash({
       article: this.store.find('article', params.article_id),
diff --git a/vipra-ui/app/styles/app.scss b/vipra-ui/app/styles/app.scss
index a3dd94429064050667350bfcb0ad548e7f99f94c..1e691064b7afc7e32b81667ea8b99ee4dd132937 100644
--- a/vipra-ui/app/styles/app.scss
+++ b/vipra-ui/app/styles/app.scss
@@ -1,5 +1,6 @@
-td {
-  vertical-align: top;
+body {
+  // for navbar
+  padding-top: 60px;
 }
 
 .word {
diff --git a/vipra-ui/app/templates/application.hbs b/vipra-ui/app/templates/application.hbs
index 683e96974dcf0c4a947830a4146936cbd6d9aabd..395c3aea15e0d260460c1915d17a09130b9d6c82 100644
--- a/vipra-ui/app/templates/application.hbs
+++ b/vipra-ui/app/templates/application.hbs
@@ -1,4 +1,4 @@
-<nav class="navbar navbar-default">
+<nav class="navbar navbar-default navbar-fixed-top">
   <div class="container-fluid">
     <!-- Brand and toggle get grouped for better mobile display -->
     <div class="navbar-header">
@@ -22,9 +22,12 @@
             <li>{{#link-to 'words'}}Words{{/link-to}}</li>
           </ul>
         </li>
+        {{outlet 'menu-left'}}
       </ul>
     </div><!-- /.navbar-collapse -->
   </div><!-- /.container-fluid -->
 </nav>
 
-{{outlet}}
\ No newline at end of file
+<div class="container-fluid">
+  {{outlet}}
+</div>
\ No newline at end of file
diff --git a/vipra-ui/app/templates/articles.hbs b/vipra-ui/app/templates/articles.hbs
index 0eb9f06bf25571584dd42a1eb2509b6e6985ca73..e2147cab02d61b24bccf33f448609ff7bf5ad470 100644
--- a/vipra-ui/app/templates/articles.hbs
+++ b/vipra-ui/app/templates/articles.hbs
@@ -1,6 +1 @@
-<h1>Articles</h1>
-{{#link-to 'index'}}Top{{/link-to}}
-{{#link-to 'articles'}}All{{/link-to}}
-<hr>
-
 {{outlet}}
\ No newline at end of file
diff --git a/vipra-ui/app/templates/articles/index.hbs b/vipra-ui/app/templates/articles/index.hbs
index e975dcaae2c20db5fc786a227795c71cea31dc7b..69560732e8eda908f365433252148a359a09aa53 100644
--- a/vipra-ui/app/templates/articles/index.hbs
+++ b/vipra-ui/app/templates/articles/index.hbs
@@ -1,7 +1,10 @@
+<h1>Articles</h1>
+
 {{dynamic-high-charts content=model.chartData chartOptions=model.chartOptions}}
 
-<h2>Found articles</h2>
+{{debounced-input class='form-control' placeholder='Filter' size='50' value=filter debounce='150'}}
 
-{{debounced-input placeholder='Filter' size='50' value=filter debounce='150'}}
+<br>
+{{items-list items=model.articles filter=filter route='articles.show'}}
 
-{{items-list items=model.articles filter=filter route='articles.show'}}
\ No newline at end of file
+{{outlet}}
\ No newline at end of file
diff --git a/vipra-ui/app/templates/articles/show.hbs b/vipra-ui/app/templates/articles/show.hbs
index bcddff844c6ad60c7bd715799cc4b4ed9b1489c2..a5cc88755e7f6bf5ebfc4c7121b4d3087b6c266d 100644
--- a/vipra-ui/app/templates/articles/show.hbs
+++ b/vipra-ui/app/templates/articles/show.hbs
@@ -1,30 +1,28 @@
-<h2>{{model.article.title}}</h2>
+<h2>&laquo;{{model.article.title}}&raquo;</h2>
 
-<h3>Info</h3>
-
-<dl>
-  <dt>Date</dt>
-  <dd>{{model.article.date}}</dd>
-  <dt>URL</dt>
-  <dd><a href="{{model.article.url}}">{{model.article.url}}</a></dd>
-  <dt>Word count</dt>
-  <dd>{{model.article.stats.wordCount}}</dd>
-</dl>
-
-<h3>Topics</h3>
-
-{{#each model.article.topics as |topicRef|}}
-  [{{#topic-link topic=topicRef.topic}} ({{topic-share topicRef.count model.article.stats.wordCount}}%){{/topic-link}}]
-{{/each}}
-
-<h3>Statistics</h3>
-
-<table>
+<table class="table table-bordered table-condensed">
   <tbody>
-    
+    <tr>
+      <td>Date</td>
+      <td>{{model.article.date}}</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td><a href="{{model.article.url}}">{{model.article.url}}</a></td>
+    </tr>
+    <tr>
+      <td>Topics</td>
+      <td>
+        {{#each model.article.topics as |topicRef|}}
+          [{{#topic-link topic=topicRef.topic}} ({{topic-share topicRef.count model.article.stats.wordCount}}%){{/topic-link}}]
+        {{/each}}
+      </td>
+    </tr>
+    <tr>
+      <td>Word count</td>
+      <td>{{model.article.stats.wordCount}}</td>
+    </tr>
   </tbody>
 </table>
 
-<h3>Content</h3>
-
 {{model.article.text}}
\ No newline at end of file
diff --git a/vipra-ui/app/templates/topics.hbs b/vipra-ui/app/templates/topics.hbs
index 9ae6d0517b2055c8d3babf6e5b0391fc132f4858..e2147cab02d61b24bccf33f448609ff7bf5ad470 100644
--- a/vipra-ui/app/templates/topics.hbs
+++ b/vipra-ui/app/templates/topics.hbs
@@ -1,6 +1 @@
-<h1>Topics</h1>
-{{#link-to 'index'}}Top{{/link-to}}
-{{#link-to 'topics'}}All{{/link-to}}
-<hr>
-
 {{outlet}}
\ No newline at end of file
diff --git a/vipra-ui/app/templates/topics/index.hbs b/vipra-ui/app/templates/topics/index.hbs
index 9b46b3c2f774c505cb51fdd36180f9b84be0160c..9e5af69add58901f8f9eeb7e458deab6d2c9ddfd 100644
--- a/vipra-ui/app/templates/topics/index.hbs
+++ b/vipra-ui/app/templates/topics/index.hbs
@@ -1,5 +1,6 @@
-<h2>Found topics</h2>
+<h1>Topics</h1>
 
-{{debounced-input placeholder='Filter' size='50' value=filter debounce='150'}}
+{{debounced-input class='form-control' placeholder='Filter' size='50' value=filter debounce='150'}}
 
+<br>
 {{items-list items=model.topics filter=filter route='topics.show'}}
\ No newline at end of file
diff --git a/vipra-ui/app/templates/topics/show/index.hbs b/vipra-ui/app/templates/topics/show/index.hbs
index c2787301e1a5e68e5cb47d9612d7382106671a5a..4b793c056a379b00dec38bfe58f3bd805d7ff3dc 100644
--- a/vipra-ui/app/templates/topics/show/index.hbs
+++ b/vipra-ui/app/templates/topics/show/index.hbs
@@ -1,10 +1,6 @@
-{{#link-to 'topics.show.edit'}}Edit{{/link-to}}
-
 <h2>{{model.topic._name}}</h2>
 
-<h3>Words</h3>
-
-<table>
+<table class="table table-striped table-bordered table-condensed">
   <thead>
     <tr>
       <th>Word</th>
@@ -14,7 +10,7 @@
   <tbody>
     {{#each model.topic.words as |word|}}
       <tr>
-        <td>{{word.word}}</td>
+        <td>{{#link-to 'words.show' word.word}}{{word.word}}{{/link-to}}</td>
         <td>{{word.likeliness}}</td>
       </tr>
     {{/each}}
diff --git a/vipra-ui/app/templates/words.hbs b/vipra-ui/app/templates/words.hbs
index 13d6081cc820dfd630a278038b27fd369cb369f5..e2147cab02d61b24bccf33f448609ff7bf5ad470 100644
--- a/vipra-ui/app/templates/words.hbs
+++ b/vipra-ui/app/templates/words.hbs
@@ -1,6 +1 @@
-<h1>Words</h1>
-{{#link-to 'index'}}Top{{/link-to}}
-{{#link-to 'words'}}All{{/link-to}}
-<hr>
-
 {{outlet}}
\ No newline at end of file
diff --git a/vipra-ui/app/templates/words/index.hbs b/vipra-ui/app/templates/words/index.hbs
index 3f0dc91ae968739398804f6c5d07d78309bcca04..c1de00df849d88048544e85ef9aaa502e4ed7f42 100644
--- a/vipra-ui/app/templates/words/index.hbs
+++ b/vipra-ui/app/templates/words/index.hbs
@@ -1,3 +1,10 @@
-<h2>Found words</h2>
+<h1>Words</h1>
 
-{{items-list items=model.words filter=filter route='words.show'}}
\ No newline at end of file
+<br>
+<p>
+  {{model.words.length}} {{pluralize model.words.length 'Word'}} in the database:
+</p>
+
+{{#each model.words as |word|}}
+  {{#link-to 'words.show' word.id}}{{word.id}}{{/link-to}}
+{{/each}}
\ No newline at end of file
diff --git a/vipra-ui/bower.json b/vipra-ui/bower.json
index b8a8349750addd1685ed3a01b35a24aaf64483e0..150691531fd4640e623516fc8b7bf6dd6a8cf64d 100644
--- a/vipra-ui/bower.json
+++ b/vipra-ui/bower.json
@@ -1,7 +1,7 @@
 {
   "name": "vipra-ui",
   "dependencies": {
-    "ember": "2.2.0",
+    "ember": "2.3.0",
     "ember-cli-shims": "0.0.6",
     "ember-cli-test-loader": "0.2.1",
     "ember-data": "2.2.1",
diff --git a/vipra-ui/tests/unit/helpers/pluralize-test.js b/vipra-ui/tests/unit/helpers/pluralize-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..12ce3b9da4b368646e85364459ac3b05a6c19e4c
--- /dev/null
+++ b/vipra-ui/tests/unit/helpers/pluralize-test.js
@@ -0,0 +1,10 @@
+import { pluralize } from '../../../helpers/pluralize';
+import { module, test } from 'qunit';
+
+module('Unit | Helper | pluralize');
+
+// Replace this with your real tests.
+test('it works', function(assert) {
+  let result = pluralize(42);
+  assert.ok(result);
+});