diff --git a/alib2aux/makefile.conf b/alib2aux/makefile.conf
index eb240b3b0d7a608575b144226dbc5609b5ce5973..e5274b859eaabc8fae585e82ddc9fd971f1f5e4d 100644
--- a/alib2aux/makefile.conf
+++ b/alib2aux/makefile.conf
@@ -1,7 +1,7 @@
 LIBRARY:=alib2aux
 TESTBIN:=alib2test
 
-LINK_LIBRARIES=alib2str alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
+LINK_LIBRARIES=alib2str alib2graph_data alib2data alib2xml alib2common alib2abstraction alib2measure alib2std
 SYSTEM_LIBRARIES=xml2
 SYSTEM_INCLUDE_PATHS=/usr/include/libxml2
 TEST_LINK_LIBRARIES=
diff --git a/alib2aux/src/convert/TikZConverter.cpp b/alib2aux/src/convert/TikZConverter.cpp
index cd2b0b3aea0e1a4853aa11adc137454111a6c44c..ad3e5060415a5f6fb75ff7def6ab345f376819b5 100644
--- a/alib2aux/src/convert/TikZConverter.cpp
+++ b/alib2aux/src/convert/TikZConverter.cpp
@@ -10,24 +10,70 @@
 
 namespace convert {
 
-auto TikZConverterEpsilonNFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::EpsilonNFA < > & > ( TikZConverter::convert );
-auto TikZConverterMultiInitialStateNFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::MultiInitialStateNFA < > & > ( TikZConverter::convert );
-auto TikZConverterNFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::NFA < > & > ( TikZConverter::convert );
-auto TikZConverterDFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::DFA < > & > ( TikZConverter::convert );
-auto TikZConverterExtendedNFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::ExtendedNFA < > & > ( TikZConverter::convert );
-auto TikZConverterCompactNFA = registration::AbstractRegister < TikZConverter, std::string, const automaton::CompactNFA < > & > ( TikZConverter::convert );
-auto TikZConverterNFTA = registration::AbstractRegister < TikZConverter, std::string, const automaton::NFTA < > & > ( TikZConverter::convert );
-auto TikZConverterDFTA = registration::AbstractRegister < TikZConverter, std::string, const automaton::DFTA < > & > ( TikZConverter::convert );
-auto TikZConverterDPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::DPDA < > & > ( TikZConverter::convert );
-auto TikZConverterSinglePopDPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::SinglePopDPDA < > & > ( TikZConverter::convert );
-auto TikZConverterInputDrivenDPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::InputDrivenDPDA < > & > ( TikZConverter::convert );
-auto TikZConverterInputDrivenNPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::InputDrivenNPDA < > & > ( TikZConverter::convert );
-auto TikZConverterVisiblyPushdownDPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::VisiblyPushdownDPDA < > & > ( TikZConverter::convert );
-auto TikZConverterVisiblyPushdownNPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::VisiblyPushdownNPDA < > & > ( TikZConverter::convert );
-auto TikZConverterRealTimeHeightDeterministicDPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::RealTimeHeightDeterministicDPDA < > & > ( TikZConverter::convert );
-auto TikZConverterRealTimeHeightDeterministicNPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::RealTimeHeightDeterministicNPDA < > & > ( TikZConverter::convert );
-auto TikZConverterNPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::NPDA < > & > ( TikZConverter::convert );
-auto TikZConverterSinglePopNPDA = registration::AbstractRegister < TikZConverter, std::string, const automaton::SinglePopNPDA < > & > ( TikZConverter::convert );
-auto TikZConverterOneTapeDTM = registration::AbstractRegister < TikZConverter, std::string, const automaton::OneTapeDTM < > & > ( TikZConverter::convert );
+auto TikZConverterEpsilonNFA =
+    registration::AbstractRegister<TikZConverter, std::string, const automaton::EpsilonNFA<> &>(TikZConverter::convert);
+auto TikZConverterMultiInitialStateNFA = registration::AbstractRegister<TikZConverter,
+                                                                        std::string,
+                                                                        const automaton::MultiInitialStateNFA<> &>(
+    TikZConverter::convert);
+auto TikZConverterNFA =
+    registration::AbstractRegister<TikZConverter, std::string, const automaton::NFA<> &>(TikZConverter::convert);
+auto TikZConverterDFA =
+    registration::AbstractRegister<TikZConverter, std::string, const automaton::DFA<> &>(TikZConverter::convert);
+auto TikZConverterExtendedNFA = registration::AbstractRegister<TikZConverter,
+                                                               std::string,
+                                                               const automaton::ExtendedNFA<> &>(TikZConverter::convert);
+auto TikZConverterCompactNFA =
+    registration::AbstractRegister<TikZConverter, std::string, const automaton::CompactNFA<> &>(TikZConverter::convert);
+auto TikZConverterNFTA =
+    registration::AbstractRegister<TikZConverter, std::string, const automaton::NFTA<> &>(TikZConverter::convert);
+auto TikZConverterDFTA =
+    registration::AbstractRegister<TikZConverter, std::string, const automaton::DFTA<> &>(TikZConverter::convert);
+auto TikZConverterDPDA =
+    registration::AbstractRegister<TikZConverter, std::string, const automaton::DPDA<> &>(TikZConverter::convert);
+auto TikZConverterSinglePopDPDA = registration::AbstractRegister<TikZConverter,
+                                                                 std::string,
+                                                                 const automaton::SinglePopDPDA<> &>(TikZConverter::convert);
+auto TikZConverterInputDrivenDPDA = registration::AbstractRegister<TikZConverter,
+                                                                   std::string,
+                                                                   const automaton::InputDrivenDPDA<> &>(TikZConverter::convert);
+auto TikZConverterInputDrivenNPDA = registration::AbstractRegister<TikZConverter,
+                                                                   std::string,
+                                                                   const automaton::InputDrivenNPDA<> &>(TikZConverter::convert);
+auto TikZConverterVisiblyPushdownDPDA = registration::AbstractRegister<TikZConverter,
+                                                                       std::string,
+                                                                       const automaton::VisiblyPushdownDPDA<> &>(
+    TikZConverter::convert);
+auto TikZConverterVisiblyPushdownNPDA = registration::AbstractRegister<TikZConverter,
+                                                                       std::string,
+                                                                       const automaton::VisiblyPushdownNPDA<> &>(
+    TikZConverter::convert);
+auto TikZConverterRealTimeHeightDeterministicDPDA =
+    registration::AbstractRegister<TikZConverter, std::string, const automaton::RealTimeHeightDeterministicDPDA<> &>(
+        TikZConverter::convert);
+auto TikZConverterRealTimeHeightDeterministicNPDA =
+    registration::AbstractRegister<TikZConverter, std::string, const automaton::RealTimeHeightDeterministicNPDA<> &>(
+        TikZConverter::convert);
+auto TikZConverterNPDA =
+    registration::AbstractRegister<TikZConverter, std::string, const automaton::NPDA<> &>(TikZConverter::convert);
+auto TikZConverterSinglePopNPDA = registration::AbstractRegister<TikZConverter,
+                                                                 std::string,
+                                                                 const automaton::SinglePopNPDA<> &>(TikZConverter::convert);
+auto TikZConverterOneTapeDTM =
+    registration::AbstractRegister<TikZConverter, std::string, const automaton::OneTapeDTM<> &>(TikZConverter::convert);
+auto TikZConverterSquareGrid4 = registration::AbstractRegister<TikZConverter,
+                                                               std::string,
+                                                               const grid::SquareGrid4<> &>(TikZConverter::convert);
+auto TikZConverterSquareGrid8 = registration::AbstractRegister<TikZConverter,
+                                                               std::string,
+                                                               const grid::SquareGrid8<> &>(TikZConverter::convert);
+auto TikZConverterWeightedSquareGrid4 = registration::AbstractRegister<TikZConverter,
+                                                                       std::string,
+                                                                       const grid::WeightedSquareGrid4<> &>(
+    TikZConverter::convert);
+auto TikZConverterWeightedSquareGrid8 = registration::AbstractRegister<TikZConverter,
+                                                                       std::string,
+                                                                       const grid::WeightedSquareGrid8<> &>(
+    TikZConverter::convert);
 
 } /* namespace convert */
