diff --git a/src/main/antlr/poliqarpplus/PoliqarpPlusLexer.g4 b/src/main/antlr/poliqarpplus/PoliqarpPlusLexer.g4
index 02d1ffd..420856e 100644
--- a/src/main/antlr/poliqarpplus/PoliqarpPlusLexer.g4
+++ b/src/main/antlr/poliqarpplus/PoliqarpPlusLexer.g4
@@ -13,7 +13,7 @@
  -- author: Joachim Bingel
  -- date: 14-06-27
 
- -- updated: 28-09-2018 (diewald) 
+ -- updated: 18-09-28 (diewald) 
 
 
  Poliqarp Query Language lexer
@@ -58,7 +58,7 @@
 fragment FOCC       : '{' WS* ( [0-9]* WS* ',' WS* [0-9]+ | [0-9]+ WS* ','? ) WS* '}';
 fragment NO_RE      : ~[ \t/];
 fragment ALPHABET   : ~('\t' | ' ' | '/' | '*' | '?' | '+' | '{' | '}' | '[' | ']'
-                    | '(' | ')' | '|' | '"' | ',' | ':' | '\'' | '\\' | '!' | '=' | '~' | '&' | '^' | '<' | '>' );
+                    | '(' | ')' | '|' | '"' | ',' | ':' | '\'' | '\\' | '!' | '=' | '~' | '&' | '^' | '<' | '>' | '#' );
 NUMBER              : [0-9]+;
 
 NL                  : [\r\n] -> skip;
@@ -90,6 +90,7 @@
 EMPTYREL	: '@';
 BACKSLASH	: '\\';
 SQUOTE      : '\'';
+HASH        : '#';
 
 /* Regular expressions and Regex queries */
 fragment RE_symbol     : ~('*' | '?' | '+' | '{' | '}' | '[' | ']'
diff --git a/src/main/antlr/poliqarpplus/PoliqarpPlusParser.g4 b/src/main/antlr/poliqarpplus/PoliqarpPlusParser.g4
index 0ba3451..e65d8db 100644
--- a/src/main/antlr/poliqarpplus/PoliqarpPlusParser.g4
+++ b/src/main/antlr/poliqarpplus/PoliqarpPlusParser.g4
@@ -66,7 +66,7 @@
 value
 : (WORD | NUMBER) | regex
 ;
- 
+
 /* Fields */
 term       
 : NEG* (foundry SLASH)? layer termOp key (COLON value)? flag?
@@ -185,6 +185,18 @@
 : emptyTokenSequence
 ;
 
+user
+: WORD
+;
+
+ref
+: WORD
+;
+
+queryref
+: LBRACE HASH (user SLASH)? ref RBRACE 
+;
+
 spanclass
 : LBRACE spanclass_id? (segment|sequence) RBRACE
 ;
@@ -201,6 +213,7 @@
   | LRPAREN segment RRPAREN
   | emptyTokenSequence
   | emptyTokenSequenceClass
+  | queryref
   ) 
   repetition?
  ; 
diff --git a/src/main/java/de/ids_mannheim/korap/query/object/KoralType.java b/src/main/java/de/ids_mannheim/korap/query/object/KoralType.java
index cfa0f97..e86dbc3 100644
--- a/src/main/java/de/ids_mannheim/korap/query/object/KoralType.java
+++ b/src/main/java/de/ids_mannheim/korap/query/object/KoralType.java
@@ -12,6 +12,7 @@
     RELATION("koral:relation"), DISTANCE("koral:distance"), REFERENCE(
     "koral:reference"), DOCUMENT("koral:doc"), DOCUMENT_GROUP("koral:docGroup"),
     DOCUMENT_GROUP_REF("koral:docGroupRef"),
+    QUERY_REF("koral:queryRef"),
     COSMAS_DISTANCE("cosmas:distance");
 
     String value;
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
index 7cde9c1..6829202 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
@@ -188,6 +188,10 @@
             processSubmatch(node);
         }
 
+        if (nodeCat.equals("queryref")) {
+            processQueryref(node);
+        }
+
         if (nodeCat.equals("meta")) {
             processMeta(node);
         }
@@ -297,6 +301,26 @@
     }
 
 
+    private void processQueryref (ParseTree node) {
+
+        String queryNameStr = "";
+        
+        if (getNodeCat(node.getChild(2)).equals("user")) {
+            queryNameStr = node.getChild(2).getText();
+            queryNameStr += '/';
+            queryNameStr += node.getChild(4).getText();
+        }
+        else {
+            queryNameStr = node.getChild(2).getText();
+        }
+
+        Map<String, Object> object = KoralObjectGenerator.makeQueryRef(queryNameStr);
+        putIntoSuperObject(object);
+        objectStack.push(object);
+        stackedObjects++;
+    }
+    
+
     private void processEmptyTokenSequenceClass (ParseTree node) {
         int classId = 1;
         if (hasChild(node, "spanclass_id")) {
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java b/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
index 2c65416..9f2a72a 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
@@ -74,7 +74,6 @@
         return term;
     }
 
-
     public static Map<String, Object> makeDocGroup (String relation) {
         Map<String, Object> term = new HashMap<String, Object>();
         term.put("@type", KoralType.DOCUMENT_GROUP.toString());
@@ -151,6 +150,12 @@
         return group;
     }
 
+    public static Map<String, Object> makeQueryRef (String ref) {
+        Map<String, Object> term = new HashMap<String, Object>();
+        term.put("@type", KoralType.QUERY_REF.toString());
+        term.put("ref", ref);
+        return term;
+    }
 
     public static Map<String, Object> makeClassRefCheck (
             ArrayList<ClassRefCheck> checks, ArrayList<Integer> classIn) {
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java
index f1562a0..dd4daad 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/poliqarpplus/PoliqarpPlusQueryProcessorTest.java
@@ -1615,6 +1615,39 @@
         assertEquals("koral:token", res.at("/query/operands/1/@type").asText());
     }
 
+    @Test
+    public void testQueryReferences () throws JsonProcessingException, IOException {
+        query = "{#test}";
+        qs.setQuery(query, "poliqarpplus");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:queryRef", res.at("/query/@type").asText());
+        assertEquals("test", res.at("/query/ref").asText());
+
+        query = "{#admin/example}";
+        qs.setQuery(query, "poliqarpplus");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:queryRef", res.at("/query/@type").asText());
+        assertEquals("admin/example", res.at("/query/ref").asText());
+
+        query = "Der {#admin/example} [orth=Baum]";
+        qs.setQuery(query, "poliqarpplus");
+        res = mapper.readTree(qs.toJSON());
+
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:queryRef", res.at("/query/operands/1/@type").asText());
+        assertEquals("admin/example", res.at("/query/operands/1/ref").asText());
+        assertEquals("koral:token", res.at("/query/operands/2/@type").asText());
+
+        query = "[orth=Der]{#admin/example}{1,}[orth=Baum]";
+        qs.setQuery(query, "poliqarpplus");
+        res = mapper.readTree(qs.toJSON());
+
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("koral:queryRef", res.at("/query/operands/1/operands/0/@type").asText());
+        assertEquals("admin/example", res.at("/query/operands/1/operands/0/ref").asText());
+        assertEquals("koral:token", res.at("/query/operands/2/@type").asText());
+    }
 
     @Test
     public void testMeta () throws JsonProcessingException, IOException {
