diff --git a/aaccess2/src/aaccess.cpp b/aaccess2/src/aaccess.cpp
index e159bceaea73c0c0337f6c4282284709e1a0b90e..963c26eb0577f6637943d6b5fbf0398e5d274883 100644
--- a/aaccess2/src/aaccess.cpp
+++ b/aaccess2/src/aaccess.cpp
@@ -139,12 +139,12 @@ int main ( int argc, char * argv[] ) {
 		if ( collection.isSet ( )
 		&& ( operation.getValue ( ) == "set" || operation.getValue ( ) == "add" || operation.getValue ( ) == "remove" )
 		&& ( automatonInput.isSet ( ) || grammarInput.isSet ( ) || regexpInput.isSet ( ) || stringInput.isSet ( ) ) ) {
-			parser = cli::Parser ( cli::Lexer ( "execute < { :Object } #collection > $argument" ) );
+			parser = cli::Parser ( cli::Lexer ( "execute < :set @Object #collection > $argument" ) );
 			parser.parse ( )->run ( environment );
 		}
 		if ( collection.isSet ( )
 		&& ( operation.getValue ( ) == "add" || operation.getValue ( ) == "remove" ) && ( treeInput.isSet ( ) ) ) {
-			parser = cli::Parser ( cli::Lexer ( "execute < { :ranked_symbol } #collection > $argument" ) );
+			parser = cli::Parser ( cli::Lexer ( "execute < :set @ranked_symbol #collection > $argument" ) );
 			parser.parse ( )->run ( environment );
 		}
 
diff --git a/aarbology2/src/aarbology.cpp b/aarbology2/src/aarbology.cpp
index c2a051b12004bd5614713430edaaac604cdf5351..df3563e33ccef1cd8132633a58dc138272d8b107 100644
--- a/aarbology2/src/aarbology.cpp
+++ b/aarbology2/src/aarbology.cpp
@@ -163,7 +163,7 @@ int main ( int argc, char * argv[] ) {
 				input = nonlinearVariablesInput.getValue ( );
 
 			environment.setBinding ( "inputNonlinearVariables", input );
-			cli::Parser parser ( cli::Lexer ( "execute <{:ranked_symbol} #inputNonlinearVariables > $nonlinearVariables" ) );
+			cli::Parser parser ( cli::Lexer ( "execute <:set @ranked_symbol #inputNonlinearVariables > $nonlinearVariables" ) );
 			parser.parse ( )->run ( environment );
 		}
 
diff --git a/alib2cli/src/ast/statements/ContainerFileStatement.cpp b/alib2cli/src/ast/statements/ContainerFileStatement.cpp
deleted file mode 100644
index 5cab407cb78f19e23c712fc54b2b6bad4bf45cb5..0000000000000000000000000000000000000000
--- a/alib2cli/src/ast/statements/ContainerFileStatement.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include <ast/statements/ContainerFileStatement.h>
-#include <ast/Statement.h>
-#include <ast/Option.h>
-#include <ast/Arg.h>
-
-#include <registry/XmlRegistry.h>
-#include <abstraction/ImmediateValueAbstraction.hpp>
-
-namespace cli {
-
-ContainerFileStatement::ContainerFileStatement ( std::string container, std::unique_ptr < TypeOption > type, std::unique_ptr < Arg > file ) : m_file ( std::move ( file ) ), m_container ( std::move ( container ) ), m_type ( std::move ( type ) ) {
-}
-
-std::shared_ptr < abstraction::OperationAbstraction > ContainerFileStatement::translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > &, Environment & environment ) const {
-	std::shared_ptr < abstraction::UnaryOperationAbstraction < ext::deque < sax::Token >, const std::string & > > tokens = abstraction::XmlRegistry::fileToTokensAbstraction ( m_file->eval ( environment ));
-	tokens->eval ( );
-
-	std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::XmlRegistry::getXmlContainerParserAbstraction ( m_container, m_type->getType ( ) );
-	res->attachInput ( tokens, 0, true );
-	res->eval ( );
-	return res;
-}
-
-} /* namespace cli */
diff --git a/alib2cli/src/ast/statements/ContainerFileStatement.h b/alib2cli/src/ast/statements/ContainerFileStatement.h
deleted file mode 100644
index 437883601682cdfe214cfd39f7db9f7bbe3154ae..0000000000000000000000000000000000000000
--- a/alib2cli/src/ast/statements/ContainerFileStatement.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef _CLI_CONTAINER_FILE_STATEMENT_H_
-#define _CLI_CONTAINER_FILE_STATEMENT_H_
-
-#include <ast/Statement.h>
-#include <ast/options/TypeOption.h>
-
-namespace cli {
-
-class ContainerFileStatement final : public Statement {
-	std::unique_ptr < cli::Arg > m_file;
-	std::string m_container;
-	std::unique_ptr < TypeOption > m_type;
-
-public:
-	ContainerFileStatement ( std::string container, std::unique_ptr < TypeOption > type, std::unique_ptr < Arg > file );
-
-	virtual std::shared_ptr < abstraction::OperationAbstraction > translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > &, Environment & environment ) const override;
-
-	virtual bool getImplicitMove ( ) const override {
-		return true;
-	}
-};
-
-} /* namespace cli */
-
-#endif /* _CLI_CONTAINER_FILE_STATEMENT_H_ */
diff --git a/alib2cli/src/ast/statements/FileStatement.cpp b/alib2cli/src/ast/statements/FileStatement.cpp
index 317ff87fbe81f08d489b8f8a93496c8dd63ad1d2..8a125feadbb261f8ccc4d99c35962452556ce2bf 100644
--- a/alib2cli/src/ast/statements/FileStatement.cpp
+++ b/alib2cli/src/ast/statements/FileStatement.cpp
@@ -4,10 +4,11 @@
 #include <ast/Arg.h>
 
 #include <common/XmlParserHelper.h>
