diff --git a/access-node/access_node/CMakeLists.txt b/access-node/access_node/CMakeLists.txt
index 2ef844586031591eb7bcee05d7960a6a11c899a3..52a60790ca52f27929ea63aeede148a2f30bdd4e 100644
--- a/access-node/access_node/CMakeLists.txt
+++ b/access-node/access_node/CMakeLists.txt
@@ -51,49 +51,58 @@ include_directories("extern/pdqsort")
 
 add_executable(
   insite-access-node
-  main.cpp
-  include/insite/query_params.h
-  include/insite/spike_util.h
+  src/main.cpp
+
+  ${CMAKE_CURRENT_BINARY_DIR}/include/schema_generated.h
   include/insite/circular_timeseries.h
-  include/insite/config.h config.cpp
-  # include/insite/jsonParameters.h jsonParameters.cpp
-  include/insite/jsonStrings.h
-  include/insite/nest/nestKernelStatus.h nest/kernelStatus.cpp
-  include/insite/nest/nestMultimeter.h  nest/nestMultimeter.cpp
-  include/insite/nest/nestMultimeterContainer.h nest/nestMultimeterContainer.cpp
-  include/insite/nest/nestNode.h nest/nestNode.cpp
-  include/insite/nest/nestSpikeDetectors.h
-  include/insite/nest/nestSpikeRecorders.h
-  include/insite/nest/nestSpikes.h nest/nestSpikes.cpp
-  include/insite/nest/nestVersion.h nest/nestVersion.cpp
-  include/insite/arbor/cell_endpoints.h arbor/cell_endpoints.cpp
-  include/insite/arbor/probe_endpoints.h arbor/probe_endpoints.cpp
-  include/insite/arbor/spike_endpoints.h arbor/spike_endpoints.cpp
-  include/insite/arbor/parameters.h arbor/parameters.cpp
-  include/insite/arbor/arbor_strings.h arbor/arbor_strings.cpp
+  include/insite/config.h src/config.cpp
   include/insite/opcodes.h
-  # include/insite/params.h params.cpp
-  include/insite/queryStringBuilder.h
+  include/insite/query_params.h
+  include/insite/query_string_builder.h
   include/insite/resource_flags.h
-  include/insite/spike.h nest/spike.cpp
-  include/insite/spikedetector.h nest/spikedetector.cpp
-  include/insite/tvb_http_endpoints.h
-  include/insite/tvbMonitor.h tvbMonitor.cpp
-  include/insite/tvb_handler.h tvb_handler.cpp
-  include/insite/nest_handler.h nest_handler.cpp
-  include/insite/utilityFunctions.h utilityFunctions.cpp
-  include/insite/websocket_sender.h websocket_sender.cpp
-  include/insite/websocket_server.h websocket_server.cpp
-  ${CMAKE_CURRENT_BINARY_DIR}/include/schema_generated.h
+  include/insite/spike_util.h
+  include/insite/utility_functions.h src/utility_functions.cpp
+  include/insite/websocket_sender.h src/websocket_sender.cpp
+  include/insite/websocket_server.h src/websocket_server.cpp
+
+  include/insite/nest/endpoints.h
+  include/insite/nest/handler.h src/nest/handler.cpp
+  include/insite/nest/json_strings.h
+  include/insite/nest/kernel_status.h src/nest/kernel_status.cpp
+  include/insite/nest/multimeter.h  src/nest/multimeter.cpp
+  include/insite/nest/multimeter_container.h src/nest/multimeter_container.cpp
+  include/insite/nest/nodecollections.h src/nest/nodecollections.cpp
+  include/insite/nest/spike_container.h src/nest/spike_container.cpp
+  include/insite/nest/spikerecorders.h  src/nest/spikerecorders.cpp
+  include/insite/nest/spikes.h src/nest/spikes.cpp
+  include/insite/nest/version.h src/nest/version.cpp
+
+  include/insite/arbor/arbor_strings.h src/arbor/arbor_strings.cpp
+  include/insite/arbor/cell_endpoints.h src/arbor/cell_endpoints.cpp
+  include/insite/arbor/parameters.h src/arbor/parameters.cpp
+  include/insite/arbor/probe_endpoints.h src/arbor/probe_endpoints.cpp
+  include/insite/arbor/spike_endpoints.h src/arbor/spike_endpoints.cpp
+
+  include/insite/tvb/endpoints.h
+  include/insite/tvb/handler.h tvb/handler.cpp
+  include/insite/tvb/monitor.h tvb/monitor.cpp
+
 )
 
-target_include_directories(insite-access-node PRIVATE include/insite)
-target_include_directories(insite-access-node PRIVATE ${CMAKE_BINARY_DIR}/include)
 set_property(
   TARGET insite-access-node 
   PROPERTY CXX_STANDARD 17
 )
 
