diff --git a/alib2cli/src/builtin/Dot.cpp b/alib2cli/src/builtin/Dot.cpp
index e867028d59b38c0e9b974292eccf84f51ab053ef..6f78f73878a943f2f058723149e82d74c609e26a 100644
--- a/alib2cli/src/builtin/Dot.cpp
+++ b/alib2cli/src/builtin/Dot.cpp
@@ -8,16 +8,31 @@
 #include "Dot.h"
 #include <registration/AlgoRegistration.hpp>
 #include <cstdlib>
+#include <algorithm>
+#include <cctype>
 
 namespace cli {
 
 namespace builtin {
 
+std::vector < std::string> Dot::m_DotAllowedTypes { "dot", "xdot", "ps", "pdf", "svg", "svgz", "fig", "png", "gif", "jpg", "jpeg", "json", "imap", "cmapx" };
+
 void Dot::dot ( const std::string & data ) {
-	std::system ( ( "dot -Tx11 <<DOTDATA\n" + data + "\nDOTDATA" ).c_str ( ) );
+	( void ) std::system( ( "dot -Tx11 <<DOTDATA\n" + data + "\nDOTDATA" ).c_str ( ) );
+}
+
+void Dot::dot ( const std::string & data, const std::string & outputType, const std::string & outputFile ) {
+	std::string outputTypeLower;
+	std::transform ( outputType.begin( ), outputType.end(), std::back_inserter ( outputTypeLower ), ::tolower);
+
+	if ( std::find ( m_DotAllowedTypes.begin( ), m_DotAllowedTypes.end ( ), outputType ) == m_DotAllowedTypes.end ( ) )
+		throw exception::CommonException ( "Dot outputType is invalid." );
+
+	( void ) std::system ( ( "dot -T" + outputTypeLower + " -o " + outputFile + "<<DOTDATA\n" + data + "\nDOTDATA" ).c_str ( ) );
 }
 
-auto DotString = registration::AbstractRegister < Dot, void, const std::string & > ( Dot::dot );
+auto DotTx11 = registration::AbstractRegister < Dot, void, const std::string & > ( Dot::dot );
+auto DotTpng = registration::AbstractRegister < Dot, void, const std::string &, const std::string &, const std::string & > ( Dot::dot );
 
 } /* namespace builtin */
 
diff --git a/alib2cli/src/builtin/Dot.h b/alib2cli/src/builtin/Dot.h
index c8c101acd8a3d2f706179649ae4e155ae6fa388c..788cdabe55c12896ccf91e1514f5aaf54263bcc2 100644
--- a/alib2cli/src/builtin/Dot.h
+++ b/alib2cli/src/builtin/Dot.h
@@ -9,6 +9,7 @@
 #define _DOT_H_
 
 #include <string>
+#include <vector>
 
 namespace cli {
 
@@ -17,9 +18,13 @@ namespace builtin {
 class Dot {
 public:
 	/**
-	 * Removes dead states from FSM. Melichar 2.29
+	 * Cli builtin for DOT format visualization
 	 */
 	static void dot( const std::string & dot );
+	static void dot ( const std::string & data, const std::string & outputType, const std::string & outputFile );
+
+private:
+	static std::vector < std::string > m_DotAllowedTypes;
 };
 
 } /* namespace builtin */