diff --git a/resources/3rdparty/include_xerces.cmake b/resources/3rdparty/include_xerces.cmake
index 4db0dff57..65b2f43a0 100644
--- a/resources/3rdparty/include_xerces.cmake
+++ b/resources/3rdparty/include_xerces.cmake
@@ -42,7 +42,7 @@ if(USE_XERCESC)
 		mark_as_advanced(CORESERVICES_LIBRARY)
     endif()
     find_package(CURL)
-    list(APPEND STORM_LINK_LIBRARIES ${XERCESC_LIBRARIES} ${COREFOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY} ${CURL_LIBRARIES})
+    list(APPEND STORM_GSPN_LINK_LIBRARIES ${XERCESC_LIBRARIES} ${COREFOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY} ${CURL_LIBRARIES})
 else()
     message (WARNING "Storm - Building without Xerces disables parsing XML formats (for GSPNs)")
 endif(USE_XERCESC)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0fec9497c..665c16847 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,4 +1,6 @@
 add_subdirectory(storm)
 add_subdirectory(storm-pgcl)
 add_subdirectory(storm-pgcl-cli)
+add_subdirectory(storm-gspn)
+add_subdirectory(storm-gspn-cli)
 add_subdirectory(test)
diff --git a/src/storm-gspn-cli/CMakeLists.txt b/src/storm-gspn-cli/CMakeLists.txt
new file mode 100644
index 000000000..343b8acc8
--- /dev/null
+++ b/src/storm-gspn-cli/CMakeLists.txt
@@ -0,0 +1,3 @@
+add_executable(storm-gspn-cli ${PROJECT_SOURCE_DIR}/src/storm-gspn-cli/storm-gspn.cpp)
+target_link_libraries(storm-gspn-cli storm-gspn) # Adding headers for xcode
+set_target_properties(storm-gspn-cli PROPERTIES OUTPUT_NAME "storm-gspn")
diff --git a/src/storm/storm-gspn.cpp b/src/storm-gspn-cli/storm-gspn.cpp
similarity index 95%
rename from src/storm/storm-gspn.cpp
rename to src/storm-gspn-cli/storm-gspn.cpp
index 87e39084f..b973d046d 100644
--- a/src/storm/storm-gspn.cpp
+++ b/src/storm-gspn-cli/storm-gspn.cpp
@@ -1,9 +1,12 @@
-#include "storm/builder/ExplicitGspnModelBuilder.h"
+#include "storm-gspn/builder/ExplicitGspnModelBuilder.h"
+#include "storm-gspn/parser/GspnParser.h"
+#include "storm-gspn/storage/gspn/GSPN.h"
+#include "storm-gspn/storage/gspn/GspnBuilder.h"
+#include "storm-gspn/builder/JaniGSPNBuilder.h"
+
 #include "storm/exceptions/BaseException.h"
 #include "storm/exceptions/WrongFormatException.h"
-#include "storm/parser/GspnParser.h"
-#include "storm/storage/gspn/GSPN.h"
-#include "storm/storage/gspn/GspnBuilder.h"
+
 #include "storm/utility/macros.h"
 #include "storm/utility/initialize.h"
 
@@ -13,7 +16,6 @@
 #include "storm/storage/expressions/ExpressionManager.h"
 #include "storm/storage/jani/Model.h"
 #include "storm/storage/jani/JSONExporter.h"
-#include "storm/builder/JaniGSPNBuilder.h"
 #include <fstream>
 #include <iostream>
 #include <string>
