diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
index 65a907c..aef3f6e 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusTree.java
@@ -23,6 +23,7 @@
 import de.ids_mannheim.korap.query.PoliqarpPlusLexer;
 import de.ids_mannheim.korap.query.PoliqarpPlusParser;
 import de.ids_mannheim.korap.query.serialize.AbstractSyntaxTree;
+import de.ids_mannheim.korap.util.QueryException;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -127,6 +128,7 @@
 	 * The class further maintains a set of stacks which effectively keep track of which objects to embed in which containing objects. 
 	 * 
 	 * @param query The syntax tree as returned by ANTLR
+	 * @throws QueryException 
 	 */
 	public PoliqarpPlusTree(String query) {
 		try {
@@ -137,7 +139,12 @@
 				query = query.replaceAll(" ", "");
 				process(query);
 			} else {
-				throw new RuntimeException("Error handling query.");
+				try {
+					throw new QueryException("Error handling query.");
+				} catch (QueryException e1) {
+					e1.printStackTrace();
+					System.exit(1);
+				}
 			}
 		}
 		System.out.println(">>> "+requestMap.get("query")+" <<<");
@@ -178,11 +185,15 @@
 	
 	@Override
 	public void process(String query) {
-		ParseTree tree;
+		ParseTree tree = null;
 		try {
 			tree = parsePoliqarpQuery(query);
-		} catch (IllegalArgumentException e) {
-			tree = parsePoliqarpQuery(query.replaceAll(" ", ""));
+		} catch (QueryException e) {
+			try {
+				tree = parsePoliqarpQuery(query.replaceAll(" ", ""));
+			} catch (QueryException e1) {
+				System.exit(1);
+			}
 		}
 		System.out.println("Processing PoliqarpPlus");
 		prepareContext();
@@ -262,7 +273,7 @@
 						stackedTokens++;
 						objectStack.push(sequence);
 						stackedObjects++;
-					// else, it's a group (with shrink()/spanclass/... as child)
+					// else, it's a group (with shrink()/spanclass/align... as child)
 					} else {
 						sequence.put("@type", "korap:group");
 					}
@@ -506,6 +517,36 @@
 			} 
 		}
 		
+		if (nodeCat.equals("cq_seg_align")) {
+			LinkedHashMap<String,Object> alignGroup = new LinkedHashMap<String,Object>();
+			objectStack.push(alignGroup);
+			stackedObjects++;
+			// Step I: get info
+			// find position of ^ operator
+			Integer i;
+			for (i=0; i<node.getChildCount(); i++) {
+				if (node.getChild(i).toStringTree(poliqarpParser).startsWith("^")) {
+					break;
+				}
+			}
+			// fill group
+			alignGroup.put("@type", "korap:group");
+			alignGroup.put("relation", "align");
+			alignGroup.put("align", i);
+			alignGroup.put("operands", new ArrayList<Object>());
+			// Step II: decide where to put the group
+			// add group to sequence only if it is not an only child (in that case, sq_segments has already added the info and is just waiting for the relevant info)
+			if (node.getParent().getChildCount()>1) {
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+				topSequenceOperands.add(alignGroup); 
+			} else if (openNodeCats.get(2).equals("query")) {
+				requestMap.put("query", alignGroup);	
+			} else {
+				ArrayList<Object> topSequenceOperands = (ArrayList<Object>) objectStack.get(1).get("operands");
+				topSequenceOperands.add(alignGroup); 
+			}
+		}
+		
 		if (nodeCat.equals("element")) {
 			// Step I: determine whether to create new token or get token from the stack (if added by cq_segments)
 			LinkedHashMap<String, Object> elem;
@@ -747,24 +788,23 @@
 		return false;
 	}
 	
