diff --git a/build.gradle b/build.gradle
index 8cc8f591aaea1e005591b5faf21caa920cb267af..eb5f665e18afababc1a7d4e8b3e546776af1be56 100644
--- a/build.gradle
+++ b/build.gradle
@@ -292,7 +292,7 @@ jastadd {
     parser.genDir = "src/gen/java/de/tudresden/inf/st/pnml/jastadd/parser"
 
 //  default options are: '--rewrite=cnta', '--safeLazy', '--visitCheck=false', '--cacheCycle=false'
-    extraJastAddOptions = ['--List=JastAddList'] // '--incremental=param'
+    extraJastAddOptions = ['--List=JastAddList', '--lineColumnNumbers'] // '--incremental=param'
 }
 
 // publish gitlab project
diff --git a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java
index 510c863aebdcf016e57e5d893615fe55bac6a2b0..3530895e3097224f6a117ebdf451029e2ad9bd61 100644
--- a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java
+++ b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java
@@ -35,7 +35,6 @@ public final class PnmlConstants {
     // service related keys
     public static final String TRANSITION_TYPE_SERVICE = "serviceTransitionType";
     public static final String SERVICE_NAME = "serviceName";
-    public static final String SERVICE_INSTANCE = "serviceInstance";
     public static final String TRANSITION_SERVICE_SERVER_IN_KEY = "serverInput";
     public static final String TRANSITION_SERVICE_SERVER_OUT_KEY = "serverOutput";
     public static final String TRANSITION_SERVICE_CHANNELS_KEY = "channels";
diff --git a/src/main/jastadd/base/clauses/ExpressionParser.beaver b/src/main/jastadd/base/clauses/ExpressionParser.beaver
index 86cb1da18944b769aaacc4e964a09fdf7a849626..ca42a0fe5637f549fd3cab1ab6fe04b763710d77 100644
--- a/src/main/jastadd/base/clauses/ExpressionParser.beaver
+++ b/src/main/jastadd/base/clauses/ExpressionParser.beaver
@@ -6,22 +6,34 @@ package de.tudresden.inf.st.pnml.jastadd.parser;
 %terminals NOT;
 %terminals LP;
 %terminals RP;
-%terminals VARIABLE;
-%typeof goal = "conjunctions";
-%typeof conjunction = "Conjunction";
+%terminals IDENTIFIER;
+%typeof goal = "disjunctions";
+%typeof disjunction = "Disjunction";
+%typeof disjunction_list = "JastAddList";
+%typeof literal_list = "JastAddList";
+%typeof literal = "Literal";
 %goal goal;
 goal =
-    conjunction.conjunction {: return new Symbol(new InputSignalClause(conjunction)); :}
+    disjunction_list.dl {: return new Symbol(new InputSignalClause(dl)); :}
   ;
-exp =
-    exp.a AND.AND exp.b {: return new Symbol(new AndExp(a, b)); :}
 
-  | exp.a OR.OR exp.b {: return new Symbol(new OrExp(a, b)); :}
+disjunction_list =
+                                               {: return new Symbol(new JastAddList<Disjunction>()); :}
+  | disjunction.d                              {: return new Symbol(new JastAddList<Disjunction>().add(d)); :}
+  | disjunction.d AND disjunction_list.dl      {: return new Symbol(dl.add(d)); :}
+  ;
 
-  | NOT.NOT exp.exp {: return new Symbol(new NotExp(exp)); :}
+disjunction =
+  LP literal_list.ll RP  {: return new Symbol(new Disjunction(ll)); :}
+  ;
 
-  | NOT.NOT Literal.Literal {: return new Symbol(new NegativeLiteral(((String)v.value))); :}
+literal_list =
+  literal.l                                {: return new Symbol(new JastAddList<Literal>().add(l)); :}
+  | literal.l OR literal_list.ll           {: return new Symbol(ll.add(l)); :}
+  ;
 
-  | Literal.Literal {: return new Symbol(new PositiveLiteral(((String)v.value))); :}
+literal =
+  NOT IDENTIFIER.literal {: return new Symbol(new NegativeLiteral(((String)literal.value))); :}
+  | IDENTIFIER.literal   {: return new Symbol(new PositiveLiteral(((String)literal.value))); :}
   ;
 
diff --git a/src/main/jastadd/base/clauses/expressions.flex b/src/main/jastadd/base/clauses/expressions.flex
index 32db549283eb6be57e00adf9941dcbdce5fd028e..ea1d74b9534b98effb072a87f825eeab0a47efdd 100644
--- a/src/main/jastadd/base/clauses/expressions.flex
+++ b/src/main/jastadd/base/clauses/expressions.flex
@@ -37,5 +37,8 @@ Variable = [:jletter:][:jletterdigit:]*
 "NOT"         { return sym(Terminals.NOT); }
 "("           { return sym(Terminals.LP); }
 ")"           { return sym(Terminals.RP); }
-{Variable}    { return sym(Terminals.VARIABLE); }
+{Variable}    { return sym(Terminals.IDENTIFIER); }
 <<EOF>>       { return sym(Terminals.EOF); }
+
+/* error fallback */
+[^]            { throw new Error("Illegal character '"+ yytext() +"' at line " + (yyline+1) + " column " + (yycolumn+1)); }
\ No newline at end of file
diff --git a/src/main/jastadd/base/clauses/expressions.jadd b/src/main/jastadd/base/clauses/expressions.jadd
index 635601127cae1688ac6a9ab986f33393693ba6cb..0f1967fca191b3c50ec569d7b5240f933737e799 100644
--- a/src/main/jastadd/base/clauses/expressions.jadd
+++ b/src/main/jastadd/base/clauses/expressions.jadd
@@ -2,28 +2,67 @@ import de.tudresden.inf.st.pnml.base.data.ClauseValuesDefinition;
 
 aspect SignalExpressions {
 
-    syn String ASTNode.printExp();
-    syn boolean Exp.eval(ClauseValuesDefinition defs);
+    syn boolean Literal.isPositiveLiteral() = false;
+    eq PositiveLiteral.isPositiveLiteral() = true;
 
-    eq ASTNode.printExp() = "";
+    syn boolean Literal.isNegativeLiteral() = false;
+    eq NegativeLiteral.isNegativeLiteral() = true;
+
+    syn String ASTNode.printClause();
+    eq ASTNode.printClause() = "";
+    eq Literal.printClause() = getName();
+
+    eq InputSignalClause.printClause() {
 
-    eq InputSignalClause.printExp() {
         String result = "";
+        if(getDisjunctionList() != null){
+
+            int j = 0;
+            for(Disjunction dj : getDisjunctionList()){
+
+                int i = 0;
+                for(Literal l : dj.getLiteralList()){
+                    result += "(";
+                    if(i < dj.getNumLiteral()){
+                        result += l.printClause() + " OR ";
+                    } else {
+                        result += l.printClause();
+                    }
+
+                    result += ")";
+                    i++;
+                }
 
-        if(getExp() != null){
-            result+=getExp().printExp();
+                if(j < getNumDisjunction()){
+                    result += " AND ";
+                }
+                j++;
+            }
         }
         return result;
     }
 
-    eq AndExp.printExp() = getA().printExp() + " AND " + getB().printExp();
-    eq OrExp.printExp()  = getA().printExp() + " OR " + getB().printExp();
-    eq Var.printExp() = getName();
-    eq NotExp.printExp() = "NOT " + getExp().printExp();
+    syn boolean ASTNode.evalClause(ClauseValuesDefinition defs);
+    eq ASTNode.evalClause(ClauseValuesDefinition defs) = false;
 
-    eq AndExp.eval(ClauseValuesDefinition defs) = getA().eval(defs) && getB().eval(defs);
-    eq OrExp.eval(ClauseValuesDefinition defs)  = getA().eval(defs) || getB().eval(defs);
-    eq Var.eval(ClauseValuesDefinition defs) = defs.getDef(this.getName());
-    eq NotExp.eval(ClauseValuesDefinition defs) = !getExp().eval(defs);
+    eq PositiveLiteral.evalClause(ClauseValuesDefinition defs) = defs.getDef(this.getName());
+    eq NegativeLiteral.evalClause(ClauseValuesDefinition defs) = !defs.getDef(this.getName());
 
+    eq Disjunction.evalClause(ClauseValuesDefinition defs) {
+        for(Literal l : getLiteralList()){
+            if(l.evalClause(defs) == true){
+                return true;
+            }
+        }
+        return false;
+    }
+
+    eq InputSignalClause.evalClause(ClauseValuesDefinition defs) {
+        for(Disjunction dj : getDisjunctionList()){
+            if(dj.evalClause(defs) == false){
+                return false;
+            }
+        }
+        return true;
+    }
 }
\ No newline at end of file
diff --git a/src/main/jastadd/base/clauses/expressions.relast b/src/main/jastadd/base/clauses/expressions.relast
index a1aa39b640f7d746c35723804d4d18e8ff81cb95..4597a2c17ffe1be2c30cf5a8e60425e1b06e0e89 100644
--- a/src/main/jastadd/base/clauses/expressions.relast
+++ b/src/main/jastadd/base/clauses/expressions.relast
@@ -1,8 +1,6 @@
-InputSignalClause ::= Conjuction:Conjunction;
-
-Conjunction ::= Disjunction:Disjunction* ;
+InputSignalClause ::= Disjunction:Disjunction* ;
 Disjunction ::= Literal:Literal*;
 
 abstract Literal ::= <Name:String>;
 PositiveLiteral : Literal;
-NegativeLiteral : Literal;
\ No newline at end of file
+NegativeLiteral : Literal;
diff --git a/src/main/java/de/tudresden/inf/st/pnml/base/Main.java b/src/main/java/de/tudresden/inf/st/pnml/base/Main.java
index 23cccf20c741542b4804494ba33f503e1a382670..51b7f38b9ed237894138fdeb5ef6011c577cd45d 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/base/Main.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/base/Main.java
@@ -5,7 +5,5 @@ public class Main {
     public static void main(String[] args) {
 
         // Nothing to do here
-
-        // TODO: update clauses
     }
 }