diff --git a/src/storm-gspn/CMakeLists.txt b/src/storm-gspn/CMakeLists.txt
new file mode 100644
index 000000000..a5478280d
--- /dev/null
+++ b/src/storm-gspn/CMakeLists.txt
@@ -0,0 +1,13 @@
+file(GLOB_RECURSE ALL_FILES ${PROJECT_SOURCE_DIR}/src/storm-gspn/*.h ${PROJECT_SOURCE_DIR}/src/storm-gspn/*.cpp)
+
+register_source_groups_from_filestructure("${ALL_FILES}" storm-gspn)
+
+
+
+file(GLOB_RECURSE STORM_GSPN_SOURCES ${PROJECT_SOURCE_DIR}/src/storm-gspn/*/*.cpp)
+file(GLOB_RECURSE STORM_GSPN_HEADERS ${PROJECT_SOURCE_DIR}/src/storm-gspn/*/*.h)
+
+
+# Create storm-pgcl.
+add_library(storm-gspn SHARED ${STORM_GSPN_SOURCES} ${STORM_GSPN_HEADERS})
+target_link_libraries(storm-gspn storm ${STORM_GSPN_LINK_LIBRARIES})
diff --git a/src/storm/adapters/XercesAdapter.h b/src/storm-gspn/adapters/XercesAdapter.h
similarity index 100%
rename from src/storm/adapters/XercesAdapter.h
rename to src/storm-gspn/adapters/XercesAdapter.h
diff --git a/src/storm/builder/ExplicitGspnModelBuilder.cpp b/src/storm-gspn/builder/ExplicitGspnModelBuilder.cpp
similarity index 100%
rename from src/storm/builder/ExplicitGspnModelBuilder.cpp
rename to src/storm-gspn/builder/ExplicitGspnModelBuilder.cpp
diff --git a/src/storm/builder/ExplicitGspnModelBuilder.h b/src/storm-gspn/builder/ExplicitGspnModelBuilder.h
similarity index 100%
rename from src/storm/builder/ExplicitGspnModelBuilder.h
rename to src/storm-gspn/builder/ExplicitGspnModelBuilder.h
diff --git a/src/storm/builder/JaniGSPNBuilder.cpp b/src/storm-gspn/builder/JaniGSPNBuilder.cpp
similarity index 100%
rename from src/storm/builder/JaniGSPNBuilder.cpp
rename to src/storm-gspn/builder/JaniGSPNBuilder.cpp
diff --git a/src/storm/builder/JaniGSPNBuilder.h b/src/storm-gspn/builder/JaniGSPNBuilder.h
similarity index 99%
rename from src/storm/builder/JaniGSPNBuilder.h
rename to src/storm-gspn/builder/JaniGSPNBuilder.h
index 46c0fb095..4fcb19f16 100644
--- a/src/storm/builder/JaniGSPNBuilder.h
+++ b/src/storm-gspn/builder/JaniGSPNBuilder.h
@@ -1,6 +1,6 @@
 #pragma once
 
-#include "storm/storage/gspn/GSPN.h"
+#include "storm-gspn/storage/gspn/GSPN.h"
 #include "storm/storage/jani/Model.h"
 #include "storm/storage/expressions/ExpressionManager.h"
 
diff --git a/src/storm/parser/GreatSpnEditorProjectParser.cpp b/src/storm-gspn/parser/GreatSpnEditorProjectParser.cpp
similarity index 100%
rename from src/storm/parser/GreatSpnEditorProjectParser.cpp
rename to src/storm-gspn/parser/GreatSpnEditorProjectParser.cpp
diff --git a/src/storm/parser/GreatSpnEditorProjectParser.h b/src/storm-gspn/parser/GreatSpnEditorProjectParser.h
similarity index 100%
rename from src/storm/parser/GreatSpnEditorProjectParser.h
rename to src/storm-gspn/parser/GreatSpnEditorProjectParser.h
diff --git a/src/storm/parser/GspnParser.cpp b/src/storm-gspn/parser/GspnParser.cpp
similarity index 98%
rename from src/storm/parser/GspnParser.cpp
rename to src/storm-gspn/parser/GspnParser.cpp
index 6f5b3c731..dfb3575d3 100644
--- a/src/storm/parser/GspnParser.cpp
+++ b/src/storm-gspn/parser/GspnParser.cpp
@@ -1,6 +1,6 @@
 #include "GspnParser.h"
 #include "storm-config.h"
-#include "storm/adapters/XercesAdapter.h"
+#include "storm-gspn/adapters/XercesAdapter.h"
 
 #include "storm/exceptions/UnexpectedException.h"
 #include "storm/exceptions/WrongFormatException.h"
diff --git a/src/storm/parser/GspnParser.h b/src/storm-gspn/parser/GspnParser.h
similarity index 80%
rename from src/storm/parser/GspnParser.h
rename to src/storm-gspn/parser/GspnParser.h
index 0b80a1615..862dfc757 100644
--- a/src/storm/parser/GspnParser.h
+++ b/src/storm-gspn/parser/GspnParser.h
@@ -1,4 +1,4 @@
-#include "storm/storage/gspn/GSPN.h"
+#include "storm-gspn/storage/gspn/GSPN.h"
 
 namespace storm {
     namespace parser {
diff --git a/src/storm/parser/PnmlParser.cpp b/src/storm-gspn/parser/PnmlParser.cpp
similarity index 99%
rename from src/storm/parser/PnmlParser.cpp
rename to src/storm-gspn/parser/PnmlParser.cpp
index bf256ec6c..4869405eb 100644
--- a/src/storm/parser/PnmlParser.cpp
+++ b/src/storm-gspn/parser/PnmlParser.cpp
@@ -1,5 +1,5 @@
 
-#include "storm/parser/PnmlParser.h"
+#include "storm-gspn/parser/PnmlParser.h"
 #ifdef USE_XERCES
 #include <iostream>
 
diff --git a/src/storm/parser/PnmlParser.h b/src/storm-gspn/parser/PnmlParser.h
similarity index 100%
rename from src/storm/parser/PnmlParser.h
rename to src/storm-gspn/parser/PnmlParser.h
diff --git a/src/storm/storage/gspn/GSPN.cpp b/src/storm-gspn/storage/gspn/GSPN.cpp
similarity index 99%
rename from src/storm/storage/gspn/GSPN.cpp
rename to src/storm-gspn/storage/gspn/GSPN.cpp
index a97d15fd1..8377f2f8e 100644
--- a/src/storm/storage/gspn/GSPN.cpp
+++ b/src/storm-gspn/storage/gspn/GSPN.cpp
@@ -1,11 +1,14 @@
-#include "storm/storage/gspn/GSPN.h"
-#include "storm/utility/macros.h"
-#include "storm/exceptions/InvalidArgumentException.h"
+#include "GSPN.h"
 
 #include <unordered_map>
 
 #include <boost/lexical_cast.hpp>
 
+#include "storm/utility/macros.h"
+#include "storm/exceptions/InvalidArgumentException.h"
+
+
+
 namespace storm {
     namespace gspn {
         uint64_t GSPN::timedTransitionIdToTransitionId(uint64_t ttId) {
diff --git a/src/storm/storage/gspn/GSPN.h b/src/storm-gspn/storage/gspn/GSPN.h
similarity index 96%
rename from src/storm/storage/gspn/GSPN.h
rename to src/storm-gspn/storage/gspn/GSPN.h
index aee3bbd4c..17448bc8b 100644
--- a/src/storm/storage/gspn/GSPN.h
+++ b/src/storm-gspn/storage/gspn/GSPN.h
@@ -6,10 +6,10 @@
 #include <memory>
 #include <unordered_map>
 
-#include "storm/storage/gspn/ImmediateTransition.h"
-#include "storm/storage/gspn/Marking.h"
-#include "storm/storage/gspn/Place.h"
-#include "storm/storage/gspn/TimedTransition.h"
+#include "storm-gspn/storage/gspn/ImmediateTransition.h"
+#include "storm-gspn/storage/gspn/Marking.h"
+#include "storm-gspn/storage/gspn/Place.h"
+#include "storm-gspn/storage/gspn/TimedTransition.h"
 
 namespace storm {
     namespace gspn {
diff --git a/src/storm/storage/gspn/GspnBuilder.cpp b/src/storm-gspn/storage/gspn/GspnBuilder.cpp
similarity index 99%
rename from src/storm/storage/gspn/GspnBuilder.cpp
rename to src/storm-gspn/storage/gspn/GspnBuilder.cpp
index 1800f02d5..cbea96b6a 100644
--- a/src/storm/storage/gspn/GspnBuilder.cpp
+++ b/src/storm-gspn/storage/gspn/GspnBuilder.cpp
@@ -1,6 +1,8 @@
-#include "storm/exceptions/IllegalFunctionCallException.h"
 #include "GspnBuilder.h"
 
+
+#include "storm/exceptions/IllegalFunctionCallException.h"
+
 #include "storm/utility/macros.h"
 #include "storm/exceptions/IllegalFunctionCallException.h"
 #include "storm/exceptions/InvalidArgumentException.h"
diff --git a/src/storm/storage/gspn/GspnBuilder.h b/src/storm-gspn/storage/gspn/GspnBuilder.h
similarity index 100%
rename from src/storm/storage/gspn/GspnBuilder.h
rename to src/storm-gspn/storage/gspn/GspnBuilder.h
diff --git a/src/storm/storage/gspn/ImmediateTransition.h b/src/storm-gspn/storage/gspn/ImmediateTransition.h
similarity index 84%
rename from src/storm/storage/gspn/ImmediateTransition.h
rename to src/storm-gspn/storage/gspn/ImmediateTransition.h
index 6728db936..4dd107f6c 100644
--- a/src/storm/storage/gspn/ImmediateTransition.h
+++ b/src/storm-gspn/storage/gspn/ImmediateTransition.h
@@ -1,7 +1,6 @@
-#ifndef STORM_STORAGE_GSPN_IMMEDIATETRANSITION_H_
-#define STORM_STORAGE_GSPN_IMMEDIATETRANSITION_H_
+#pragma once
 
-#include "storm/storage/gspn/Transition.h"
+#include "storm-gspn/storage/gspn/Transition.h"
 #include "storm/utility/constants.h"
 
 namespace storm {
@@ -39,5 +38,3 @@ namespace storm {
         };
     }
 }
-
-#endif //STORM_STORAGE_GSPN_IMMEDIATETRANSITION_H_
diff --git a/src/storm/storage/gspn/Marking.cpp b/src/storm-gspn/storage/gspn/Marking.cpp
similarity index 98%
rename from src/storm/storage/gspn/Marking.cpp
rename to src/storm-gspn/storage/gspn/Marking.cpp
index 3e9f680d0..559464c7c 100644
--- a/src/storm/storage/gspn/Marking.cpp
+++ b/src/storm-gspn/storage/gspn/Marking.cpp
@@ -1,5 +1,8 @@
+#include "Marking.h"
+
+
 #include <stdint.h>
-#include "storm/storage/gspn/Marking.h"
+
 
 namespace storm {
     namespace gspn {
diff --git a/src/storm/storage/gspn/Marking.h b/src/storm-gspn/storage/gspn/Marking.h
similarity index 100%
rename from src/storm/storage/gspn/Marking.h
rename to src/storm-gspn/storage/gspn/Marking.h
diff --git a/src/storm/storage/gspn/Place.cpp b/src/storm-gspn/storage/gspn/Place.cpp
similarity index 100%
rename from src/storm/storage/gspn/Place.cpp
rename to src/storm-gspn/storage/gspn/Place.cpp
diff --git a/src/storm/storage/gspn/Place.h b/src/storm-gspn/storage/gspn/Place.h
similarity index 100%
rename from src/storm/storage/gspn/Place.h
rename to src/storm-gspn/storage/gspn/Place.h
diff --git a/src/storm/storage/gspn/TimedTransition.h b/src/storm-gspn/storage/gspn/TimedTransition.h
similarity index 80%
rename from src/storm/storage/gspn/TimedTransition.h
rename to src/storm-gspn/storage/gspn/TimedTransition.h
index 339a19a0f..d8399319d 100644
--- a/src/storm/storage/gspn/TimedTransition.h
+++ b/src/storm-gspn/storage/gspn/TimedTransition.h
@@ -1,7 +1,6 @@
-#ifndef STORM_STORAGE_GSPN_TIMEDTRANSITION_H_
-#define STORM_STORAGE_GSPN_TIMEDTRANSITION_H_
+#pragma once
 
-#include "storm/storage/gspn/Transition.h"
+#include "storm-gspn/storage/gspn/Transition.h"
 
 namespace storm {
     namespace gspn {
@@ -31,6 +30,4 @@ namespace storm {
             RateType rate;
         };
     }
-}
-
-#endif //STORM_STORAGE_GSPN_TIMEDTRANSITION_H_
+}
\ No newline at end of file
diff --git a/src/storm/storage/gspn/Transition.cpp b/src/storm-gspn/storage/gspn/Transition.cpp
similarity index 99%
rename from src/storm/storage/gspn/Transition.cpp
rename to src/storm-gspn/storage/gspn/Transition.cpp
index adb6b3fdc..ccc24d8c3 100644
--- a/src/storm/storage/gspn/Transition.cpp
+++ b/src/storm-gspn/storage/gspn/Transition.cpp
@@ -1,4 +1,4 @@
-#include "storm/storage/gspn/Transition.h"
+#include "Transition.h"
 
 #include "storm/utility/macros.h"
 
diff --git a/src/storm/storage/gspn/Transition.h b/src/storm-gspn/storage/gspn/Transition.h
similarity index 98%
rename from src/storm/storage/gspn/Transition.h
rename to src/storm-gspn/storage/gspn/Transition.h
index 460e307b6..d61affaea 100644
--- a/src/storm/storage/gspn/Transition.h
+++ b/src/storm-gspn/storage/gspn/Transition.h
@@ -3,8 +3,8 @@
 #include <map>
 #include <unordered_map>
 #include <vector>
-#include "storm/storage/gspn/Marking.h"
-#include "storm/storage/gspn/Place.h"
+#include "storm-gspn/storage/gspn/Marking.h"
+#include "storm-gspn/storage/gspn/Place.h"
 
 namespace storm {
     namespace gspn {
diff --git a/src/storm/CMakeLists.txt b/src/storm/CMakeLists.txt
index 27dcb0913..91b2abd53 100644
--- a/src/storm/CMakeLists.txt
+++ b/src/storm/CMakeLists.txt
@@ -11,7 +11,6 @@ file(GLOB_RECURSE STORM_HEADERS ${PROJECT_SOURCE_DIR}/src/storm/*.h)
 file(GLOB_RECURSE STORM_SOURCES_WITHOUT_MAIN ${PROJECT_SOURCE_DIR}/src/storm/*/*.cpp)
 file(GLOB_RECURSE STORM_MAIN_FILE ${PROJECT_SOURCE_DIR}/src/storm/storm.cpp)
 file(GLOB_RECURSE STORM_DFT_MAIN_FILE ${PROJECT_SOURCE_DIR}/src/storm/storm-dyftee.cpp)
