diff --git a/aql2/src/aql.cpp b/aql2/src/aql.cpp
index 9ea7e17add3df37c7a978b786833f7e5eeb22e06..04ca06648b9153f62b3aa19f7940f7f6166aeece 100644
--- a/aql2/src/aql.cpp
+++ b/aql2/src/aql.cpp
@@ -63,13 +63,18 @@ public:
 	}
 };
 
-class FileVisitor : public TCLAP::Visitor {
+class MultiArgVisitor : public TCLAP::Visitor {
+protected:
 	TCLAP::MultiArg < std::string > * m_arg;
 
 public:
-	FileVisitor ( TCLAP::MultiArg < std::string > * arg ) : m_arg ( arg ) {
+	void setArg ( TCLAP::MultiArg < std::string > * arg ) {
+		m_arg = arg;
 	}
+};
 
+class FileVisitor : public MultiArgVisitor {
+public:
 	void visit ( ) override {
 		std::ifstream ifs ( m_arg->getValue ( ).back ( ) );
 
@@ -80,13 +85,8 @@ public:
 	}
 };
 
-class QueriesVisitor : public TCLAP::Visitor {
-	TCLAP::MultiArg < std::string > * m_arg;
-
+class QueriesVisitor : public MultiArgVisitor {
 public:
-	QueriesVisitor ( TCLAP::MultiArg < std::string > * arg ) : m_arg ( arg ) {
-	}
-
 	void visit ( ) override {
 		Prompt::getPrompt ( ).appendCharSequence ( cli::StringLineInterface ( m_arg->getValue ( ).back ( ) ) );
 	}
@@ -115,13 +115,18 @@ int main ( int argc, char * argv[] ) {
 		TCLAP::MultiArg < std::pair < std::string, std::string > > params ( "e", "env", "Environment variable", false, "key = val");
 		cmd.add ( params );
 
-		TCLAP::SwitchArg interactive ( "i", "interactive", "Stay in interactive mode after -c or -f", false, new InteractiveVisitor ( ) );
+		InteractiveVisitor * interactiveVisitor = new InteractiveVisitor ( );
+		TCLAP::SwitchArg interactive ( "i", "interactive", "Stay in interactive mode after -c or -f", false, interactiveVisitor );
 		cmd.add ( interactive );
 
-		TCLAP::MultiArg < std::string > files ( "f", "file", "Loads an aql file", false, "FILE", new FileVisitor ( & files ) );
+		FileVisitor * fileVisitor = new FileVisitor ( );
+		TCLAP::MultiArg < std::string > files ( "f", "file", "Loads an aql file", false, "FILE", fileVisitor );
+		fileVisitor->setArg ( & files );
 		cmd.add ( files );
 
-		TCLAP::MultiArg < std::string > queries ( "c", "command", "Query to execute. Multiple queries execute in sequential order.", false, "string", new QueriesVisitor ( & queries ) );
+		QueriesVisitor * queriesVisitor = new QueriesVisitor ( );
+		TCLAP::MultiArg < std::string > queries ( "c", "command", "Query to execute. Multiple queries execute in sequential order.", false, "string", queriesVisitor );
+		queriesVisitor->setArg ( & queries );
 		cmd.add ( queries );
 
 		cmd.parse ( argc, argv );
@@ -162,6 +167,10 @@ int main ( int argc, char * argv[] ) {
 
 		/* --------------------------------------------------------------------------------------------------------- */
 
+		delete queriesVisitor;
+		delete fileVisitor;
+		delete interactiveVisitor;
+
 		if ( res == cli::CommandResult::QUIT || res == cli::CommandResult::RETURN )
 			return cli::ResultInterpret::cli ( Prompt::getPrompt ( ).getEnvironment ( ).getResult ( ) );
 		else if ( res == cli::CommandResult::EOT || res == cli::CommandResult::OK )