diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/lda/DTMAnalyzer.java b/vipra-cmd/src/main/java/de/vipra/cmd/lda/DTMAnalyzer.java
index 57c51a0dd21682441b35e4a6c98514b4484ee2bb..54d2a8b82ab9fc171cb9551f826da8dd19501242 100644
--- a/vipra-cmd/src/main/java/de/vipra/cmd/lda/DTMAnalyzer.java
+++ b/vipra-cmd/src/main/java/de/vipra/cmd/lda/DTMAnalyzer.java
@@ -10,6 +10,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import de.vipra.cmd.ex.AnalyzerException;
+import de.vipra.cmd.file.DTMVocabulary;
 import de.vipra.util.Config;
 import de.vipra.util.Constants;
 import de.vipra.util.ConvertStream;
@@ -108,13 +109,23 @@ public class DTMAnalyzer extends Analyzer {
 
 	@Override
 	public ConvertStream<TopicFull> getTopicDefinitions() throws AnalyzerException {
-		// TODO Auto-generated method stub
+		DTMVocabulary vocab;
+		try {
+			vocab = new DTMVocabulary(modelDir, false);
+		} catch (IOException e) {
+			throw new AnalyzerException(e);
+		}
 		return null;
 	}
 
 	@Override
 	public ConvertStream<List<TopicRef>> getTopics() throws AnalyzerException {
-		// TODO Auto-generated method stub
+		DTMVocabulary vocab;
+		try {
+			vocab = new DTMVocabulary(modelDir, false);
+		} catch (IOException e) {
+			throw new AnalyzerException(e);
+		}
 		return null;
 	}
 
diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/lda/JGibbAnalyzer.java b/vipra-cmd/src/main/java/de/vipra/cmd/lda/JGibbAnalyzer.java
index 1c4843f487cadc08c4eb194fc344e55e40305598..65d021a34b255bda3f08155be05838fb7bae48e0 100644
--- a/vipra-cmd/src/main/java/de/vipra/cmd/lda/JGibbAnalyzer.java
+++ b/vipra-cmd/src/main/java/de/vipra/cmd/lda/JGibbAnalyzer.java
@@ -98,10 +98,14 @@ public class JGibbAnalyzer extends Analyzer {
 					}
 
 					// get all lines that follow until the next topic is
-					// discovered (line does not start with a tab)
+					// discovered (line does not start with a tab). Cut off
+					// after k words are gathered.
 					String nextLine;
+					int words = 0;
 					while ((nextLine = nextLine()) != null) {
 						if (nextLine.startsWith("\t")) {
+							if (words > Constants.K_TOPIC_WORDS)
+								continue;
 							String[] parts = nextLine.trim().split("\\s+");
 							try {
 								Word word = wordMap.get(parts[0]);
@@ -109,6 +113,7 @@ public class JGibbAnalyzer extends Analyzer {
 										Constants.LIKELINESS_PRECISION);
 								TopicWord topicWord = new TopicWord(word, likeliness);
 								topicWords.add(topicWord);
+								words++;
 							} catch (NumberFormatException e) {
 								log.error("could not parse number in line: " + nextLine);
 							} catch (ArrayIndexOutOfBoundsException e) {
diff --git a/vipra-cmd/src/main/resources/config.properties b/vipra-cmd/src/main/resources/config.properties
index 0e38e80b1c6f0884f2a8e30b5de9fd4ec95999ff..ca312cfdab39ca456a9fd539ec23088496d59dac 100644
--- a/vipra-cmd/src/main/resources/config.properties
+++ b/vipra-cmd/src/main/resources/config.properties
@@ -2,6 +2,6 @@ db.host=localhost
 db.port=27017
 db.name=test
 tm.processor=corenlp
-tm.analyzer=dtm
+tm.analyzer=jgibb
 tm.saveallwords=false
 tm.dtmpath=/home/eike/Downloads/dtm_release/dtm/main
\ No newline at end of file
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 7288668ba635b5b6178b19b7ca248f44c741734b..4383bd44a4680f9841f03a1274b87e34e0d3c916 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,7 @@ import de.vipra.util.StringUtils;
 import de.vipra.util.ex.ConfigException;
 import de.vipra.util.ex.DatabaseException;
 import de.vipra.util.model.ArticleFull;
+import de.vipra.util.model.Topic;
 import de.vipra.util.model.TopicFull;
 import de.vipra.util.service.MongoService;
 import de.vipra.util.service.Service.QueryBuilder;
@@ -109,9 +110,6 @@ public class TopicResource {
 		}
 
 		if (topic != null) {
-			List<ArticleFull> articles = dbArticles.getMultiple(QueryBuilder.builder().criteria("topics.topic", topic));
-			topic.setArticles(articles);
-
 			return res.ok(topic);
 		} else {
 			res.addError(new APIError(Response.Status.NOT_FOUND, "Resource not found",
@@ -120,6 +118,24 @@ public class TopicResource {
 		}
 	}
 
+	@GET
+	@Produces(MediaType.APPLICATION_JSON)
+	@Consumes(MediaType.APPLICATION_JSON)
+	@Path("{id}/articles")
+	public Response getArticles(@PathParam("id") String id, @QueryParam("fields") String fields) {
+		Wrapper<List<ArticleFull>> res = new Wrapper<>();
+		try {
+			Topic topic = new Topic(MongoUtils.objectId(id));
+			List<ArticleFull> articles = dbArticles.getMultiple(
+					QueryBuilder.builder().criteria("topics.topic", topic).fields(true, StringUtils.getFields(fields)));
+			return res.ok(articles);
+		} catch (Exception e) {
+			e.printStackTrace();
+			res.addError(new APIError(Response.Status.BAD_REQUEST, "Error", e.getMessage()));
+			return res.badRequest();
+		}
+	}
+
 	@PUT
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Produces(MediaType.APPLICATION_JSON)
diff --git a/vipra-ui/app/html/topics/show.html b/vipra-ui/app/html/topics/show.html
index 566856a5f93a3ecdc9b2356dfc324763d94270be..9ca80d168a892da0382fc54057687b90acad97bb 100644
--- a/vipra-ui/app/html/topics/show.html
+++ b/vipra-ui/app/html/topics/show.html
@@ -27,14 +27,6 @@
   </tbody>
 </table>
 
-<h3>Articles <hide-link target="#articles"/></h3>
-
-<ul class="dashed">
-  <li ng-repeat="article in ::topic.articles">
-    <article-link article="article"/>
-  </li>
-</ul>
-
 <h3>Words <hide-link target="#words"/></h3>
 
 <table class="table table-bordered table-condensed" id="words">