diff --git a/solve/src/main/jastadd/ModelNavigation.jrag b/solve/src/main/jastadd/ModelNavigation.jrag
index 9cc5ed4da66b47b82f8ac900e35338e4a912c7db..c48e1541bdf3aadf946ac9f78df85f5d7a98e4b9 100644
--- a/solve/src/main/jastadd/ModelNavigation.jrag
+++ b/solve/src/main/jastadd/ModelNavigation.jrag
@@ -111,13 +111,4 @@ aspect ModelNavigation {
   syn Comment ModelElement.asComment() = null;
   eq Comment.asComment() = this;
 
-  // ===================================================================================================================
-  // going up
-  // ===================================================================================================================
-
-  inh Post Comment.containingPost();
-  eq Post.getComment().containingPost() = this;
-  eq Comment.getComment().containingPost() = containingPost();
-  eq ModelChangeSet.getPendingNewElement().containingPost() = null;
-
 }
diff --git a/solve/src/main/jastadd/queries.jrag b/solve/src/main/jastadd/queries.jrag
index b61f0cd1130aa1912992e2974455e233387fbf57..99809e41d4d0b3cfb749d26f63cd230be0ddea4f 100644
--- a/solve/src/main/jastadd/queries.jrag
+++ b/solve/src/main/jastadd/queries.jrag
@@ -1,5 +1,6 @@
 aspect Queries {
 
+  syn int ModelElement.score() = 0;
 
   syn java.util.Set<User> User.getCommentLikerFriends(Comment comment) circular [new java.util.HashSet<User>()];
   eq User.getCommentLikerFriends(Comment comment) {
@@ -19,7 +20,7 @@ aspect Queries {
     return s;
   }
 
-  syn int Comment.score() {
+  eq Comment.score() {
     int score = 0;
     java.util.Set<java.util.Set<User>> commentLikerGroups = new java.util.HashSet();
     for (User user : likedBy()) {
@@ -32,32 +33,7 @@ aspect Queries {
     return score;
   }
 
-  syn String SocialNetwork.query2() {
-    Comment[] comments = new Comment[3];
-    for (Comment comment : comments()) {
-      int score = comment.score();
-      if (hasBetterQ2Score(comment, comments[2])) {
-        // at least better than #3
-        if (hasBetterQ2Score(comment, comments[1])) {
-          comments[2] = comments[1];
-          if (hasBetterQ2Score(comment, comments[0])) {
-            // new highscore
-            comments[1] = comments[0];
-            comments[0] = comment;
-          } else {
-            // better than second
-            comments[1] = comment;
-          }
-        } else {
-          comments[2] = comment;
-        }
-      }
-//      System.out.println(comment + ", " + java.util.Arrays.toString(comments));
-    }
-    return comments[0].getId() + "|" + comments[1].getId() + "|" + comments[2].getId();
-  }
-
-  syn int Post.score() {
+  eq Post.score() {
     int result = 0;
     for (Comment comment : commentsForPost()) {
       result += 10 + comment.likedBy().size();
@@ -71,38 +47,44 @@ aspect Queries {
     return result;
   }
 
-  syn String SocialNetwork.query1() {
-    Post[] posts = new Post[3];
-    for (Post post : getPostList()) {
-      int score = post.score();
-      if (hasBetterQ1Score(post, posts[2])) {
+  syn String SocialNetwork.query(int queryId) {
+    Iterable<? extends Submission> l;
+    switch (queryId) {
+      case 1: l = getPostList(); break;
+      case 2: l = comments(); break;
+      default: return null;
+    }
+    Submission[] elements = new Submission[3];
+    for (Submission elem : l) {
+      int score = elem.score();
+      if (elem.hasBetterScoreThan(elements[2])) {
         // at least better than #3
-        if (hasBetterQ1Score(post, posts[1])) {
-          posts[2] = posts[1];
-          if (hasBetterQ1Score(post, posts[0])) {
+        if (elem.hasBetterScoreThan(elements[1])) {
+          elements[2] = elements[1];
+          if (elem.hasBetterScoreThan(elements[0])) {
             // new highscore
-            posts[1] = posts[0];
-            posts[0] = post;
+            elements[1] = elements[0];
+            elements[0] = elem;
           } else {
             // better than second
-            posts[1] = post;
+            elements[1] = elem;
           }
         } else {
-          posts[2] = post;
+          elements[2] = elem;
         }
       }
     }
-    return posts[0].getId() + "|" + posts[1].getId() + "|" + posts[2].getId();
+    return elements[0].getId() + "|" + elements[1].getId() + "|" + elements[2].getId();
   }
 
-  private boolean SocialNetwork.hasBetterQ1Score(Post myPost, Post oldPost) {
-    return oldPost == null || myPost.score() > oldPost.score() ||
-      (myPost.score() == oldPost.score() && myPost.getTimestamp() > oldPost.getTimestamp());
+  syn boolean Submission.hasBetterScoreThan(Submission other) = false;
+  eq Post.hasBetterScoreThan(Submission other) {
+    return other == null || this.score() > other.score() ||
+      (this.score() == other.score() && this.getTimestamp() > other.getTimestamp());
   }
-
-  private boolean SocialNetwork.hasBetterQ2Score(Comment myComment, Comment oldComment) {
-    return oldComment == null || myComment.score() > oldComment.score() ||
-      (myComment.score() == oldComment.score() && myComment.getTimestamp() > oldComment.getTimestamp());
+  eq Comment.hasBetterScoreThan(Submission other) {
+    return other == null || this.score() > other.score() ||
+      (this.score() == other.score() && this.getTimestamp() > other.getTimestamp());
   }
 
 }
diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java
index 4c3ab71861562ac99854ff8192dac52a77c01262..cae22a25620362587a9d3b8afcb7dac824c1df9b 100644
--- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java
+++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/Main.java
@@ -125,7 +125,7 @@ public class Main {
       logger.info("{}.score: {}", comment, comment.score());
     }
 
-    logger.info("sn.query2: {}", sn.query2());
+    logger.info("sn.query2: {}", sn.query(2));
 
     System.exit(0);
   }
@@ -145,8 +145,8 @@ public class Main {
     logger.info("JastAdd model with {} users and {} posts",
         socialNetwork.getNumUser(), socialNetwork.getNumPost());
 
-    logger.info("Query1: {}", socialNetwork.query1());
-    logger.info("Query2: {}", socialNetwork.query2());
+    logger.info("Query1: {}", socialNetwork.query(1));
+    logger.info("Query2: {}", socialNetwork.query(2));
     printQ2Scores(socialNetwork);
 
     for (int index = 1; index <= maxChanges; index++) {
@@ -179,8 +179,8 @@ public class Main {
 
       logger.info("Validity after application of changes: {}", socialNetwork.isValid());
 
-      logger.info("Query1 after change {}: {}", index, socialNetwork.query1());
-      logger.info("Query2 after change {}: {}", index, socialNetwork.query2());
+      logger.info("Query1 after change {}: {}", index, socialNetwork.query(1));
+      logger.info("Query2 after change {}: {}", index, socialNetwork.query(2));
 
       printQ2Scores(socialNetwork);
     }
diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/SolutionQ1.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/SolutionQ1.java
index 5290a1cfd3d0b33130fa334936774d6c93a8c2f1..f5d3ccb4eabb5e6aef4732474cf01661c86a2baa 100644
--- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/SolutionQ1.java
+++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/SolutionQ1.java
@@ -8,13 +8,13 @@ public class SolutionQ1 extends Solution {
 
   @Override
   public String Initial() {
-    return this.getSocialNetwork().query1();
+    return this.getSocialNetwork().query(1);
   }
 
   @Override
   public String Update(ModelChangeSet changes) {
     apply(changes);
-    return this.getSocialNetwork().query1();
+    return this.getSocialNetwork().query(1);
   }
 
 }
diff --git a/solve/src/main/java/de/tudresden/inf/st/ttc18live/SolutionQ2.java b/solve/src/main/java/de/tudresden/inf/st/ttc18live/SolutionQ2.java
index 9ad4ff3fd6cec791ea20ec385a9369a855695e58..1003b6830245222fe50f03c920941dc73df924ce 100644
--- a/solve/src/main/java/de/tudresden/inf/st/ttc18live/SolutionQ2.java
+++ b/solve/src/main/java/de/tudresden/inf/st/ttc18live/SolutionQ2.java
@@ -6,13 +6,13 @@ public class SolutionQ2 extends Solution {
 
   @Override
   public String Initial() {
-    return getSocialNetwork().query2();
+    return getSocialNetwork().query(2);
   }
 
   @Override
   public String Update(ModelChangeSet changes) {
     apply(changes);
-    return getSocialNetwork().query2();
+    return getSocialNetwork().query(2);
   }
 
 }
diff --git a/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/Query1SortingTest.java b/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/Query1SortingTest.java
index 4dbcc13c062b88d49e2428aca17dc580bf2e3c25..aef837be775860c534140f333c0815a1bfcd8159 100644
--- a/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/Query1SortingTest.java
+++ b/solve/src/test/java/de/tudresden/inf/st/ttc18live/test/Query1SortingTest.java
@@ -99,7 +99,7 @@ public class Query1SortingTest {
 
   private void assertQuery1(SocialNetwork sut, long firstId, long secondId, long thirdId) {
     printNetwork(sut);
-    String actualAnswer = sut.query1();
+    String actualAnswer = sut.query(1);
     String[] ids = actualAnswer.split("\\|");
     System.out.println("Got '" + actualAnswer + "'");
     assertEquals(3, ids.length);