diff --git a/alib2aux/src/convert/TikZConverter.h b/alib2aux/src/convert/TikZConverter.h
index bd33c776bd26be71c7f0b604cbd03106251eabab..549434f6d3bd3033dde3fc2eff9a46a9aeef6e76 100644
--- a/alib2aux/src/convert/TikZConverter.h
+++ b/alib2aux/src/convert/TikZConverter.h
@@ -38,6 +38,7 @@
 #include <automaton/PDA/DPDA.h>
 #include <automaton/PDA/SinglePopDPDA.h>
 #include <automaton/TM/OneTapeDTM.h>
+#include <grid/GridClasses.hpp>
 
 #include <factory/StringDataFactory.hpp>
 
@@ -104,6 +105,10 @@ class TikZConverter {
 
 	template < class SymbolType, class StateType >
 	static void transitions(const automaton::OneTapeDTM < SymbolType, StateType > & tm, const ext::map < StateType, int > & states, std::ostream & out);
+
+  template<typename TGrid>
+  static void grid(std::ostream &out, const TGrid &a);
+
 public:
 	template < class SymbolType, class StateType >
 	static void convert(std::ostream& out, const automaton::DFA < SymbolType, StateType > & a);
@@ -162,6 +167,26 @@ public:
 	template < class SymbolType, class StateType >
 	static void convert(std::ostream& out, const automaton::OneTapeDTM < SymbolType, StateType > & a);
 
+  template<typename TCoordinate, typename TEdge>
+  static void convert(std::ostream &out, const grid::SquareGrid4<TCoordinate, TEdge> &a) {
+	  return grid(out, a);
+  }
+
+  template<typename TCoordinate, typename TEdge>
+  static void convert(std::ostream &out, const grid::SquareGrid8<TCoordinate, TEdge> &a) {
+	  return grid(out, a);
+  }
+
+  template<typename TCoordinate, typename TEdge>
+  static void convert(std::ostream &out, const grid::WeightedSquareGrid4<TCoordinate, TEdge> &a) {
+	  return grid(out, a);
+  }
+
+  template<typename TCoordinate, typename TEdge>
+  static void convert(std::ostream &out, const grid::WeightedSquareGrid8<TCoordinate, TEdge> &a) {
+	  return grid(out, a);
+  }
+
 	template < class T >
 	static std::string convert ( const T & automaton ) {
 		std::stringstream ss;
@@ -2088,6 +2113,24 @@ void TikZConverter::transitions ( const automaton::OneTapeDTM < SymbolType, Stat
 	}
 }
 
+template<typename TGrid>
+void TikZConverter::grid(std::ostream &out, const TGrid &a) {
+	out << "\\begin{tikzpicture}[ultra thin/.style= {line width=0.1pt}]\n";
+	long width = a.getWidth();
+	long height = a.getHeight();
+
+	out << "\t\\draw[step=1cm, gray,very thin] (0,0) grid (" << width << "," << height << ");\n";
+
+	for (const auto &node : a.getObstacleList()) {
+		out << "\t\\fill[draw=gray, fill=black, very thin] ("
+			<< node.second << "," << height - node.first - 1
+			<< ") rectangle ("
+			<< node.second + 1 << "," << height - node.first << ");\n";
+	}
+
+	out << "\\end{tikzpicture}\n";
+}
+
 } /* namespace convert */
 
 #endif /* TIKZ_CONVERTER_H_ */