diff --git a/alib2cli/makefile.conf b/alib2cli/makefile.conf
index 5f6fbb956faabef6fa38e4ee15b89a6d7d41811a..f6fc9bd3735f36f1e102dc7ada68efcf302dd1ff 100644
--- a/alib2cli/makefile.conf
+++ b/alib2cli/makefile.conf
@@ -1,5 +1,5 @@
 LIBRARY:=alib2cli
 TESTBIN:=alib2test
 LINK_PATHS=../alib2xml/ ../alib2common/ ../alib2abstraction/ ../alib2measure/ ../alib2std/
-LINK_LIBRARIES=alib2xml alib2common alib2abstraction alib2measure alib2std xml2
+LINK_LIBRARIES=alib2xml alib2common alib2abstraction alib2measure alib2std xml2 stdc++fs
 INCLUDE_PATHS=\$$(SOURCES_BASE_DIR)/../../alib2xml/src/ \$$(SOURCES_BASE_DIR)/../../alib2common/src/ \$$(SOURCES_BASE_DIR)/../../alib2abstraction/src/ \$$(SOURCES_BASE_DIR)/../../alib2measure/src/ \$$(SOURCES_BASE_DIR)/../../alib2std/src/ /usr/include/libxml2/
diff --git a/alib2cli/src/command/LoadCommand.h b/alib2cli/src/command/LoadCommand.h
new file mode 100644
index 0000000000000000000000000000000000000000..db42419791a3d394753a84e453b4bf4adfbfda93
--- /dev/null
+++ b/alib2cli/src/command/LoadCommand.h
@@ -0,0 +1,26 @@
+#ifndef _CLI_LOAD_COMMAND_H_
+#define _CLI_LOAD_COMMAND_H_
+
+#include <command/Command.h>
+#include <environment/Environment.h>
+
+#include <common/LibraryLoader.h>
+
+namespace cli {
+
+class LoadCommand : public Command {
+	std::string m_libraryName;
+
+public:
+	LoadCommand ( std::string libraryName ) : m_libraryName ( std::move ( libraryName ) ) {
+	}
+
+	virtual Command::Result run ( Environment & ) const override {
+		cli::LibraryLoader::load ( m_libraryName );
+		return Command::Result::OK;
+	}
+};
+
+} /* namespace cli */
+
+#endif /* _CLI_LOAD_COMMAND_H_ */
diff --git a/alib2cli/src/common/LibraryLoader.cpp b/alib2cli/src/common/LibraryLoader.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0b0ba38f810aafdc624798889f1a3b026d93313b
--- /dev/null
+++ b/alib2cli/src/common/LibraryLoader.cpp
@@ -0,0 +1,23 @@
+#include "LibraryLoader.h"
+
+namespace cli {
+
+std::list < LibraryLoader::Library >::iterator LibraryLoader::find ( const std::string name ) {
+	for ( std::list < LibraryLoader::Library >::iterator iter = libraries.begin ( ); iter != libraries.end ( ); ++ iter ) {
+		if ( iter->path ( ) == name )
+			return iter;
+	}
+
+	return libraries.end ( );
+}
+
+std::list < LibraryLoader::Library > LibraryLoader::libraries;
+
+void LibraryLoader::load ( const std::string & name ) {
+	std::list < LibraryLoader::Library >::iterator iter = find ( name );
+	if ( iter == libraries.end ( ) )
+		iter = libraries.emplace ( libraries.end ( ), std::move ( name ) );
+	iter->load ( );
+}
+
+} /* namespace cli */
diff --git a/alib2cli/src/common/LibraryLoader.h b/alib2cli/src/common/LibraryLoader.h
new file mode 100644
index 0000000000000000000000000000000000000000..fbcfded96398e97d565c3ff15cd3f522c73a8984
--- /dev/null
+++ b/alib2cli/src/common/LibraryLoader.h
@@ -0,0 +1,72 @@
+#ifndef _CLI_LIBRARY_LOADER_H_
+#define _CLI_LIBRARY_LOADER_H_
+
+#include <command/Command.h>
+#include <environment/Environment.h>
+
+#include <dlfcn.h>
+
+#include <experimental/filesystem>
+#include <alib/list>
+
+#include <exception/CommonException.h>
+
+namespace cli {
+
+class LibraryLoader {
+	class Library {
+		std::string m_path;
+		void * m_handle;
+
+	public:
+		Library ( const std::string & path ) : m_path ( path ), m_handle ( NULL ) {
+		}
+
+		Library ( const Library & ) = delete;
+
+		Library ( Library && other ) : m_path ( std::move ( other.m_path ) ), m_handle ( other.m_handle ) {
+			other.m_handle = NULL;
+		}
+
+		Library & operator = ( const Library & ) = delete;
+		Library & operator = ( Library && other ) = delete;
+
+		~Library ( ) {
+			unload ( );
+		}
+
+		void load ( ) {
+			if ( ! loaded ( ) )
+				m_handle = dlopen ( m_path.c_str ( ), RTLD_NOW );
+			if ( ! loaded ( ) )
+				throw exception::CommonException ( std::string ( dlerror ( ) ) );
+		}
+
+		void unload ( ) {
+			if ( loaded ( ) ) {
+				dlclose ( m_handle );
+				m_handle = NULL;
+			}
+		}
+
+		const std::string & path ( ) const {
+			return m_path;
+		}
+
+		bool loaded ( ) const {
+			return m_handle != NULL;
+		}
+
+	};
+
+	static std::list < Library >::iterator find ( const std::string name );
+
+	static std::list < Library > libraries;
+
+public:
+	static void load ( const std::string & name );
+};
+
+} /* namespace cli */
+
+#endif /* _CLI_LIBRARY_LOADER_H_ */
diff --git a/alib2cli/src/parser/Parser.cpp b/alib2cli/src/parser/Parser.cpp
index 10cbcd486670d3543c758cdac964dee45ff163b8..3d5fec731b9da984b5ec925ee2283c3d8cec4a01 100644
--- a/alib2cli/src/parser/Parser.cpp
+++ b/alib2cli/src/parser/Parser.cpp
@@ -30,6 +30,7 @@
 #include <command/DataTypesIntrospectionCommand.h>
 #include <command/CastsIntrospectionCommand.h>
 #include <command/SetCommand.h>
