diff --git a/Build.bat b/Build.bat
deleted file mode 100644
index 3daa1be4b0944c54640fac98c2b9efa451fcf198..0000000000000000000000000000000000000000
--- a/Build.bat
+++ /dev/null
@@ -1,4 +0,0 @@
-cd %cd%
-flatc.exe -c ModeliProtocol.fbs
-flatc.exe -n ModeliProtocol.fbs
-cmd /k
\ No newline at end of file
diff --git a/ModeliProtocol.fbs b/ModeliProtocol.fbs
deleted file mode 100644
index 5337ae94bfba5d354eb61b80cd69765993508db0..0000000000000000000000000000000000000000
--- a/ModeliProtocol.fbs
+++ /dev/null
@@ -1,85 +0,0 @@
-// This protocol is used by the ModeliChart backend to transfer data to the frontend
-namespace Network.Protocol;
-
-// The TCP is 52062
-
-// The commands
-enum CommandEnum : int { 
-  KeepAlive,	// Send this command to check if the connection is still alive, do nothing in the backend
-  Play,		// Start simulating
-  PlayFast, 	// Simulate as quick as possible 
-  Pause,	// Pause simulation
-  Stop,		// Stop and reset simulation
-  AddFmu,	// Receive the binary
-  RemoveFmu,	// Remove a model
-  ValueRefs,	// Receive the default ValueRefs used for simulation
-  AddChannelLinks,	// Add ChannelLinks
-  RemoveChannelLinks,	// Remove ChannelLinks
-  Feedback,	// Send a fmi2Status & msg (optional 0 as size) to the frontend
-  Values,	// Backend->Frontend: Latest simulation data. Frontend->Backen: Set values
-  Log		// Send a log message to the frontend
-}	
-
-// Contains the information to execute the command
-union DataUnion { 
-  Time, FmuFile, ValueRefs, ChannelLink, Values, Feedback, Log 
-}
-
-// For message management
-table ModeliMessage {
-  Command:CommandEnum;
-  JobNr:int;
-  Data:DataUnion;
-}
-
-table Time {
-  Value:double;
-}
-
-table FmuFile{
-  InstanceName:string;
-  BinarySize:int;
-}
-
-table ValueRefs {
-  InstanceName:string;
-  IntVrs:[uint];
-  RealVrs:[uint];
-  BoolVrs:[uint];
-  StringVrs:[uint];
-}
-
-table ChannelLink {
-  MasterInstanceName:string;
-  SlaveInstanceName:string;
-  MasterVr:uint;
-  SlaveVr:uint;
-  Factor:double;
-  Shift:double;
-}
-
-table Values {
-  InstanceName:string;
-  Timestamp:double;
-  IntVrs:[uint];
-  IntValues:[int];
-  RealVrs:[uint];
-  RealValues:[double];
-  BoolVrs:[uint];
-  BoolValues:[int];	// fmistandard: stored as 1(true) or 0(false) int
-  StringVrs:[uint];
-  StringValues:[string];
-}
-
-
-table Feedback {
-  Result:int;
-  Message:string;
-}
-
-table Log {
-  InstanceName:string;
-  Message:string;
-}
-
-root_type ModeliMessage;
\ No newline at end of file
diff --git a/ModeliProtocol_generated.h b/ModeliProtocol_generated.h
deleted file mode 100644
index 9b4be0e50626b538d48095ba3b352dd63f5df0bc..0000000000000000000000000000000000000000
--- a/ModeliProtocol_generated.h
+++ /dev/null
@@ -1,960 +0,0 @@
-// automatically generated by the FlatBuffers compiler, do not modify
-
-
-#ifndef FLATBUFFERS_GENERATED_MODELIPROTOCOL_NETWORK_PROTOCOL_H_
-#define FLATBUFFERS_GENERATED_MODELIPROTOCOL_NETWORK_PROTOCOL_H_
-
-#include "flatbuffers.h"
-
-namespace Network {
-namespace Protocol {
-
-struct ModeliMessage;
-
-struct Time;
-
-struct FmuFile;
-
-struct ValueRefs;
-
-struct ChannelLink;
-
-struct Values;
-
-struct Feedback;
-
-struct Log;
-
-enum CommandEnum {
-  CommandEnum_KeepAlive = 0,
-  CommandEnum_Play = 1,
-  CommandEnum_PlayFast = 2,
-  CommandEnum_Pause = 3,
-  CommandEnum_Stop = 4,
-  CommandEnum_AddFmu = 5,
-  CommandEnum_RemoveFmu = 6,
-  CommandEnum_ValueRefs = 7,
-  CommandEnum_AddChannelLinks = 8,
-  CommandEnum_RemoveChannelLinks = 9,
-  CommandEnum_Feedback = 10,
-  CommandEnum_Values = 11,
-  CommandEnum_Log = 12,
-  CommandEnum_MIN = CommandEnum_KeepAlive,
-  CommandEnum_MAX = CommandEnum_Log
-};
-
-inline CommandEnum (&EnumValuesCommandEnum())[13] {
-  static CommandEnum values[] = {
-    CommandEnum_KeepAlive,
-    CommandEnum_Play,
-    CommandEnum_PlayFast,
-    CommandEnum_Pause,
-    CommandEnum_Stop,
-    CommandEnum_AddFmu,
-    CommandEnum_RemoveFmu,
-    CommandEnum_ValueRefs,
-    CommandEnum_AddChannelLinks,
-    CommandEnum_RemoveChannelLinks,
-    CommandEnum_Feedback,
-    CommandEnum_Values,
-    CommandEnum_Log
-  };
-  return values;
-}
-
-inline const char **EnumNamesCommandEnum() {
-  static const char *names[] = {
-    "KeepAlive",
-    "Play",
-    "PlayFast",
-    "Pause",
-    "Stop",
-    "AddFmu",
-    "RemoveFmu",
-    "ValueRefs",
-    "AddChannelLinks",
-    "RemoveChannelLinks",
-    "Feedback",
-    "Values",
-    "Log",
-    nullptr
-  };
-  return names;
-}
-
-inline const char *EnumNameCommandEnum(CommandEnum e) {
-  const size_t index = static_cast<int>(e);
-  return EnumNamesCommandEnum()[index];
-}
-
-enum DataUnion {
-  DataUnion_NONE = 0,
-  DataUnion_Time = 1,
-  DataUnion_FmuFile = 2,
-  DataUnion_ValueRefs = 3,
-  DataUnion_ChannelLink = 4,
-  DataUnion_Values = 5,
-  DataUnion_Feedback = 6,
-  DataUnion_Log = 7,
-  DataUnion_MIN = DataUnion_NONE,
-  DataUnion_MAX = DataUnion_Log
-};
-
-inline DataUnion (&EnumValuesDataUnion())[8] {
-  static DataUnion values[] = {
-    DataUnion_NONE,
-    DataUnion_Time,
-    DataUnion_FmuFile,
-    DataUnion_ValueRefs,
-    DataUnion_ChannelLink,
-    DataUnion_Values,
-    DataUnion_Feedback,
-    DataUnion_Log
-  };
-  return values;
-}
-
-inline const char **EnumNamesDataUnion() {
-  static const char *names[] = {
-    "NONE",
-    "Time",
-    "FmuFile",
-    "ValueRefs",
-    "ChannelLink",
-    "Values",
-    "Feedback",
-    "Log",
-    nullptr
-  };
-  return names;
-}
-
-inline const char *EnumNameDataUnion(DataUnion e) {
-  const size_t index = static_cast<int>(e);
-  return EnumNamesDataUnion()[index];
-}
-
-template<typename T> struct DataUnionTraits {
-  static const DataUnion enum_value = DataUnion_NONE;
-};
-
-template<> struct DataUnionTraits<Time> {
-  static const DataUnion enum_value = DataUnion_Time;
-};
-
-template<> struct DataUnionTraits<FmuFile> {
-  static const DataUnion enum_value = DataUnion_FmuFile;
-};
-
-template<> struct DataUnionTraits<ValueRefs> {
-  static const DataUnion enum_value = DataUnion_ValueRefs;
-};
-
-template<> struct DataUnionTraits<ChannelLink> {
-  static const DataUnion enum_value = DataUnion_ChannelLink;
-};
-
-template<> struct DataUnionTraits<Values> {
-  static const DataUnion enum_value = DataUnion_Values;
-};
-
-template<> struct DataUnionTraits<Feedback> {
-  static const DataUnion enum_value = DataUnion_Feedback;
-};
-
-template<> struct DataUnionTraits<Log> {
-  static const DataUnion enum_value = DataUnion_Log;
-};
-
-bool VerifyDataUnion(flatbuffers::Verifier &verifier, const void *obj, DataUnion type);
-bool VerifyDataUnionVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types);
-
-struct ModeliMessage FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_COMMAND = 4,
-    VT_JOBNR = 6,
-    VT_DATA_TYPE = 8,
-    VT_DATA = 10
-  };
-  CommandEnum Command() const {
-    return static_cast<CommandEnum>(GetField<int32_t>(VT_COMMAND, 0));
-  }
-  int32_t JobNr() const {
-    return GetField<int32_t>(VT_JOBNR, 0);
-  }
-  DataUnion Data_type() const {
-    return static_cast<DataUnion>(GetField<uint8_t>(VT_DATA_TYPE, 0));
-  }
-  const void *Data() const {
-    return GetPointer<const void *>(VT_DATA);
-  }
-  template<typename T> const T *Data_as() const;
-  const Time *Data_as_Time() const {
-    return Data_type() == DataUnion_Time ? static_cast<const Time *>(Data()) : nullptr;
-  }
-  const FmuFile *Data_as_FmuFile() const {
-    return Data_type() == DataUnion_FmuFile ? static_cast<const FmuFile *>(Data()) : nullptr;
-  }
-  const ValueRefs *Data_as_ValueRefs() const {
-    return Data_type() == DataUnion_ValueRefs ? static_cast<const ValueRefs *>(Data()) : nullptr;
-  }
-  const ChannelLink *Data_as_ChannelLink() const {
-    return Data_type() == DataUnion_ChannelLink ? static_cast<const ChannelLink *>(Data()) : nullptr;
-  }
-  const Values *Data_as_Values() const {
-    return Data_type() == DataUnion_Values ? static_cast<const Values *>(Data()) : nullptr;
-  }
-  const Feedback *Data_as_Feedback() const {
-    return Data_type() == DataUnion_Feedback ? static_cast<const Feedback *>(Data()) : nullptr;
-  }
-  const Log *Data_as_Log() const {
-    return Data_type() == DataUnion_Log ? static_cast<const Log *>(Data()) : nullptr;
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyField<int32_t>(verifier, VT_COMMAND) &&
-           VerifyField<int32_t>(verifier, VT_JOBNR) &&
-           VerifyField<uint8_t>(verifier, VT_DATA_TYPE) &&
-           VerifyOffset(verifier, VT_DATA) &&
-           VerifyDataUnion(verifier, Data(), Data_type()) &&
-           verifier.EndTable();
-  }
-};
-
-template<> inline const Time *ModeliMessage::Data_as<Time>() const {
-  return Data_as_Time();
-}
-
-template<> inline const FmuFile *ModeliMessage::Data_as<FmuFile>() const {
-  return Data_as_FmuFile();
-}
-
-template<> inline const ValueRefs *ModeliMessage::Data_as<ValueRefs>() const {
-  return Data_as_ValueRefs();
-}
-
-template<> inline const ChannelLink *ModeliMessage::Data_as<ChannelLink>() const {
-  return Data_as_ChannelLink();
-}
-
-template<> inline const Values *ModeliMessage::Data_as<Values>() const {
-  return Data_as_Values();
-}
-
-template<> inline const Feedback *ModeliMessage::Data_as<Feedback>() const {
-  return Data_as_Feedback();
-}
-
-template<> inline const Log *ModeliMessage::Data_as<Log>() const {
-  return Data_as_Log();
-}
-
-struct ModeliMessageBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_Command(CommandEnum Command) {
-    fbb_.AddElement<int32_t>(ModeliMessage::VT_COMMAND, static_cast<int32_t>(Command), 0);
-  }
-  void add_JobNr(int32_t JobNr) {
-    fbb_.AddElement<int32_t>(ModeliMessage::VT_JOBNR, JobNr, 0);
-  }
-  void add_Data_type(DataUnion Data_type) {
-    fbb_.AddElement<uint8_t>(ModeliMessage::VT_DATA_TYPE, static_cast<uint8_t>(Data_type), 0);
-  }
-  void add_Data(flatbuffers::Offset<void> Data) {
-    fbb_.AddOffset(ModeliMessage::VT_DATA, Data);
-  }
-  ModeliMessageBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  ModeliMessageBuilder &operator=(const ModeliMessageBuilder &);
-  flatbuffers::Offset<ModeliMessage> Finish() {
-    const auto end = fbb_.EndTable(start_, 4);
-    auto o = flatbuffers::Offset<ModeliMessage>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<ModeliMessage> CreateModeliMessage(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    CommandEnum Command = CommandEnum_KeepAlive,
-    int32_t JobNr = 0,
-    DataUnion Data_type = DataUnion_NONE,
-    flatbuffers::Offset<void> Data = 0) {
-  ModeliMessageBuilder builder_(_fbb);
-  builder_.add_Data(Data);
-  builder_.add_JobNr(JobNr);
-  builder_.add_Command(Command);
-  builder_.add_Data_type(Data_type);
-  return builder_.Finish();
-}
-
-struct Time FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_VALUE = 4
-  };
-  double Value() const {
-    return GetField<double>(VT_VALUE, 0.0);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyField<double>(verifier, VT_VALUE) &&
-           verifier.EndTable();
-  }
-};
-
-struct TimeBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_Value(double Value) {
-    fbb_.AddElement<double>(Time::VT_VALUE, Value, 0.0);
-  }
-  TimeBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  TimeBuilder &operator=(const TimeBuilder &);
-  flatbuffers::Offset<Time> Finish() {
-    const auto end = fbb_.EndTable(start_, 1);
-    auto o = flatbuffers::Offset<Time>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<Time> CreateTime(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    double Value = 0.0) {
-  TimeBuilder builder_(_fbb);
-  builder_.add_Value(Value);
-  return builder_.Finish();
-}
-
-struct FmuFile FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_INSTANCENAME = 4,
-    VT_BINARYSIZE = 6
-  };
-  const flatbuffers::String *InstanceName() const {
-    return GetPointer<const flatbuffers::String *>(VT_INSTANCENAME);
-  }
-  int32_t BinarySize() const {
-    return GetField<int32_t>(VT_BINARYSIZE, 0);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyOffset(verifier, VT_INSTANCENAME) &&
-           verifier.Verify(InstanceName()) &&
-           VerifyField<int32_t>(verifier, VT_BINARYSIZE) &&
-           verifier.EndTable();
-  }
-};
-
-struct FmuFileBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_InstanceName(flatbuffers::Offset<flatbuffers::String> InstanceName) {
-    fbb_.AddOffset(FmuFile::VT_INSTANCENAME, InstanceName);
-  }
-  void add_BinarySize(int32_t BinarySize) {
-    fbb_.AddElement<int32_t>(FmuFile::VT_BINARYSIZE, BinarySize, 0);
-  }
-  FmuFileBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  FmuFileBuilder &operator=(const FmuFileBuilder &);
-  flatbuffers::Offset<FmuFile> Finish() {
-    const auto end = fbb_.EndTable(start_, 2);
-    auto o = flatbuffers::Offset<FmuFile>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<FmuFile> CreateFmuFile(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> InstanceName = 0,
-    int32_t BinarySize = 0) {
-  FmuFileBuilder builder_(_fbb);
-  builder_.add_BinarySize(BinarySize);
-  builder_.add_InstanceName(InstanceName);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<FmuFile> CreateFmuFileDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *InstanceName = nullptr,
-    int32_t BinarySize = 0) {
-  return Network::Protocol::CreateFmuFile(
-      _fbb,
-      InstanceName ? _fbb.CreateString(InstanceName) : 0,
-      BinarySize);
-}
-
-struct ValueRefs FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_INSTANCENAME = 4,
-    VT_INTVRS = 6,
-    VT_REALVRS = 8,
-    VT_BOOLVRS = 10,
-    VT_STRINGVRS = 12
-  };
-  const flatbuffers::String *InstanceName() const {
-    return GetPointer<const flatbuffers::String *>(VT_INSTANCENAME);
-  }
-  const flatbuffers::Vector<uint32_t> *IntVrs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_INTVRS);
-  }
-  const flatbuffers::Vector<uint32_t> *RealVrs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_REALVRS);
-  }
-  const flatbuffers::Vector<uint32_t> *BoolVrs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_BOOLVRS);
-  }
-  const flatbuffers::Vector<uint32_t> *StringVrs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_STRINGVRS);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyOffset(verifier, VT_INSTANCENAME) &&
-           verifier.Verify(InstanceName()) &&
-           VerifyOffset(verifier, VT_INTVRS) &&
-           verifier.Verify(IntVrs()) &&
-           VerifyOffset(verifier, VT_REALVRS) &&
-           verifier.Verify(RealVrs()) &&
-           VerifyOffset(verifier, VT_BOOLVRS) &&
-           verifier.Verify(BoolVrs()) &&
-           VerifyOffset(verifier, VT_STRINGVRS) &&
-           verifier.Verify(StringVrs()) &&
-           verifier.EndTable();
-  }
-};
-
-struct ValueRefsBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_InstanceName(flatbuffers::Offset<flatbuffers::String> InstanceName) {
-    fbb_.AddOffset(ValueRefs::VT_INSTANCENAME, InstanceName);
-  }
-  void add_IntVrs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> IntVrs) {
-    fbb_.AddOffset(ValueRefs::VT_INTVRS, IntVrs);
-  }
-  void add_RealVrs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> RealVrs) {
-    fbb_.AddOffset(ValueRefs::VT_REALVRS, RealVrs);
-  }
-  void add_BoolVrs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> BoolVrs) {
-    fbb_.AddOffset(ValueRefs::VT_BOOLVRS, BoolVrs);
-  }
-  void add_StringVrs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> StringVrs) {
-    fbb_.AddOffset(ValueRefs::VT_STRINGVRS, StringVrs);
-  }
-  ValueRefsBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  ValueRefsBuilder &operator=(const ValueRefsBuilder &);
-  flatbuffers::Offset<ValueRefs> Finish() {
-    const auto end = fbb_.EndTable(start_, 5);
-    auto o = flatbuffers::Offset<ValueRefs>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<ValueRefs> CreateValueRefs(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> InstanceName = 0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> IntVrs = 0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> RealVrs = 0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> BoolVrs = 0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> StringVrs = 0) {
-  ValueRefsBuilder builder_(_fbb);
-  builder_.add_StringVrs(StringVrs);
-  builder_.add_BoolVrs(BoolVrs);
-  builder_.add_RealVrs(RealVrs);
-  builder_.add_IntVrs(IntVrs);
-  builder_.add_InstanceName(InstanceName);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<ValueRefs> CreateValueRefsDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *InstanceName = nullptr,
-    const std::vector<uint32_t> *IntVrs = nullptr,
-    const std::vector<uint32_t> *RealVrs = nullptr,
-    const std::vector<uint32_t> *BoolVrs = nullptr,
-    const std::vector<uint32_t> *StringVrs = nullptr) {
-  return Network::Protocol::CreateValueRefs(
-      _fbb,
-      InstanceName ? _fbb.CreateString(InstanceName) : 0,
-      IntVrs ? _fbb.CreateVector<uint32_t>(*IntVrs) : 0,
-      RealVrs ? _fbb.CreateVector<uint32_t>(*RealVrs) : 0,
-      BoolVrs ? _fbb.CreateVector<uint32_t>(*BoolVrs) : 0,
-      StringVrs ? _fbb.CreateVector<uint32_t>(*StringVrs) : 0);
-}
-
-struct ChannelLink FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_MASTERINSTANCENAME = 4,
-    VT_SLAVEINSTANCENAME = 6,
-    VT_MASTERVR = 8,
-    VT_SLAVEVR = 10,
-    VT_FACTOR = 12,
-    VT_SHIFT = 14
-  };
-  const flatbuffers::String *MasterInstanceName() const {
-    return GetPointer<const flatbuffers::String *>(VT_MASTERINSTANCENAME);
-  }
-  const flatbuffers::String *SlaveInstanceName() const {
-    return GetPointer<const flatbuffers::String *>(VT_SLAVEINSTANCENAME);
-  }
-  uint32_t MasterVr() const {
-    return GetField<uint32_t>(VT_MASTERVR, 0);
-  }
-  uint32_t SlaveVr() const {
-    return GetField<uint32_t>(VT_SLAVEVR, 0);
-  }
-  double Factor() const {
-    return GetField<double>(VT_FACTOR, 0.0);
-  }
-  double Shift() const {
-    return GetField<double>(VT_SHIFT, 0.0);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyOffset(verifier, VT_MASTERINSTANCENAME) &&
-           verifier.Verify(MasterInstanceName()) &&
-           VerifyOffset(verifier, VT_SLAVEINSTANCENAME) &&
-           verifier.Verify(SlaveInstanceName()) &&
-           VerifyField<uint32_t>(verifier, VT_MASTERVR) &&
-           VerifyField<uint32_t>(verifier, VT_SLAVEVR) &&
-           VerifyField<double>(verifier, VT_FACTOR) &&
-           VerifyField<double>(verifier, VT_SHIFT) &&
-           verifier.EndTable();
-  }
-};
-
-struct ChannelLinkBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_MasterInstanceName(flatbuffers::Offset<flatbuffers::String> MasterInstanceName) {
-    fbb_.AddOffset(ChannelLink::VT_MASTERINSTANCENAME, MasterInstanceName);
-  }
-  void add_SlaveInstanceName(flatbuffers::Offset<flatbuffers::String> SlaveInstanceName) {
-    fbb_.AddOffset(ChannelLink::VT_SLAVEINSTANCENAME, SlaveInstanceName);
-  }
-  void add_MasterVr(uint32_t MasterVr) {
-    fbb_.AddElement<uint32_t>(ChannelLink::VT_MASTERVR, MasterVr, 0);
-  }
-  void add_SlaveVr(uint32_t SlaveVr) {
-    fbb_.AddElement<uint32_t>(ChannelLink::VT_SLAVEVR, SlaveVr, 0);
-  }
-  void add_Factor(double Factor) {
-    fbb_.AddElement<double>(ChannelLink::VT_FACTOR, Factor, 0.0);
-  }
-  void add_Shift(double Shift) {
-    fbb_.AddElement<double>(ChannelLink::VT_SHIFT, Shift, 0.0);
-  }
-  ChannelLinkBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  ChannelLinkBuilder &operator=(const ChannelLinkBuilder &);
-  flatbuffers::Offset<ChannelLink> Finish() {
-    const auto end = fbb_.EndTable(start_, 6);
-    auto o = flatbuffers::Offset<ChannelLink>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<ChannelLink> CreateChannelLink(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> MasterInstanceName = 0,
-    flatbuffers::Offset<flatbuffers::String> SlaveInstanceName = 0,
-    uint32_t MasterVr = 0,
-    uint32_t SlaveVr = 0,
-    double Factor = 0.0,
-    double Shift = 0.0) {
-  ChannelLinkBuilder builder_(_fbb);
-  builder_.add_Shift(Shift);
-  builder_.add_Factor(Factor);
-  builder_.add_SlaveVr(SlaveVr);
-  builder_.add_MasterVr(MasterVr);
-  builder_.add_SlaveInstanceName(SlaveInstanceName);
-  builder_.add_MasterInstanceName(MasterInstanceName);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<ChannelLink> CreateChannelLinkDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *MasterInstanceName = nullptr,
-    const char *SlaveInstanceName = nullptr,
-    uint32_t MasterVr = 0,
-    uint32_t SlaveVr = 0,
-    double Factor = 0.0,
-    double Shift = 0.0) {
-  return Network::Protocol::CreateChannelLink(
-      _fbb,
-      MasterInstanceName ? _fbb.CreateString(MasterInstanceName) : 0,
-      SlaveInstanceName ? _fbb.CreateString(SlaveInstanceName) : 0,
-      MasterVr,
-      SlaveVr,
-      Factor,
-      Shift);
-}
-
-struct Values FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_INSTANCENAME = 4,
-    VT_TIMESTAMP = 6,
-    VT_INTVRS = 8,
-    VT_INTVALUES = 10,
-    VT_REALVRS = 12,
-    VT_REALVALUES = 14,
-    VT_BOOLVRS = 16,
-    VT_BOOLVALUES = 18,
-    VT_STRINGVRS = 20,
-    VT_STRINGVALUES = 22
-  };
-  const flatbuffers::String *InstanceName() const {
-    return GetPointer<const flatbuffers::String *>(VT_INSTANCENAME);
-  }
-  double Timestamp() const {
-    return GetField<double>(VT_TIMESTAMP, 0.0);
-  }
-  const flatbuffers::Vector<uint32_t> *IntVrs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_INTVRS);
-  }
-  const flatbuffers::Vector<int32_t> *IntValues() const {
-    return GetPointer<const flatbuffers::Vector<int32_t> *>(VT_INTVALUES);
-  }
-  const flatbuffers::Vector<uint32_t> *RealVrs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_REALVRS);
-  }
-  const flatbuffers::Vector<double> *RealValues() const {
-    return GetPointer<const flatbuffers::Vector<double> *>(VT_REALVALUES);
-  }
-  const flatbuffers::Vector<uint32_t> *BoolVrs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_BOOLVRS);
-  }
-  const flatbuffers::Vector<int32_t> *BoolValues() const {
-    return GetPointer<const flatbuffers::Vector<int32_t> *>(VT_BOOLVALUES);
-  }
-  const flatbuffers::Vector<uint32_t> *StringVrs() const {
-    return GetPointer<const flatbuffers::Vector<uint32_t> *>(VT_STRINGVRS);
-  }
-  const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *StringValues() const {
-    return GetPointer<const flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>> *>(VT_STRINGVALUES);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyOffset(verifier, VT_INSTANCENAME) &&
-           verifier.Verify(InstanceName()) &&
-           VerifyField<double>(verifier, VT_TIMESTAMP) &&
-           VerifyOffset(verifier, VT_INTVRS) &&
-           verifier.Verify(IntVrs()) &&
-           VerifyOffset(verifier, VT_INTVALUES) &&
-           verifier.Verify(IntValues()) &&
-           VerifyOffset(verifier, VT_REALVRS) &&
-           verifier.Verify(RealVrs()) &&
-           VerifyOffset(verifier, VT_REALVALUES) &&
-           verifier.Verify(RealValues()) &&
-           VerifyOffset(verifier, VT_BOOLVRS) &&
-           verifier.Verify(BoolVrs()) &&
-           VerifyOffset(verifier, VT_BOOLVALUES) &&
-           verifier.Verify(BoolValues()) &&
-           VerifyOffset(verifier, VT_STRINGVRS) &&
-           verifier.Verify(StringVrs()) &&
-           VerifyOffset(verifier, VT_STRINGVALUES) &&
-           verifier.Verify(StringValues()) &&
-           verifier.VerifyVectorOfStrings(StringValues()) &&
-           verifier.EndTable();
-  }
-};
-
-struct ValuesBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_InstanceName(flatbuffers::Offset<flatbuffers::String> InstanceName) {
-    fbb_.AddOffset(Values::VT_INSTANCENAME, InstanceName);
-  }
-  void add_Timestamp(double Timestamp) {
-    fbb_.AddElement<double>(Values::VT_TIMESTAMP, Timestamp, 0.0);
-  }
-  void add_IntVrs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> IntVrs) {
-    fbb_.AddOffset(Values::VT_INTVRS, IntVrs);
-  }
-  void add_IntValues(flatbuffers::Offset<flatbuffers::Vector<int32_t>> IntValues) {
-    fbb_.AddOffset(Values::VT_INTVALUES, IntValues);
-  }
-  void add_RealVrs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> RealVrs) {
-    fbb_.AddOffset(Values::VT_REALVRS, RealVrs);
-  }
-  void add_RealValues(flatbuffers::Offset<flatbuffers::Vector<double>> RealValues) {
-    fbb_.AddOffset(Values::VT_REALVALUES, RealValues);
-  }
-  void add_BoolVrs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> BoolVrs) {
-    fbb_.AddOffset(Values::VT_BOOLVRS, BoolVrs);
-  }
-  void add_BoolValues(flatbuffers::Offset<flatbuffers::Vector<int32_t>> BoolValues) {
-    fbb_.AddOffset(Values::VT_BOOLVALUES, BoolValues);
-  }
-  void add_StringVrs(flatbuffers::Offset<flatbuffers::Vector<uint32_t>> StringVrs) {
-    fbb_.AddOffset(Values::VT_STRINGVRS, StringVrs);
-  }
-  void add_StringValues(flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> StringValues) {
-    fbb_.AddOffset(Values::VT_STRINGVALUES, StringValues);
-  }
-  ValuesBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  ValuesBuilder &operator=(const ValuesBuilder &);
-  flatbuffers::Offset<Values> Finish() {
-    const auto end = fbb_.EndTable(start_, 10);
-    auto o = flatbuffers::Offset<Values>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<Values> CreateValues(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> InstanceName = 0,
-    double Timestamp = 0.0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> IntVrs = 0,
-    flatbuffers::Offset<flatbuffers::Vector<int32_t>> IntValues = 0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> RealVrs = 0,
-    flatbuffers::Offset<flatbuffers::Vector<double>> RealValues = 0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> BoolVrs = 0,
-    flatbuffers::Offset<flatbuffers::Vector<int32_t>> BoolValues = 0,
-    flatbuffers::Offset<flatbuffers::Vector<uint32_t>> StringVrs = 0,
-    flatbuffers::Offset<flatbuffers::Vector<flatbuffers::Offset<flatbuffers::String>>> StringValues = 0) {
-  ValuesBuilder builder_(_fbb);
-  builder_.add_Timestamp(Timestamp);
-  builder_.add_StringValues(StringValues);
-  builder_.add_StringVrs(StringVrs);
-  builder_.add_BoolValues(BoolValues);
-  builder_.add_BoolVrs(BoolVrs);
-  builder_.add_RealValues(RealValues);
-  builder_.add_RealVrs(RealVrs);
-  builder_.add_IntValues(IntValues);
-  builder_.add_IntVrs(IntVrs);
-  builder_.add_InstanceName(InstanceName);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<Values> CreateValuesDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *InstanceName = nullptr,
-    double Timestamp = 0.0,
-    const std::vector<uint32_t> *IntVrs = nullptr,
-    const std::vector<int32_t> *IntValues = nullptr,
-    const std::vector<uint32_t> *RealVrs = nullptr,
-    const std::vector<double> *RealValues = nullptr,
-    const std::vector<uint32_t> *BoolVrs = nullptr,
-    const std::vector<int32_t> *BoolValues = nullptr,
-    const std::vector<uint32_t> *StringVrs = nullptr,
-    const std::vector<flatbuffers::Offset<flatbuffers::String>> *StringValues = nullptr) {
-  return Network::Protocol::CreateValues(
-      _fbb,
-      InstanceName ? _fbb.CreateString(InstanceName) : 0,
-      Timestamp,
-      IntVrs ? _fbb.CreateVector<uint32_t>(*IntVrs) : 0,
-      IntValues ? _fbb.CreateVector<int32_t>(*IntValues) : 0,
-      RealVrs ? _fbb.CreateVector<uint32_t>(*RealVrs) : 0,
-      RealValues ? _fbb.CreateVector<double>(*RealValues) : 0,
-      BoolVrs ? _fbb.CreateVector<uint32_t>(*BoolVrs) : 0,
-      BoolValues ? _fbb.CreateVector<int32_t>(*BoolValues) : 0,
-      StringVrs ? _fbb.CreateVector<uint32_t>(*StringVrs) : 0,
-      StringValues ? _fbb.CreateVector<flatbuffers::Offset<flatbuffers::String>>(*StringValues) : 0);
-}
-
-struct Feedback FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_RESULT = 4,
-    VT_MESSAGE = 6
-  };
-  int32_t Result() const {
-    return GetField<int32_t>(VT_RESULT, 0);
-  }
-  const flatbuffers::String *Message() const {
-    return GetPointer<const flatbuffers::String *>(VT_MESSAGE);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyField<int32_t>(verifier, VT_RESULT) &&
-           VerifyOffset(verifier, VT_MESSAGE) &&
-           verifier.Verify(Message()) &&
-           verifier.EndTable();
-  }
-};
-
-struct FeedbackBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_Result(int32_t Result) {
-    fbb_.AddElement<int32_t>(Feedback::VT_RESULT, Result, 0);
-  }
-  void add_Message(flatbuffers::Offset<flatbuffers::String> Message) {
-    fbb_.AddOffset(Feedback::VT_MESSAGE, Message);
-  }
-  FeedbackBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  FeedbackBuilder &operator=(const FeedbackBuilder &);
-  flatbuffers::Offset<Feedback> Finish() {
-    const auto end = fbb_.EndTable(start_, 2);
-    auto o = flatbuffers::Offset<Feedback>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<Feedback> CreateFeedback(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    int32_t Result = 0,
-    flatbuffers::Offset<flatbuffers::String> Message = 0) {
-  FeedbackBuilder builder_(_fbb);
-  builder_.add_Message(Message);
-  builder_.add_Result(Result);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<Feedback> CreateFeedbackDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    int32_t Result = 0,
-    const char *Message = nullptr) {
-  return Network::Protocol::CreateFeedback(
-      _fbb,
-      Result,
-      Message ? _fbb.CreateString(Message) : 0);
-}
-
-struct Log FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
-  enum {
-    VT_INSTANCENAME = 4,
-    VT_MESSAGE = 6
-  };
-  const flatbuffers::String *InstanceName() const {
-    return GetPointer<const flatbuffers::String *>(VT_INSTANCENAME);
-  }
-  const flatbuffers::String *Message() const {
-    return GetPointer<const flatbuffers::String *>(VT_MESSAGE);
-  }
-  bool Verify(flatbuffers::Verifier &verifier) const {
-    return VerifyTableStart(verifier) &&
-           VerifyOffset(verifier, VT_INSTANCENAME) &&
-           verifier.Verify(InstanceName()) &&
-           VerifyOffset(verifier, VT_MESSAGE) &&
-           verifier.Verify(Message()) &&
-           verifier.EndTable();
-  }
-};
-
-struct LogBuilder {
-  flatbuffers::FlatBufferBuilder &fbb_;
-  flatbuffers::uoffset_t start_;
-  void add_InstanceName(flatbuffers::Offset<flatbuffers::String> InstanceName) {
-    fbb_.AddOffset(Log::VT_INSTANCENAME, InstanceName);
-  }
-  void add_Message(flatbuffers::Offset<flatbuffers::String> Message) {
-    fbb_.AddOffset(Log::VT_MESSAGE, Message);
-  }
-  LogBuilder(flatbuffers::FlatBufferBuilder &_fbb)
-        : fbb_(_fbb) {
-    start_ = fbb_.StartTable();
-  }
-  LogBuilder &operator=(const LogBuilder &);
-  flatbuffers::Offset<Log> Finish() {
-    const auto end = fbb_.EndTable(start_, 2);
-    auto o = flatbuffers::Offset<Log>(end);
-    return o;
-  }
-};
-
-inline flatbuffers::Offset<Log> CreateLog(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    flatbuffers::Offset<flatbuffers::String> InstanceName = 0,
-    flatbuffers::Offset<flatbuffers::String> Message = 0) {
-  LogBuilder builder_(_fbb);
-  builder_.add_Message(Message);
-  builder_.add_InstanceName(InstanceName);
-  return builder_.Finish();
-}
-
-inline flatbuffers::Offset<Log> CreateLogDirect(
-    flatbuffers::FlatBufferBuilder &_fbb,
-    const char *InstanceName = nullptr,
-    const char *Message = nullptr) {
-  return Network::Protocol::CreateLog(
-      _fbb,
-      InstanceName ? _fbb.CreateString(InstanceName) : 0,
-      Message ? _fbb.CreateString(Message) : 0);
-}
-
-inline bool VerifyDataUnion(flatbuffers::Verifier &verifier, const void *obj, DataUnion type) {
-  switch (type) {
-    case DataUnion_NONE: {
-      return true;
-    }
-    case DataUnion_Time: {
-      auto ptr = reinterpret_cast<const Time *>(obj);
-      return verifier.VerifyTable(ptr);
-    }
-    case DataUnion_FmuFile: {
-      auto ptr = reinterpret_cast<const FmuFile *>(obj);
-      return verifier.VerifyTable(ptr);
-    }
-    case DataUnion_ValueRefs: {
-      auto ptr = reinterpret_cast<const ValueRefs *>(obj);
-      return verifier.VerifyTable(ptr);
-    }
-    case DataUnion_ChannelLink: {
-      auto ptr = reinterpret_cast<const ChannelLink *>(obj);
-      return verifier.VerifyTable(ptr);
-    }
-    case DataUnion_Values: {
-      auto ptr = reinterpret_cast<const Values *>(obj);
-      return verifier.VerifyTable(ptr);
-    }
-    case DataUnion_Feedback: {
-      auto ptr = reinterpret_cast<const Feedback *>(obj);
-      return verifier.VerifyTable(ptr);
-    }
-    case DataUnion_Log: {
-      auto ptr = reinterpret_cast<const Log *>(obj);
-      return verifier.VerifyTable(ptr);
-    }
-    default: return false;
-  }
-}
-
-inline bool VerifyDataUnionVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector<flatbuffers::Offset<void>> *values, const flatbuffers::Vector<uint8_t> *types) {
-  if (values->size() != types->size()) return false;
-  for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
-    if (!VerifyDataUnion(
-        verifier,  values->Get(i), types->GetEnum<DataUnion>(i))) {
-      return false;
-    }
-  }
-  return true;
-}
-
-inline const Network::Protocol::ModeliMessage *GetModeliMessage(const void *buf) {
-  return flatbuffers::GetRoot<Network::Protocol::ModeliMessage>(buf);
-}
-
-inline bool VerifyModeliMessageBuffer(
-    flatbuffers::Verifier &verifier) {
-  return verifier.VerifyBuffer<Network::Protocol::ModeliMessage>(nullptr);
-}
-
-inline void FinishModeliMessageBuffer(
-    flatbuffers::FlatBufferBuilder &fbb,
-    flatbuffers::Offset<Network::Protocol::ModeliMessage> root) {
-  fbb.Finish(root);
-}
-
-}  // namespace Protocol
-}  // namespace Network
-
-#endif  // FLATBUFFERS_GENERATED_MODELIPROTOCOL_NETWORK_PROTOCOL_H_
diff --git a/ModeliRpc.capnp b/ModeliRpc.capnp
new file mode 100644
index 0000000000000000000000000000000000000000..98df47b4ce9c8617077ba5a1f093dcb444734849
--- /dev/null
+++ b/ModeliRpc.capnp
@@ -0,0 +1,61 @@
+# This protocol is used by the ModeliChart backend to transfer data to the frontend.
+# Since this is a fmu simulator all int results are fmi2Status
+# The default port is 52062	
+@0xb51166b0ce5aa3a5;
+
+# This interface offers methods for common simulation tasks
+interface ModeliBackend {
+  # Start Simulation
+  play @0 () -> (result : Int16);
+  # Simulate as quick as possible
+  playFast @1 () -> (result : Int16);
+  # Pause simulation
+  pause @2 ();
+  # Stop and reset simulation
+  stop @3 () -> (result : Int16);
+  
+  # Add a new Fmu to the simulation, returns false on fail
+  addFmu @4 (instanceName : Text, fmuFile : Data) -> (result : Bool);
+  # Remove a Fmu from the simulation, returns false on fail
+  removeFmu @5 (instanceName : Text) -> (result : Bool);
+ 
+  # Add a ChannelLink to the simulation, returns false on fail
+  addChannelLink @6 (channelLink : ChannelLink) -> (result : Bool);
+  # Remove matching ChannelLink from the simulation, returns false on fail
+  removeChannelLink @7 (channelLink : ChannelLink) -> (result : Bool);
+  # This struct defines a channel link.
+  struct ChannelLink {
+    masterInstanceName @0 : Text;
+    slaveInstanceName @1 : Text;
+    masterValueRef @2 : UInt32;
+    slaveValueRef @3 : UInt32;
+    factor @4 : Float64;
+    offset @5 : Float64;
+  }
+  
+  # Set values in the simulation
+  setValues @8 (values : Values) -> (result : Int16);
+  
+  # Register frontend so we can call the callbacks
+  registerFrontend @9 (frontend : ModeliFrontend);
+}
+
+interface ModeliFrontend {
+  # new values from the simulation
+  newValues @0 (timestamp : Float64, values : Values);
+  # Send a log message to the frontend
+  log @1 (instanceName : Text, status : Int16, message : Text);
+} 
+
+# Send all values of one fmu in one struct
+struct Values {
+  instanceName @0 : Text;
+  integerValueRefs @1 : List(UInt32);
+  integerValues @2 : List(Int32);
+  realValueRefs @3 : List(UInt32);
+  realValues @4 : List(Float64);
+  boolValueRefs @5 : List(UInt32);
+  boolValues @6 : List(Bool);
+  stringValueRefs @7 : List(UInt32);
+  stringValues @8 : List(Text);
+}   
\ No newline at end of file
diff --git a/Network/Protocol/ChannelLink.cs b/Network/Protocol/ChannelLink.cs
deleted file mode 100644
index 227d238b5383926d600bd7c7c4199528863c5da4..0000000000000000000000000000000000000000
--- a/Network/Protocol/ChannelLink.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct ChannelLink : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static ChannelLink GetRootAsChannelLink(ByteBuffer _bb) { return GetRootAsChannelLink(_bb, new ChannelLink()); }
-  public static ChannelLink GetRootAsChannelLink(ByteBuffer _bb, ChannelLink obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public ChannelLink __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public string MasterInstanceName { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetMasterInstanceNameBytes() { return __p.__vector_as_arraysegment(4); }
-  public string SlaveInstanceName { get { int o = __p.__offset(6); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetSlaveInstanceNameBytes() { return __p.__vector_as_arraysegment(6); }
-  public uint MasterVr { get { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } }
-  public uint SlaveVr { get { int o = __p.__offset(10); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } }
-  public double Factor { get { int o = __p.__offset(12); return o != 0 ? __p.bb.GetDouble(o + __p.bb_pos) : (double)0.0; } }
-  public double Shift { get { int o = __p.__offset(14); return o != 0 ? __p.bb.GetDouble(o + __p.bb_pos) : (double)0.0; } }
-
-  public static Offset<ChannelLink> CreateChannelLink(FlatBufferBuilder builder,
-      StringOffset MasterInstanceNameOffset = default(StringOffset),
-      StringOffset SlaveInstanceNameOffset = default(StringOffset),
-      uint MasterVr = 0,
-      uint SlaveVr = 0,
-      double Factor = 0.0,
-      double Shift = 0.0) {
-    builder.StartObject(6);
-    ChannelLink.AddShift(builder, Shift);
-    ChannelLink.AddFactor(builder, Factor);
-    ChannelLink.AddSlaveVr(builder, SlaveVr);
-    ChannelLink.AddMasterVr(builder, MasterVr);
-    ChannelLink.AddSlaveInstanceName(builder, SlaveInstanceNameOffset);
-    ChannelLink.AddMasterInstanceName(builder, MasterInstanceNameOffset);
-    return ChannelLink.EndChannelLink(builder);
-  }
-
-  public static void StartChannelLink(FlatBufferBuilder builder) { builder.StartObject(6); }
-  public static void AddMasterInstanceName(FlatBufferBuilder builder, StringOffset MasterInstanceNameOffset) { builder.AddOffset(0, MasterInstanceNameOffset.Value, 0); }
-  public static void AddSlaveInstanceName(FlatBufferBuilder builder, StringOffset SlaveInstanceNameOffset) { builder.AddOffset(1, SlaveInstanceNameOffset.Value, 0); }
-  public static void AddMasterVr(FlatBufferBuilder builder, uint MasterVr) { builder.AddUint(2, MasterVr, 0); }
-  public static void AddSlaveVr(FlatBufferBuilder builder, uint SlaveVr) { builder.AddUint(3, SlaveVr, 0); }
-  public static void AddFactor(FlatBufferBuilder builder, double Factor) { builder.AddDouble(4, Factor, 0.0); }
-  public static void AddShift(FlatBufferBuilder builder, double Shift) { builder.AddDouble(5, Shift, 0.0); }
-  public static Offset<ChannelLink> EndChannelLink(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<ChannelLink>(o);
-  }
-};
-
-
-}
diff --git a/Network/Protocol/CommandEnum.cs b/Network/Protocol/CommandEnum.cs
deleted file mode 100644
index 0589f621788d5e4ec24101220816c6c54c033dcb..0000000000000000000000000000000000000000
--- a/Network/Protocol/CommandEnum.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-public enum CommandEnum : int
-{
- KeepAlive = 0,
- Play = 1,
- PlayFast = 2,
- Pause = 3,
- Stop = 4,
- AddFmu = 5,
- RemoveFmu = 6,
- ValueRefs = 7,
- AddChannelLinks = 8,
- RemoveChannelLinks = 9,
- Feedback = 10,
- Values = 11,
- Log = 12,
-};
-
-
-}
diff --git a/Network/Protocol/DataUnion.cs b/Network/Protocol/DataUnion.cs
deleted file mode 100644
index 521e0596f0d0513db3fc20f937c03746fcde09ce..0000000000000000000000000000000000000000
--- a/Network/Protocol/DataUnion.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-public enum DataUnion : byte
-{
- NONE = 0,
- Time = 1,
- FmuFile = 2,
- ValueRefs = 3,
- ChannelLink = 4,
- Values = 5,
- Feedback = 6,
- Log = 7,
-};
-
-
-}
diff --git a/Network/Protocol/Feedback.cs b/Network/Protocol/Feedback.cs
deleted file mode 100644
index 3bd3aeff0c4752b78c00e9bf7290350f4eff4166..0000000000000000000000000000000000000000
--- a/Network/Protocol/Feedback.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct Feedback : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static Feedback GetRootAsFeedback(ByteBuffer _bb) { return GetRootAsFeedback(_bb, new Feedback()); }
-  public static Feedback GetRootAsFeedback(ByteBuffer _bb, Feedback obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public Feedback __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public int Result { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } }
-  public string Message { get { int o = __p.__offset(6); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetMessageBytes() { return __p.__vector_as_arraysegment(6); }
-
-  public static Offset<Feedback> CreateFeedback(FlatBufferBuilder builder,
-      int Result = 0,
-      StringOffset MessageOffset = default(StringOffset)) {
-    builder.StartObject(2);
-    Feedback.AddMessage(builder, MessageOffset);
-    Feedback.AddResult(builder, Result);
-    return Feedback.EndFeedback(builder);
-  }
-
-  public static void StartFeedback(FlatBufferBuilder builder) { builder.StartObject(2); }
-  public static void AddResult(FlatBufferBuilder builder, int Result) { builder.AddInt(0, Result, 0); }
-  public static void AddMessage(FlatBufferBuilder builder, StringOffset MessageOffset) { builder.AddOffset(1, MessageOffset.Value, 0); }
-  public static Offset<Feedback> EndFeedback(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<Feedback>(o);
-  }
-};
-
-
-}
diff --git a/Network/Protocol/FmuFile.cs b/Network/Protocol/FmuFile.cs
deleted file mode 100644
index b1db1a3be637e8a30b0954e16b46718a2becb9ae..0000000000000000000000000000000000000000
--- a/Network/Protocol/FmuFile.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct FmuFile : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static FmuFile GetRootAsFmuFile(ByteBuffer _bb) { return GetRootAsFmuFile(_bb, new FmuFile()); }
-  public static FmuFile GetRootAsFmuFile(ByteBuffer _bb, FmuFile obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public FmuFile __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public string InstanceName { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetInstanceNameBytes() { return __p.__vector_as_arraysegment(4); }
-  public int BinarySize { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } }
-
-  public static Offset<FmuFile> CreateFmuFile(FlatBufferBuilder builder,
-      StringOffset InstanceNameOffset = default(StringOffset),
-      int BinarySize = 0) {
-    builder.StartObject(2);
-    FmuFile.AddBinarySize(builder, BinarySize);
-    FmuFile.AddInstanceName(builder, InstanceNameOffset);
-    return FmuFile.EndFmuFile(builder);
-  }
-
-  public static void StartFmuFile(FlatBufferBuilder builder) { builder.StartObject(2); }
-  public static void AddInstanceName(FlatBufferBuilder builder, StringOffset InstanceNameOffset) { builder.AddOffset(0, InstanceNameOffset.Value, 0); }
-  public static void AddBinarySize(FlatBufferBuilder builder, int BinarySize) { builder.AddInt(1, BinarySize, 0); }
-  public static Offset<FmuFile> EndFmuFile(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<FmuFile>(o);
-  }
-};
-
-
-}
diff --git a/Network/Protocol/Log.cs b/Network/Protocol/Log.cs
deleted file mode 100644
index c027f849b56c25d43f4347d13d4d34c9f5d8930a..0000000000000000000000000000000000000000
--- a/Network/Protocol/Log.cs
+++ /dev/null
@@ -1,44 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct Log : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static Log GetRootAsLog(ByteBuffer _bb) { return GetRootAsLog(_bb, new Log()); }
-  public static Log GetRootAsLog(ByteBuffer _bb, Log obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public Log __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public string InstanceName { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetInstanceNameBytes() { return __p.__vector_as_arraysegment(4); }
-  public string Message { get { int o = __p.__offset(6); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetMessageBytes() { return __p.__vector_as_arraysegment(6); }
-
-  public static Offset<Log> CreateLog(FlatBufferBuilder builder,
-      StringOffset InstanceNameOffset = default(StringOffset),
-      StringOffset MessageOffset = default(StringOffset)) {
-    builder.StartObject(2);
-    Log.AddMessage(builder, MessageOffset);
-    Log.AddInstanceName(builder, InstanceNameOffset);
-    return Log.EndLog(builder);
-  }
-
-  public static void StartLog(FlatBufferBuilder builder) { builder.StartObject(2); }
-  public static void AddInstanceName(FlatBufferBuilder builder, StringOffset InstanceNameOffset) { builder.AddOffset(0, InstanceNameOffset.Value, 0); }
-  public static void AddMessage(FlatBufferBuilder builder, StringOffset MessageOffset) { builder.AddOffset(1, MessageOffset.Value, 0); }
-  public static Offset<Log> EndLog(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<Log>(o);
-  }
-};
-
-
-}
diff --git a/Network/Protocol/ModeliMessage.cs b/Network/Protocol/ModeliMessage.cs
deleted file mode 100644
index 501d39d3b24983c3a47db14023666c2c88bf03f4..0000000000000000000000000000000000000000
--- a/Network/Protocol/ModeliMessage.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct ModeliMessage : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static ModeliMessage GetRootAsModeliMessage(ByteBuffer _bb) { return GetRootAsModeliMessage(_bb, new ModeliMessage()); }
-  public static ModeliMessage GetRootAsModeliMessage(ByteBuffer _bb, ModeliMessage obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public ModeliMessage __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public CommandEnum Command { get { int o = __p.__offset(4); return o != 0 ? (CommandEnum)__p.bb.GetInt(o + __p.bb_pos) : CommandEnum.KeepAlive; } }
-  public int JobNr { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } }
-  public DataUnion DataType { get { int o = __p.__offset(8); return o != 0 ? (DataUnion)__p.bb.Get(o + __p.bb_pos) : DataUnion.NONE; } }
-  public TTable? Data<TTable>() where TTable : struct, IFlatbufferObject { int o = __p.__offset(10); return o != 0 ? (TTable?)__p.__union<TTable>(o) : null; }
-
-  public static Offset<ModeliMessage> CreateModeliMessage(FlatBufferBuilder builder,
-      CommandEnum Command = CommandEnum.KeepAlive,
-      int JobNr = 0,
-      DataUnion Data_type = DataUnion.NONE,
-      int DataOffset = 0) {
-    builder.StartObject(4);
-    ModeliMessage.AddData(builder, DataOffset);
-    ModeliMessage.AddJobNr(builder, JobNr);
-    ModeliMessage.AddCommand(builder, Command);
-    ModeliMessage.AddDataType(builder, Data_type);
-    return ModeliMessage.EndModeliMessage(builder);
-  }
-
-  public static void StartModeliMessage(FlatBufferBuilder builder) { builder.StartObject(4); }
-  public static void AddCommand(FlatBufferBuilder builder, CommandEnum Command) { builder.AddInt(0, (int)Command, 0); }
-  public static void AddJobNr(FlatBufferBuilder builder, int JobNr) { builder.AddInt(1, JobNr, 0); }
-  public static void AddDataType(FlatBufferBuilder builder, DataUnion DataType) { builder.AddByte(2, (byte)DataType, 0); }
-  public static void AddData(FlatBufferBuilder builder, int DataOffset) { builder.AddOffset(3, DataOffset, 0); }
-  public static Offset<ModeliMessage> EndModeliMessage(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<ModeliMessage>(o);
-  }
-  public static void FinishModeliMessageBuffer(FlatBufferBuilder builder, Offset<ModeliMessage> offset) { builder.Finish(offset.Value); }
-};
-
-
-}
diff --git a/Network/Protocol/Time.cs b/Network/Protocol/Time.cs
deleted file mode 100644
index 78b0a50bf55d48b6fa15821e2cde57cd183f145d..0000000000000000000000000000000000000000
--- a/Network/Protocol/Time.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct Time : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static Time GetRootAsTime(ByteBuffer _bb) { return GetRootAsTime(_bb, new Time()); }
-  public static Time GetRootAsTime(ByteBuffer _bb, Time obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public Time __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public double Value { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetDouble(o + __p.bb_pos) : (double)0.0; } }
-
-  public static Offset<Time> CreateTime(FlatBufferBuilder builder,
-      double Value = 0.0) {
-    builder.StartObject(1);
-    Time.AddValue(builder, Value);
-    return Time.EndTime(builder);
-  }
-
-  public static void StartTime(FlatBufferBuilder builder) { builder.StartObject(1); }
-  public static void AddValue(FlatBufferBuilder builder, double Value) { builder.AddDouble(0, Value, 0.0); }
-  public static Offset<Time> EndTime(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<Time>(o);
-  }
-};
-
-
-}
diff --git a/Network/Protocol/ValueRefs.cs b/Network/Protocol/ValueRefs.cs
deleted file mode 100644
index 3126e62282dd601d8914241833c8bf748c1523d7..0000000000000000000000000000000000000000
--- a/Network/Protocol/ValueRefs.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct ValueRefs : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static ValueRefs GetRootAsValueRefs(ByteBuffer _bb) { return GetRootAsValueRefs(_bb, new ValueRefs()); }
-  public static ValueRefs GetRootAsValueRefs(ByteBuffer _bb, ValueRefs obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public ValueRefs __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public string InstanceName { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetInstanceNameBytes() { return __p.__vector_as_arraysegment(4); }
-  public uint IntVrs(int j) { int o = __p.__offset(6); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int IntVrsLength { get { int o = __p.__offset(6); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetIntVrsBytes() { return __p.__vector_as_arraysegment(6); }
-  public uint RealVrs(int j) { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int RealVrsLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetRealVrsBytes() { return __p.__vector_as_arraysegment(8); }
-  public uint BoolVrs(int j) { int o = __p.__offset(10); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int BoolVrsLength { get { int o = __p.__offset(10); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetBoolVrsBytes() { return __p.__vector_as_arraysegment(10); }
-  public uint StringVrs(int j) { int o = __p.__offset(12); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int StringVrsLength { get { int o = __p.__offset(12); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetStringVrsBytes() { return __p.__vector_as_arraysegment(12); }
-
-  public static Offset<ValueRefs> CreateValueRefs(FlatBufferBuilder builder,
-      StringOffset InstanceNameOffset = default(StringOffset),
-      VectorOffset IntVrsOffset = default(VectorOffset),
-      VectorOffset RealVrsOffset = default(VectorOffset),
-      VectorOffset BoolVrsOffset = default(VectorOffset),
-      VectorOffset StringVrsOffset = default(VectorOffset)) {
-    builder.StartObject(5);
-    ValueRefs.AddStringVrs(builder, StringVrsOffset);
-    ValueRefs.AddBoolVrs(builder, BoolVrsOffset);
-    ValueRefs.AddRealVrs(builder, RealVrsOffset);
-    ValueRefs.AddIntVrs(builder, IntVrsOffset);
-    ValueRefs.AddInstanceName(builder, InstanceNameOffset);
-    return ValueRefs.EndValueRefs(builder);
-  }
-
-  public static void StartValueRefs(FlatBufferBuilder builder) { builder.StartObject(5); }
-  public static void AddInstanceName(FlatBufferBuilder builder, StringOffset InstanceNameOffset) { builder.AddOffset(0, InstanceNameOffset.Value, 0); }
-  public static void AddIntVrs(FlatBufferBuilder builder, VectorOffset IntVrsOffset) { builder.AddOffset(1, IntVrsOffset.Value, 0); }
-  public static VectorOffset CreateIntVrsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartIntVrsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddRealVrs(FlatBufferBuilder builder, VectorOffset RealVrsOffset) { builder.AddOffset(2, RealVrsOffset.Value, 0); }
-  public static VectorOffset CreateRealVrsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartRealVrsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddBoolVrs(FlatBufferBuilder builder, VectorOffset BoolVrsOffset) { builder.AddOffset(3, BoolVrsOffset.Value, 0); }
-  public static VectorOffset CreateBoolVrsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartBoolVrsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddStringVrs(FlatBufferBuilder builder, VectorOffset StringVrsOffset) { builder.AddOffset(4, StringVrsOffset.Value, 0); }
-  public static VectorOffset CreateStringVrsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartStringVrsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static Offset<ValueRefs> EndValueRefs(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<ValueRefs>(o);
-  }
-};
-
-
-}
diff --git a/Network/Protocol/Values.cs b/Network/Protocol/Values.cs
deleted file mode 100644
index 6a5f2eab5d678de0c0e1e95d3daea9dc3b154cf2..0000000000000000000000000000000000000000
--- a/Network/Protocol/Values.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-// <auto-generated>
-//  automatically generated by the FlatBuffers compiler, do not modify
-// </auto-generated>
-
-namespace Network.Protocol
-{
-
-using global::System;
-using global::FlatBuffers;
-
-public struct Values : IFlatbufferObject
-{
-  private Table __p;
-  public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static Values GetRootAsValues(ByteBuffer _bb) { return GetRootAsValues(_bb, new Values()); }
-  public static Values GetRootAsValues(ByteBuffer _bb, Values obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
-  public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; }
-  public Values __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
-
-  public string InstanceName { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
-  public ArraySegment<byte>? GetInstanceNameBytes() { return __p.__vector_as_arraysegment(4); }
-  public double Timestamp { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetDouble(o + __p.bb_pos) : (double)0.0; } }
-  public uint IntVrs(int j) { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int IntVrsLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetIntVrsBytes() { return __p.__vector_as_arraysegment(8); }
-  public int IntValues(int j) { int o = __p.__offset(10); return o != 0 ? __p.bb.GetInt(__p.__vector(o) + j * 4) : (int)0; }
-  public int IntValuesLength { get { int o = __p.__offset(10); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetIntValuesBytes() { return __p.__vector_as_arraysegment(10); }
-  public uint RealVrs(int j) { int o = __p.__offset(12); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int RealVrsLength { get { int o = __p.__offset(12); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetRealVrsBytes() { return __p.__vector_as_arraysegment(12); }
-  public double RealValues(int j) { int o = __p.__offset(14); return o != 0 ? __p.bb.GetDouble(__p.__vector(o) + j * 8) : (double)0; }
-  public int RealValuesLength { get { int o = __p.__offset(14); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetRealValuesBytes() { return __p.__vector_as_arraysegment(14); }
-  public uint BoolVrs(int j) { int o = __p.__offset(16); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int BoolVrsLength { get { int o = __p.__offset(16); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetBoolVrsBytes() { return __p.__vector_as_arraysegment(16); }
-  public int BoolValues(int j) { int o = __p.__offset(18); return o != 0 ? __p.bb.GetInt(__p.__vector(o) + j * 4) : (int)0; }
-  public int BoolValuesLength { get { int o = __p.__offset(18); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetBoolValuesBytes() { return __p.__vector_as_arraysegment(18); }
-  public uint StringVrs(int j) { int o = __p.__offset(20); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; }
-  public int StringVrsLength { get { int o = __p.__offset(20); return o != 0 ? __p.__vector_len(o) : 0; } }
-  public ArraySegment<byte>? GetStringVrsBytes() { return __p.__vector_as_arraysegment(20); }
-  public string StringValues(int j) { int o = __p.__offset(22); return o != 0 ? __p.__string(__p.__vector(o) + j * 4) : null; }
-  public int StringValuesLength { get { int o = __p.__offset(22); return o != 0 ? __p.__vector_len(o) : 0; } }
-
-  public static Offset<Values> CreateValues(FlatBufferBuilder builder,
-      StringOffset InstanceNameOffset = default(StringOffset),
-      double Timestamp = 0.0,
-      VectorOffset IntVrsOffset = default(VectorOffset),
-      VectorOffset IntValuesOffset = default(VectorOffset),
-      VectorOffset RealVrsOffset = default(VectorOffset),
-      VectorOffset RealValuesOffset = default(VectorOffset),
-      VectorOffset BoolVrsOffset = default(VectorOffset),
-      VectorOffset BoolValuesOffset = default(VectorOffset),
-      VectorOffset StringVrsOffset = default(VectorOffset),
-      VectorOffset StringValuesOffset = default(VectorOffset)) {
-    builder.StartObject(10);
-    Values.AddTimestamp(builder, Timestamp);
-    Values.AddStringValues(builder, StringValuesOffset);
-    Values.AddStringVrs(builder, StringVrsOffset);
-    Values.AddBoolValues(builder, BoolValuesOffset);
-    Values.AddBoolVrs(builder, BoolVrsOffset);
-    Values.AddRealValues(builder, RealValuesOffset);
-    Values.AddRealVrs(builder, RealVrsOffset);
-    Values.AddIntValues(builder, IntValuesOffset);
-    Values.AddIntVrs(builder, IntVrsOffset);
-    Values.AddInstanceName(builder, InstanceNameOffset);
-    return Values.EndValues(builder);
-  }
-
-  public static void StartValues(FlatBufferBuilder builder) { builder.StartObject(10); }
-  public static void AddInstanceName(FlatBufferBuilder builder, StringOffset InstanceNameOffset) { builder.AddOffset(0, InstanceNameOffset.Value, 0); }
-  public static void AddTimestamp(FlatBufferBuilder builder, double Timestamp) { builder.AddDouble(1, Timestamp, 0.0); }
-  public static void AddIntVrs(FlatBufferBuilder builder, VectorOffset IntVrsOffset) { builder.AddOffset(2, IntVrsOffset.Value, 0); }
-  public static VectorOffset CreateIntVrsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartIntVrsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddIntValues(FlatBufferBuilder builder, VectorOffset IntValuesOffset) { builder.AddOffset(3, IntValuesOffset.Value, 0); }
-  public static VectorOffset CreateIntValuesVector(FlatBufferBuilder builder, int[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddInt(data[i]); return builder.EndVector(); }
-  public static void StartIntValuesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddRealVrs(FlatBufferBuilder builder, VectorOffset RealVrsOffset) { builder.AddOffset(4, RealVrsOffset.Value, 0); }
-  public static VectorOffset CreateRealVrsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartRealVrsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddRealValues(FlatBufferBuilder builder, VectorOffset RealValuesOffset) { builder.AddOffset(5, RealValuesOffset.Value, 0); }
-  public static VectorOffset CreateRealValuesVector(FlatBufferBuilder builder, double[] data) { builder.StartVector(8, data.Length, 8); for (int i = data.Length - 1; i >= 0; i--) builder.AddDouble(data[i]); return builder.EndVector(); }
-  public static void StartRealValuesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(8, numElems, 8); }
-  public static void AddBoolVrs(FlatBufferBuilder builder, VectorOffset BoolVrsOffset) { builder.AddOffset(6, BoolVrsOffset.Value, 0); }
-  public static VectorOffset CreateBoolVrsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartBoolVrsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddBoolValues(FlatBufferBuilder builder, VectorOffset BoolValuesOffset) { builder.AddOffset(7, BoolValuesOffset.Value, 0); }
-  public static VectorOffset CreateBoolValuesVector(FlatBufferBuilder builder, int[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddInt(data[i]); return builder.EndVector(); }
-  public static void StartBoolValuesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddStringVrs(FlatBufferBuilder builder, VectorOffset StringVrsOffset) { builder.AddOffset(8, StringVrsOffset.Value, 0); }
-  public static VectorOffset CreateStringVrsVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); }
-  public static void StartStringVrsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static void AddStringValues(FlatBufferBuilder builder, VectorOffset StringValuesOffset) { builder.AddOffset(9, StringValuesOffset.Value, 0); }
-  public static VectorOffset CreateStringValuesVector(FlatBufferBuilder builder, StringOffset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); }
-  public static void StartStringValuesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); }
-  public static Offset<Values> EndValues(FlatBufferBuilder builder) {
-    int o = builder.EndObject();
-    return new Offset<Values>(o);
-  }
-};
-
-
-}
diff --git a/README.md b/README.md
index 81d13c0df9ae742346233945deca1ec4a3131f76..fdf103ba7ec8521d37198a117f82957e312c1c69 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-Use flatc.exe in the command line to compile ModeliProtocol.fbs.
+Use the batch files to generate the code.
+For C# the nuget package Grpc.Tools must be installed. Also install the package Grpc for using the API.
 
-For C++: flatc -c ModeliProtocol.fbs creates ModeliProtocol_generated.h.
+For C++ use ninja & cmake as described in https://github.com/grpc/grpc/blob/master/INSTALL.md : (Use VS Developer Command Prompt)
 
-For C#: flatc -n ModeliProtocol.fbs creates a folder Network.
-
-The namespace is Network. Include the generated files and the neccessary flatbuffer libs (at https://github.com/google/flatbuffers)
\ No newline at end of file
+For VS2017 replace: > call "%VS140COMNTOOLS%..\..\VC\vcvarsall.bat" x64 
+with: > call "%VS150COMNTOOLS%..\..\VC\Auxiliary\Build\vcvarsall.bat" x64
\ No newline at end of file
diff --git a/flatc.exe b/flatc.exe
deleted file mode 100644
index 662cf228d525c3e52b932361d344cdf0f9b058d8..0000000000000000000000000000000000000000
Binary files a/flatc.exe and /dev/null differ