+#include <registry/XmlRegistry.h>
 
 namespace cli {
 
-FileStatement::FileStatement ( std::unique_ptr < TypeOption > type, std::unique_ptr < Arg > file ) : m_file ( std::move ( file ) ), m_type ( std::move ( type ) ) {
+FileStatement::FileStatement ( std::unique_ptr < Arg > file, std::unique_ptr < Arg > fileType, std::unique_ptr < TypeOption > type, ext::vector < std::unique_ptr < cli::Arg > > templateParams ) : m_file ( std::move ( file ) ), m_fileType ( std::move ( fileType ) ), m_type ( std::move ( type ) ), m_templateParams ( std::move ( templateParams ) ) {
 }
 
 std::shared_ptr < abstraction::OperationAbstraction > FileStatement::translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > &, Environment & environment ) const {
@@ -15,9 +16,20 @@ std::shared_ptr < abstraction::OperationAbstraction > FileStatement::translateAn
 	if ( m_type )
 		type = m_type->getType ( );
 
-	std::string file = m_file->eval ( environment );
+	if ( type == "set" || type == "Set" ) {
+		std::shared_ptr < abstraction::UnaryOperationAbstraction < ext::deque < sax::Token >, const std::string & > > tokens = abstraction::XmlRegistry::fileToTokensAbstraction ( m_file->eval ( environment ));
+		tokens->eval ( );
+
+		std::shared_ptr < abstraction::OperationAbstraction > res = abstraction::XmlRegistry::getXmlContainerParserAbstraction ( "Set", m_templateParams [ 0 ]->eval ( environment ) );
+		res->attachInput ( tokens, 0, true );
+		res->eval ( );
+		return res;
+	} else {
+		std::string file = m_file->eval ( environment );
+
+		return abstraction::XmlParserHelper::eval ( std::move ( type ), file );
+	}
 
-	return abstraction::XmlParserHelper::eval ( std::move ( type ), file );
 }
 
 } /* namespace cli */