+target_include_directories(
+  insite-access-node
+  PRIVATE
+  include/insite
+  ${CMAKE_BINARY_DIR}/include
+  ${CMAKE_BINARY_DIR}/_deps/rapidjson-src/include
+  ${CMAKE_BINARY_DIR}/_deps/websocketpp-src
+)
+
 target_link_libraries(
   insite-access-node
   PRIVATE
@@ -108,13 +117,3 @@ target_link_libraries(
   optional
   asio::asio
 )
-
-target_include_directories(
-  insite-access-node
-  PRIVATE
-    ${CMAKE_BINARY_DIR}/_deps/rapidjson-src/include
-    ${CMAKE_BINARY_DIR}/_deps/websocketpp-src
-    # ${asio_INCLUDE_DIR}/include
-)
-
-message("${ASIO_INCLUDE_DIR}")
diff --git a/access-node/access_node/include/insite/arbor/arbor_endpoints.h b/access-node/access_node/include/insite/arbor/arbor_endpoints.h
index be694106fb98a351460add355b34d219410db9ba..e1a7f15978781b0814fe82f64ea4231f78ddeb5d 100644
--- a/access-node/access_node/include/insite/arbor/arbor_endpoints.h
+++ b/access-node/access_node/include/insite/arbor/arbor_endpoints.h
@@ -6,7 +6,7 @@
 #include "config.h"
 #include "crow/app.h"
 #include "crow/middlewares/cors.h"
-#include "utilityFunctions.h"
+#include <utility_functions.h>
 
 namespace insite {
 class ArborHttpEndpoint {
diff --git a/access-node/access_node/include/insite/config.h b/access-node/access_node/include/insite/config.h
index ab818f5c565277359fd9c36186af411d8d9f6a78..e741ccf3afd53c584790b5401fb4660714cae959 100644
--- a/access-node/access_node/include/insite/config.h
+++ b/access-node/access_node/include/insite/config.h
@@ -1,6 +1,5 @@
 #pragma once
-
-#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE
+#include <insite_defines.h>
 
 #include <spdlog/fmt/fmt.h>
 #include <string>
diff --git a/access-node/access_node/nest/nest_endpoints.h b/access-node/access_node/include/insite/nest/endpoints.h
similarity index 95%
rename from access-node/access_node/nest/nest_endpoints.h
rename to access-node/access_node/include/insite/nest/endpoints.h
index feb70256454be05fb4716e1c304c3ba364ed50d2..65562ffd5050bdd7d4a399db495261e667e579f2 100644
--- a/access-node/access_node/nest/nest_endpoints.h
+++ b/access-node/access_node/include/insite/nest/endpoints.h
@@ -4,12 +4,12 @@
 #include "crow/http_request.h"
 #include "crow/middlewares/cors.h"
 #include "tl/optional.hpp"
-#include <nest/nestKernelStatus.h>
-#include <nest/nestMultimeter.h>
-#include <nest/nestNode.h>
-#include <nest/nestSpikeRecorders.h>
-#include <nest/nestSpikes.h>
-#include <nest/nestVersion.h>
+#include <nest/kernel_status.h>
+#include <nest/multimeter.h>
+#include <nest/nodecollections.h>
+#include <nest/spikerecorders.h>
+#include <nest/spikes.h>
+#include <nest/version.h>
 
 #define CROW_ROUTE_LAMBA(APP, ENDPOINT, FUNCTION)                              \
   CROW_ROUTE(APP, ENDPOINT)                                                    \
diff --git a/access-node/access_node/include/insite/nest_handler.h b/access-node/access_node/include/insite/nest/handler.h
similarity index 100%
rename from access-node/access_node/include/insite/nest_handler.h
rename to access-node/access_node/include/insite/nest/handler.h
diff --git a/access-node/access_node/include/insite/jsonStrings.h b/access-node/access_node/include/insite/nest/json_strings.h
similarity index 100%
rename from access-node/access_node/include/insite/jsonStrings.h
rename to access-node/access_node/include/insite/nest/json_strings.h
diff --git a/access-node/access_node/include/insite/nest/nestKernelStatus.h b/access-node/access_node/include/insite/nest/kernel_status.h
similarity index 100%
rename from access-node/access_node/include/insite/nest/nestKernelStatus.h
rename to access-node/access_node/include/insite/nest/kernel_status.h
diff --git a/access-node/access_node/include/insite/nest/nestMultimeter.h b/access-node/access_node/include/insite/nest/multimeter.h
similarity index 94%
rename from access-node/access_node/include/insite/nest/nestMultimeter.h
rename to access-node/access_node/include/insite/nest/multimeter.h
index 48e249e1ca9b2f8586e2631123f38ea2cc47fa74..fc7a605fc1772c9236a641b7e6b18823506748ca 100644
--- a/access-node/access_node/include/insite/nest/nestMultimeter.h
+++ b/access-node/access_node/include/insite/nest/multimeter.h
@@ -2,9 +2,8 @@
 #include <cpr/cpr.h>
 #include <cstdint>
 #include <iterator>
-#include <nest/nestMultimeterContainer.h>
+#include <nest/multimeter_container.h>
 #include <optional>
-// #include <params.h>
 #include <rapidjson/document.h>
 #include <rapidjson/stringbuffer.h>
 #include <rapidjson/writer.h>
@@ -12,7 +11,7 @@
 #include <spdlog/fmt/ranges.h>
 #include <spdlog/spdlog.h>
 #include <unordered_set>
-#include <utilityFunctions.h>
+#include <utility_functions.h>
 #include <vector>
 namespace insite {
 
diff --git a/access-node/access_node/include/insite/nest/nestMultimeterContainer.h b/access-node/access_node/include/insite/nest/multimeter_container.h
similarity index 100%
rename from access-node/access_node/include/insite/nest/nestMultimeterContainer.h
rename to access-node/access_node/include/insite/nest/multimeter_container.h
diff --git a/access-node/access_node/include/insite/nest/nestNode.h b/access-node/access_node/include/insite/nest/nodecollections.h
similarity index 100%
rename from access-node/access_node/include/insite/nest/nestNode.h
rename to access-node/access_node/include/insite/nest/nodecollections.h
diff --git a/access-node/access_node/include/insite/spike.h b/access-node/access_node/include/insite/nest/spike_container.h
similarity index 100%
rename from access-node/access_node/include/insite/spike.h
rename to access-node/access_node/include/insite/nest/spike_container.h
diff --git a/access-node/access_node/include/insite/nest/nestSpikeRecorders.h b/access-node/access_node/include/insite/nest/spikerecorders.h
similarity index 85%
rename from access-node/access_node/include/insite/nest/nestSpikeRecorders.h
rename to access-node/access_node/include/insite/nest/spikerecorders.h
index c17e7f8001e661a4524b0e3fc4624e2a810b2a89..9d88073f31e1ff5e99480951371483bb5b1870f3 100644
--- a/access-node/access_node/include/insite/nest/nestSpikeRecorders.h
+++ b/access-node/access_node/include/insite/nest/spikerecorders.h
@@ -1,38 +1,38 @@
 #pragma once
 #include <config.h>
 #include <cpr/cpr.h>
-#include <jsonStrings.h>
-#include <nest/nestSpikes.h>
+#include <iostream>
+#include <iterator>
+#include <nest/json_strings.h>
+#include <nest/spikes.h>
+#include <optional>
 #include <rapidjson/document.h>
 #include <rapidjson/stringbuffer.h>
 #include <spdlog/fmt/ostr.h>
 #include <spdlog/fmt/ranges.h>
 #include <spdlog/spdlog.h>
 #include <spikedetector.h>
-#include <utilityFunctions.h>
-#include <iostream>
-#include <iterator>
-#include <optional>
 #include <unordered_set>
+#include <utility_functions.h>
 #include <vector>
 
 namespace insite {
 // Receives a rapidjson-Object and checks if it has all the necessary properties
 // for spikeRecorderData
 void CheckSpikeRecorderDataValid(
-    const rapidjson::GenericObject<false, rapidjson::Value>&
-        json_spikerecorder) {
+    const rapidjson::GenericObject<false, rapidjson::Value>
+        &json_spikerecorder) {
   assert(json_spikerecorder.HasMember(json_strings::kSpikerecorderId) &&
          json_spikerecorder[json_strings::kSpikerecorderId].IsInt());
   assert(json_spikerecorder.HasMember(json_strings::kNodeIds) &&
          json_spikerecorder[json_strings::kNodeId].IsArray());
 }
 
-std::vector<Spikerecorder> GetSpikerecorder(
-    const rapidjson::Value& json_spikerecorders) {
+std::vector<Spikerecorder>
+GetSpikerecorder(const rapidjson::Value &json_spikerecorders) {
   std::vector<Spikerecorder> spikerecorders;
 
-  for (const auto& recorder : json_spikerecorders.GetArray()) {
+  for (const auto &recorder : json_spikerecorders.GetArray()) {
     spikerecorders.emplace_back(recorder);
   }
 
@@ -53,16 +53,19 @@ inline crow::response SpikeRecorders(int api_version) {
 
   auto response = QueryRandomNode(ServerConfig::GetInstance().request_nest_urls,
                                   endpoint, api_version);
+  if (response.status_code == 202) {
+    return crow::response(202);
+  }
 
   std::string response_text = response.text;
   rapidjson::Document json_spikerecorders;
-  spdlog::error("{}", response_text);
+  // spdlog::error("{}", response_text);
   json_spikerecorders.Parse(response_text.c_str());
 
   if (api_version == 1) {
     json_writer.StartArray();
     auto spikerecorder = GetSpikerecorder(json_spikerecorders);
-    for (const auto& spikerecorder : spikerecorder) {
+    for (const auto &spikerecorder : spikerecorder) {
       spikerecorder.WriteToJson(json_writer);
     }
     json_writer.EndArray();
@@ -78,7 +81,7 @@ inline crow::response SpikeRecorders(int api_version) {
     json_writer.String(sim_id.c_str());
     json_writer.Key("spikerecorders");
     json_writer.StartArray();
-    for (const auto& spikerecorder : spikerecorder) {
+    for (const auto &spikerecorder : spikerecorder) {
       spikerecorder.WriteToJson(json_writer);
     }
     json_writer.EndArray();
@@ -89,7 +92,7 @@ inline crow::response SpikeRecorders(int api_version) {
   return crow::response(202);
 }
 
-inline crow::response SpikesBySpikeRecorderId(const crow::request& req,
+inline crow::response SpikesBySpikeRecorderId(const crow::request &req,
                                               int api_version,
                                               int requested_spikerecorder_id) {
   SpikeParameter params(req.url_params);
@@ -120,4 +123,4 @@ inline crow::response SpikesBySpikeRecorderId(const crow::request& req,
   // return {buffer.GetString()};
   return {NestGetSpikes(params, api_version)};
 }
-}  // namespace insite
+} // namespace insite
diff --git a/access-node/access_node/include/insite/nest/nestSpikes.h b/access-node/access_node/include/insite/nest/spikes.h
similarity index 96%
rename from access-node/access_node/include/insite/nest/nestSpikes.h
rename to access-node/access_node/include/insite/nest/spikes.h
index 6c3cbda5d92064df7e1f28f7a65c4d2c96bc6bfd..d12ceb111c01bae72eeb29183c45f827d2a725b7 100644
--- a/access-node/access_node/include/insite/nest/nestSpikes.h
+++ b/access-node/access_node/include/insite/nest/spikes.h
@@ -2,6 +2,7 @@
 #include "query_params.h"
 #include <iostream>
 #include <iterator>
+#include <nest/spike_container.h>
 #include <optional>
 #include <pdqsort.h>
 #include <rapidjson/document.h>
@@ -9,11 +10,10 @@
 #include <schema_generated.h>
 #include <spdlog/fmt/chrono.h>
 #include <spdlog/spdlog.h>
-#include <spike.h>
 #include <unordered_set>
 #include <vector>
 // #include "pdqsort.h"
-#include <utilityFunctions.h>
+#include <utility_functions.h>
 
 namespace insite {
 // Receives a rapidjson-Object and checks if it has all the necessary properties
diff --git a/access-node/access_node/include/insite/nest/nestVersion.h b/access-node/access_node/include/insite/nest/version.h
similarity index 100%
rename from access-node/access_node/include/insite/nest/nestVersion.h
rename to access-node/access_node/include/insite/nest/version.h
diff --git a/access-node/access_node/include/insite/opcodes.h b/access-node/access_node/include/insite/opcodes.h
index 859d1a1e15f90039eca6e4a42f1e464ceb43d39b..188e97bf5fd5e9f5825e7afd804b22ec5aeea09c 100644
--- a/access-node/access_node/include/insite/opcodes.h
+++ b/access-node/access_node/include/insite/opcodes.h
@@ -7,7 +7,10 @@ enum Opcode : OpcodeType {
   kData,
   kRegisterNewMonitor,
   kStartSim,
-  kEndSim
+  kEndSim,
+  kDeregisterMonitor,
+  kSimInfo,
+  kSimInfoReturn
 };
 
 enum DataType : char {
diff --git a/access-node/access_node/include/insite/params.h.bak b/access-node/access_node/include/insite/params.h.bak
deleted file mode 100644
index 6115130f20a5400d0567e0e78c214219b9125969..0000000000000000000000000000000000000000
--- a/access-node/access_node/include/insite/params.h.bak
+++ /dev/null
@@ -1,153 +0,0 @@
-#pragma once
-#include <crow/http_request.h>
-#include <crow/query_string.h>
-#include <jsonStrings.h>
-#include <spdlog/spdlog.h>
-#include <array>
-#include <optional>
-#include <sstream>
-#include <string>
-#include <unordered_map>
-#include <unordered_set>
-#include <utility>
-#include <variant>
-#include <vector>
-#include "string_util.h"
-
-// template <std::size_t N, typename... Types>
-// using NthParameterT = std::tuple_element_t<N, std::tuple<Types...>>;
-
-namespace insite {
-
-template <class>
-inline constexpr bool kAlwaysFalseV = false;
-using ParameterValue = std::variant<std::string,
-                                    bool,
-                                    int,
-                                    double,
-                                    uint64_t,
-                                    std::unordered_set<uint64_t>>;
-using OptionalParameterValue = std::optional<ParameterValue>;
-using ParameterName = std::string;
-
-struct Param {
-  ParameterName name;
-  ParameterValue value;
-
-  [[nodiscard]] std::string KeyValueToString() const;
-  [[nodiscard]] ParameterName Name() const { return name; };
-  [[nodiscard]] ParameterValue Value() const { return value; };
-  template <typename T>
-  [[nodiscard]] T ValueAsT() const {
-    return std::get<T>(value);
-  };
-};
-
-struct OptionalParameter {
-  ParameterName name;
-  OptionalParameterValue value;
-
-  template <class T>
-  [[nodiscard]] static OptionalParameter GetFromQueryString(
-      const crow::query_string& query,
-      const char* name) {
-    std::optional<T> result;
-
-    if (query.get(name) != nullptr) {
-      result = ConvertStringToType<T>(query.get(name));
-      SPDLOG_DEBUG("{}: {}", name, result.value());
-    } else {
-      SPDLOG_DEBUG("{}: no value", name);
-    }
-
-    return {name, result};
-  }
-
-  template <class T>
-  [[nodiscard]] inline static OptionalParameter GetFromQueryString(
-      const crow::request& req,
-      const char* name) {
-    return OptionalParameter::GetFromQueryString<T>(req.url_params, name);
-  };
-
-  template <class T>
-  [[nodiscard]] static OptionalParameter GetUSetFromQueryString(
-      const crow::query_string& query_string,
-      const char* name) {
-    std::unordered_set<T> result;
-
-    if (!query_string.get_list(name, false).empty()) {
-      std::vector<char*> value_strings = query_string.get_list(name, false);
-      for (char* value_string : value_strings) {
-        T value = ConvertStringToType<T>(value_string);
-        result.insert(value);
-      }
-      return {name, result};
-    }
-    return {name, std::nullopt};
-  }
-
-  template <class T>
-  [[nodiscard]] inline static OptionalParameter GetUSetFromQueryString(
-      const crow::request& req,
-      const char* name) {
-    return GetUSetFromQueryString<T>(req.url_params, name);
-  }
-
-  //
-  [[nodiscard]] std::string KeyValueToString() const;
-
-  [[nodiscard]] ParameterValue Value() { return value.value(); };
-
-  template <class T>
-  [[nodiscard]] T ValueAsT() {
-    return std::get<T>(value.value());
-  };
-
-  template <class T>
-  [[nodiscard]] T ValueAsTOr(T default_value) {
-    return value.has_value() ? std::get<T>(value.value()) : default_value;
-  };
-
-  [[nodiscard]] bool HasValue() const { return value.has_value(); };
-
-  operator bool() const { return value.has_value(); }
-};
-
-struct OptionalParameters {
- public:
-  // std::vector<OptionalParameter> parameters;
-  std::unordered_map<ParameterName, OptionalParameter> parameters;
-
-  [[nodiscard]] std::vector<ParameterName> Keys();
-  [[nodiscard]] std::vector<ParameterValue> Values();
-
-  [[nodiscard]] OptionalParameter GetValue(const ParameterName& parameter_name);
-
-  [[nodiscard]] std::string ToQueryString();
-  [[nodiscard]] static std::string ToQueryString(
-      const std::vector<OptionalParameter>& parameters);
-};
-
-struct MultimeterParameters : public OptionalParameters {
-  MultimeterParameters(const crow::request& request) {
-    using namespace insite::json_strings;
-
-    parameters.insert({kFromTime, OptionalParameter::GetFromQueryString<double>(
-                                      request.url_params, kFromTime)});
-    parameters.insert({kToTime, OptionalParameter::GetFromQueryString<double>(
-                                    request, kToTime)});
-    parameters.insert(
-        {kNodeIds, OptionalParameter::GetUSetFromQueryString<uint64_t>(
-                       request, kNodeIds)});
-    parameters.insert({kSkip, OptionalParameter::GetFromQueryString<uint64_t>(
-                                  request, kSkip)});
-    parameters.insert(
-        {kTop, OptionalParameter::GetFromQueryString<uint64_t>(request, kTop)});
-    parameters.insert(
-        {kSort,
-         OptionalParameter::GetFromQueryString<std::string>(request, kSort)});
-  }
-};
-
-}  // namespace insite
diff --git a/access-node/access_node/include/insite/queryStringBuilder.h b/access-node/access_node/include/insite/query_string_builder.h
similarity index 100%
rename from access-node/access_node/include/insite/queryStringBuilder.h
rename to access-node/access_node/include/insite/query_string_builder.h
diff --git a/access-node/access_node/include/insite/spikedetector.h b/access-node/access_node/include/insite/spikedetector.h
index 24705bbed523dda773ab55d5e402ce1b26ef21e1..e2d7017284c5132f0cb67d53878954f9ac0db299 100644
--- a/access-node/access_node/include/insite/spikedetector.h
+++ b/access-node/access_node/include/insite/spikedetector.h
@@ -9,8 +9,8 @@
 #include <unordered_set>
 #include <vector>
 
-#include <nest/nestSpikes.h>
-#include <utilityFunctions.h>
+#include <nest/spikes.h>
+#include <utility_functions.h>
 namespace insite {
 
 using NodeList = std::vector<uint64_t>;
diff --git a/access-node/access_node/include/insite/tvb_http_endpoints.h b/access-node/access_node/include/insite/tvb/endpoints.h
similarity index 61%
rename from access-node/access_node/include/insite/tvb_http_endpoints.h
rename to access-node/access_node/include/insite/tvb/endpoints.h
index 88523196f97d0a7ef897751b4bf1614a182a6669..c5b3f3b82118eac261e1bfda768aeab3315e9177 100644
--- a/access-node/access_node/include/insite/tvb_http_endpoints.h
+++ b/access-node/access_node/include/insite/tvb/endpoints.h
@@ -5,8 +5,9 @@
 #include "query_params.h"
 #include "rapidjson/stringbuffer.h"
 #include "rapidjson/writer.h"
-#include "tvb_handler.h"
-#include "utilityFunctions.h"
+#include <chrono>
+#include <tvb/handler.h>
+#include <utility_functions.h>
 
 namespace insite {
 class TVBHttpEndpoint {
@@ -18,10 +19,13 @@ public:
     CROW_ROUTE(app, "/tvb/data")(&TVBHttpEndpoint::GetData);
     CROW_ROUTE(app, "/tvb/monitors")(&TVBHttpEndpoint::GetMonitors);
     CROW_ROUTE(app, "/tvb/exec/")(&TVBHttpEndpoint::LOL);
+    CROW_ROUTE(app, "/tvb/simulation_info/")(&TVBHttpEndpoint::GetSimInfo);
+    CROW_ROUTE(app, "/tvb/simulation_info/<path>")
+    (&TVBHttpEndpoint::GetSimInfoDetails);
   }
 
   static crow::response LOL(const crow::request &request) {
-    if (tvb_handler->srv) {
+    if (tvb_handler->srv != nullptr) {
       auto query_string = GetQueryString(request.raw_url).substr(1);
       tvb_handler->srv->BroadcastAll(query_string, ResourceFlag::kTVB);
     } else {
@@ -30,6 +34,39 @@ public:
     return {""};
   }
 
+  static crow::response GetSimInfoDetails(const crow::request &request,
+                                          const std::string &value) {
+    if (tvb_handler->srv != nullptr) {
+      tvb_handler->srv->BroadcastAll(value, ResourceFlag::kTVB);
+      tvb_handler->sim_info_promise = std::promise<std::string>();
+      auto future = tvb_handler->sim_info_promise.get_future();
+      auto result = future.wait_for(std::chrono::milliseconds(500));
+
+      if (result == std::future_status::timeout) {
+        return {"timeout..."};
+      }
+
+      auto value = future.get();
+      if (value == "null") {
+        return {crow::status::BAD_REQUEST,
+                R"({"error":"attribute not found"})"};
+      }
+      return {value};
+    } else {
+      spdlog::error("Websocket Server in TVB Handler not set!");
+      return {"error"};
+    }
+  }
+
+  static crow::response GetSimInfo(const crow::request &request) {
+    rapidjson::StringBuffer buffer;
+    rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
+
+    tvb_handler->sim_info.Accept(writer);
+
+    return {buffer.GetString()};
+  }
+
   static crow::response GetMonitors(const crow::request &request) {
     rapidjson::StringBuffer buffer;
     rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
diff --git a/access-node/access_node/include/insite/tvb_handler.h b/access-node/access_node/include/insite/tvb/handler.h
similarity index 84%
rename from access-node/access_node/include/insite/tvb_handler.h
rename to access-node/access_node/include/insite/tvb/handler.h
index 934901314b4a653c35e9e884d36099f1f269082a..c19b2072076430480eb006918dbfaf425683a57c 100644
--- a/access-node/access_node/include/insite/tvb_handler.h
+++ b/access-node/access_node/include/insite/tvb/handler.h
@@ -2,21 +2,24 @@
 #include "opcodes.h"
 #include "rapidjson/stringbuffer.h"
 #include "rapidjson/writer.h"
-#include "tvbMonitor.h"
 #include "websocket_server.h"
 #include <condition_variable>
 #include <cstdint>
 #include <mutex>
 #include <spdlog/spdlog.h>
 #include <thread>
+#include <tvb/monitor.h>
 #include <unistd.h>
 
 namespace insite {
 class TvbHandler {
 public:
   TvbHandler() = default;
+
+  void ParseSimInfoReturn(const std::string &payload);
   void ParseDataPacket(const std::string &payload);
   void ParseNewMonitorPacket(const std::string &payload);
+  void ParseSimInfo(const std::string &payload);
   void
   SerializeMonitorsJson(rapidjson::Writer<rapidjson::StringBuffer> &writer);
   void AddMessageIntoQueue(std::string &&msg);
@@ -36,6 +39,8 @@ public:
   // WebsocketServer *srv;
   uint64_t bytes = 0;
   // private:
+
+  std::promise<std::string> sim_info_promise;
   bool runConsumerLoop_ = true;
   std::vector<std::string> message_queue_;
   uint32_t number_of_monitors = 0;
@@ -43,5 +48,7 @@ public:
   std::vector<TvbMonitor<double>> double_monitors_;
   std::condition_variable var_;
   std::mutex mut_;
+
+  rapidjson::Document sim_info;
 };
 } // namespace insite
diff --git a/access-node/access_node/include/insite/tvbMonitor.h b/access-node/access_node/include/insite/tvb/monitor.h
similarity index 79%
rename from access-node/access_node/include/insite/tvbMonitor.h
rename to access-node/access_node/include/insite/tvb/monitor.h
index a0acef3e62bea585460b0a8e30d7d0519da07798..dfb48ae04f6160a32b9cbf631cfed72f36ce8878 100644
--- a/access-node/access_node/include/insite/tvbMonitor.h
+++ b/access-node/access_node/include/insite/tvb/monitor.h
@@ -1,15 +1,15 @@
 #pragma once
-#include <rapidjson/document.h>
-#include <rapidjson/writer.h>
+#include "circular_timeseries.h"
 #include <cstdint>
 #include <iterator>
 #include <limits>
 #include <optional>
+#include <rapidjson/document.h>
+#include <rapidjson/writer.h>
 #include <string>
 #include <type_traits>
 #include <utility>
 #include <vector>
-#include "circular_timeseries.h"
 // #include "params.h"
 #include "spdlog/fmt/fmt.h"
 #include "spdlog/spdlog.h"
@@ -17,24 +17,19 @@
 
 namespace insite {
 
-template <typename T>
-class TvbMonitor {
+template <typename T> class TvbMonitor {
   using It = typename std::vector<T>::iterator;
 
- public:
+public:
   uint32_t internal_id;
   std::string name;
   std::string uid;
   std::vector<std::string> observed_variables;
 
-  TvbMonitor(std::string name,
-             uint32_t internal_id,
-             std::string uid,
+  TvbMonitor(std::string name, uint32_t internal_id, std::string uid,
              std::vector<std::string> observed_variables)
-      : name(std::move(name)),
-        internal_id(internal_id),
-        uid(std::move(uid)),
-        data(4, {1, 76, 2}),
+      : name(std::move(name)), internal_id(internal_id), uid(std::move(uid)),
+        data(10, {1, 76, 2}),
         observed_variables(std::move(observed_variables)) {
     stride_length.push_back(1);
     stride_length.push_back(76);
@@ -42,8 +37,8 @@ class TvbMonitor {
     SPDLOG_DEBUG(stride_length);
   };
 
-  void SerializeMetadataToJson(
-      rapidjson::Writer<rapidjson::StringBuffer>& writer) {
+  void
+  SerializeMetadataToJson(rapidjson::Writer<rapidjson::StringBuffer> &writer) {
     writer.StartObject();
     writer.Key("uid");
     writer.String(uid.c_str());
@@ -53,14 +48,14 @@ class TvbMonitor {
     writer.String(name.c_str());
     writer.Key("observedVariables");
     writer.StartArray();
-    for (const auto& var : observed_variables) {
+    for (const auto &var : observed_variables) {
       writer.String(var.c_str());
     }
     writer.EndArray();
     writer.EndObject();
   }
 
-  void SerializeDataToJson(rapidjson::Writer<rapidjson::StringBuffer>& writer,
+  void SerializeDataToJson(rapidjson::Writer<rapidjson::StringBuffer> &writer,
                            tl::optional<double> from_time,
                            tl::optional<double> to_time) {
     writer.StartObject();
@@ -81,7 +76,7 @@ class TvbMonitor {
         writer.Key(observed_variables[var].c_str());
         writer.StartArray();
         auto res = data.GetVarByIndex(timestep, var);
-        for (auto& data : res) {
+        for (auto &data : res) {
           if constexpr (std::is_same_v<T, double>) {
             writer.Double(data);
           }
@@ -105,18 +100,17 @@ class TvbMonitor {
   };
 };
 
-}  // namespace insite
+} // namespace insite
 
-template <typename T>
-struct fmt::formatter<insite::TvbMonitor<T>> {
-  constexpr auto parse(format_parse_context& ctx)  // NOLINT
+template <typename T> struct fmt::formatter<insite::TvbMonitor<T>> {
+  constexpr auto parse(format_parse_context &ctx) // NOLINT
       -> decltype(ctx.begin()) {
     return ctx.begin();
   }
 
   template <typename FormatContext>
-  auto format(const insite::TvbMonitor<T>& monitor,  // NOLINT
-              FormatContext& ctx) const -> decltype(ctx.out()) {
+  auto format(const insite::TvbMonitor<T> &monitor, // NOLINT
+              FormatContext &ctx) const -> decltype(ctx.out()) {
     return fmt::format_to(ctx.out(), "Monitor {} Name: {}, Observed Vars: {}",
                           monitor.uid, monitor.name,
                           monitor.observed_variables);
diff --git a/access-node/access_node/include/insite/utilityFunctions.h b/access-node/access_node/include/insite/utility_functions.h
similarity index 95%
rename from access-node/access_node/include/insite/utilityFunctions.h
rename to access-node/access_node/include/insite/utility_functions.h
index 8e638b4bcfad5f7776c45462071e79899265dc12..0e1832163e57ab8049ab0a88b0bb7a04a2e50029 100644
--- a/access-node/access_node/include/insite/utilityFunctions.h
+++ b/access-node/access_node/include/insite/utility_functions.h
@@ -14,9 +14,9 @@
 #include <unordered_set>
 #include <vector>
 
-#include <jsonStrings.h>
-#include <queryStringBuilder.h>
-#include <spike.h>
+#include <nest/json_strings.h>
+#include <nest/spike_container.h>
+#include <query_string_builder.h>
 namespace insite {
 
 #ifdef INSITE_PRETTY_JSON
diff --git a/access-node/access_node/include/insite/websocket_sender.h b/access-node/access_node/include/insite/websocket_sender.h
index d1cba5b09b31d32c664c08b72bd1e40cf2c55112..b27981341942ee9231cd46cb4c69fba0904ddd13 100644
--- a/access-node/access_node/include/insite/websocket_sender.h
+++ b/access-node/access_node/include/insite/websocket_sender.h
@@ -1,19 +1,19 @@
 #pragma once
-#include <spdlog/spdlog.h>
-#include <unistd.h>
-#include <condition_variable>
-#include <cstdint>
-#include <map>
-#include <mutex>
-#include <thread>
 #include "opcodes.h"
 #include "rapidjson/stringbuffer.h"
 #include "rapidjson/writer.h"
-#include "tvbMonitor.h"
+#include "resource_flags.h"
 #include "websocketpp/common/connection_hdl.hpp"
 #include "websocketpp/config/asio_no_tls.hpp"
 #include "websocketpp/roles/server_endpoint.hpp"
-#include "resource_flags.h"
+#include <condition_variable>
+#include <cstdint>
+#include <map>
+#include <mutex>
+#include <spdlog/spdlog.h>
+#include <thread>
+#include <tvb/monitor.h>
+#include <unistd.h>
 
 namespace insite {
 using Server = websocketpp::server<websocketpp::config::asio>;
@@ -27,24 +27,30 @@ struct ClientParams {
 };
 
 class WebsocketSender {
- public:
-  WebsocketSender(std::map<websocketpp::connection_hdl, ClientParams, std::owner_less<websocketpp::connection_hdl>>& connection_map, Server& websocket_server, std::mutex& mutex, std::condition_variable& cond)
-      : connection_map(connection_map),var_(cond), mut_(mutex), websocket_server(websocket_server) {}
+public:
+  WebsocketSender(
+      std::map<websocketpp::connection_hdl, ClientParams,
+               std::owner_less<websocketpp::connection_hdl>> &connection_map,
+      Server &websocket_server, std::mutex &mutex,
+      std::condition_variable &cond)
+      : connection_map(connection_map), var_(cond), mut_(mutex),
+        websocket_server(websocket_server) {}
 
-  void StartThread(std::vector<WebsocketMessage>* queue) {
+  void StartThread(std::vector<WebsocketMessage> *queue) {
     consumer_thread_ = std::thread(&WebsocketSender::Consumer, this, queue);
   }
 
-  void Consumer(std::vector<WebsocketMessage>* queue);
+  void Consumer(std::vector<WebsocketMessage> *queue);
 
   // void BroadcastAll(const std::string& msg);
-  void BroadcastAll(const std::string& msg, ResourceFlag resource);
-  
+  void BroadcastAll(const std::string &msg, ResourceFlag resource);
+
   // private:
-  std::map<websocketpp::connection_hdl, ClientParams, std::owner_less<websocketpp::connection_hdl>>& connection_map; 
+  std::map<websocketpp::connection_hdl, ClientParams,
+           std::owner_less<websocketpp::connection_hdl>> &connection_map;
   std::thread consumer_thread_;
-  std::condition_variable& var_;
-  std::mutex& mut_;
-  Server& websocket_server;
+  std::condition_variable &var_;
+  std::mutex &mut_;
+  Server &websocket_server;
 };
-}  // namespace insite
+} // namespace insite
diff --git a/access-node/access_node/params.cpp.bak b/access-node/access_node/params.cpp.bak
deleted file mode 100644
index 09381d073722a1b33866cae01e484e3d6e1c89ad..0000000000000000000000000000000000000000
--- a/access-node/access_node/params.cpp.bak
+++ /dev/null
@@ -1,98 +0,0 @@
-#include "params.h"
-#include <optional>
-#include <unordered_set>
-#include <vector>
-#include "crow/query_string.h"
-#include "queryStringBuilder.h"
-
-namespace insite {
-template <typename>
-struct IsStdUSet : std::false_type {};
-
-template <typename T, typename A>
-struct IsStdUSet<std::unordered_set<T, A>> : std::true_type {};
-std::string Param::KeyValueToString() const {
-  std::string res = name;
-
-  std::visit(
-      [&res, this](auto&& arg) {
-        using T = std::decay_t<decltype(arg)>;
-        if constexpr (std::is_same_v<T, std::string>) {
-          res += name + "=" + arg;
-        } else if constexpr (std::is_arithmetic_v<T>) {
-          res += name + "=" + std::to_string(arg);
-        } else if constexpr (IsStdUSet<T>::value) {
-        } else {
-          static_assert(kAlwaysFalseV<T>, "non-exhaustive visitor!");
-        }
-      },
-      value);
-
-  return res;
-}
-
-std::string OptionalParameter::KeyValueToString() const {
-  std::string res = name + "=";
-  if (!value) {
-    return "";
-  }
-
-  std::visit(
-      [&res, this](auto&& arg) {
-        using T = std::decay_t<decltype(arg)>;
-        if constexpr (std::is_same_v<T, std::string>) {
-          res += arg;
-        } else if constexpr (std::is_arithmetic_v<T>) {
-          res += std::to_string(arg);
-        } else if constexpr (IsStdUSet<T>::value) {
-          res += UnorderedSetToCsv(arg);
-        } else {
-          static_assert(kAlwaysFalseV<T>, "non-exhaustive visitor!");
-        }
-      },
-      value.value());
-
-  return res;
-}
-
-std::string OptionalParameters::ToQueryString(
-    const std::vector<OptionalParameter>& parameters) {
-  std::string result = "?";
-  for (auto it = parameters.begin(); it != parameters.end(); ++it) {
-    if (*it) {
-      if (it != parameters.begin()) {
-        result += "&";
-      }
-      result += it->KeyValueToString();
-    }
-  }
-
-  return result;
-}
-
-std::string OptionalParameters::ToQueryString() {
-  std::string result = "?";
-  for (auto it = parameters.begin(); it != parameters.end(); ++it) {
-    if (it != parameters.begin()) {
-      result += "&";
-    }
-    if (it->second) {
-      result += it->second.KeyValueToString();
-    }
-  }
-
-  return result;
-}
-
-// Returns the parameter value if it is present nullopt otherwise
-OptionalParameter OptionalParameters::GetValue(
-    const ParameterName& parameter_name) {
-  if (auto parameter = parameters.find(parameter_name);
-      parameter != parameters.end()) {
-    return parameter->second;
-  }
-
-  return {parameter_name, std::nullopt};
-}
-
-}  // namespace insite
diff --git a/access-node/access_node/arbor/arbor_strings.cpp b/access-node/access_node/src/arbor/arbor_strings.cpp
similarity index 100%
rename from access-node/access_node/arbor/arbor_strings.cpp
rename to access-node/access_node/src/arbor/arbor_strings.cpp
diff --git a/access-node/access_node/arbor/cell_endpoints.cpp b/access-node/access_node/src/arbor/cell_endpoints.cpp
similarity index 97%
rename from access-node/access_node/arbor/cell_endpoints.cpp
rename to access-node/access_node/src/arbor/cell_endpoints.cpp
index fc90f79d97a24308189363b5e90c73234c000013..28ffeb7aa7ee6ce6c12acaeb63078b99e3a3f9ca 100644
--- a/access-node/access_node/arbor/cell_endpoints.cpp
+++ b/access-node/access_node/src/arbor/cell_endpoints.cpp
@@ -6,10 +6,10 @@
 #include "rapidjson/rapidjson.h"
 #include "rapidjson/stringbuffer.h"
 #include "spdlog/spdlog.h"
-#include "utilityFunctions.h"
 #include <arbor/arbor_strings.h>
 #include <arbor/cell_endpoints.h>
 #include <config.h>
+#include <utility_functions.h>
 
 namespace insite::arbor {
 
diff --git a/access-node/access_node/arbor/parameters.cpp b/access-node/access_node/src/arbor/parameters.cpp
similarity index 100%
rename from access-node/access_node/arbor/parameters.cpp
rename to access-node/access_node/src/arbor/parameters.cpp
diff --git a/access-node/access_node/arbor/probe_endpoints.cpp b/access-node/access_node/src/arbor/probe_endpoints.cpp
similarity index 98%
rename from access-node/access_node/arbor/probe_endpoints.cpp
rename to access-node/access_node/src/arbor/probe_endpoints.cpp
index 3cdfbc363cb4fb63515a225818f440237708ba0d..9f8308f29233862d4f632dfff40713267296298d 100644
--- a/access-node/access_node/arbor/probe_endpoints.cpp
+++ b/access-node/access_node/src/arbor/probe_endpoints.cpp
@@ -3,10 +3,10 @@
 #include "rapidjson/document.h"
 #include "rapidjson/stringbuffer.h"
 #include "spdlog/spdlog.h"
-#include "utilityFunctions.h"
 #include <arbor/arbor_strings.h>
 #include <arbor/probe_endpoints.h>
 #include <config.h>
+#include <utility_functions.h>
 
 namespace insite::arbor {
 
diff --git a/access-node/access_node/arbor/spike_endpoints.cpp b/access-node/access_node/src/arbor/spike_endpoints.cpp
similarity index 96%
rename from access-node/access_node/arbor/spike_endpoints.cpp
rename to access-node/access_node/src/arbor/spike_endpoints.cpp
index d5f8d6c421be535ae65d3777ea2778130a26ee83..425d50d660b1126024156435abda6fbfe3725450 100644
--- a/access-node/access_node/arbor/spike_endpoints.cpp
+++ b/access-node/access_node/src/arbor/spike_endpoints.cpp
@@ -5,11 +5,11 @@
 #include "rapidjson/rapidjson.h"
 #include "rapidjson/stringbuffer.h"
 #include "spdlog/spdlog.h"
-#include "utilityFunctions.h"
 #include <arbor/arbor_strings.h>
 #include <arbor/cell_endpoints.h>
 #include <arbor/spike_endpoints.h>
 #include <config.h>
+#include <utility_functions.h>
 
 namespace insite::arbor {
 
diff --git a/access-node/access_node/config.cpp b/access-node/access_node/src/config.cpp
similarity index 100%
rename from access-node/access_node/config.cpp
rename to access-node/access_node/src/config.cpp
diff --git a/access-node/access_node/insite_defines.cpp b/access-node/access_node/src/insite_defines.cpp
similarity index 100%
rename from access-node/access_node/insite_defines.cpp
rename to access-node/access_node/src/insite_defines.cpp
diff --git a/access-node/access_node/main.cpp b/access-node/access_node/src/main.cpp
similarity index 83%
rename from access-node/access_node/main.cpp
rename to access-node/access_node/src/main.cpp
index f37680db739b5a896515642b00c0d30fcc5f5fcd..0f005acbe938bf5da90ff54b59c0dc25778f9599 100644
--- a/access-node/access_node/main.cpp
+++ b/access-node/access_node/src/main.cpp
@@ -1,8 +1,6 @@
 #define CROW_MAIN
 #include "arbor/arbor_endpoints.h"
 #include "crow/middlewares/cors.h"
-#include "nest/nest_endpoints.h"
-#include "nest_handler.h"
 #include "spdlog/cfg/env.h"
 #include "spdlog/spdlog.h"
 #include <config.h>
@@ -10,14 +8,12 @@
 #include <crow/routing.h>
 #include <exception>
 #include <limits>
-#include <nest/nestKernelStatus.h>
-#include <nest/nestMultimeter.h>
-#include <nest/nestNode.h>
-#include <nest/nestSpikeRecorders.h>
-#include <nest/nestSpikes.h>
-#include <nest/nestVersion.h>
-#include <tvb_handler.h>
-#include <tvb_http_endpoints.h>
+#include <nest/endpoints.h>
+#include <nest/handler.h>
+#include <nest/spikerecorders.h>
+#include <nest/spikes.h>
+#include <tvb/endpoints.h>
+#include <tvb/handler.h>
 #include <websocket_server.h>
 #include <websocketpp/config/asio_no_tls.hpp>
 
@@ -29,7 +25,6 @@ int main() {
   using namespace insite;
   spdlog::set_level(spdlog::level::trace);
   SPDLOG_INFO("Starting Insite access node");
-
   ServerConfig::GetInstance().ParseConfigIfExists();
   ServerConfig::GetInstance().GenerateRequestUrls();
 
diff --git a/access-node/access_node/nest_handler.cpp b/access-node/access_node/src/nest/handler.cpp
similarity index 94%
rename from access-node/access_node/nest_handler.cpp
rename to access-node/access_node/src/nest/handler.cpp
index 6fc8979818e5fab5b66fd73b2ba1904dd12ede3a..232384ae2cc931c8b65f00d874c4a91b4023f479 100644
--- a/access-node/access_node/nest_handler.cpp
+++ b/access-node/access_node/src/nest/handler.cpp
@@ -1,10 +1,3 @@
-#include "nest_handler.h"
-#include <rapidjson/document.h>
-#include <schema_generated.h>
-#include <spdlog/fmt/bin_to_hex.h>
-#include <spdlog/fmt/ranges.h>
-#include <chrono>
-#include <cstdint>
 #include "opcodes.h"
 #include "rapidjson/stringbuffer.h"
 #include "rapidjson/writer.h"
@@ -12,12 +5,19 @@
 #include "spike_util.h"
 #include "websocket_server.h"
 #include "websocketpp/frame.hpp"
+#include <chrono>
+#include <cstdint>
+#include <nest/handler.h>
+#include <rapidjson/document.h>
+#include <schema_generated.h>
+#include <spdlog/fmt/bin_to_hex.h>
+#include <spdlog/fmt/ranges.h>
 using namespace std::chrono_literals;
 
 namespace insite {
 
 void NestHandler::AddMessageIntoQueue(websocketpp::frame::opcode::value value,
-                                      std::string&& msg) {
+                                      std::string &&msg) {
   {
     std::lock_guard mutex(mut_);
     message_queue_.emplace_back(value, std::move(msg));
@@ -34,7 +34,7 @@ void NestHandler::Consumer() {
     while (!message_queue_.empty()) {
       if (message_queue_.back().first == websocketpp::frame::opcode::BINARY) {
         // storage.AddSpikesFromFlatbuffer(message_queue_.back().second.c_str());
-        const Insite::Nest::SpikeTable* spike_table =
+        const Insite::Nest::SpikeTable *spike_table =
             Insite::Nest::GetSpikeTable(message_queue_.back().second.c_str());
         double lastTimestamp = 0;
         if (spike_table->spikes()->size() > 0) {
@@ -76,4 +76,4 @@ void NestHandler::Consumer() {
   SPDLOG_DEBUG("Finished NestHandler Consumer Thread");
 }
 
-}  // namespace insite
+} // namespace insite
diff --git a/access-node/access_node/nest/kernelStatus.cpp b/access-node/access_node/src/nest/kernel_status.cpp
similarity index 84%
rename from access-node/access_node/nest/kernelStatus.cpp
rename to access-node/access_node/src/nest/kernel_status.cpp
index 94c4a0a26548888b687a4d23bdb8955b060d58c9..7138c07519d248a8277df801eccbcedde87a9179 100644
--- a/access-node/access_node/nest/kernelStatus.cpp
+++ b/access-node/access_node/src/nest/kernel_status.cpp
@@ -1,28 +1,28 @@
+#include "config.h"
+#include "rapidjson/document.h"
+#include "rapidjson/stringbuffer.h"
 #include <cpr/cpr.h>
-#include <spdlog/spdlog.h>
 #include <iterator>
+#include <spdlog/spdlog.h>
 #include <unordered_set>
 #include <vector>
-#include "config.h"
-#include "rapidjson/document.h"
-#include "rapidjson/stringbuffer.h"
 
-#include "utilityFunctions.h"
+#include <utility_functions.h>
 namespace insite {
 // Get all kernelStatuses from the nest-server
-rapidjson::Value NestGetKernelStatuses(
-    int api_version,
-    rapidjson::MemoryPoolAllocator<>& json_alloc) {
+rapidjson::Value
+NestGetKernelStatuses(int api_version,
+                      rapidjson::MemoryPoolAllocator<> &json_alloc) {
   // get request results back and store in array
 
   std::string endpoint;
   switch (api_version) {
-    case 1:
-      endpoint = "/kernelStatus";
-      break;
-    case 2:
-      endpoint = "/v2/kernelStatus";
-      break;
+  case 1:
+    endpoint = "/kernelStatus";
+    break;
+  case 2:
+    endpoint = "/v2/kernelStatus";
+    break;
   }
   CprResponseVec kernel_statuses = GetAccessNodeRequests(
       ServerConfig::GetInstance().request_nest_urls, endpoint);
@@ -33,7 +33,7 @@ rapidjson::Value NestGetKernelStatuses(
   rapidjson::Value kernel_status_result_array(rapidjson::kArrayType);
 
   // loop through all kernelStatus-data-sets and create a new object for each
-  for (cpr::Response& kernel_status : kernel_statuses) {
+  for (cpr::Response &kernel_status : kernel_statuses) {
     // create rapidjson-document for current kernelStatus-data-set and parse
     // data into it
     rapidjson::Document kernel_data_old;
@@ -49,7 +49,7 @@ rapidjson::Value NestGetKernelStatuses(
     }
 
     // copy all members from the old data-set to the new one
-    for (auto& member : kernel_data_old.GetObject()) {
+    for (auto &member : kernel_data_old.GetObject()) {
       rapidjson::Value key(member.name.GetString(), json_alloc);
       // rapidjson::Value key(member.name.GetString(), member.name.Size());
       kernel_data_new.AddMember(key, member.value, json_alloc);
@@ -81,4 +81,4 @@ crow::response KernelStatus(int api_version) {
 
   return {DocumentToString(result_doc)};
 }
-}  // namespace insite
+} // namespace insite
diff --git a/access-node/access_node/nest/nestMultimeter.cpp b/access-node/access_node/src/nest/multimeter.cpp
similarity index 96%
rename from access-node/access_node/nest/nestMultimeter.cpp
rename to access-node/access_node/src/nest/multimeter.cpp
index 795ebfe4c367a7a0c8bd0370d2ac60ac3b0798df..e0b6f7f3c985d5aecb7a3b2605c5e7f27db5fd0e 100644
--- a/access-node/access_node/nest/nestMultimeter.cpp
+++ b/access-node/access_node/src/nest/multimeter.cpp
@@ -1,18 +1,18 @@
 #include "config.h"
 #include "cpr/response.h"
 #include "crow/http_response.h"
-#include "jsonStrings.h"
 #include "query_params.h"
-#include "utilityFunctions.h"
 #include <algorithm>
 #include <cstdint>
 #include <iterator>
-#include <nest/nestMultimeter.h>
+#include <nest/json_strings.h>
+#include <nest/multimeter.h>
 #include <rapidjson/document.h>
 #include <rapidjson/stringbuffer.h>
 #include <rapidjson/writer.h>
 #include <unordered_map>
 #include <utility>
+#include <utility_functions.h>
 #include <vector>
 
 namespace insite {
@@ -52,7 +52,7 @@ crow::response MultimeterResponse(int api_version) {
   for (auto &multimeter : multimeter_responses) {
     rapidjson::Document multimeter_resp_doc;
     multimeter_resp_doc.Parse(multimeter.text.c_str());
-    spdlog::error(multimeter.text.c_str());
+    // spdlog::error(multimeter.text.c_str());
 
     if (api_version == 1) {
       for (auto &multimeter : multimeter_resp_doc.GetArray()) {
@@ -111,7 +111,7 @@ crow::response MultimeterByIdResponse(int api_version,
   for (auto &multimeter : multimeter_responses) {
     rapidjson::Document multimeter_resp_doc;
     multimeter_resp_doc.Parse(multimeter.text.c_str());
-    spdlog::error(multimeter.text.c_str());
+    // spdlog::error(multimeter.text.c_str());
 
     if (api_version == 1) {
       for (auto &multimeter : multimeter_resp_doc.GetArray()) {
@@ -196,7 +196,7 @@ NestGetMultimeterAttributesV2(const uint64_t multimeter_id,
   for (auto &response : mm_data_sets) {
     rapidjson::Document json_doc;
     json_doc.Parse(response.text.c_str());
-    spdlog::error(response.text);
+    // spdlog::error(response.text);
     multimeter_values.AddDataFromJson(json_doc);
     multimeter_values.sim_id = json_doc["simId"];
   }
@@ -250,13 +250,13 @@ crow::response MultimeterAttributesResponse(const crow::request &req,
     MultimeterValueContainer result = std::move(
         NestGetMultimeterAttributes(multimeter_id, attr_name, params));
     result.SerializeToJson(writer);
-    spdlog::error(buffer.GetString());
+    // spdlog::error(buffer.GetString());
 
   } else if (api_version == 2) {
     MultimeterValueContainer result = std::move(
         NestGetMultimeterAttributesV2(multimeter_id, attr_name, params));
     result.SerializeToJsonV2(writer);
-    spdlog::error(buffer.GetString());
+    // spdlog::error(buffer.GetString());
   }
   return {buffer.GetString()};
 }
diff --git a/access-node/access_node/nest/nestMultimeterContainer.cpp b/access-node/access_node/src/nest/multimeter_container.cpp
similarity index 98%
rename from access-node/access_node/nest/nestMultimeterContainer.cpp
rename to access-node/access_node/src/nest/multimeter_container.cpp
index 575025bf59b1b028fac2116e35c3b398c2d71ad5..9b880a5feba6bdc96b1fcc821da0b1178305b0c0 100644
--- a/access-node/access_node/nest/nestMultimeterContainer.cpp
+++ b/access-node/access_node/src/nest/multimeter_container.cpp
@@ -1,6 +1,6 @@
-#include "jsonStrings.h"
 #include <algorithm>
-#include <nest/nestMultimeterContainer.h>
+#include <nest/json_strings.h>
+#include <nest/multimeter_container.h>
 
 namespace insite {
 void MultimeterContainer::SerializeToJson(
diff --git a/access-node/access_node/nest/nestNode.cpp b/access-node/access_node/src/nest/nodecollections.cpp
similarity index 81%
rename from access-node/access_node/nest/nestNode.cpp
rename to access-node/access_node/src/nest/nodecollections.cpp
index 49d5108a1097ba4cd8ace066c4cb3fe1a8a60174..51714e7c35f5d36e6cb91c8d0939ad8dd928c9f1 100644
--- a/access-node/access_node/nest/nestNode.cpp
+++ b/access-node/access_node/src/nest/nodecollections.cpp
@@ -1,35 +1,34 @@
-#include <nest/nestNode.h>
-#include <toml++/impl/json_formatter.h>
+#include "config.h"
+#include "rapidjson/rapidjson.h"
+#include "rapidjson/stringbuffer.h"
 #include <cstdint>
+#include <nest/json_strings.h>
+#include <nest/nodecollections.h>
 #include <optional>
+#include <toml++/impl/json_formatter.h>
 #include <unordered_set>
 #include <vector>
-#include "config.h"
-#include "jsonStrings.h"
-#include "rapidjson/rapidjson.h"
-#include "rapidjson/stringbuffer.h"
 
-#include <nest/nestSpikes.h>
-#include <spdlog/fmt/ostr.h>
-#include <spdlog/fmt/ranges.h>
 #include "rapidjson/writer.h"
 #include "spdlog/common.h"
 #include "spdlog/spdlog.h"
-#include "utilityFunctions.h"
+#include <nest/spikes.h>
+#include <spdlog/fmt/ostr.h>
+#include <spdlog/fmt/ranges.h>
+#include <utility_functions.h>
 namespace insite {
 
 using OptionalDouble = std::optional<double>;
 using OptionalUInt = std::optional<uint64_t>;
 
-template <class T>
-using OptionalUSet = std::optional<std::unordered_set<T>>;
+template <class T> using OptionalUSet = std::optional<std::unordered_set<T>>;
 
 using OptionalString = std::optional<std::string>;
 
 // Receives a rapidjson-Object and checks if it has all the necessary properties
 // for nodeCollectionData
 void CheckNodeCollectionDataValid(
-    const rapidjson::GenericObject<false, rapidjson::Value>& n) {
+    const rapidjson::GenericObject<false, rapidjson::Value> &n) {
   assert(n.HasMember(json_strings::kModel));
   assert(n[json_strings::kModel].IsObject());
   assert(n.HasMember(json_strings::kNodeCollectionId));
@@ -38,19 +37,19 @@ void CheckNodeCollectionDataValid(
   assert(n[json_strings::kNodes].IsObject());
 }
 
-rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<>& json_alloc) {
+rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<> &json_alloc) {
   auto node_data_sets = GetAccessNodeRequests(
       ServerConfig::GetInstance().request_nest_urls, "/nodes");
 
   rapidjson::Value kernel_status_result_array(rapidjson::kArrayType);
 
-  for (auto& node_data_set : node_data_sets) {
+  for (auto &node_data_set : node_data_sets) {
     rapidjson::Document current_node_data;
     current_node_data.Parse(node_data_set.text.c_str());
 
     assert(current_node_data.IsArray());
 
-    for (auto& node : current_node_data.GetArray()) {
+    for (auto &node : current_node_data.GetArray()) {
       rapidjson::Value insert(node, json_alloc);
       kernel_status_result_array.PushBack(insert, json_alloc);
     }
@@ -59,20 +58,20 @@ rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<>& json_alloc) {
   return kernel_status_result_array;
 }
 
-rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<>& json_alloc,
-                              std::unordered_set<int>& param_node_ids) {
+rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<> &json_alloc,
+                              std::unordered_set<int> &param_node_ids) {
   auto node_data_sets = GetAccessNodeRequests(
       ServerConfig::GetInstance().request_nest_urls, "/nodes", 1);
 
   rapidjson::Value node_results(rapidjson::kArrayType);
 
-  for (auto& node_data_set : node_data_sets) {
+  for (auto &node_data_set : node_data_sets) {
     rapidjson::Document current_node_data;
     current_node_data.Parse(node_data_set.text.c_str());
 
     assert(current_node_data.IsArray());
 
-    for (auto& node : current_node_data.GetArray()) {
+    for (auto &node : current_node_data.GetArray()) {
       if (param_node_ids.find(node[json_strings::kNodeId].GetInt()) ==
           param_node_ids.end()) {
         continue;
@@ -86,23 +85,23 @@ rapidjson::Value NestGetNodes(rapidjson::MemoryPoolAllocator<>& json_alloc,
   return node_results;
 }
 
-rapidjson::Value NestGetNodesV2(rapidjson::MemoryPoolAllocator<>& json_alloc,
-                                std::unordered_set<int>& param_node_ids) {
+rapidjson::Value NestGetNodesV2(rapidjson::MemoryPoolAllocator<> &json_alloc,
+                                std::unordered_set<int> &param_node_ids) {
   auto node_data_sets = GetAccessNodeRequests(
       ServerConfig::GetInstance().request_nest_urls, "/nodes", 2);
 
   rapidjson::Value node_results(rapidjson::kArrayType);
   rapidjson::Value sim_id;
 
-  for (auto& node_data_set : node_data_sets) {
+  for (auto &node_data_set : node_data_sets) {
     rapidjson::Document current_node_data;
     current_node_data.Parse(node_data_set.text.c_str());
-    spdlog::error(node_data_set.text.c_str());
+    // spdlog::error(node_data_set.text.c_str());
 
     assert(current_node_data.IsArray());
 
     sim_id = current_node_data["simId"];
-    for (auto& node : current_node_data["nodes"].GetArray()) {
+    for (auto &node : current_node_data["nodes"].GetArray()) {
       if (param_node_ids.find(node[json_strings::kNodeId].GetInt()) ==
           param_node_ids.end()) {
         continue;
@@ -120,9 +119,9 @@ rapidjson::Value NestGetNodesV2(rapidjson::MemoryPoolAllocator<>& json_alloc,
   return result;
 }
 
-rapidjson::Value NestGetNodeCollections(
-    rapidjson::MemoryPoolAllocator<>& json_alloc,
-    tl::optional<int> requested_node_collection_id) {
+rapidjson::Value
+NestGetNodeCollections(rapidjson::MemoryPoolAllocator<> &json_alloc,
+                       tl::optional<int> requested_node_collection_id) {
   auto node_collection_data_sets = GetAccessNodeRequests(
       ServerConfig::GetInstance().request_nest_urls, "/nodeCollections");
 
@@ -130,14 +129,14 @@ rapidjson::Value NestGetNodeCollections(
 
   std::unordered_set<int> added_node_collections;
 
-  for (auto& node_collection_set : node_collection_data_sets) {
+  for (auto &node_collection_set : node_collection_data_sets) {
     auto str = node_collection_set.text;
     rapidjson::Document node_collection_data_old;
     node_collection_data_old.Parse(str.c_str());
 
     assert(node_collection_data_old.IsArray());
 
-    for (auto& node_collection : node_collection_data_old.GetArray()) {
+    for (auto &node_collection : node_collection_data_old.GetArray()) {
       int node_collection_id =
           node_collection.GetObject()[json_strings::kNodeCollectionId].GetInt();
 
@@ -159,9 +158,9 @@ rapidjson::Value NestGetNodeCollections(
   return node_collection_result_array;
 }
 
-rapidjson::Value NestGetNodeCollectionsV2(
-    rapidjson::MemoryPoolAllocator<>& json_alloc,
-    tl::optional<int> requested_node_collection_id) {
+rapidjson::Value
+NestGetNodeCollectionsV2(rapidjson::MemoryPoolAllocator<> &json_alloc,
+                         tl::optional<int> requested_node_collection_id) {
   auto node_collection_data_sets = GetAccessNodeRequests(
       ServerConfig::GetInstance().request_nest_urls, "/nodeCollections", 2);
 
@@ -170,7 +169,7 @@ rapidjson::Value NestGetNodeCollectionsV2(
 
   std::unordered_set<int> added_node_collections;
 
-  for (auto& node_collection_set : node_collection_data_sets) {
+  for (auto &node_collection_set : node_collection_data_sets) {
     auto str = node_collection_set.text;
     rapidjson::Document node_collection_data_old;
     node_collection_data_old.Parse(str.c_str());
@@ -179,7 +178,7 @@ rapidjson::Value NestGetNodeCollectionsV2(
 
     sim_id = node_collection_data_old["simId"];
 
-    for (auto& node_collection :
+    for (auto &node_collection :
          node_collection_data_old.GetObject()["nodeCollections"].GetArray()) {
       int node_collection_id =
           node_collection.GetObject()[json_strings::kNodeCollectionId].GetInt();
@@ -216,20 +215,25 @@ crow::response NodeCollections(int api_version,
   rapidjson::Document result_doc;
   rapidjson::MemoryPoolAllocator<> json_alloc;
   rapidjson::Value node_collection_result_array;
+
   if (api_version == 1) {
     node_collection_result_array =
         NestGetNodeCollections(json_alloc, requested_node_collection_id);
     result_doc.SetArray() = node_collection_result_array.GetArray();
     return {DocumentToString(result_doc)};
-  } else if (api_version == 2) {
+  }
+
+  if (api_version == 2) {
     node_collection_result_array =
         NestGetNodeCollectionsV2(json_alloc, requested_node_collection_id);
     result_doc.SetObject() = node_collection_result_array.GetObject();
     return {DocumentToString(result_doc)};
   }
+
+  return crow::response{crow::status::BAD_REQUEST, "Unknown version number."};
 }
 
-crow::response SpikesByNodeCollectionId(const crow::request& req,
+crow::response SpikesByNodeCollectionId(const crow::request &req,
                                         int api_version,
                                         int requested_node_collection_id) {
   SpikeParameter params(req.url_params);
@@ -249,21 +253,21 @@ crow::response Nodes(int api_version) {
   rapidjson::Value kernel_status_result_array(rapidjson::kArrayType);
   rapidjson::Value sim_id;
 
-  for (auto& node_data_set : node_data_sets) {
+  for (auto &node_data_set : node_data_sets) {
     rapidjson::Document current_node_data;
     current_node_data.Parse(node_data_set.text.c_str());
 
     assert(current_node_data.IsArray());
 
     if (api_version == 1) {
-      for (auto& node : current_node_data.GetArray()) {
+      for (auto &node : current_node_data.GetArray()) {
         rapidjson::Value insert(node, json_alloc);
         kernel_status_result_array.PushBack(insert, json_alloc);
       }
     } else if (api_version == 2) {
       sim_id = current_node_data["simId"];
 
-      for (auto& node : current_node_data["nodes"].GetArray()) {
+      for (auto &node : current_node_data["nodes"].GetArray()) {
         rapidjson::Value insert(node, json_alloc);
         kernel_status_result_array.PushBack(insert, json_alloc);
       }
@@ -305,20 +309,20 @@ crow::response NodesById(int api_version, int node_id) {
   return {DocumentToString(result_doc)};
 }
 
-rapidjson::Value GetNodeIds(rapidjson::MemoryPoolAllocator<>& json_alloc) {
+rapidjson::Value GetNodeIds(rapidjson::MemoryPoolAllocator<> &json_alloc) {
   auto node_data_sets = GetAccessNodeRequests(
       ServerConfig::GetInstance().request_nest_urls, "/nodes");
 
   rapidjson::Value node_array(rapidjson::kArrayType);
 
-  for (auto& node_data_set : node_data_sets) {
+  for (auto &node_data_set : node_data_sets) {
     rapidjson::Document current_node_data;
     current_node_data.Parse(node_data_set.text.c_str());
-    spdlog::error(node_data_set.text.c_str());
+    // spdlog::error(node_data_set.text.c_str());
 
     assert(current_node_data.IsArray());
 
-    for (auto& node : current_node_data.GetArray()) {
+    for (auto &node : current_node_data.GetArray()) {
       rapidjson::Value insert(node.GetObject()[json_strings::kNodeId],
                               json_alloc);
       node_array.PushBack(node.GetObject()[json_strings::kNodeId], json_alloc);
@@ -327,23 +331,23 @@ rapidjson::Value GetNodeIds(rapidjson::MemoryPoolAllocator<>& json_alloc) {
   return node_array;
 }
 
-rapidjson::Value GetNodeIdsV2(rapidjson::MemoryPoolAllocator<>& json_alloc) {
+rapidjson::Value GetNodeIdsV2(rapidjson::MemoryPoolAllocator<> &json_alloc) {
   auto node_data_sets = GetAccessNodeRequests(
       ServerConfig::GetInstance().request_nest_urls, "/nodes");
 
   rapidjson::Value node_array(rapidjson::kArrayType);
   rapidjson::Value sim_id;
 
-  for (auto& node_data_set : node_data_sets) {
+  for (auto &node_data_set : node_data_sets) {
     rapidjson::Document current_node_data;
     current_node_data.Parse(node_data_set.text.c_str());
-    spdlog::error(node_data_set.text.c_str());
+    // spdlog::error(node_data_set.text.c_str());
 
     sim_id = current_node_data["simId"];
 
     assert(current_node_data.IsArray());
 
-    for (auto& node : current_node_data["nodes"].GetArray()) {
+    for (auto &node : current_node_data["nodes"].GetArray()) {
       rapidjson::Value insert(node.GetObject()[json_strings::kNodeId],
                               json_alloc);
       node_array.PushBack(node.GetObject()[json_strings::kNodeIds], json_alloc);
@@ -369,4 +373,4 @@ crow::response NodeIdEndpoint(int api_version) {
   return {DocumentToString(node_result)};
 }
 
-}  // namespace insite
+} // namespace insite
diff --git a/access-node/access_node/nest/spike.cpp b/access-node/access_node/src/nest/spike_container.cpp
similarity index 99%
rename from access-node/access_node/nest/spike.cpp
rename to access-node/access_node/src/nest/spike_container.cpp
index f75ae763f2cdfe5a6b0053fed7a0ad0f4923a85c..df7d4159a4f4ab8732414195bbd86433f7663376 100644
--- a/access-node/access_node/nest/spike.cpp
+++ b/access-node/access_node/src/nest/spike_container.cpp
@@ -1,13 +1,13 @@
-#include "spike.h"
 #include "flatbuffers/base.h"
 #include "flatbuffers/flatbuffer_builder.h"
 #include "flatbuffers/vector.h"
-#include "jsonStrings.h"
 #include "pdqsort.h"
 #include "spdlog/spdlog.h"
 #include <algorithm>
 #include <exception>
 #include <iterator>
+#include <nest/json_strings.h>
+#include <nest/spike_container.h>
 #include <rapidjson/document.h>
 #include <rapidjson/encodings.h>
 #include <rapidjson/stringbuffer.h>
diff --git a/access-node/access_node/nest/spikedetector.cpp b/access-node/access_node/src/nest/spikerecorders.cpp
similarity index 80%
rename from access-node/access_node/nest/spikedetector.cpp
rename to access-node/access_node/src/nest/spikerecorders.cpp
index 1aca00b423eaec9c24b5676b6526ea7def407c26..89e0bd0122bd2d563f97dd99a8ba6642a872a6bb 100644
--- a/access-node/access_node/nest/spikedetector.cpp
+++ b/access-node/access_node/src/nest/spikerecorders.cpp
@@ -1,13 +1,13 @@
 #include "spikedetector.h"
 
+#include <nest/json_strings.h>
 #include <utility>
-#include "jsonStrings.h"
 
 namespace insite {
 
 Spikerecorder::Spikerecorder() {}
 
-Spikerecorder::Spikerecorder(const rapidjson::Value& document)
+Spikerecorder::Spikerecorder(const rapidjson::Value &document)
     : spikerecorder_id(document[json_strings::kSpikerecorderId].GetUint64()) {
   auto json_nodes = document[json_strings::kNodeIds].GetArray();
   nodes.resize(json_nodes.Size());
@@ -16,7 +16,7 @@ Spikerecorder::Spikerecorder(const rapidjson::Value& document)
   }
 }
 
-Spikerecorder::Spikerecorder(const rapidjson::Value& document,
+Spikerecorder::Spikerecorder(const rapidjson::Value &document,
                              std::string sim_id)
     : sim_id(std::move(sim_id)),
       spikerecorder_id(document[json_strings::kSpikerecorderId].GetUint64()) {
@@ -30,7 +30,7 @@ Spikerecorder::Spikerecorder(const rapidjson::Value& document,
 Spikerecorder::~Spikerecorder() {}
 
 void Spikerecorder::WriteToJson(
-    rapidjson::Writer<rapidjson::StringBuffer>& writer) const {
+    rapidjson::Writer<rapidjson::StringBuffer> &writer) const {
   writer.StartObject();
 
   writer.Key("spikerecorderId");
@@ -47,8 +47,8 @@ void Spikerecorder::WriteToJson(
 
 void Spikerecorder::ParseFromJson(rapidjson::Document input) {}
 
-std::ostream& operator<<(std::ostream& ostream,
-                         const Spikerecorder& spikerecorder) {
+std::ostream &operator<<(std::ostream &ostream,
+                         const Spikerecorder &spikerecorder) {
   ostream << "Spikerecorder: {" << std::endl;
   ostream << "spikerecorderId: " << spikerecorder.spikerecorder_id << std::endl;
   ostream << ", nodes: [";
@@ -60,4 +60,4 @@ std::ostream& operator<<(std::ostream& ostream,
   return ostream;
 }
 
-}  // namespace insite
+} // namespace insite
diff --git a/access-node/access_node/nest/nestSpikes.cpp b/access-node/access_node/src/nest/spikes.cpp
similarity index 92%
rename from access-node/access_node/nest/nestSpikes.cpp
rename to access-node/access_node/src/nest/spikes.cpp
index 7267492aefd9c65f5f33b8768a1281e39b05cc43..239725b3a28d46e4dc271f790222f67b8f0a74a9 100644
--- a/access-node/access_node/nest/nestSpikes.cpp
+++ b/access-node/access_node/src/nest/spikes.cpp
@@ -1,9 +1,12 @@
+#include <config.h>
+
+#include "query_params.h"
 #include "spdlog/common.h"
 #include "spdlog/spdlog.h"
-#include <config.h>
+#include "tl/optional.hpp"
 #include <cstdint>
 #include <limits>
-#include <nest/nestSpikes.h>
+#include <nest/spikes.h>
 #include <unordered_set>
 
 namespace insite {
@@ -59,8 +62,10 @@ crow::response NestGetSpikes(const SpikeParameter &parameter, int api_version) {
   rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
 
   spdlog::stopwatch stopwatch;
+  SpikeParameter params_without_skip = parameter;
+  params_without_skip.skip = tl::nullopt;
   std::string query_string =
-      BuildQueryString("/spikes", parameter.GetParameterVector());
+      BuildQueryString("/spikes", params_without_skip.GetParameterVector());
 
   auto spike_data_sets = GetAccessNodeRequests(
       ServerConfig::GetInstance().request_nest_urls, query_string, api_version);
@@ -75,7 +80,7 @@ crow::response NestGetSpikes(const SpikeParameter &parameter, int api_version) {
 
     rapidjson::Document document;
     document.Parse(spike_data_set.text.c_str());
-    spdlog::error(spike_data_set.text.c_str());
+    // spdlog::error(spike_data_set.text.c_str());
 
     if (api_version == 1) {
       spikes.AddSpikesFromJson(document);
diff --git a/access-node/access_node/nest/nestVersion.cpp b/access-node/access_node/src/nest/version.cpp
similarity index 92%
rename from access-node/access_node/nest/nestVersion.cpp
rename to access-node/access_node/src/nest/version.cpp
index e3c63574aab493c9f945f190496d08fd444ab6f6..36b3552c60cc696bbbe32d328bc4ec0533618315 100644
--- a/access-node/access_node/nest/nestVersion.cpp
+++ b/access-node/access_node/src/nest/version.cpp
@@ -1,19 +1,19 @@
+#include "rapidjson/document.h"
+#include "rapidjson/stringbuffer.h"
 #include <config.h>
-#include <nest/nestVersion.h>
-#include <spdlog/spdlog.h>
-#include <utilityFunctions.h>
 #include <fstream>
 #include <iterator>
+#include <nest/version.h>
 #include <optional>
+#include <spdlog/spdlog.h>
 #include <unordered_set>
+#include <utility_functions.h>
 #include <vector>
-#include "rapidjson/document.h"
-#include "rapidjson/stringbuffer.h"
 
 namespace insite {
-rapidjson::Value NestGetSimulationTimeInfo(
-    rapidjson::MemoryPoolAllocator<> json_alloc,
-    int api_version) {
+rapidjson::Value
+NestGetSimulationTimeInfo(rapidjson::MemoryPoolAllocator<> json_alloc,
+                          int api_version) {
   // get request results back and store in array
   auto sim_time_infos =
       GetAccessNodeRequests(ServerConfig::GetInstance().request_nest_urls,
@@ -26,7 +26,7 @@ rapidjson::Value NestGetSimulationTimeInfo(
   rapidjson::Value sim_id;
 
   // loop through all kernelStatus-data-sets and create a new object for each
-  for (const auto& sim_time_info : sim_time_infos) {
+  for (const auto &sim_time_info : sim_time_infos) {
     std::string json_string = sim_time_info.text;
 
     // create rapidjson-document for current kernelStatus-data-set and parse
@@ -65,7 +65,7 @@ rapidjson::Value NestGetSimulationTimeInfo(
   return result;
 }
 
-rapidjson::Value NestGetVersion(rapidjson::MemoryPoolAllocator<>& json_alloc) {
+rapidjson::Value NestGetVersion(rapidjson::MemoryPoolAllocator<> &json_alloc) {
   // get request results back and store in array
   auto nest_version_infos = GetAccessNodeRequests(
       ServerConfig::GetInstance().request_nest_urls, "/version");
@@ -74,7 +74,7 @@ rapidjson::Value NestGetVersion(rapidjson::MemoryPoolAllocator<>& json_alloc) {
   rapidjson::Value insite_version;
 
   // loop through all kernelStatus-data-sets and create a new object for each
-  for (auto& nest_version_info : nest_version_infos) {
+  for (auto &nest_version_info : nest_version_infos) {
     std::string json_string = nest_version_info.text;
 
     rapidjson::Document current_version_info;
@@ -140,4 +140,4 @@ crow::response Version() {
 
   return {DocumentToString(result_doc)};
 }
-}  // namespace insite
+} // namespace insite
diff --git a/access-node/access_node/utilityFunctions.cpp b/access-node/access_node/src/utility_functions.cpp
similarity index 96%
rename from access-node/access_node/utilityFunctions.cpp
rename to access-node/access_node/src/utility_functions.cpp
index 6e0572b5de90d7ac933ea9861e18b550d5d67c1e..2faebd2d70996816cafbd5893bf6e9b1fbbb65f0 100644
--- a/access-node/access_node/utilityFunctions.cpp
+++ b/access-node/access_node/src/utility_functions.cpp
@@ -1,3 +1,5 @@
+#include "config.h"
+
 #include "cpr/session.h"
 #include <cpr/async.h>
 #include <cpr/cpr.h>
@@ -15,12 +17,11 @@
 #include "rapidjson/stringbuffer.h"
 #include "rapidjson/writer.h"
 
-#include "config.h"
 // #include "jsonParameters.h"
-#include "jsonStrings.h"
-#include "queryStringBuilder.h"
-#include "spike.h"
-#include "utilityFunctions.h"
+#include <nest/json_strings.h>
+#include <nest/spike_container.h>
+#include <query_string_builder.h>
+#include <utility_functions.h>
 
 namespace insite {
 
@@ -112,7 +113,7 @@ CprResponseVec GetAccessNodeRequests(const std::vector<std::string> &urls,
     multiperform.AddSession(sessions.back());
     SPDLOG_DEBUG(
         "[GetAccessNodeRequests] Added {} to the multiperform request.",
-        url + version + postfix);
+        url + versioned_postfix);
   }
   // Add sessions to the MultiPerform
   return multiperform.Get();
diff --git a/access-node/access_node/websocket_sender.cpp b/access-node/access_node/src/websocket_sender.cpp
similarity index 100%
rename from access-node/access_node/websocket_sender.cpp
rename to access-node/access_node/src/websocket_sender.cpp
diff --git a/access-node/access_node/websocket_server.cpp b/access-node/access_node/src/websocket_server.cpp
similarity index 99%
rename from access-node/access_node/websocket_server.cpp
rename to access-node/access_node/src/websocket_server.cpp
index 735d2b42592e7c4e2142eeb12266251ae93ecc49..8b7377dfe6f3d998856c8ca4128480e5545f2e2f 100644
--- a/access-node/access_node/websocket_server.cpp
+++ b/access-node/access_node/src/websocket_server.cpp
@@ -1,9 +1,9 @@
 #include "websocket_server.h"
-#include "nest_handler.h"
 #include "spdlog/spdlog.h"
-#include "tvb_handler.h"
 #include "websocketpp/frame.hpp"
 #include <cstdint>
+#include <nest/handler.h>
+#include <tvb/handler.h>
 
 namespace insite {
 
diff --git a/access-node/access_node/tvb_handler.cpp b/access-node/access_node/tvb/handler.cpp
similarity index 82%
rename from access-node/access_node/tvb_handler.cpp
rename to access-node/access_node/tvb/handler.cpp
index a564ebdc93eda780a709b3f93965b7c439eaab8b..3e6eb7aa00bf6aad9b6a435657020db09c57eaa5 100644
--- a/access-node/access_node/tvb_handler.cpp
+++ b/access-node/access_node/tvb/handler.cpp
@@ -1,12 +1,12 @@
-#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_TRACE
+#include <insite_defines.h>
 
-#include "tvb_handler.h"
 #include "opcodes.h"
 #include "spdlog/spdlog.h"
 #include <chrono>
 #include <cstdint>
 #include <spdlog/fmt/bin_to_hex.h>
 #include <spdlog/fmt/ranges.h>
+#include <tvb/handler.h>
 using namespace std::chrono_literals;
 
 namespace insite {
@@ -59,6 +59,15 @@ void TvbHandler::Consumer() {
         SPDLOG_TRACE("New TVB Data");
         ParseDataPacket(data);
         break;
+      case Opcode::kSimInfo:
+        SPDLOG_TRACE("Parse Sim Info");
+        ParseSimInfo(data);
+        break;
+
+      case Opcode::kSimInfoReturn:
+        SPDLOG_TRACE("Parse Sim Info Return");
+        ParseSimInfoReturn(data);
+        break;
       default:
         SPDLOG_ERROR("[TVB Handler] Unknown opcode: " + std::to_string(opcode) +
                          " Message: {}",
@@ -70,6 +79,17 @@ void TvbHandler::Consumer() {
   }
   SPDLOG_DEBUG("Finished TvbHandler Consumer Thread");
 }
+void TvbHandler::ParseSimInfo(const std::string &payload) {
+  sim_info.Parse(payload.c_str() + 1);
+  // spdlog::error(payload);
+}
+
+void TvbHandler::ParseSimInfoReturn(const std::string &payload) {
+  // spdlog::error("ParseSimInfoReturn: {}", payload);
+  // sim_info.Parse(payload.c_str() + 1);
+  sim_info_promise.set_value(payload.substr(1));
+  // spdlog::error(payload);
+}
 
 void TvbHandler::ParseNewMonitorPacket(const std::string &payload) {
   rapidjson::Document doc;
@@ -101,11 +121,12 @@ void TvbHandler::ParseDataPacket(const std::string &payload) {
   std::memcpy(&header, payload.data() + sizeof(Opcode), sizeof(header));
   cursor += sizeof(DataHeader);
   // SPDLOG_DEBUG(
-  //     "Header: internalId: {}, time: {}, type: {}, dim1: {}, dim2: {}, dim3:
+  //     "Header: internalId: {}, time: {}, type: {}, dim1: {}, dim2: {},
+  //     dim3:
   //     "
   //     "{}",
-  //     header.internal_id, header.time, header.type, header.dim1, header.dim2,
-  //     header.dim3);
+  //     header.internal_id, header.time, header.type, header.dim1,
+  //     header.dim2, header.dim3);
   if (header.type == DataType::kDouble) {
     const auto *dat = reinterpret_cast<const double *>(payload.data() + cursor);
     double_monitors_[header.internal_id].data.PushBack(
diff --git a/access-node/access_node/tvb/monitor.cpp b/access-node/access_node/tvb/monitor.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f0a3c05ced3b4e358a12e3dffbbb5d86896e9d28
--- /dev/null
+++ b/access-node/access_node/tvb/monitor.cpp
@@ -0,0 +1 @@
+#include <tvb/monitor.h>
diff --git a/access-node/access_node/tvbMonitor.cpp b/access-node/access_node/tvbMonitor.cpp
deleted file mode 100644
index b20f6b27a31411131d512bb354406648f11a0496..0000000000000000000000000000000000000000
--- a/access-node/access_node/tvbMonitor.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "tvbMonitor.h"
-