+#include <command/LoadCommand.h>
 
 #include <primitive/Integer.h>
 #include <primitive/String.h>
@@ -358,6 +359,12 @@ std::unique_ptr < Command > Parser::parse ( ) {
 		match ( cli::Lexer::TokenType::INTEGER, cli::Lexer::TokenType::IDENTIFIER, cli::Lexer::TokenType::STRING );
 		match ( cli::Lexer::TokenType::END );
 		return std::make_unique < SetCommand > ( std::move ( param ), std::move ( value ) );
+	} else if ( check_nonreserved_kw ( "load" ) ) {
+		match_nonreserved_kw ( "load" );
+		std::string libraryName = getTokenValue ( );
+		match ( cli::Lexer::TokenType::INTEGER, cli::Lexer::TokenType::IDENTIFIER, cli::Lexer::TokenType::STRING );
+		match ( cli::Lexer::TokenType::END );
+		return std::make_unique < LoadCommand > ( std::move ( libraryName ) );
 	} else {
 		throw exception::CommonException ( "Mismatched set while expanding parse rule." );
 	}
diff --git a/alib2cli/src/parser/Parser.h b/alib2cli/src/parser/Parser.h
index 64d326889849b999444ae12f85b29d7272df5357..1db21e5e5c24904600e27bf1b4140490353ce153 100644
--- a/alib2cli/src/parser/Parser.h
+++ b/alib2cli/src/parser/Parser.h
@@ -95,7 +95,7 @@ public:
 	std::unique_ptr < Param > in_redirect_param ( );
 
 	std::unique_ptr < Param > param ( );
-	
+
 	std::unique_ptr < Arg > template_param ( );
 
 	std::unique_ptr < Param > move_param ( );