diff --git a/alib2cli/src/ast/statements/FileStatement.h b/alib2cli/src/ast/statements/FileStatement.h
index 4da12dae5c7ff35d98b3a6514037d4f3bee5eae7..b9268359a4c6df05abd6fbac82b19b5987dc7c9b 100644
--- a/alib2cli/src/ast/statements/FileStatement.h
+++ b/alib2cli/src/ast/statements/FileStatement.h
@@ -8,10 +8,12 @@ namespace cli {
 
 class FileStatement final : public Statement {
 	std::unique_ptr < cli::Arg > m_file;
+	std::unique_ptr < Arg > m_fileType;
 	std::unique_ptr < TypeOption > m_type;
+	ext::vector < std::unique_ptr < cli::Arg > > m_templateParams;
 
 public:
-	FileStatement ( std::unique_ptr < TypeOption > type, std::unique_ptr < Arg > file );
+	FileStatement ( std::unique_ptr < Arg > file, std::unique_ptr < Arg > fileType, std::unique_ptr < TypeOption > type, ext::vector < std::unique_ptr < cli::Arg > > templateParams );
 
 	virtual std::shared_ptr < abstraction::OperationAbstraction > translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > &, Environment & environment ) const override;
 
diff --git a/alib2cli/src/ast/statements/ResultFileStatement.h b/alib2cli/src/ast/statements/ResultFileStatement.h
index 6f46bad0235c2f63d10e1f0f19be5bca0e24c479..ba0fe867b1085b295ce7645c9c699b9c78b773cb 100644
--- a/alib2cli/src/ast/statements/ResultFileStatement.h
+++ b/alib2cli/src/ast/statements/ResultFileStatement.h
@@ -9,9 +9,10 @@ namespace cli {
 
 class ResultFileStatement final : public Statement {
 	std::unique_ptr < cli::Arg > m_file;
+	std::unique_ptr < Arg > m_fileType;
 
 public:
-	ResultFileStatement ( std::unique_ptr < cli::Arg > file ) : m_file ( std::move ( file ) ) {
+	ResultFileStatement ( std::unique_ptr < cli::Arg > file, std::unique_ptr < Arg > fileType ) : m_file ( std::move ( file ) ), m_fileType ( std::move ( fileType ) ) {
 	}
 
 	virtual std::shared_ptr < abstraction::OperationAbstraction > translateAndEval ( const std::shared_ptr < abstraction::OperationAbstraction > & prev, Environment & environment ) const override {
diff --git a/alib2cli/src/parser/Parser.cpp b/alib2cli/src/parser/Parser.cpp
index af0085ea7d4c0139012e9875959fcf03860a7815..db203ae77f9c4c23e39ce4ad68dded13b09fe35d 100644
--- a/alib2cli/src/parser/Parser.cpp
+++ b/alib2cli/src/parser/Parser.cpp
@@ -3,7 +3,6 @@
 #include <ast/statements/CastStatement.h>
 #include <ast/statements/SingleStatement.h>
 #include <ast/statements/ContainerStatement.h>
-#include <ast/statements/ContainerFileStatement.h>
 #include <ast/statements/ResultFileStatement.h>
 #include <ast/statements/ResultVariableStatement.h>
 #include <ast/statements/ResultPrintStatement.h>
@@ -94,18 +93,22 @@ std::unique_ptr < Arg > Parser::template_arg ( ) {
 }
 
 std::shared_ptr < Statement > Parser::in_redirect_file ( ) {
-	if ( check ( cli::Lexer::TokenType::LEFT_BRACE ) ) {
-		match ( cli::Lexer::TokenType::LEFT_BRACE );
-		std::unique_ptr < TypeOption > type = type_option ( );
-		match ( cli::Lexer::TokenType::RIGHT_BRACE );
-		std::unique_ptr < Arg > file = arg ( );
-		return std::make_shared < ContainerFileStatement > ( "Set", std::move ( type ), std::move ( file ) );
-	} else {
-		ext::vector < std::unique_ptr < Option > > options;
-		std::unique_ptr < TypeOption > type = type_option ( );
-		std::unique_ptr < Arg > file = arg ( );
-		return std::make_shared < FileStatement > ( std::move ( type ), std::move ( file ) );
+	std::unique_ptr < Arg > fileType;
+
+	if ( check ( cli::Lexer::TokenType::LEFT_BRACKET ) ) {
+		match ( cli::Lexer::TokenType::LEFT_BRACKET );
+		fileType = arg ( );
+		match ( cli::Lexer::TokenType::RIGHT_BRACKET );
+	}
+
+	std::unique_ptr < TypeOption > type = type_option ( );
+	ext::vector < std::unique_ptr < cli::Arg > > templateArgs;
+	while ( check ( cli::Lexer::TokenType::AT_SIGN ) ) {
+		templateArgs.emplace_back ( template_arg ( ) );
 	}
+
+	std::unique_ptr < Arg > file = arg ( );
+	return std::make_shared < FileStatement > ( std::move ( file ), std::move ( fileType ), std::move ( type ), std::move ( templateArgs ) );
 }
 
 std::shared_ptr < Statement > Parser::in_redirect ( ) {
@@ -221,14 +224,16 @@ std::shared_ptr < StatementList > Parser::statement_list ( ) {
 }
 
 void Parser::out_redirect_file ( std::shared_ptr < StatementList > & list ) {
+	std::unique_ptr < Arg > fileType;
+
 	if ( check ( cli::Lexer::TokenType::LEFT_BRACKET ) ) {
 		match ( cli::Lexer::TokenType::LEFT_BRACKET );
-		std::unique_ptr < Arg > name = arg ( );
+		fileType = arg ( );
 		match ( cli::Lexer::TokenType::RIGHT_BRACKET );
 	}
 
 	std::unique_ptr < Arg > file = arg ( );
-	list->append ( std::make_unique < ResultFileStatement > ( std::move ( file ) ) );
+	list->append ( std::make_unique < ResultFileStatement > ( std::move ( file ), std::move ( fileType ) ) );
 }
 
 void Parser::out_redirect ( std::shared_ptr < StatementList > & list ) {
diff --git a/alib2cli/test-src/cli/CliTest.cpp b/alib2cli/test-src/cli/CliTest.cpp
index d3c5484f8e2e5a49cf5c340af308e801713c0197..d7d5f403a631e73d55b38c8aeb85e88f8f9fbc38 100644
--- a/alib2cli/test-src/cli/CliTest.cpp
+++ b/alib2cli/test-src/cli/CliTest.cpp
@@ -262,7 +262,7 @@ void CliTest::testSetConstruction ( ) {
 	parser = cli::Parser ( cli::Lexer ( "execute $set >local/yyy.xml" ) );
 	parser.parse ( )->run ( environment );
 
-	parser = cli::Parser ( cli::Lexer ( "execute <{ :int }local/yyy.xml > $set2" ) );
+	parser = cli::Parser ( cli::Lexer ( "execute < :set @int local/yyy.xml > $set2" ) );
 	parser.parse ( )->run ( environment );
 	std::cout << environment.getVariable ( "set2" )->getReturnType ( ) << std::endl;
 	parser = cli::Parser ( cli::Lexer ( "execute $set2 | Print -" ) );