diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index b6178c68132013d2398dd528d8428931f63bcc36..d53ddd453636811b1d0c34d4e7ced37b4caf3e8a 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -538,11 +538,16 @@ symset_condition
 position_operator
 	[const Corpus2::Tagset& tagset, Variables& vars]
 	returns [boost::shared_ptr<Function<Position> > ret]
-	: ret = position_var_val   [vars]
-	| ret = position_relpos    [tagset, vars]
+	: 
+	( ret = position_var_val   [vars]
 	| ret = position_condition [tagset, vars]
-	//
 	| LPAREN ret = position_operator [tagset, vars] RPAREN
+	) 
+	( // if there is SIGNED_INT after the position, it is actually a relative position
+		i: SIGNED_INT {
+			ret.reset(new RelativePosition(ret, token_ref_to_int(i)));
+		}
+	)?
 ;
 
 // ----------------------------------------------------------------------------
@@ -554,21 +559,6 @@ position_var_val
 	| ret = position_variable [vars]
 ;
 
-// ----------------------------------------------------------------------------
-// Realtive position operator.
-// TODO 2+2, actually relative gets position is possible only as relpos(...,...)
-position_relpos
-	[const Corpus2::Tagset& tagset, Variables& vars]
-	returns [boost::shared_ptr<Function<Position> > ret]
-{
-	int n = 0;
-	boost::shared_ptr<Function<Position> > pos;
-}
-	: "relpos" LPAREN pos = position_operator [tagset, vars] COMMA n = number RPAREN {
-			ret.reset(new RelativePosition(pos, n));
-		}
-;
-
 // ----------------------------------------------------------------------------
 // Condition of the position value
 // if (Bool, Position, Position)