diff --git a/interfaces/SimpleScene/SimpleScene.proto b/interfaces/SimpleScene/SimpleScene.proto
index 9bafa3a899d8a24e4d46374f257c9ea62986dbd2..6fdbc6e5a1f2bfc95a13ffdbb1b89a3e2bbe60af 100644
--- a/interfaces/SimpleScene/SimpleScene.proto
+++ b/interfaces/SimpleScene/SimpleScene.proto
@@ -12,6 +12,11 @@ message IposConfigWrapper { // wrapper-message for configuration-topic
   repeated IposQueryRequest queryRequests = 7;
 }
 
+message IposMonitoringWrapper {
+  repeated IposPositionEvent iposPositionEvents = 1;
+  repeated IposMsgRcvEvent iposMsgRcvEvent = 2;
+}
+
 message IposObjectConfig {
   string agentId = 1; // unique for each object, but there may be multiple positioning sensors for that object
   string sensorId = 2; // unique (each sensor localizes a single object)
@@ -25,6 +30,24 @@ message IposPositionEvent {
   // string type = 2; // deprecated may be ExitNotification or EntryNotification
 }
 
+message IposMsgRcvEvent {
+  string protocolName = 1;
+  bytes serializedMsg = 2;
+  string lastPosUpdate = 3;
+  string agentId = 4;
+  repeated Attribute extractedAttributes = 5;
+  string timestamp = 6;
+  IposPosition lastKnownPosition = 7;
+  IposSimpleOrientation lastKnownOrientation = 8;
+  repeated IposZoneDescriptor lastKnownZoneDescriptors = 9;
+}
+
+message Attribute {
+  string name = 1;
+  string type = 2;
+  string data = 3;
+}
+
 message IposZoneDescriptor {
   string zoneId = 1;
   string notificationType = 2; // may be ExitNotification or EntryNotification
diff --git a/interfaces/VDA5050/VDA5050.proto b/interfaces/VDA5050/VDA5050.proto
index 07526788ce30aba0c06d6e899bcc058a0bb37151..773a71c57180d12f19d8a7f014911c3ed5d709c7 100644
--- a/interfaces/VDA5050/VDA5050.proto
+++ b/interfaces/VDA5050/VDA5050.proto
@@ -3,154 +3,154 @@ syntax = "proto3";
 package ipos.models;
 
 message AgvState { 
-  required Int32 headerId = 1; //headerId of the message. The headerId is defined per topic and incremented by 1 with each sent (but not necessarily received) message.
-  required String timeStamp = 2; //Timestamp in ISO8601 format (YYYY-MM-DDTHH:mm:ss.ssZ).
-  required String version = 3; //Version of the protocol [Major].[Minor].[Patch]
-  required String manufacturer = 4; //Manufacturer of the AGV
-  required String serialNumber = 5; //Serial number of the AGV.
-  required String orderId = 6; //Unique order identification of the current order or the previous finished order. The orderId is kept until a new order is received. Empty string (\"\") if no previous orderId is available.
-  required Int32 orderUpdateId = 7; //Order Update Identification to identify that an order update has been accepted by the AGV. \"0\" if no previous orderUpdateId is available.
-  required String lastNodeId = 8; //nodeID of last reached node or, if AGV is currently on a node, current node (e.g., \"node7\"). Empty string (\"\") if no lastNodeId is available.
-  required Int32 lastNodeSequenceId = 9; //sequenceId of the last reached node or, if the AGV is currently on a node, sequenceId of current node.\n“0” if no lastNodeSequenceId is available.
+  int32 headerId = 1; //headerId of the message. The headerId is defined per topic and incremented by 1 with each sent (but not necessarily received) message.
+  string timeStamp = 2; //Timestamp in ISO8601 format (YYYY-MM-DDTHH:mm:ss.ssZ).
+  string version = 3; //Version of the protocol [Major].[Minor].[Patch]
+  string manufacturer = 4; //Manufacturer of the AGV
+  string serialNumber = 5; //Serial number of the AGV.
+  string orderId = 6; //Unique order identification of the current order or the previous finished order. The orderId is kept until a new order is received. Empty string (\"\") if no previous orderId is available.
+  int32 orderUpdateId = 7; //Order Update Identification to identify that an order update has been accepted by the AGV. \"0\" if no previous orderUpdateId is available.
+  string lastNodeId = 8; //nodeID of last reached node or, if AGV is currently on a node, current node (e.g., \"node7\"). Empty string (\"\") if no lastNodeId is available.
+  int32 lastNodeSequenceId = 9; //sequenceId of the last reached node or, if the AGV is currently on a node, sequenceId of current node.\n“0” if no lastNodeSequenceId is available.
   repeated NodeState nodeStates = 10; //Array of nodeState-Objects, that need to be traversed for fulfilling the order. Empty list if idle.
   repeated EdgeState edgeStates = 11; //Array of edgeState-Objects, that need to be traversed for fulfilling the order, empty list if idle.
-  required Boolean driving = 12; //True: indicates that the AGV is driving and/or rotating. Other movements of the AGV (e.g., lift movements) are not included here.\nFalse: indicates that the AGV is neither driving nor rotating
+  bool driving = 12; //True: indicates that the AGV is driving and/or rotating. Other movements of the AGV (e.g., lift movements) are not included here.\nFalse: indicates that the AGV is neither driving nor rotating
   repeated ActionState actionStates = 13; //Contains a list of the current actions and the actions, which are yet to be finished. This may include actions from previous nodes, that are still in progress.
-  required BatteryState batteryState = 14; //Contains all battery-related information.
-  required String operatingMode =15; //Current operating mode of the AGV, including: "AUTOMATIC", "SEMIAUTOMATIC", "MANUAL", "SERVICE", "TEACHIN".
+  BatteryState batteryState = 14; //Contains all battery-related information.
+  string operatingMode =15; //Current operating mode of the AGV, including: "AUTOMATIC", "SEMIAUTOMATIC", "MANUAL", "SERVICE", "TEACHIN".
   repeated Error errors = 16; //Array of error-objects. All active errors of the AGV should be in the list. An empty array indicates that the AGV has no active errors.
-  required SafetyState safetyState =17; //Contains all safety-related information.
+  SafetyState safetyState =17; //Contains all safety-related information.
   optional AgvPosition agvPosition = 18;
-  optional Float64 distanceSinceLastNode = 19;
+  optional float distanceSinceLastNode = 19;
   repeated Info information = 20;
   repeated Load loads = 21;
-  optional Boolean newBaseRequest = 22;
-  optional Boolean paused = 23;
+  optional bool newBaseRequest = 22;
+  optional bool paused = 23;
   optional Velocity velocity = 24;
-  optional String zoneSetId = 25;
+  optional string zoneSetId = 25;
 }
 
 message AgvPosition {
-  required Boolean positionInitialized = 1;
-  optional Float64 localizationScore = 2;
-  optional Float64 deviationRange = 3;
-  required Float64 x = 4;
-  required Float64 y = 5;
-  required Float64 theta = 6;
-  required String mapId = 7;
-  optional String mapDescription = 8;
+  bool positionInitialized = 1;
+  optional float localizationScore = 2;
+  optional float deviationRange = 3;
+  float x = 4;
+  float y = 5;
+  float theta = 6; //  Range: [-Pi … Pi] Orientation of the AGV.
+  string mapId = 7;
+  optional string mapDescription = 8;
 }
 
 message NodeState {
-  required String nodeId = 1; //Unique node identification.
-  required Int32 sequenceId = 2; //sequenceId to discern multiple nodes with same nodeId.
-  optional String nodeDescription = 3;
+  string nodeId = 1; //Unique node identification.
+  int32 sequenceId = 2; //sequenceId to discern multiple nodes with same nodeId.
+  optional string nodeDescription = 3;
   optional NodePosition nodePosition = 4;
-  required Boolean released = 5; //	“true” indicates that the node is part of the base. “false” indicates that the node is part of the horizon.
+  bool released = 5; //	“true” indicates that the node is part of the base. “false” indicates that the node is part of the horizon.
 }
 
 message NodePosition {
-  required Float64 x = 1;
-  required Float64 y = 2;
-  required Float64 theta = 3;
-  optional Float64 allowedDeviationXY = 4;
-  optional Float64 allowedDeviationTheta = 5;
-  required String mapId = 6;
-  optional String mapDescription = 7;
+  float x = 1;
+  float y = 2;
+  float theta = 3;
+  optional float allowedDeviationXY = 4;
+  optional float allowedDeviationTheta = 5;
+  string mapId = 6;
+  optional string mapDescription = 7;
 
 }
 
 message EdgeState {
-  required String edgeId = 1; //Unique edge identification.
-  required Int32 sequenceId = 2; //sequenceId to differentiate between multiple edges with the same edgeId.
-  optional String edgeDescription = 3; //Additional information on the edge.
-  required Boolean released = 4; //“true” indicates that the edge is part of the base. “false” indicates that the edge is part of the horizon.
+  string edgeId = 1; //Unique edge identification.
+  int32 sequenceId = 2; //sequenceId to differentiate between multiple edges with the same edgeId.
+  optional string edgeDescription = 3; //Additional information on the edge.
+  bool released = 4; //“true” indicates that the edge is part of the base. “false” indicates that the edge is part of the horizon.
   optional Trajectory trajectory = 5;
 }
 
 message Trajectory {
-  required Float64 degree = 1;
-  repeated Float64 knotVector = 2;
+  float degree = 1;
+  repeated float knotVector = 2;
   repeated ControlPoints controlPoints = 3;
 }
 
 message ControlPoints {
-  required Float64 x = 1;
-  required Float64 y = 2;
-  optional Float64 weight = 3;
+  float x = 1;
+  float y = 2;
+  optional float weight = 3;
 }
 
 message Velocity {
-  optional Float64 vx = 1; //The AVGs velocity in its x direction.
-  optional Float64 vy = 2; //The AVGs velocity in its y direction.
-  optional Float64 omega = 3; //The AVGs turning speed around its z axis.
+  optional float vx = 1; //The AVGs velocity in its x direction.
+  optional float vy = 2; //The AVGs velocity in its y direction.
+  optional float omega = 3; //The AVGs turning speed around its z axis.
 }
 
 message Load {
-  optional String loadId = 1; //Unique identification number of the load (e.g., barcode or RFID). Empty field, if the AGV can identify the load, but didn’t identify the load yet. Optional, if the AGV cannot identify the load.
-  optional String loadType = 2; //Type of load.
-  optional String loadPosition = 3; //Indicates, which load handling/carrying unit of the AGV is used, e.g., in case the AGV has multiple spots/positions to carry loads.
+  optional string loadId = 1; //Unique identification number of the load (e.g., barcode or RFID). Empty field, if the AGV can identify the load, but didn’t identify the load yet. Optional, if the AGV cannot identify the load.
+  optional string loadType = 2; //Type of load.
+  optional string loadPosition = 3; //Indicates, which load handling/carrying unit of the AGV is used, e.g., in case the AGV has multiple spots/positions to carry loads.
   optional BoundingBoxReference boundingBoxReference = 4; //Point of reference for the location of the bounding box.
   optional LoadDimensions loadDimensions = 5; //Dimensions of the load´s bounding box in meters.
-  optional Float64 weight = 6; //Absolute weight of the load measured in kg. 
+  optional float weight = 6; //Absolute weight of the load measured in kg.
 }
 
 message BoundingBoxReference {
-  required Float64 x = 1; //x-coordinate of the point of reference.
-  required Float64 y = 2;
-  required Float64 z = 3;
-  optional Float64 theta = 4; //Orientation of the loads bounding box. Important for tugger, trains, etc.
+  float x = 1; //x-coordinate of the point of reference.
+  float y = 2;
+  float z = 3;
+  optional float theta = 4; //Orientation of the loads bounding box. Important for tugger, trains, etc.
 }
 
 message LoadDimensions {
-  required Float64 length = 1;
-  required Float64 width = 2;
-  optional Float64 hight = 3;
+  float length = 1;
+  float width = 2;
+  optional float hight = 3;
 }
 
 message ActionState {
-  required String actionId = 1;
-  optional String actionType = 2;
-  optional String actionDescription	 = 3;
-  required String actionStatus = 4;
-  optional String resultDescription = 5;
+  string actionId = 1;
+  optional string actionType = 2;
+  optional string actionDescription	 = 3;
+  string actionStatus = 4;
+  optional string resultDescription = 5;
 }
 
 message BatteryState {
-  required Float64 batteryCharge = 1; //if AGV only provides values for good or bad battery levels, these will be indicated as 20% (bad) and 80% (good).
-  optional Float64 batteryVoltage = 2; //Battery Voltage.
-  optional Int8 batteryHealth = 3; //State of Health in %.
-  required Boolean charging = 4; //“true”: charging in progress. “false”: AGV is currently not charging.
-  optional Int32 reach = 5; //Estimated reach with current State of Charge.
+  float batteryCharge = 1; //if AGV only provides values for good or bad battery levels, these will be indicated as 20% (bad) and 80% (good).
+  optional float batteryVoltage = 2; //Battery Voltage.
+  optional int32 batteryHealth = 3; //State of Health in %.
+  bool charging = 4; //“true”: charging in progress. “false”: AGV is currently not charging.
+  optional int32 reach = 5; //Estimated reach with current State of Charge.
 }
 
 message Error {
-  required String errorType = 1; //Type/name of error
+  string errorType = 1; //Type/name of error
   repeated ErrorReference errorReferences = 2; //Array of references to identify the source of the error (e.g., headerId, orderId, actionId, etc.).
-  optional String errorDescription = 3; //Error description.
-  required String errorLevel = 4; //WARNING: AGV is ready to start (e.g. maintenance cycle expiration warning). FATAL: AGV is not in running condition, user intervention required (e.g. laser scanner is contaminated).
+  optional string errorDescription = 3; //Error description.
+  string errorLevel = 4; //WARNING: AGV is ready to start (e.g. maintenance cycle expiration warning). FATAL: AGV is not in running condition, user intervention required (e.g. laser scanner is contaminated).
 }
 
 message ErrorReference {
-  required String referenceKey = 1;
-  required String referenceValue = 2;
+  string referenceKey = 1;
+  string referenceValue = 2;
 }
 
 message Info {
-  required String infoType = 1;
+  string infoType = 1;
   repeated InfoReference infoReferences = 2;
-  optional String infoDescription = 3;
-  required String infoLevel = 4;
+  optional string infoDescription = 3;
+  string infoLevel = 4;
 }
 
 message InfoReference {
-  required String referenceKey = 1;
-  required String referenceValue = 2;
+  string referenceKey = 1;
+  string referenceValue = 2;
 }
 
 message SafetyState {
-  required String eStop = 1; //Acknowledge-Type of eStop: AUTOACK: auto-acknowledgeable e-stop is activated, e.g., by bumper or protective field. MANUAL: e-stop hast to be acknowledged manually at the vehicle. REMOTE: facility e-stop has to be acknowledged remotely. NONE: no e-stop activated.
-  required Boolean fieldViolation = 2; //Protective field violation. "true":field is violated "false":field is not violated.
+  string eStop = 1; //Acknowledge-Type of eStop: AUTOACK: auto-acknowledgeable e-stop is activated, e.g., by bumper or protective field. MANUAL: e-stop hast to be acknowledged manually at the vehicle. REMOTE: facility e-stop has to be acknowledged remotely. NONE: no e-stop activated.
+  bool fieldViolation = 2; //Protective field violation. "true":field is violated "false":field is not violated.
 }