diff --git a/libwccl/parser/grammar.g b/libwccl/parser/grammar.g
index cfedac62d97befb1278f79e1315aff755edfc200..fc0cd5d00b92300edb6fa2db82ce6d3335c9b979 100644
--- a/libwccl/parser/grammar.g
+++ b/libwccl/parser/grammar.g
@@ -50,7 +50,7 @@ options {
 // ----------------------------------------------------------------------------
 class ANTLRParser extends Parser;
 options {
-	k = 6;
+	k = 4;
 	exportVocab = ANTLRExpr;
 	buildAST = false;
 	defaultErrorHandler = false;
@@ -77,9 +77,6 @@ private:
 //  - nie mozna utworzy Const::Value i na tym robic specjalizowany reset?
 //  - base, orth
 
-// Bylo boolean_v TRUE_VALUE. FALSE_VALE, a jest "True", "False" - bylo z
-// regula lexera, a teraz jest wstawione na "sztywno" do gramatyki
-
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
 // "GLOBAL" RULES
@@ -108,23 +105,11 @@ parse_predicates
 	res.reset(new ANTLRParserResult<Wccl::Bool>());
 	boost::shared_ptr<Wccl::Function<Wccl::Bool> > op;
 }
-	: op = predicates [*res->variables.get()] {
+	: op = logical_predicates [*res->variables.get()] {
 		res->op = op;
 	}
 ;
 
-// ----------------------------------------------------------------------------
-// Rules for parsing values in scope (variables). 
-// Returns boost::shared_ptr<Wccl::Function<Wccl::Value> > 
-/*
-parse_values 
-	returns [boost::shared_ptr<Wccl::Function<Wccl::Value> > res]
-{
-	Wccl::Variables vars;
-}
-	: res = values [vars]
-;
-*/
 // ----------------------------------------------------------------------------
 // Rules for parsing tagset (symbol set) operators
 // Returns boost::shared_ptr<Wccl::Function<Wccl::TSet> >
@@ -138,26 +123,7 @@ parse_sym_set_operator
 		res->op = op;
 	}
 ;
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-// All values:
-// Values can be use for setvar(...,..)
-// ----------------------------------------------------------------------------
-/*
-values 
-	[Wccl::Variables& vars] 
-	returns [boost::shared_ptr<Wccl::Function<Wccl::Value> > res]
-{
-	boost::shared_ptr<Wccl::Constant<Wccl::StrSet> > r_StrSet;
-	boost::shared_ptr<Wccl::Constant<Wccl::TSet> > r_TSet;
-	boost::shared_ptr<Wccl::Constant<Wccl::Bool> > r_Bool;
-	boost::shared_ptr<Wccl::Constant<Wccl::Position> > r_Pos;
-}
-	: r_Pos    = position [vars] // TODO { res = r_Pos; }
-	| r_TSet   = sym_set  [vars]
-	| r_Bool   = boolean  [vars]
-;
-*/
+
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
 // VALUES
@@ -165,18 +131,18 @@ values
 ///////////////////////////////////////////////////////////////////////////////
 // ----------------------------------------------------------------------------
 // Single or muliple values in string set
-str_set_v_in 
+str_set_value_in 
 	[boost::shared_ptr<Wccl::StrSet>& s_set]
   : v1: STRING { 
 		s_set->insert(token_ref_to_ustring(v1)); 
 	}
-  | v2: STRING COMMA str_set_v_in [s_set] {
+  | v2: STRING COMMA str_set_value_in [s_set] {
     s_set->insert(token_ref_to_ustring(v2)); 
   }
 ;
 // string set, called as unnamed (temporary) StrSet: 
 // 	calls: [] ['a'] ['a', 'b'] ["a"] ["a", "b"] ['a', "b"] or variable $A
-str_set_v 
+str_set_value 
 	returns [boost::shared_ptr<Wccl::Constant<Wccl::StrSet> > val]
 {
 	boost::shared_ptr<Wccl::StrSet> set(new Wccl::StrSet);
@@ -184,7 +150,7 @@ str_set_v
 	: LBRACKET RBRACKET { 
 		val.reset(new Wccl::Constant<Wccl::StrSet>(*set.get()));
 	}
-	| LBRACKET str_set_v_in [set] RBRACKET {
+	| LBRACKET str_set_value_in [set] RBRACKET {
 		val.reset(new Wccl::Constant<Wccl::StrSet>(*set.get()));
 	}
 ;
@@ -208,12 +174,12 @@ sym_set_elem
 ;
 
 // sym set in
-sym_set_in 
+sym_set_value_in 
 	[boost::shared_ptr<Wccl::TSet> &set]
 	: sym_set_elem [set] 
 ;
 // sym set {} {a} {a, b}
-sym_set_v 
+sym_set_value 
 	returns [boost::shared_ptr<Wccl::Constant<Wccl::TSet> > val]
 {
 	boost::shared_ptr<Wccl::TSet> set(new Wccl::TSet);
@@ -221,20 +187,20 @@ sym_set_v
 	: LCURLY RCURLY {
 		val.reset(new Wccl::Constant<Wccl::TSet>(*set.get()));
 	}
-	| LCURLY sym_set_in [set] RCURLY {
+	| LCURLY sym_set_value_in [set] RCURLY {
 		val.reset(new Wccl::Constant<Wccl::TSet>(*set.get()));
 	}
 ;
 // ----------------------------------------------------------------------------
 // boolean value:
-boolean_v 
+boolean_value 
 	returns [boost::shared_ptr<Wccl::Constant<Wccl::Bool> > val]
-	: TRUE_VALUE  { val.reset(new Wccl::Constant<Wccl::Bool>(Wccl::Bool(true ))); }
-	| FALSE_VALUE { val.reset(new Wccl::Constant<Wccl::Bool>(Wccl::Bool(false))); }
+	: "True"  { val.reset(new Wccl::Constant<Wccl::Bool>(Wccl::Bool(true ))); }
+	| "False" { val.reset(new Wccl::Constant<Wccl::Bool>(Wccl::Bool(false))); }
 ;
 // ----------------------------------------------------------------------------
 // position value:
-position_v
+position_value
 	returns [boost::shared_ptr<Wccl::Constant<Wccl::Position> > val]
 	: i: INT {
 		val.reset(
@@ -271,10 +237,10 @@ position_v
 ///////////////////////////////////////////////////////////////////////////////
 // Position: $name
 // ----------------------------------------------------------------------------
-position 
+position_variable
 	[Wccl::Variables& vars] 
 	returns [boost::shared_ptr<Wccl::VarGetter<Wccl::Position> > op]
-	: DOLLAR n: VAR_NAME { 
+	: DOLLAR n: SYMBOL { 
 		vars.get_put<Wccl::Position>(token_ref_to_std_string(n)); 	
 
 		Wccl::VariableAccesor<Wccl::Position> acc = 
@@ -286,9 +252,9 @@ position
 // ----------------------------------------------------------------------------
 // Position reference: $(0-9)+name
 // !! Cannot use for setvar(...,...) !!
-position_ref 
+position_ref_variable 
 	[Wccl::Variables& vars]
-	: DOLLAR p_ref: INT n: VAR_NAME { 
+	: DOLLAR p_ref: INT n: SYMBOL { 
 		// TODO
 	}
 ;
@@ -296,13 +262,13 @@ position_ref
 // String set, call examples: $name, $sName, $s_name, $s_Name etc.
 // This expression gets variable of tyme StrSet from string-named variable 
 // Returns Wccl::VarGetter<Wccl::StrSet> from Set-variables
-str_set 
+str_set_variable 
 	[Wccl::Variables& vars] 
 	returns [boost::shared_ptr<Wccl::VarGetter<Wccl::StrSet> > op]
-	:	DOLLAR STR_PREFIX n: VAR_NAME {
+	:	DOLLAR STR_PREFIX n: SYMBOL {
 		// get/put variable to variables
 		vars.get_put<Wccl::StrSet>(token_ref_to_std_string(n));
-
+		
 		// makes accesor for value
 		Wccl::VariableAccesor<Wccl::StrSet> acc = 
 			vars.create_accesor<Wccl::StrSet>(token_ref_to_std_string(n));
@@ -312,10 +278,10 @@ str_set
 ;
 // ----------------------------------------------------------------------------
 // Symbol set: $tName
-sym_set 
+sym_set_variable 
 	[Wccl::Variables& vars] 
 	returns [boost::shared_ptr<Wccl::VarGetter<Wccl::TSet> > op]
-	: DOLLAR TST_PREFIX n: VAR_NAME { 
+	: DOLLAR TST_PREFIX n: SYMBOL { 
 			vars.get_put<Wccl::TSet>(token_ref_to_std_string(n)); 	
 
 			Wccl::VariableAccesor<Wccl::TSet> acc = 
@@ -326,10 +292,10 @@ sym_set
 ;
 // ----------------------------------------------------------------------------
 // Bool: $bName
-boolean 
+boolean_variable
 	[Wccl::Variables& vars] 
-	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
-	: DOLLAR BOOL_PREFIX n: VAR_NAME { 
+	returns [boost::shared_ptr<Wccl::VarGetter<Wccl::Bool> > op]
+	: DOLLAR BOOL_PREFIX n: SYMBOL { 
 			vars.get_put<Wccl::Bool>(token_ref_to_std_string(n));
 
 			Wccl::VariableAccesor<Wccl::Bool> acc = 
@@ -348,53 +314,86 @@ boolean
 // ----------------------------------------------------------------------------
 // Setvar operator
 // ----------------------------------------------------------------------------
-/*
 setvar_op 
 	[Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > ret]
-	: setvar_pos  [value]
-	| setvar_bool [value]
-	: ret = setvar_sset [vars]
-	| setvar_tset [value]
+	: ret = setvar_pos  [vars]
+	| ret = setvar_bool [vars]
+	| ret = setvar_sset [vars]
+	| ret = setvar_tset [vars]
 ;
-*/
 // Implementations of setvar:
 // ----------------------------------------------------------------------------
-// setvar dla position przyjmuje position_ref -> TODO sprawdzic dlaczego
-// gramatyka nie pokrywa "setvar" LPAREN position COMMA position_v RPAREN
-/*
-setvar_pos [std::string& value]
-	: "setvar" LPAREN position_ref [value] COMMA position_v [value] RPAREN
-//	: "setvar" LPAREN position [value] COMMA position_v [value] RPAREN
-	;
-*/
-/*
-setvar_bool [std::string& value]
-	: "setvar" LPAREN boolean [value] COMMA boolean_v [value] RPAREN 
+// setvar dla position przyjmuje position_ref_variable -> TODO sprawdzic dlaczego
+// gramatyka nie pokrywa "setvar" LPAREN position COMMA position_value RPAREN
+setvar_pos 
+	[Wccl::Variables& vars]
+	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
+{
+	boost::shared_ptr<Wccl::Function<Wccl::Position> > ret_op;
+	boost::shared_ptr<Wccl::VarGetter<Wccl::Position> > ret_var;
+}
+	: "setvar" LPAREN ret_var = position_variable [vars] COMMA 
+										ret_op  = op_position       [vars] RPAREN {
+
+		Wccl::VariableAccesor<Wccl::Position> acc = 
+			vars.create_accesor<Wccl::Position>(ret_var->acc_name());
+
+		op.reset(new Wccl::VarSetter<Wccl::Position>(acc, ret_op));
+	}
+
 	;
-*/
+// ----------------------------------------------------------------------------
+setvar_bool 
+	[Wccl::Variables& vars]
+	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
+{
+	boost::shared_ptr<Wccl::Function<Wccl::Bool> > ret_op;
+	boost::shared_ptr<Wccl::VarGetter<Wccl::Bool> > ret_var;
+}
+	: "setvar" LPAREN ret_var = boolean_variable   [vars] COMMA 
+										ret_op  = logical_predicates [vars] RPAREN {
 
-/*
+		Wccl::VariableAccesor<Wccl::Bool> acc = 
+			vars.create_accesor<Wccl::Bool>(ret_var->acc_name());
+
+		op.reset(new Wccl::VarSetter<Wccl::Bool>(acc, ret_op));
+	}
+;
+// ----------------------------------------------------------------------------
 setvar_sset
 	[Wccl::Variables& vars]
-	returns [boost::shared_ptr<Wccl::VarSetter<Wccl::Bool> > op]
+	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
 {
-	boost::shared_ptr<Wccl::VarGetter<Wccl::StrSet> > ret_str_var;
-	boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ret_str_op;
+	boost::shared_ptr<Wccl::Function<Wccl::StrSet> > ret_op;
+	boost::shared_ptr<Wccl::VarGetter<Wccl::StrSet> > ret_var;
 }
-	: "setvar" LPAREN ret_str_var = str_set [vars] COMMA 
-										ret_str_op  = string_operators [vars] RPAREN  {
-//		VariableAccesor<Bool> acc_t = cx.variables()->create_accesor<Bool>("True_bool");
-//		VarSetter<Bool> var_setter(acc_t, false_constant);
-//		Wccl::VariableAccesor<Wccl::StrSet> acc_t = vars->create_accesor<Wccl::StrSet>("True_bool");
+	: "setvar" LPAREN ret_var = str_set_variable [vars] COMMA 
+										ret_op  = string_operators [vars] RPAREN  {
+
+		Wccl::VariableAccesor<Wccl::StrSet> acc = 
+			vars.create_accesor<Wccl::StrSet>(ret_var->acc_name());
+
+		op.reset(new Wccl::VarSetter<Wccl::StrSet>(acc, ret_op));
+	}
+;
+// ----------------------------------------------------------------------------
+setvar_tset 
+	[Wccl::Variables& vars]
+	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
+{
+	boost::shared_ptr<Wccl::Function<Wccl::TSet> > ret_op;
+	boost::shared_ptr<Wccl::VarGetter<Wccl::TSet> > ret_var;
+}
+	: "setvar" LPAREN ret_var = sym_set_variable  [vars] COMMA 
+										ret_op  = sym_set_operators [vars] RPAREN  {
+
+		Wccl::VariableAccesor<Wccl::TSet> acc = 
+			vars.create_accesor<Wccl::TSet>(ret_var->acc_name());
+
+		op.reset(new Wccl::VarSetter<Wccl::TSet>(acc, ret_op));
 	}
 ;
-*/
-/*
-setvar_tset [std::string& value]
-	: "setvar" LPAREN sym_set [value] COMMA sym_set_v [value] RPAREN 
-	;
-*/
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
@@ -411,8 +410,8 @@ sym_set_operators
 op_sym_set
 	[Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::TSet> > op]
-	: op = sym_set [vars]
-	| op = sym_set_v
+	: op = sym_set_variable [vars]
+	| op = sym_set_value
 ;
 
 // ----------------------------------------------------------------------------
@@ -430,8 +429,8 @@ position_operators
 op_position
 	[Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Position> > op]
-	: op = position [vars]
-	| op = position_v
+	: op = position_variable [vars]
+	| op = position_value
 ;
 
 // ----------------------------------------------------------------------------
@@ -457,7 +456,7 @@ op_orth
 {
 	// TODO
 }
-	: "orth" LBRACKET position_ref [vars] RBRACKET { 
+	: "orth" LBRACKET position_ref_variable [vars] RBRACKET { 
 		// ret = TODO
 	}
 ;
@@ -468,7 +467,7 @@ op_base
 {
 	// TODO
 }
-	: "base" LBRACKET position_ref [vars] RBRACKET { 
+	: "base" LBRACKET position_ref_variable [vars] RBRACKET { 
 		// ret = TODO
 	}
 ;
@@ -509,8 +508,8 @@ op_affix
 op_str_set
 	[Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::StrSet> > op]
-	: op = str_set   [vars]
-	| op = str_set_v 
+	: op = str_set_variable [vars]
+	| op = str_set_value 
 ;
 
 // ----------------------------------------------------------------------------
@@ -518,13 +517,6 @@ op_str_set
 // Logical predicates 
 // Returns boost::shared_ptr<Wccl::Function<Wccl::Bool> >
 // ----------------------------------------------------------------------------
-predicates 
-	[Wccl::Variables& vars]
-	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > ret]
-	: ret = logical_predicates [vars]
-;
-// Implementations of predicates:
-// ----------------------------------------------------------------------------
 logical_predicates
 	[Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > ret]
@@ -536,7 +528,7 @@ logical_predicates
 	|	ret = lpred_inter [vars]
 	| ret = lpred_eq    [vars]
 	| ret = lpred_regex [vars]
-//	| ret = setvar_op   [vars]
+	| ret = setvar_op   [vars]
 ;
 // ----------------------------------------------------------------------------
 // comma-separated predicates
@@ -601,8 +593,8 @@ lpred_nor
 lpred_bool
 	[Wccl::Variables& vars]
 	returns [boost::shared_ptr<Wccl::Function<Wccl::Bool> > op]
-	: op = boolean   [vars]
-	| op = boolean_v 
+	: op = boolean_variable [vars]
+	| op = boolean_value 
 ;
 // ----------------------------------------------------------------------------
 lpred_in
@@ -617,17 +609,19 @@ lpred_in
 	: "in" LPAREN ss1 = string_operators [vars] COMMA 
 	              ss2 = string_operators [vars] RPAREN {
 		op.reset(
-//			new Wccl::IsSubsetOf(*ss1.get(), *ss2.get())
+//			new Wccl::IsSubsetOf<Wccl::StrSet>(ss1, ss2)
 		);
 	}
 	| "in" LPAREN ts1 = sym_set_operators [vars] COMMA
 	              ts2 = sym_set_operators [vars] RPAREN {
 		// op.reset(new Wccl::IsSubsetOf(*ts1.get(), *ts2.get()));
 	}
+/*
 	| "in" LPAREN p1 = position_operators [vars] COMMA 
 	              p2 = position_operators [vars] RPAREN {
 		// op.reset(new Wccl::IsSubsetOf(*p1.get(), *p2.get()));
 	}
+*/
 ;
 // ----------------------------------------------------------------------------
 lpred_inter
@@ -647,10 +641,12 @@ lpred_inter
 	                 ts2 = sym_set_operators [vars] RPAREN {
 		// op.reset(new Wccl::Intersects(*ts1.get(), *ts2.get()));
 	}
+/*
 	| "inter" LPAREN p1 = position_operators [vars] COMMA 
 	                 p2 = position_operators [vars] RPAREN {
 		// op.reset(new Wccl::Intersects(*p1.get(), *p2.get()));
 	}
+*/
 ;
 // ----------------------------------------------------------------------------
 lpred_eq
@@ -669,10 +665,12 @@ lpred_eq
 	                 ts2 = sym_set_operators [vars] RPAREN {
 		op.reset(new Wccl::Equals<Wccl::TSet>(ts1, ts2));
 	}
+/*
 	| "equal" LPAREN p1 = position_operators [vars] COMMA 
 	                 p2 = position_operators [vars] RPAREN {
 		op.reset(new Wccl::Equals<Wccl::Position>(p1, p2));
 	}
+*/
 ;
 
 // ----------------------------------------------------------------------------
@@ -839,17 +837,20 @@ options {
 	paraphrase = "Symbol"; 
 	testLiterals = true; 
 }
-//	: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
-	: ('a'..'z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
+	: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
+//	: ('a'..'z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
 ;
 
+/*
 VAR_NAME
 options { 
 	paraphrase = "Variable name"; 
 }
 	: ('A'..'Z') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*
 ;
+*/
 
+/*
 TRUE_VALUE
 options {
 	paraphrase = "True value";
@@ -863,6 +864,7 @@ options {
 }
 	: "False"
 ;
+*/
 
 WS
 	: ( ' '
diff --git a/wcclparser/CMakeLists.txt b/wcclparser/CMakeLists.txt
index df58345dc072aa5a1f8b5046fef5058fade7a9fa..8aa7e3f848f478196438ebc42d8c220c70f6df0c 100644
--- a/wcclparser/CMakeLists.txt
+++ b/wcclparser/CMakeLists.txt
@@ -4,19 +4,26 @@ include_directories( ${CMAKE_SOURCE_DIR} )
 
 add_definitions(-DLIBWCCL_WCCLPARSER_DATA_DIR="${PROJECT_SOURCE_DIR}/")
 
+# String operator
 add_executable(parser-strop
-	strop_main.cpp
+  strop_main.cpp
 )
 target_link_libraries (parser-strop wccl ${Boost_LIBRARIES} antlr)
 
-add_executable(parser-val
-	val_main.cpp
+# Bool operator
+add_executable(parser-boolop
+  bool_main.cpp
 )
-target_link_libraries (parser-val wccl ${Boost_LIBRARIES} antlr)
+target_link_libraries (parser-boolop wccl ${Boost_LIBRARIES} antlr)
+
+# Tagset operator
+add_executable(parser-tagop
+  tagset_main.cpp
+)
+target_link_libraries (parser-tagop wccl ${Boost_LIBRARIES} antlr)
 
 include_directories(${Boost_INCLUDE_DIR})
 link_directories(${Boost_LIBRARY_DIRS})
 
 #add_custom_target(test tests)
 #add_custom_target(test-verbose ./tests --log_level=message)
-
diff --git a/wcclparser/bool_main.cpp b/wcclparser/bool_main.cpp
index d41f0f1f9cb6389be23e4a1dcf54afbf0928e958..68214133e9292687d22b612eb448cc52f5a40e8d 100644
--- a/wcclparser/bool_main.cpp
+++ b/wcclparser/bool_main.cpp
@@ -66,6 +66,12 @@ int main()
 			catch (antlr::MismatchedTokenException &e) {
 				std::cerr << e.getMessage() << std::endl;
 			}
+			catch (Wccl::InvalidVariableName &e) {
+				std::cerr << "Wccl::InvalidVariableName" << std::endl;
+			}
+			catch (Wccl::VariableTypeMismatch &e) {
+				std::cerr << "Wccl::VariableTypeMismatch" << std::endl;
+			}
 			catch (...) {
 				std::cerr << "[N] Syntax error!" << std::endl;
 			}