-file(GLOB_RECURSE STORM_GSPN_MAIN_FILE ${PROJECT_SOURCE_DIR}/src/storm/storm-gspn.cpp)
 
 # Additional include files like the storm-config.h
 file(GLOB_RECURSE STORM_BUILD_HEADERS ${PROJECT_BINARY_DIR}/include/*.h)
@@ -20,7 +19,6 @@ set(STORM_LIB_SOURCES ${STORM_SOURCES_WITHOUT_MAIN})
 set(STORM_LIB_HEADERS ${STORM_HEADERS})
 set(STORM_MAIN_SOURCES  ${STORM_MAIN_FILE})
 set(STORM_DFT_MAIN_SOURCES ${STORM_DFT_MAIN_FILE})
-set(STORM_GSPN_MAIN_SOURCES ${STORM_GSPN_MAIN_FILE})
 
 # Add custom additional include or link directories
 if (ADDITIONAL_INCLUDE_DIRS)
@@ -55,10 +53,6 @@ add_executable(storm-dft-main ${STORM_DFT_MAIN_SOURCES} ${STORM_MAIN_HEADERS})
 target_link_libraries(storm-dft-main storm) # Adding headers for xcode
 set_target_properties(storm-dft-main PROPERTIES OUTPUT_NAME "storm-dft")
 
-add_executable(storm-gspn-main ${STORM_GSPN_MAIN_SOURCES} ${STORM_MAIN_HEADERS})
-target_link_libraries(storm-gspn-main storm) # Adding headers for xcode
-set_target_properties(storm-gspn-main PROPERTIES OUTPUT_NAME "storm-gspn")
-
 # Install storm headers to include directory.
 foreach(HEADER ${STORM_LIB_HEADERS})
 	string(REGEX REPLACE "${PROJECT_SOURCE_DIR}/src/?" "" RELATIVE_HEADER_PATH ${HEADER})