diff --git a/alib2cli/src/parser/Parser.cpp b/alib2cli/src/parser/Parser.cpp
index 5743399a30b07690746f9b02f8781fb3e6b71e40..5af3d5e9bada0f3a14b5a21c80dc26aabac994c3 100644
--- a/alib2cli/src/parser/Parser.cpp
+++ b/alib2cli/src/parser/Parser.cpp
@@ -412,6 +412,26 @@ std::unique_ptr < Expression > Parser::batch_or_expression ( ) {
 	}
 }
 
+std::pair < abstraction::ParamQualifiers::ParamQualifierSet, std::unique_ptr < Arg > > Parser::qualifiedType ( ) {
+	abstraction::ParamQualifiers::ParamQualifierSet paramQualifierSet = abstraction::ParamQualifiers::ParamQualifierSet::NONE;
+	if ( check_nonreserved_kw ( "const" ) ) {
+		match_nonreserved_kw ( "const" );
+		paramQualifierSet = paramQualifierSet | abstraction::ParamQualifiers::ParamQualifierSet::CONST;
+	}
+
+	std::unique_ptr < Arg > type = arg ( );
+
+	if ( check ( cli::Lexer::TokenType::AND_OPERATOR ) ) {
+		match ( cli::Lexer::TokenType::AND_OPERATOR );
+		paramQualifierSet = paramQualifierSet | abstraction::ParamQualifiers::ParamQualifierSet::RREF;
+	} else if ( check ( cli::Lexer::TokenType::AMPERSAND_SIGN ) ) {
+		match ( cli::Lexer::TokenType::AMPERSAND_SIGN );
+		paramQualifierSet = paramQualifierSet | abstraction::ParamQualifiers::ParamQualifierSet::LREF;
+	}
+
+	return std::make_pair ( paramQualifierSet, std::move ( type ) );
+}
+
 std::unique_ptr < Command > Parser::command ( ) {
 	clearCheckOptions ( );
 	if ( check_nonreserved_kw ( "execute" ) ) {
@@ -540,22 +560,7 @@ std::unique_ptr < Command > Parser::command ( ) {
 	} else if ( check_nonreserved_kw ( "declare" ) ) {
 		match_nonreserved_kw ( "declare" );
 
-		abstraction::ParamQualifiers::ParamQualifierSet paramQualifierSet = abstraction::ParamQualifiers::ParamQualifierSet::NONE;
-
-		if ( check_nonreserved_kw ( "const" ) ) {
-			match_nonreserved_kw ( "const" );
-			paramQualifierSet = paramQualifierSet | abstraction::ParamQualifiers::ParamQualifierSet::CONST;
-		}
-
-		match_nonreserved_kw ( "auto" );
-
-		if ( check ( cli::Lexer::TokenType::AND_OPERATOR ) ) {
-			match ( cli::Lexer::TokenType::AND_OPERATOR );
-			paramQualifierSet = paramQualifierSet | abstraction::ParamQualifiers::ParamQualifierSet::RREF;
-		} else if ( check ( cli::Lexer::TokenType::AMPERSAND_SIGN ) ) {
-			match ( cli::Lexer::TokenType::AMPERSAND_SIGN );
-			paramQualifierSet = paramQualifierSet | abstraction::ParamQualifiers::ParamQualifierSet::LREF;
-		}
+		std::pair < abstraction::ParamQualifiers::ParamQualifierSet, std::unique_ptr < Arg > > qualType = qualifiedType ( );
 
 		match ( cli::Lexer::TokenType::DOLAR_SIGN );
 		std::unique_ptr < Arg > name = arg ( );
@@ -564,7 +569,7 @@ std::unique_ptr < Command > Parser::command ( ) {
 
 		std::unique_ptr < Expression > expr = expression ( );
 
-		return std::make_unique < VarDeclareCommand > ( std::move ( name ), paramQualifierSet, std::move ( expr ) );
+		return std::make_unique < VarDeclareCommand > ( std::move ( name ), qualType.first, std::move ( expr ) );
 	} else {
 		throw exception::CommonException ( "Mismatched set " + ext::to_string ( getCheckOptions ( ) ) + " while expanding parse rule. Token is " + ( ( std::string ) m_current ) + "." );
 	}
diff --git a/alib2cli/src/parser/Parser.h b/alib2cli/src/parser/Parser.h
index f40642b1722188e0c0528d3d91fae085b9eae71d..831e870e9ba59355a8cd727ede860e5f2ff2948f 100644
--- a/alib2cli/src/parser/Parser.h
+++ b/alib2cli/src/parser/Parser.h
@@ -229,6 +229,10 @@ public:
 
 	std::unique_ptr < Expression > batch_or_expression ( );
 
+	std::pair < abstraction::ParamQualifiers::ParamQualifierSet, std::unique_ptr < Arg > > qualifiedType ( );
+
+	std::pair < abstraction::ParamQualifiers::ParamQualifierSet, std::unique_ptr < Arg > > runnableParam ( );
+
 	std::unique_ptr < Command > command ( );
 
 	std::unique_ptr < Command > semicolon_command ( );