-	private static void checkUnbalancedPars(String q) throws IllegalArgumentException {
+	private static void checkUnbalancedPars(String q) throws QueryException {
 		int openingPars = StringUtils.countMatches(q, "(");
 		int closingPars = StringUtils.countMatches(q, ")");
 		int openingBrkts = StringUtils.countMatches(q, "[");
 		int closingBrkts = StringUtils.countMatches(q, "]");
 		int openingBrcs = StringUtils.countMatches(q, "{");
 		int closingBrcs = StringUtils.countMatches(q, "}");
-		// TODO change to Query Exception as soon as KorAP-lucene-index installs
-		if (openingPars != closingPars) throw new IllegalArgumentException(
+		if (openingPars != closingPars) throw new QueryException(
 				"Your query string contains an unbalanced number of parantheses.");
-		if (openingBrkts != closingBrkts) throw new IllegalArgumentException(
+		if (openingBrkts != closingBrkts) throw new QueryException(
 				"Your query string contains an unbalanced number of brackets.");
-		if (openingBrcs != closingBrcs) throw new IllegalArgumentException(
+		if (openingBrcs != closingBrcs) throw new QueryException(
 				"Your query string contains an unbalanced number of braces.");
 		
 	}
 	
-	private static ParserRuleContext parsePoliqarpQuery (String p) throws IllegalArgumentException {
+	private static ParserRuleContext parsePoliqarpQuery (String p) throws QueryException {
 		checkUnbalancedPars(p);
 		
 		Lexer poliqarpLexer = new PoliqarpPlusLexer((CharStream)null);
@@ -792,8 +832,7 @@
 	      System.err.println( e.getMessage() );
 	    }
 	    
-	    // TODO change to Query Exception as soon as KorAP-lucene-index installs
-	    if (tree==null) throw new IllegalArgumentException(
+	    if (tree==null) throw new QueryException(
 	    		"The query you specified could not be processed. Please make sure it is well-formed.");
 	    
 	    // Return the generated tree
@@ -816,19 +855,20 @@
 //				"<s>([base=bar][base=foo])*",
 //				"<s>[orth=Mann]([base=bar][base=foo])*",
 //				"<s><np>([base=bar][base=foo])*",
-				"shrink(1:contains(<s>,{1:<np>}))",
-				"contains(<s>,startswith(<np>,[p=Det]))",
-				"shrink(1: contains(<s>,{1:<np>}))",
-				"contains(<s>, startswith(<np>,[p=Det]))",
-				
-				
-				
+//				"shrink(1:contains(<s>,{1:<np>}))",
+//				"contains(<s>,startswith(<np>,[p=Det]))",
+//				"shrink(1: contains(<s>,{1:<np>}))",
+//				"contains(<s>, startswith(<np>,[p=Det]))",
+//				
+//				"[orth=der]^[orth=Mann]",
+//				"([base=bar][base=foo])*",
+				"([base=a]^[base=b])|[base=c]"
 		};
-//		PoliqarpPlusTree.verbose=true;
+		PoliqarpPlusTree.debug=true;
 		for (String q : queries) {
 			try {
 				System.out.println(q);
-//				System.out.println(PoliqarpPlusTree.parsePoliqarpQuery(q).toStringTree(PoliqarpPlusTree.poliqarpParser));
+				System.out.println(PoliqarpPlusTree.parsePoliqarpQuery(q).toStringTree(PoliqarpPlusTree.poliqarpParser));
 				@SuppressWarnings("unused")
 				PoliqarpPlusTree pt = new PoliqarpPlusTree(q);
 				System.out.println(q);
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java b/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
index 0f68298..a1aacdd 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
@@ -3,6 +3,9 @@
 import com.fasterxml.jackson.core.JsonGenerationException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
+
+import de.ids_mannheim.korap.util.QueryException;
+
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
@@ -26,6 +29,7 @@
 
     /**
      * @param args
+     * @throws QueryException 
      */
     public static void main(String[] args) {
         /*
@@ -81,7 +85,9 @@
                 e.printStackTrace();
             } catch (IOException e) {
                 e.printStackTrace();
-            }
+            } catch (QueryException e) {
+				e.printStackTrace();
+			}
         }
     }
 
@@ -95,9 +101,10 @@
      * @throws JsonGenerationException
      * @throws JsonMappingException
      * @throws IOException
+     * @throws QueryException 
      */
     public void run(String query, String queryLanguage, String outFile)
-            throws JsonGenerationException, JsonMappingException, IOException {
+            throws JsonGenerationException, JsonMappingException, IOException, QueryException {
         if (queryLanguage.equals("poliqarp")) {
             ast = new PoliqarpPlusTree(query);
 //		} else if (queryLanguage.equals("cosmas")) {
@@ -105,7 +112,7 @@
         } else if (queryLanguage.equals("poliqarpplus")) {
             ast = new PoliqarpPlusTree(query);
         } else {
-            throw new IllegalArgumentException(queryLanguage + " is not a supported query language!");
+            throw new QueryException(queryLanguage + " is not a supported query language!");
         }
         Map<String, Object> requestMap = ast.getRequestMap();
         mapper.writeValue(new File(outFile), requestMap);
@@ -113,7 +120,7 @@
 
     public String run(String query, String ql, List<String> parents,
                       String cli, String cri, int cls, int crs, int page, int num)
-            throws IllegalArgumentException{
+            throws QueryException{
         if (ql.toLowerCase().equals("poliqarp")) {
             ast = new PoliqarpPlusTree(query);
 //		} else if (ql.toLowerCase().equals("cosmas")) {
@@ -121,7 +128,7 @@
         } else if (ql.toLowerCase().equals("poliqarpplus")) {
             ast = new PoliqarpPlusTree(query);
         } else {
-            throw new IllegalArgumentException(ql + " is not a supported query language!");
+            throw new QueryException(ql + " is not a supported query language!");
         }
         Map<String, Object> requestMap = ast.getRequestMap();
         MetaQuery metaQuery = new MetaQuery();
diff --git a/src/test/java/MetaQuerySerializationTest.java b/src/test/java/MetaQuerySerializationTest.java
index f9a13cf..a1c1879 100644
--- a/src/test/java/MetaQuerySerializationTest.java
+++ b/src/test/java/MetaQuerySerializationTest.java
@@ -3,6 +3,8 @@
 import com.fasterxml.jackson.databind.JsonMappingException;
 import de.ids_mannheim.korap.query.serialize.QuerySerializer;
 import de.ids_mannheim.korap.query.serialize.MetaQuery;
+import de.ids_mannheim.korap.util.QueryException;
+
 import org.joda.time.DateTime;
 import org.junit.Assert;
 import org.junit.Test;
@@ -83,7 +85,7 @@
     }
 
     @Test
-    public void testGenerator() {
+    public void testGenerator() throws QueryException {
                    /*
          * just for testing...
 		 */
diff --git a/src/test/java/PoliqarpPlusTreeTest.java b/src/test/java/PoliqarpPlusTreeTest.java
index 71aef54..64a56df 100644
--- a/src/test/java/PoliqarpPlusTreeTest.java
+++ b/src/test/java/PoliqarpPlusTreeTest.java
@@ -3,6 +3,7 @@
 import org.junit.Test;
 
 import de.ids_mannheim.korap.query.serialize.PoliqarpPlusTree;
+import de.ids_mannheim.korap.util.QueryException;
 
 public class PoliqarpPlusTreeTest {
 	
@@ -15,7 +16,7 @@
 		return str.equals(mapStr);
 	}
 	
-	private boolean equalsQueryContent(String res, String query) {
+	private boolean equalsQueryContent(String res, String query) throws QueryException {
 		res = res.replaceAll(" ", "");
 		ppt = new PoliqarpPlusTree(query);
 		String queryMap = ppt.getRequestMap().get("query").toString().replaceAll(" ", "");
@@ -23,14 +24,14 @@
 	}
 	
 	@Test
-	public void testContext() {
+	public void testContext() throws QueryException {
 		String contextString = "{korap=http://korap.ids-mannheim.de/ns/query, @language=de, operands={@id=korap:operands, @container=@list}, relation={@id=korap:relation, @type=korap:relation#types}, class={@id=korap:class, @type=xsd:integer}, query=korap:query, filter=korap:filter, meta=korap:meta}";
 		ppt = new PoliqarpPlusTree("[base=test]");
 		assertTrue(equalsContent(contextString, ppt.getRequestMap().get("@context")));
 	}
 	
 	@Test
-	public void testSingleTokens() {
+	public void testSingleTokens() throws QueryException {
 		// [base=Mann]
 		String token1 = "{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}";
 		assertTrue(equalsQueryContent(token1, "[base=Mann]"));
@@ -49,7 +50,7 @@
 	}
 	
 	@Test
-	public void testElements() {
+	public void testElements() throws QueryException {
 		// <s>
 		String elem1 = "{@type=korap:element, @value=s}";
 		assertTrue(equalsQueryContent(elem1, "<s>"));
@@ -60,7 +61,7 @@
 	}
 
 	@Test
-	public void testCoordinatedFields() {
+	public void testCoordinatedFields() throws QueryException {
 		// [base=Mann&(cas=N|cas=A)]
 		String cof1 = 
 			"{@type=korap:token, @value=" +
@@ -84,7 +85,7 @@
 	}
 	
 	@Test
-	public void testOccurrence() {
+	public void testOccurrence() throws QueryException {
 		// [base=foo]*
 		String occ1 = "{@type=korap:group, operands=[" +
 					     "{@type=korap:token, @value={@type=korap:term, @value=base:foo, relation==}}" +
@@ -196,7 +197,7 @@
 	}
 	
 	@Test
-	public void testTokenSequence() {
+	public void testTokenSequence() throws QueryException {
 		// [base=Mann][orth=Frau]
 		String seq1 = "{@type=korap:sequence, operands=[" +
 				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
@@ -214,7 +215,7 @@
 	}
 	
 	@Test
-	public void testDisjSegments() {
+	public void testDisjSegments() throws QueryException {
 		// ([base=der]|[base=das])[base=Schild]
 		String disj1 = 
 				"{@type=korap:sequence, operands=[" +
@@ -243,7 +244,7 @@
 	}
 	
 	@Test
-	public void testTokenElemSequence() {
+	public void testTokenElemSequence() throws QueryException {
 		// [base=Mann]<vp>
 		String seq1 = "{@type=korap:sequence, operands=[" +
 				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}, " +
@@ -268,7 +269,7 @@
 	}
 	
 	@Test
-	public void testElemSequence() {
+	public void testElemSequence() throws QueryException {
 		// <np><vp>
 		String seq1 = "{@type=korap:sequence, operands=[" +
 				"{@type=korap:element, @value=np}," +
@@ -286,7 +287,7 @@
 	}
 	
 	@Test 
-	public void testClasses() {
+	public void testClasses() throws QueryException {
 		// {[base=Mann]}
 		String cls1 = "{@type=korap:group, class=0, operands=[" +
 				"{@type=korap:token, @value={@type=korap:term, @value=base:Mann, relation==}}" +
@@ -341,7 +342,7 @@
 	}
 	
 	@Test
-	public void testPositions() {
+	public void testPositions() throws QueryException {
 		// contains(<s>,<np>)
 		String pos1 = "{@type=korap:group, relation=position, position=contains, operands=[" +
 				  "{@type=korap:element, @value=s}," +
@@ -383,7 +384,7 @@
 	}
 	
 	@Test
-	public void testNestedPositions() {
+	public void testNestedPositions() throws QueryException {
 		// contains(<s>,startswith(<np>,[orth=Der]))
 		String npos1 = 
 			"{@type=korap:group, relation=position, position=contains, operands=[" +
@@ -399,7 +400,7 @@
 	}
 	
 	@Test
-	public void testShrinkSplit() {
+	public void testShrinkSplit() throws QueryException {
 		// shrink([orth=Der]{[orth=Mann]})
 		String shr1 = 
 			"{@type=korap:group, relation=shrink, shrink=0, operands=[" +
@@ -488,11 +489,42 @@
 	}
 	
 	@Test
-	public void testLayers() {
+	public void testLayers() throws QueryException {
 		// [base=Mann]
 		String layer1 = "{@type=korap:token, @value={@type=korap:term, @value=tt/base:Mann, relation==}}";
 		assertTrue(equalsQueryContent(layer1, "[tt/base=Mann]"));
 		
 	}
+	
+	@Test
+	public void testAlign() {
+		// [orth=der]^[orth=Mann]
+		String align1 = 
+				"{@type=korap:group, relation=align, align=1, operands=[" +
+					"{@type=korap:token, @value={@type=korap:term, @value=orth:der, relation==}}," +
+					"{@type=korap:token, @value={@type=korap:term, @value=orth:Mann, relation==}}" +
+				"]}";
+		ppt = new PoliqarpPlusTree("[orth=der]^[orth=Mann]");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(align1.replaceAll(" ", ""), map.replaceAll(" ", ""));
+		
+		// "([base=a]^[base=b])|[base=c]",
+		String align2 = 
+				"{@type=korap:group, relation=or, operands=[" +
+						"{@type=korap:group, relation=align, align=1, operands=[" +
+							"{@type=korap:token, @value={@type=korap:term, @value=base:a, relation==}}," +
+							"{@type=korap:token, @value={@type=korap:term, @value=base:b, relation==}}" +
+						"]}," +
+						"{@type=korap:token, @value={@type=korap:term, @value=base:c, relation==}}" +
+				"]}";
+		ppt = new PoliqarpPlusTree("([base=a]^[base=b])|[base=c]");
+		map = ppt.getRequestMap().get("query").toString();
+		assertEquals(align2.replaceAll(" ", ""), map.replaceAll(" ", ""));
+	}
+	
+	@Test
+	public void testSimpleQueries() {
+		
+	}
 }
 
