fix(plc4j(eip): update branch with latest changes
diff --git a/plc4j/drivers/eip/pom.xml b/plc4j/drivers/eip/pom.xml
index 637c580..6ff23fd 100644
--- a/plc4j/drivers/eip/pom.xml
+++ b/plc4j/drivers/eip/pom.xml
@@ -48,6 +48,11 @@
               <languageName>java</languageName>
               <outputFlavor>read-write</outputFlavor>
               <outputDir>src/main/generated</outputDir>
+              <options>
+                <generate-properties-for-parser-arguments>true</generate-properties-for-parser-arguments>
+                <!-- We want properties that contain the values of reserved fields, if the value differs from the expected one -->
+                <generate-properties-for-reserved-fields>true</generate-properties-for-reserved-fields>
+              </options>
             </configuration>
           </execution>
         </executions>
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/AnsiExtendedSymbolSegment.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/AnsiExtendedSymbolSegment.java
index 8996a62..18ea2bc 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/AnsiExtendedSymbolSegment.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/AnsiExtendedSymbolSegment.java
@@ -68,13 +68,21 @@
   protected void serializeDataSegmentTypeChild(WriteBuffer writeBuffer)
       throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("AnsiExtendedSymbolSegment");
 
     // Implicit Field (dataSize) (Used for parsing, but its value is not stored as it's implicitly
     // given by the objects content)
     short dataSize = (short) (getSymbol().length());
-    writeImplicitField("dataSize", dataSize, writeUnsignedShort(writeBuffer, 8));
+    writeImplicitField(
+        "dataSize",
+        dataSize,
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (symbol)
     writeSimpleField(
@@ -88,7 +96,14 @@
 
     // Optional Field (pad) (Can be skipped, if the value is null)
     writeOptionalField(
-        "pad", pad, writeUnsignedShort(writeBuffer, 8), ((getSymbol().length()) % (2)) != (0));
+        "pad",
+        pad,
+        writeUnsignedShort(writeBuffer, 8),
+        ((getSymbol().length()) % (2)) != (0),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("AnsiExtendedSymbolSegment");
   }
@@ -102,6 +117,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     AnsiExtendedSymbolSegment _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (dataSize)
     lengthInBits += 8;
@@ -117,12 +133,13 @@
     return lengthInBits;
   }
 
-  public static AnsiExtendedSymbolSegmentBuilder staticParseBuilder(
+  public static DataSegmentTypeBuilder staticParseDataSegmentTypeBuilder(
       ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
     readBuffer.pullContext("AnsiExtendedSymbolSegment");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     short dataSize =
         readImplicitField(
@@ -154,17 +171,16 @@
 
     readBuffer.closeContext("AnsiExtendedSymbolSegment");
     // Create the instance
-    return new AnsiExtendedSymbolSegmentBuilder(symbol, pad, order);
+    return new AnsiExtendedSymbolSegmentBuilderImpl(symbol, pad, order);
   }
 
-  public static class AnsiExtendedSymbolSegmentBuilder
+  public static class AnsiExtendedSymbolSegmentBuilderImpl
       implements DataSegmentType.DataSegmentTypeBuilder {
     private final String symbol;
     private final Short pad;
     private final IntegerEncoding order;
 
-    public AnsiExtendedSymbolSegmentBuilder(String symbol, Short pad, IntegerEncoding order) {
-
+    public AnsiExtendedSymbolSegmentBuilderImpl(String symbol, Short pad, IntegerEncoding order) {
       this.symbol = symbol;
       this.pad = pad;
       this.order = order;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPAttributes.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPAttributes.java
index 9317faf..98b5ea0 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPAttributes.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPAttributes.java
@@ -78,6 +78,7 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CIPAttributes");
 
@@ -110,6 +111,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     CIPAttributes _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (numberOfClasses)
     lengthInBits += 16;
@@ -159,6 +161,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     int numberOfClasses = readImplicitField("numberOfClasses", readUnsignedInt(readBuffer, 16));
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPData.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPData.java
index cb1a735..b66315d 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPData.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPData.java
@@ -61,6 +61,7 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CIPData");
 
@@ -87,6 +88,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     CIPData _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (dataType)
     lengthInBits += 16;
@@ -124,6 +126,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     CIPDataTypeCode dataType =
         readEnumField(
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPDataConnected.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPDataConnected.java
index 1cb77ac..1dc7ed1 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPDataConnected.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CIPDataConnected.java
@@ -61,6 +61,7 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CIPDataConnected");
 
@@ -82,6 +83,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     CIPDataConnected _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (value)
     lengthInBits += 32;
@@ -118,6 +120,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     long value = readSimpleField("value", readUnsignedLong(readBuffer, 32));
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectedRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectedRequest.java
index 458baf1..0f36431 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectedRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectedRequest.java
@@ -74,28 +74,51 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipConnectedRequest");
 
     // Implicit Field (requestPathSize) (Used for parsing, but its value is not stored as it's
     // implicitly given by the objects content)
     short requestPathSize = (short) ((COUNT(getPathSegments())) / (2));
-    writeImplicitField("requestPathSize", requestPathSize, writeUnsignedShort(writeBuffer, 8));
+    writeImplicitField(
+        "requestPathSize",
+        requestPathSize,
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (pathSegments)
-    writeByteArrayField("pathSegments", pathSegments, writeByteArray(writeBuffer, 8));
+    writeByteArrayField(
+        "pathSegments",
+        pathSegments,
+        writeByteArray(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Reserved Field (reserved)
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (int) 0x0001,
-        writeUnsignedInt(writeBuffer, 16));
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Reserved Field (reserved)
     writeReservedField(
         "reserved",
         reservedField1 != null ? reservedField1 : (long) 0x00000000,
-        writeUnsignedLong(writeBuffer, 32));
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("CipConnectedRequest");
   }
@@ -109,6 +132,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipConnectedRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (requestPathSize)
     lengthInBits += 8;
@@ -127,13 +151,14 @@
     return lengthInBits;
   }
 
-  public static CipConnectedRequestBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("CipConnectedRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     short requestPathSize =
         readImplicitField(
@@ -175,18 +200,18 @@
 
     readBuffer.closeContext("CipConnectedRequest");
     // Create the instance
-    return new CipConnectedRequestBuilder(
+    return new CipConnectedRequestBuilderImpl(
         pathSegments, serviceLen, order, reservedField0, reservedField1);
   }
 
-  public static class CipConnectedRequestBuilder implements CipService.CipServiceBuilder {
+  public static class CipConnectedRequestBuilderImpl implements CipService.CipServiceBuilder {
     private final byte[] pathSegments;
     private final Integer serviceLen;
     private final IntegerEncoding order;
     private final Integer reservedField0;
     private final Long reservedField1;
 
-    public CipConnectedRequestBuilder(
+    public CipConnectedRequestBuilderImpl(
         byte[] pathSegments,
         Integer serviceLen,
         IntegerEncoding order,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectedResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectedResponse.java
index f018beb..af5e0b1 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectedResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectedResponse.java
@@ -90,6 +90,7 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipConnectedResponse");
 
@@ -97,7 +98,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (short) 0x00,
-        writeUnsignedShort(writeBuffer, 8));
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (status)
     writeSimpleField(
@@ -121,7 +126,14 @@
 
     // Optional Field (data) (Can be skipped, if the value is null)
     writeOptionalField(
-        "data", data, new DataWriterComplexDefault<>(writeBuffer), (((serviceLen) - (4))) > (0));
+        "data",
+        data,
+        new DataWriterComplexDefault<>(writeBuffer),
+        (((serviceLen) - (4))) > (0),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("CipConnectedResponse");
   }
@@ -135,6 +147,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipConnectedResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Reserved Field (reserved)
     lengthInBits += 8;
@@ -153,13 +166,14 @@
     return lengthInBits;
   }
 
-  public static CipConnectedResponseBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("CipConnectedResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     Short reservedField0 =
         readReservedField(
@@ -202,11 +216,11 @@
 
     readBuffer.closeContext("CipConnectedResponse");
     // Create the instance
-    return new CipConnectedResponseBuilder(
+    return new CipConnectedResponseBuilderImpl(
         status, additionalStatusWords, data, serviceLen, order, reservedField0);
   }
 
-  public static class CipConnectedResponseBuilder implements CipService.CipServiceBuilder {
+  public static class CipConnectedResponseBuilderImpl implements CipService.CipServiceBuilder {
     private final short status;
     private final short additionalStatusWords;
     private final CIPDataConnected data;
@@ -214,7 +228,7 @@
     private final IntegerEncoding order;
     private final Short reservedField0;
 
-    public CipConnectedResponseBuilder(
+    public CipConnectedResponseBuilderImpl(
         short status,
         short additionalStatusWords,
         CIPDataConnected data,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerCloseRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerCloseRequest.java
index 2315b79..1a65f40 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerCloseRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerCloseRequest.java
@@ -146,6 +146,7 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipConnectionManagerCloseRequest");
 
@@ -253,10 +254,21 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (byte) 0x00,
-        writeByte(writeBuffer, 8));
+        writeByte(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (connectionPaths)
-    writeComplexTypeArrayField("connectionPaths", connectionPaths, writeBuffer);
+    writeComplexTypeArrayField(
+        "connectionPaths",
+        connectionPaths,
+        writeBuffer,
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("CipConnectionManagerCloseRequest");
   }
@@ -270,6 +282,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipConnectionManagerCloseRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (requestPathSize)
     lengthInBits += 8;
@@ -314,13 +327,14 @@
     return lengthInBits;
   }
 
-  public static CipConnectionManagerCloseRequestBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("CipConnectionManagerCloseRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte requestPathSize =
         readSimpleField(
@@ -440,7 +454,7 @@
 
     readBuffer.closeContext("CipConnectionManagerCloseRequest");
     // Create the instance
-    return new CipConnectionManagerCloseRequestBuilder(
+    return new CipConnectionManagerCloseRequestBuilderImpl(
         requestPathSize,
         classSegment,
         instanceSegment,
@@ -457,7 +471,7 @@
         reservedField0);
   }
 
-  public static class CipConnectionManagerCloseRequestBuilder
+  public static class CipConnectionManagerCloseRequestBuilderImpl
       implements CipService.CipServiceBuilder {
     private final byte requestPathSize;
     private final PathSegment classSegment;
@@ -474,7 +488,7 @@
     private final IntegerEncoding order;
     private final Byte reservedField0;
 
-    public CipConnectionManagerCloseRequestBuilder(
+    public CipConnectionManagerCloseRequestBuilderImpl(
         byte requestPathSize,
         PathSegment classSegment,
         PathSegment instanceSegment,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerCloseResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerCloseResponse.java
index 3bb0df6..7b72842 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerCloseResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerCloseResponse.java
@@ -112,6 +112,7 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipConnectionManagerCloseResponse");
 
@@ -119,7 +120,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (short) 0x00,
-        writeUnsignedShort(writeBuffer, 8));
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (status)
     writeSimpleField(
@@ -185,7 +190,11 @@
     writeReservedField(
         "reserved",
         reservedField1 != null ? reservedField1 : (short) 0x00,
-        writeUnsignedShort(writeBuffer, 8));
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("CipConnectionManagerCloseResponse");
   }
@@ -199,6 +208,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipConnectionManagerCloseResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Reserved Field (reserved)
     lengthInBits += 8;
@@ -227,13 +237,14 @@
     return lengthInBits;
   }
 
-  public static CipConnectionManagerCloseResponseBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("CipConnectionManagerCloseResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     Short reservedField0 =
         readReservedField(
@@ -311,7 +322,7 @@
 
     readBuffer.closeContext("CipConnectionManagerCloseResponse");
     // Create the instance
-    return new CipConnectionManagerCloseResponseBuilder(
+    return new CipConnectionManagerCloseResponseBuilderImpl(
         status,
         additionalStatusWords,
         connectionSerialNumber,
@@ -324,7 +335,7 @@
         reservedField1);
   }
 
-  public static class CipConnectionManagerCloseResponseBuilder
+  public static class CipConnectionManagerCloseResponseBuilderImpl
       implements CipService.CipServiceBuilder {
     private final short status;
     private final short additionalStatusWords;
@@ -337,7 +348,7 @@
     private final Short reservedField0;
     private final Short reservedField1;
 
-    public CipConnectionManagerCloseResponseBuilder(
+    public CipConnectionManagerCloseResponseBuilderImpl(
         short status,
         short additionalStatusWords,
         int connectionSerialNumber,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerRequest.java
index 65cb7b0..31aebf8 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerRequest.java
@@ -195,6 +195,7 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipConnectionManagerRequest");
 
@@ -204,7 +205,14 @@
         (byte)
             ((((getClassSegment().getLengthInBytes()) + (getInstanceSegment().getLengthInBytes())))
                 / (2));
-    writeImplicitField("requestPathSize", requestPathSize, writeSignedByte(writeBuffer, 8));
+    writeImplicitField(
+        "requestPathSize",
+        requestPathSize,
+        writeSignedByte(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (classSegment)
     writeSimpleField(
@@ -320,7 +328,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (long) 0x000000,
-        writeUnsignedLong(writeBuffer, 24));
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (otRpi)
     writeSimpleField(
@@ -383,7 +395,14 @@
                 : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (connectionPaths)
-    writeComplexTypeArrayField("connectionPaths", connectionPaths, writeBuffer);
+    writeComplexTypeArrayField(
+        "connectionPaths",
+        connectionPaths,
+        writeBuffer,
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("CipConnectionManagerRequest");
   }
@@ -397,6 +416,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipConnectionManagerRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (requestPathSize)
     lengthInBits += 8;
@@ -465,13 +485,14 @@
     return lengthInBits;
   }
 
-  public static CipConnectionManagerRequestBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("CipConnectionManagerRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte requestPathSize =
         readImplicitField(
@@ -670,7 +691,7 @@
 
     readBuffer.closeContext("CipConnectionManagerRequest");
     // Create the instance
-    return new CipConnectionManagerRequestBuilder(
+    return new CipConnectionManagerRequestBuilderImpl(
         classSegment,
         instanceSegment,
         priority,
@@ -694,7 +715,8 @@
         reservedField0);
   }
 
-  public static class CipConnectionManagerRequestBuilder implements CipService.CipServiceBuilder {
+  public static class CipConnectionManagerRequestBuilderImpl
+      implements CipService.CipServiceBuilder {
     private final PathSegment classSegment;
     private final PathSegment instanceSegment;
     private final byte priority;
@@ -717,7 +739,7 @@
     private final IntegerEncoding order;
     private final Long reservedField0;
 
-    public CipConnectionManagerRequestBuilder(
+    public CipConnectionManagerRequestBuilderImpl(
         PathSegment classSegment,
         PathSegment instanceSegment,
         byte priority,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerResponse.java
index 1176d31..3333ab3 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipConnectionManagerResponse.java
@@ -119,6 +119,7 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipConnectionManagerResponse");
 
@@ -126,7 +127,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (long) 0x000000,
-        writeUnsignedLong(writeBuffer, 24));
+        writeUnsignedLong(writeBuffer, 24),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (otConnectionId)
     writeSimpleField(
@@ -201,13 +206,24 @@
     // Implicit Field (replySize) (Used for parsing, but its value is not stored as it's implicitly
     // given by the objects content)
     short replySize = (short) ((serviceLen) - (30));
-    writeImplicitField("replySize", replySize, writeUnsignedShort(writeBuffer, 8));
+    writeImplicitField(
+        "replySize",
+        replySize,
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Reserved Field (reserved)
     writeReservedField(
         "reserved",
         reservedField1 != null ? reservedField1 : (short) 0x00,
-        writeUnsignedShort(writeBuffer, 8));
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("CipConnectionManagerResponse");
   }
@@ -221,6 +237,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipConnectionManagerResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Reserved Field (reserved)
     lengthInBits += 24;
@@ -255,13 +272,14 @@
     return lengthInBits;
   }
 
-  public static CipConnectionManagerResponseBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("CipConnectionManagerResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     Long reservedField0 =
         readReservedField(
@@ -357,7 +375,7 @@
 
     readBuffer.closeContext("CipConnectionManagerResponse");
     // Create the instance
-    return new CipConnectionManagerResponseBuilder(
+    return new CipConnectionManagerResponseBuilderImpl(
         otConnectionId,
         toConnectionId,
         connectionSerialNumber,
@@ -371,7 +389,8 @@
         reservedField1);
   }
 
-  public static class CipConnectionManagerResponseBuilder implements CipService.CipServiceBuilder {
+  public static class CipConnectionManagerResponseBuilderImpl
+      implements CipService.CipServiceBuilder {
     private final long otConnectionId;
     private final long toConnectionId;
     private final int connectionSerialNumber;
@@ -384,7 +403,7 @@
     private final Long reservedField0;
     private final Short reservedField1;
 
-    public CipConnectionManagerResponseBuilder(
+    public CipConnectionManagerResponseBuilderImpl(
         long otConnectionId,
         long toConnectionId,
         int connectionSerialNumber,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipRRData.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipRRData.java
index dead54f..3065a5d 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipRRData.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipRRData.java
@@ -96,6 +96,7 @@
   @Override
   protected void serializeEipPacketChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipRRData");
 
@@ -130,7 +131,14 @@
                 : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (typeId)
-    writeComplexTypeArrayField("typeId", typeId, writeBuffer);
+    writeComplexTypeArrayField(
+        "typeId",
+        typeId,
+        writeBuffer,
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("CipRRData");
   }
@@ -144,6 +152,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipRRData _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (interfaceHandle)
     lengthInBits += 32;
@@ -158,7 +167,7 @@
     if (typeId != null) {
       int i = 0;
       for (TypeId element : typeId) {
-        boolean last = ++i >= typeId.size();
+        ThreadLocalHelper.lastItemThreadLocal.set(++i >= typeId.size());
         lengthInBits += element.getLengthInBits();
       }
     }
@@ -166,12 +175,13 @@
     return lengthInBits;
   }
 
-  public static CipRRDataBuilder staticParseBuilder(
+  public static EipPacketBuilder staticParseEipPacketBuilder(
       ReadBuffer readBuffer, IntegerEncoding order, Boolean response) throws ParseException {
     readBuffer.pullContext("CipRRData");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     long interfaceHandle =
         readSimpleField(
@@ -213,23 +223,22 @@
 
     readBuffer.closeContext("CipRRData");
     // Create the instance
-    return new CipRRDataBuilder(interfaceHandle, timeout, itemCount, typeId, order);
+    return new CipRRDataBuilderImpl(interfaceHandle, timeout, itemCount, typeId, order);
   }
 
-  public static class CipRRDataBuilder implements EipPacket.EipPacketBuilder {
+  public static class CipRRDataBuilderImpl implements EipPacket.EipPacketBuilder {
     private final long interfaceHandle;
     private final int timeout;
     private final int itemCount;
     private final List<TypeId> typeId;
     private final IntegerEncoding order;
 
-    public CipRRDataBuilder(
+    public CipRRDataBuilderImpl(
         long interfaceHandle,
         int timeout,
         int itemCount,
         List<TypeId> typeId,
         IntegerEncoding order) {
-
       this.interfaceHandle = interfaceHandle;
       this.timeout = timeout;
       this.itemCount = itemCount;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipReadRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipReadRequest.java
index 76685de..fc5ee21 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipReadRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipReadRequest.java
@@ -77,16 +77,31 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipReadRequest");
 
     // Implicit Field (requestPathSize) (Used for parsing, but its value is not stored as it's
     // implicitly given by the objects content)
     byte requestPathSize = (byte) ((COUNT(getTag())) / (2));
-    writeImplicitField("requestPathSize", requestPathSize, writeSignedByte(writeBuffer, 8));
+    writeImplicitField(
+        "requestPathSize",
+        requestPathSize,
+        writeSignedByte(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (tag)
-    writeByteArrayField("tag", tag, writeByteArray(writeBuffer, 8));
+    writeByteArrayField(
+        "tag",
+        tag,
+        writeByteArray(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (elementNb)
     writeSimpleField(
@@ -110,6 +125,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipReadRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (requestPathSize)
     lengthInBits += 8;
@@ -125,13 +141,14 @@
     return lengthInBits;
   }
 
-  public static CipReadRequestBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("CipReadRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte requestPathSize =
         readImplicitField(
@@ -162,18 +179,17 @@
 
     readBuffer.closeContext("CipReadRequest");
     // Create the instance
-    return new CipReadRequestBuilder(tag, elementNb, serviceLen, order);
+    return new CipReadRequestBuilderImpl(tag, elementNb, serviceLen, order);
   }
 
-  public static class CipReadRequestBuilder implements CipService.CipServiceBuilder {
+  public static class CipReadRequestBuilderImpl implements CipService.CipServiceBuilder {
     private final byte[] tag;
     private final int elementNb;
     private final Integer serviceLen;
     private final IntegerEncoding order;
 
-    public CipReadRequestBuilder(
+    public CipReadRequestBuilderImpl(
         byte[] tag, int elementNb, Integer serviceLen, IntegerEncoding order) {
-
       this.tag = tag;
       this.elementNb = elementNb;
       this.serviceLen = serviceLen;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipReadResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipReadResponse.java
index 2d1c571..034dce4 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipReadResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipReadResponse.java
@@ -86,6 +86,7 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipReadResponse");
 
@@ -93,7 +94,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (short) 0x00,
-        writeUnsignedShort(writeBuffer, 8));
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (status)
     writeSimpleField(
@@ -117,7 +122,14 @@
 
     // Optional Field (data) (Can be skipped, if the value is null)
     writeOptionalField(
-        "data", data, new DataWriterComplexDefault<>(writeBuffer), (((serviceLen) - (4))) > (0));
+        "data",
+        data,
+        new DataWriterComplexDefault<>(writeBuffer),
+        (((serviceLen) - (4))) > (0),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("CipReadResponse");
   }
@@ -131,6 +143,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipReadResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Reserved Field (reserved)
     lengthInBits += 8;
@@ -149,13 +162,14 @@
     return lengthInBits;
   }
 
-  public static CipReadResponseBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("CipReadResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     Short reservedField0 =
         readReservedField(
@@ -198,10 +212,11 @@
 
     readBuffer.closeContext("CipReadResponse");
     // Create the instance
-    return new CipReadResponseBuilder(status, extStatus, data, serviceLen, order, reservedField0);
+    return new CipReadResponseBuilderImpl(
+        status, extStatus, data, serviceLen, order, reservedField0);
   }
 
-  public static class CipReadResponseBuilder implements CipService.CipServiceBuilder {
+  public static class CipReadResponseBuilderImpl implements CipService.CipServiceBuilder {
     private final short status;
     private final short extStatus;
     private final CIPData data;
@@ -209,7 +224,7 @@
     private final IntegerEncoding order;
     private final Short reservedField0;
 
-    public CipReadResponseBuilder(
+    public CipReadResponseBuilderImpl(
         short status,
         short extStatus,
         CIPData data,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipService.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipService.java
index 3a11a8e..efac71b 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipService.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipService.java
@@ -59,14 +59,29 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipService");
 
     // Discriminator Field (response) (Used as input to a switch field)
-    writeDiscriminatorField("response", getResponse(), writeBoolean(writeBuffer));
+    writeDiscriminatorField(
+        "response",
+        getResponse(),
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Discriminator Field (service) (Used as input to a switch field)
-    writeDiscriminatorField("service", getService(), writeUnsignedShort(writeBuffer, 7));
+    writeDiscriminatorField(
+        "service",
+        getService(),
+        writeUnsignedShort(writeBuffer, 7),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Switch field (Serialize the sub-type)
     serializeCipServiceChild(writeBuffer);
@@ -83,6 +98,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     CipService _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Discriminator Field (response)
     lengthInBits += 1;
@@ -143,6 +159,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     boolean response =
         readDiscriminatorField(
@@ -166,59 +183,77 @@
     CipServiceBuilder builder = null;
     if (EvaluationHelper.equals(service, (short) 0x01)
         && EvaluationHelper.equals(response, (boolean) false)) {
-      builder = GetAttributeAllRequest.staticParseBuilder(readBuffer, connected, serviceLen, order);
+      builder =
+          GetAttributeAllRequest.staticParseCipServiceBuilder(
+              readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x01)
         && EvaluationHelper.equals(response, (boolean) true)) {
       builder =
-          GetAttributeAllResponse.staticParseBuilder(readBuffer, connected, serviceLen, order);
+          GetAttributeAllResponse.staticParseCipServiceBuilder(
+              readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x4C)
         && EvaluationHelper.equals(response, (boolean) false)) {
-      builder = CipReadRequest.staticParseBuilder(readBuffer, connected, serviceLen, order);
+      builder =
+          CipReadRequest.staticParseCipServiceBuilder(readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x4C)
         && EvaluationHelper.equals(response, (boolean) true)) {
-      builder = CipReadResponse.staticParseBuilder(readBuffer, connected, serviceLen, order);
+      builder =
+          CipReadResponse.staticParseCipServiceBuilder(readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x4D)
         && EvaluationHelper.equals(response, (boolean) false)) {
-      builder = CipWriteRequest.staticParseBuilder(readBuffer, connected, serviceLen, order);
+      builder =
+          CipWriteRequest.staticParseCipServiceBuilder(readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x4D)
         && EvaluationHelper.equals(response, (boolean) true)) {
-      builder = CipWriteResponse.staticParseBuilder(readBuffer, connected, serviceLen, order);
+      builder =
+          CipWriteResponse.staticParseCipServiceBuilder(readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x4E)
         && EvaluationHelper.equals(response, (boolean) false)) {
       builder =
-          CipConnectionManagerCloseRequest.staticParseBuilder(
+          CipConnectionManagerCloseRequest.staticParseCipServiceBuilder(
               readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x4E)
         && EvaluationHelper.equals(response, (boolean) true)) {
       builder =
-          CipConnectionManagerCloseResponse.staticParseBuilder(
+          CipConnectionManagerCloseResponse.staticParseCipServiceBuilder(
               readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x0A)
         && EvaluationHelper.equals(response, (boolean) false)) {
-      builder = MultipleServiceRequest.staticParseBuilder(readBuffer, connected, serviceLen, order);
+      builder =
+          MultipleServiceRequest.staticParseCipServiceBuilder(
+              readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x0A)
         && EvaluationHelper.equals(response, (boolean) true)) {
       builder =
-          MultipleServiceResponse.staticParseBuilder(readBuffer, connected, serviceLen, order);
+          MultipleServiceResponse.staticParseCipServiceBuilder(
+              readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x52)
         && EvaluationHelper.equals(response, (boolean) false)
         && EvaluationHelper.equals(connected, (boolean) false)) {
-      builder = CipUnconnectedRequest.staticParseBuilder(readBuffer, connected, serviceLen, order);
+      builder =
+          CipUnconnectedRequest.staticParseCipServiceBuilder(
+              readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x52)
         && EvaluationHelper.equals(response, (boolean) false)
         && EvaluationHelper.equals(connected, (boolean) true)) {
-      builder = CipConnectedRequest.staticParseBuilder(readBuffer, connected, serviceLen, order);
+      builder =
+          CipConnectedRequest.staticParseCipServiceBuilder(
+              readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x52)
         && EvaluationHelper.equals(response, (boolean) true)) {
-      builder = CipConnectedResponse.staticParseBuilder(readBuffer, connected, serviceLen, order);
+      builder =
+          CipConnectedResponse.staticParseCipServiceBuilder(
+              readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x5B)
         && EvaluationHelper.equals(response, (boolean) false)) {
       builder =
-          CipConnectionManagerRequest.staticParseBuilder(readBuffer, connected, serviceLen, order);
+          CipConnectionManagerRequest.staticParseCipServiceBuilder(
+              readBuffer, connected, serviceLen, order);
     } else if (EvaluationHelper.equals(service, (short) 0x5B)
         && EvaluationHelper.equals(response, (boolean) true)) {
       builder =
-          CipConnectionManagerResponse.staticParseBuilder(readBuffer, connected, serviceLen, order);
+          CipConnectionManagerResponse.staticParseCipServiceBuilder(
+              readBuffer, connected, serviceLen, order);
     }
     if (builder == null) {
       throw new ParseException(
@@ -242,7 +277,7 @@
     return _cipService;
   }
 
-  public static interface CipServiceBuilder {
+  public interface CipServiceBuilder {
     CipService build(Integer serviceLen, IntegerEncoding order);
   }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipUnconnectedRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipUnconnectedRequest.java
index d5c19a8..4a9644a 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipUnconnectedRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipUnconnectedRequest.java
@@ -111,6 +111,7 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipUnconnectedRequest");
 
@@ -120,7 +121,14 @@
         (byte)
             ((((getClassSegment().getLengthInBytes()) + (getInstanceSegment().getLengthInBytes())))
                 / (2));
-    writeImplicitField("requestPathSize", requestPathSize, writeSignedByte(writeBuffer, 8));
+    writeImplicitField(
+        "requestPathSize",
+        requestPathSize,
+        writeSignedByte(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (classSegment)
     writeSimpleField(
@@ -146,12 +154,23 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (int) 0x9D05,
-        writeUnsignedInt(writeBuffer, 16));
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Implicit Field (messageSize) (Used for parsing, but its value is not stored as it's
     // implicitly given by the objects content)
     int messageSize = (int) (((getLengthInBytes()) - (10)) - (4));
-    writeImplicitField("messageSize", messageSize, writeUnsignedInt(writeBuffer, 16));
+    writeImplicitField(
+        "messageSize",
+        messageSize,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (unconnectedService)
     writeSimpleField(
@@ -164,7 +183,14 @@
                 : ByteOrder.LITTLE_ENDIAN)));
 
     // Const Field (route)
-    writeConstField("route", ROUTE, writeUnsignedInt(writeBuffer, 16));
+    writeConstField(
+        "route",
+        ROUTE,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (backPlane)
     writeSimpleField(
@@ -198,6 +224,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipUnconnectedRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (requestPathSize)
     lengthInBits += 8;
@@ -229,13 +256,14 @@
     return lengthInBits;
   }
 
-  public static CipUnconnectedRequestBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("CipUnconnectedRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte requestPathSize =
         readImplicitField(
@@ -331,7 +359,7 @@
 
     readBuffer.closeContext("CipUnconnectedRequest");
     // Create the instance
-    return new CipUnconnectedRequestBuilder(
+    return new CipUnconnectedRequestBuilderImpl(
         classSegment,
         instanceSegment,
         unconnectedService,
@@ -342,7 +370,7 @@
         reservedField0);
   }
 
-  public static class CipUnconnectedRequestBuilder implements CipService.CipServiceBuilder {
+  public static class CipUnconnectedRequestBuilderImpl implements CipService.CipServiceBuilder {
     private final PathSegment classSegment;
     private final PathSegment instanceSegment;
     private final CipService unconnectedService;
@@ -352,7 +380,7 @@
     private final IntegerEncoding order;
     private final Integer reservedField0;
 
-    public CipUnconnectedRequestBuilder(
+    public CipUnconnectedRequestBuilderImpl(
         PathSegment classSegment,
         PathSegment instanceSegment,
         CipService unconnectedService,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipWriteRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipWriteRequest.java
index 5147b0d..feffd73 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipWriteRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipWriteRequest.java
@@ -95,16 +95,31 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipWriteRequest");
 
     // Implicit Field (requestPathSize) (Used for parsing, but its value is not stored as it's
     // implicitly given by the objects content)
     byte requestPathSize = (byte) ((COUNT(getTag())) / (2));
-    writeImplicitField("requestPathSize", requestPathSize, writeSignedByte(writeBuffer, 8));
+    writeImplicitField(
+        "requestPathSize",
+        requestPathSize,
+        writeSignedByte(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (tag)
-    writeByteArrayField("tag", tag, writeByteArray(writeBuffer, 8));
+    writeByteArrayField(
+        "tag",
+        tag,
+        writeByteArray(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (dataType)
     writeSimpleEnumField(
@@ -112,7 +127,11 @@
         "CIPDataTypeCode",
         dataType,
         new DataWriterEnumDefault<>(
-            CIPDataTypeCode::getValue, CIPDataTypeCode::name, writeUnsignedInt(writeBuffer, 16)));
+            CIPDataTypeCode::getValue, CIPDataTypeCode::name, writeUnsignedInt(writeBuffer, 16)),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (elementNb)
     writeSimpleField(
@@ -125,7 +144,14 @@
                 : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (data)
-    writeByteArrayField("data", data, writeByteArray(writeBuffer, 8));
+    writeByteArrayField(
+        "data",
+        data,
+        writeByteArray(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("CipWriteRequest");
   }
@@ -139,6 +165,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipWriteRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (requestPathSize)
     lengthInBits += 8;
@@ -162,13 +189,14 @@
     return lengthInBits;
   }
 
-  public static CipWriteRequestBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("CipWriteRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte requestPathSize =
         readImplicitField(
@@ -219,10 +247,10 @@
 
     readBuffer.closeContext("CipWriteRequest");
     // Create the instance
-    return new CipWriteRequestBuilder(tag, dataType, elementNb, data, serviceLen, order);
+    return new CipWriteRequestBuilderImpl(tag, dataType, elementNb, data, serviceLen, order);
   }
 
-  public static class CipWriteRequestBuilder implements CipService.CipServiceBuilder {
+  public static class CipWriteRequestBuilderImpl implements CipService.CipServiceBuilder {
     private final byte[] tag;
     private final CIPDataTypeCode dataType;
     private final int elementNb;
@@ -230,14 +258,13 @@
     private final Integer serviceLen;
     private final IntegerEncoding order;
 
-    public CipWriteRequestBuilder(
+    public CipWriteRequestBuilderImpl(
         byte[] tag,
         CIPDataTypeCode dataType,
         int elementNb,
         byte[] data,
         Integer serviceLen,
         IntegerEncoding order) {
-
       this.tag = tag;
       this.dataType = dataType;
       this.elementNb = elementNb;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipWriteResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipWriteResponse.java
index 42ce2c3..668ec37 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipWriteResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/CipWriteResponse.java
@@ -80,6 +80,7 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("CipWriteResponse");
 
@@ -87,7 +88,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (short) 0x00,
-        writeUnsignedShort(writeBuffer, 8));
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (status)
     writeSimpleField(
@@ -121,6 +126,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     CipWriteResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Reserved Field (reserved)
     lengthInBits += 8;
@@ -134,13 +140,14 @@
     return lengthInBits;
   }
 
-  public static CipWriteResponseBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("CipWriteResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     Short reservedField0 =
         readReservedField(
@@ -172,17 +179,17 @@
 
     readBuffer.closeContext("CipWriteResponse");
     // Create the instance
-    return new CipWriteResponseBuilder(status, extStatus, serviceLen, order, reservedField0);
+    return new CipWriteResponseBuilderImpl(status, extStatus, serviceLen, order, reservedField0);
   }
 
-  public static class CipWriteResponseBuilder implements CipService.CipServiceBuilder {
+  public static class CipWriteResponseBuilderImpl implements CipService.CipServiceBuilder {
     private final short status;
     private final short extStatus;
     private final Integer serviceLen;
     private final IntegerEncoding order;
     private final Short reservedField0;
 
-    public CipWriteResponseBuilder(
+    public CipWriteResponseBuilderImpl(
         short status,
         short extStatus,
         Integer serviceLen,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ClassID.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ClassID.java
index dd6af19..5986560 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ClassID.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ClassID.java
@@ -68,6 +68,7 @@
   protected void serializeLogicalSegmentTypeChild(WriteBuffer writeBuffer)
       throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("ClassID");
 
@@ -103,6 +104,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     ClassID _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (format)
     lengthInBits += 2;
@@ -113,12 +115,13 @@
     return lengthInBits;
   }
 
-  public static ClassIDBuilder staticParseBuilder(ReadBuffer readBuffer, IntegerEncoding order)
-      throws ParseException {
+  public static LogicalSegmentTypeBuilder staticParseLogicalSegmentTypeBuilder(
+      ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
     readBuffer.pullContext("ClassID");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte format =
         readSimpleField(
@@ -140,16 +143,15 @@
 
     readBuffer.closeContext("ClassID");
     // Create the instance
-    return new ClassIDBuilder(format, segmentClass, order);
+    return new ClassIDBuilderImpl(format, segmentClass, order);
   }
 
-  public static class ClassIDBuilder implements LogicalSegmentType.LogicalSegmentTypeBuilder {
+  public static class ClassIDBuilderImpl implements LogicalSegmentType.LogicalSegmentTypeBuilder {
     private final byte format;
     private final short segmentClass;
     private final IntegerEncoding order;
 
-    public ClassIDBuilder(byte format, short segmentClass, IntegerEncoding order) {
-
+    public ClassIDBuilderImpl(byte format, short segmentClass, IntegerEncoding order) {
       this.format = format;
       this.segmentClass = segmentClass;
       this.order = order;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ClassSegment.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ClassSegment.java
index c3eb305..78418b0 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ClassSegment.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ClassSegment.java
@@ -78,6 +78,7 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("ClassSegment");
 
@@ -133,6 +134,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     ClassSegment _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (pathSegmentType)
     lengthInBits += 3;
@@ -176,6 +178,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte pathSegmentType =
         readSimpleField(
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ConnectedAddressItem.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ConnectedAddressItem.java
index 4113632..d791268 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ConnectedAddressItem.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ConnectedAddressItem.java
@@ -63,6 +63,7 @@
   @Override
   protected void serializeTypeIdChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("ConnectedAddressItem");
 
@@ -70,7 +71,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (int) 0x0004,
-        writeUnsignedInt(writeBuffer, 16));
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (connectionId)
     writeSimpleField(
@@ -94,6 +99,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     ConnectedAddressItem _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Reserved Field (reserved)
     lengthInBits += 16;
@@ -104,12 +110,13 @@
     return lengthInBits;
   }
 
-  public static ConnectedAddressItemBuilder staticParseBuilder(
-      ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
+  public static TypeIdBuilder staticParseTypeIdBuilder(ReadBuffer readBuffer, IntegerEncoding order)
+      throws ParseException {
     readBuffer.pullContext("ConnectedAddressItem");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     Integer reservedField0 =
         readReservedField(
@@ -132,15 +139,15 @@
 
     readBuffer.closeContext("ConnectedAddressItem");
     // Create the instance
-    return new ConnectedAddressItemBuilder(connectionId, order, reservedField0);
+    return new ConnectedAddressItemBuilderImpl(connectionId, order, reservedField0);
   }
 
-  public static class ConnectedAddressItemBuilder implements TypeId.TypeIdBuilder {
+  public static class ConnectedAddressItemBuilderImpl implements TypeId.TypeIdBuilder {
     private final long connectionId;
     private final IntegerEncoding order;
     private final Integer reservedField0;
 
-    public ConnectedAddressItemBuilder(
+    public ConnectedAddressItemBuilderImpl(
         long connectionId, IntegerEncoding order, Integer reservedField0) {
       this.connectionId = connectionId;
       this.order = order;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ConnectedDataItem.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ConnectedDataItem.java
index bd614e0..b08f85a 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ConnectedDataItem.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ConnectedDataItem.java
@@ -67,13 +67,21 @@
   @Override
   protected void serializeTypeIdChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("ConnectedDataItem");
 
     // Implicit Field (packetSize) (Used for parsing, but its value is not stored as it's implicitly
     // given by the objects content)
     int packetSize = (int) ((getService().getLengthInBytes()) + (2));
-    writeImplicitField("packetSize", packetSize, writeUnsignedInt(writeBuffer, 16));
+    writeImplicitField(
+        "packetSize",
+        packetSize,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (sequenceCount)
     writeSimpleField(
@@ -107,6 +115,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     ConnectedDataItem _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (packetSize)
     lengthInBits += 16;
@@ -120,12 +129,13 @@
     return lengthInBits;
   }
 
-  public static ConnectedDataItemBuilder staticParseBuilder(
-      ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
+  public static TypeIdBuilder staticParseTypeIdBuilder(ReadBuffer readBuffer, IntegerEncoding order)
+      throws ParseException {
     readBuffer.pullContext("ConnectedDataItem");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     int packetSize =
         readImplicitField(
@@ -163,16 +173,16 @@
 
     readBuffer.closeContext("ConnectedDataItem");
     // Create the instance
-    return new ConnectedDataItemBuilder(sequenceCount, service, order);
+    return new ConnectedDataItemBuilderImpl(sequenceCount, service, order);
   }
 
-  public static class ConnectedDataItemBuilder implements TypeId.TypeIdBuilder {
+  public static class ConnectedDataItemBuilderImpl implements TypeId.TypeIdBuilder {
     private final int sequenceCount;
     private final CipService service;
     private final IntegerEncoding order;
 
-    public ConnectedDataItemBuilder(int sequenceCount, CipService service, IntegerEncoding order) {
-
+    public ConnectedDataItemBuilderImpl(
+        int sequenceCount, CipService service, IntegerEncoding order) {
       this.sequenceCount = sequenceCount;
       this.service = service;
       this.order = order;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/DataSegment.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/DataSegment.java
index b4ba5fe..5394cfc 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/DataSegment.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/DataSegment.java
@@ -61,6 +61,7 @@
   @Override
   protected void serializePathSegmentChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("DataSegment");
 
@@ -86,6 +87,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     DataSegment _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (segmentType)
     lengthInBits += segmentType.getLengthInBits();
@@ -93,12 +95,13 @@
     return lengthInBits;
   }
 
-  public static DataSegmentBuilder staticParseBuilder(ReadBuffer readBuffer, IntegerEncoding order)
-      throws ParseException {
+  public static PathSegmentBuilder staticParsePathSegmentBuilder(
+      ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
     readBuffer.pullContext("DataSegment");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     DataSegmentType segmentType =
         readSimpleField(
@@ -113,15 +116,14 @@
 
     readBuffer.closeContext("DataSegment");
     // Create the instance
-    return new DataSegmentBuilder(segmentType, order);
+    return new DataSegmentBuilderImpl(segmentType, order);
   }
 
-  public static class DataSegmentBuilder implements PathSegment.PathSegmentBuilder {
+  public static class DataSegmentBuilderImpl implements PathSegment.PathSegmentBuilder {
     private final DataSegmentType segmentType;
     private final IntegerEncoding order;
 
-    public DataSegmentBuilder(DataSegmentType segmentType, IntegerEncoding order) {
-
+    public DataSegmentBuilderImpl(DataSegmentType segmentType, IntegerEncoding order) {
       this.segmentType = segmentType;
       this.order = order;
     }
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/DataSegmentType.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/DataSegmentType.java
index e55c08f..23880e2 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/DataSegmentType.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/DataSegmentType.java
@@ -53,12 +53,19 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("DataSegmentType");
 
     // Discriminator Field (dataSegmentType) (Used as input to a switch field)
     writeDiscriminatorField(
-        "dataSegmentType", getDataSegmentType(), writeUnsignedShort(writeBuffer, 5));
+        "dataSegmentType",
+        getDataSegmentType(),
+        writeUnsignedShort(writeBuffer, 5),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Switch field (Serialize the sub-type)
     serializeDataSegmentTypeChild(writeBuffer);
@@ -75,6 +82,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     DataSegmentType _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Discriminator Field (dataSegmentType)
     lengthInBits += 5;
@@ -111,6 +119,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     short dataSegmentType =
         readDiscriminatorField(
@@ -124,7 +133,7 @@
     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
     DataSegmentTypeBuilder builder = null;
     if (EvaluationHelper.equals(dataSegmentType, (short) 0x11)) {
-      builder = AnsiExtendedSymbolSegment.staticParseBuilder(readBuffer, order);
+      builder = AnsiExtendedSymbolSegment.staticParseDataSegmentTypeBuilder(readBuffer, order);
     }
     if (builder == null) {
       throw new ParseException(
@@ -142,7 +151,7 @@
     return _dataSegmentType;
   }
 
-  public static interface DataSegmentTypeBuilder {
+  public interface DataSegmentTypeBuilder {
     DataSegmentType build(IntegerEncoding order);
   }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipConnectionRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipConnectionRequest.java
index d14ad55..011e890 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipConnectionRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipConnectionRequest.java
@@ -74,14 +74,29 @@
   @Override
   protected void serializeEipPacketChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("EipConnectionRequest");
 
     // Const Field (protocolVersion)
-    writeConstField("protocolVersion", PROTOCOLVERSION, writeUnsignedInt(writeBuffer, 16));
+    writeConstField(
+        "protocolVersion",
+        PROTOCOLVERSION,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Const Field (flags)
-    writeConstField("flags", FLAGS, writeUnsignedInt(writeBuffer, 16));
+    writeConstField(
+        "flags",
+        FLAGS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("EipConnectionRequest");
   }
@@ -95,6 +110,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     EipConnectionRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Const Field (protocolVersion)
     lengthInBits += 16;
@@ -105,12 +121,13 @@
     return lengthInBits;
   }
 
-  public static EipConnectionRequestBuilder staticParseBuilder(
+  public static EipPacketBuilder staticParseEipPacketBuilder(
       ReadBuffer readBuffer, IntegerEncoding order, Boolean response) throws ParseException {
     readBuffer.pullContext("EipConnectionRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     int protocolVersion =
         readConstField(
@@ -134,14 +151,13 @@
 
     readBuffer.closeContext("EipConnectionRequest");
     // Create the instance
-    return new EipConnectionRequestBuilder(order);
+    return new EipConnectionRequestBuilderImpl(order);
   }
 
-  public static class EipConnectionRequestBuilder implements EipPacket.EipPacketBuilder {
+  public static class EipConnectionRequestBuilderImpl implements EipPacket.EipPacketBuilder {
     private final IntegerEncoding order;
 
-    public EipConnectionRequestBuilder(IntegerEncoding order) {
-
+    public EipConnectionRequestBuilderImpl(IntegerEncoding order) {
       this.order = order;
     }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipConnectionResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipConnectionResponse.java
index c1869b1..db7e175 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipConnectionResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipConnectionResponse.java
@@ -74,14 +74,29 @@
   @Override
   protected void serializeEipPacketChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("EipConnectionResponse");
 
     // Const Field (protocolVersion)
-    writeConstField("protocolVersion", PROTOCOLVERSION, writeUnsignedInt(writeBuffer, 16));
+    writeConstField(
+        "protocolVersion",
+        PROTOCOLVERSION,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Const Field (flags)
-    writeConstField("flags", FLAGS, writeUnsignedInt(writeBuffer, 16));
+    writeConstField(
+        "flags",
+        FLAGS,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("EipConnectionResponse");
   }
@@ -95,6 +110,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     EipConnectionResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Const Field (protocolVersion)
     lengthInBits += 16;
@@ -105,12 +121,13 @@
     return lengthInBits;
   }
 
-  public static EipConnectionResponseBuilder staticParseBuilder(
+  public static EipPacketBuilder staticParseEipPacketBuilder(
       ReadBuffer readBuffer, IntegerEncoding order, Boolean response) throws ParseException {
     readBuffer.pullContext("EipConnectionResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     int protocolVersion =
         readConstField(
@@ -134,14 +151,13 @@
 
     readBuffer.closeContext("EipConnectionResponse");
     // Create the instance
-    return new EipConnectionResponseBuilder(order);
+    return new EipConnectionResponseBuilderImpl(order);
   }
 
-  public static class EipConnectionResponseBuilder implements EipPacket.EipPacketBuilder {
+  public static class EipConnectionResponseBuilderImpl implements EipPacket.EipPacketBuilder {
     private final IntegerEncoding order;
 
-    public EipConnectionResponseBuilder(IntegerEncoding order) {
-
+    public EipConnectionResponseBuilderImpl(IntegerEncoding order) {
       this.order = order;
     }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipDisconnectRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipDisconnectRequest.java
index 5afc98f..68a588f 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipDisconnectRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipDisconnectRequest.java
@@ -62,6 +62,7 @@
   @Override
   protected void serializeEipPacketChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("EipDisconnectRequest");
 
@@ -77,27 +78,28 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     EipDisconnectRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     return lengthInBits;
   }
 
-  public static EipDisconnectRequestBuilder staticParseBuilder(
+  public static EipPacketBuilder staticParseEipPacketBuilder(
       ReadBuffer readBuffer, IntegerEncoding order, Boolean response) throws ParseException {
     readBuffer.pullContext("EipDisconnectRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     readBuffer.closeContext("EipDisconnectRequest");
     // Create the instance
-    return new EipDisconnectRequestBuilder(order);
+    return new EipDisconnectRequestBuilderImpl(order);
   }
 
-  public static class EipDisconnectRequestBuilder implements EipPacket.EipPacketBuilder {
+  public static class EipDisconnectRequestBuilderImpl implements EipPacket.EipPacketBuilder {
     private final IntegerEncoding order;
 
-    public EipDisconnectRequestBuilder(IntegerEncoding order) {
-
+    public EipDisconnectRequestBuilderImpl(IntegerEncoding order) {
       this.order = order;
     }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipPacket.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipPacket.java
index fad6c02..5900858 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipPacket.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/EipPacket.java
@@ -84,16 +84,31 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("EipPacket");
 
     // Discriminator Field (command) (Used as input to a switch field)
-    writeDiscriminatorField("command", getCommand(), writeUnsignedInt(writeBuffer, 16));
+    writeDiscriminatorField(
+        "command",
+        getCommand(),
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Implicit Field (packetLength) (Used for parsing, but its value is not stored as it's
     // implicitly given by the objects content)
     int packetLength = (int) ((getLengthInBytes()) - (24));
-    writeImplicitField("packetLength", packetLength, writeUnsignedInt(writeBuffer, 16));
+    writeImplicitField(
+        "packetLength",
+        packetLength,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (sessionHandle)
     writeSimpleField(
@@ -116,7 +131,14 @@
                 : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (senderContext)
-    writeByteArrayField("senderContext", senderContext, writeByteArray(writeBuffer, 8));
+    writeByteArrayField(
+        "senderContext",
+        senderContext,
+        writeByteArray(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (options)
     writeSimpleField(
@@ -143,6 +165,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     EipPacket _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Discriminator Field (command)
     lengthInBits += 16;
@@ -205,6 +228,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     int command =
         readDiscriminatorField(
@@ -264,36 +288,36 @@
     EipPacketBuilder builder = null;
     if (EvaluationHelper.equals(command, (int) 0x0001)
         && EvaluationHelper.equals(response, (boolean) false)) {
-      builder = NullCommandRequest.staticParseBuilder(readBuffer, order, response);
+      builder = NullCommandRequest.staticParseEipPacketBuilder(readBuffer, order, response);
     } else if (EvaluationHelper.equals(command, (int) 0x0001)
         && EvaluationHelper.equals(response, (boolean) true)) {
-      builder = NullCommandResponse.staticParseBuilder(readBuffer, order, response);
+      builder = NullCommandResponse.staticParseEipPacketBuilder(readBuffer, order, response);
     } else if (EvaluationHelper.equals(command, (int) 0x0004)
         && EvaluationHelper.equals(response, (boolean) false)) {
-      builder = ListServicesRequest.staticParseBuilder(readBuffer, order, response);
+      builder = ListServicesRequest.staticParseEipPacketBuilder(readBuffer, order, response);
     } else if (EvaluationHelper.equals(command, (int) 0x0004)
         && EvaluationHelper.equals(response, (boolean) true)
         && EvaluationHelper.equals(packetLength, (int) 0)) {
-      builder = NullListServicesResponse.staticParseBuilder(readBuffer, order, response);
+      builder = NullListServicesResponse.staticParseEipPacketBuilder(readBuffer, order, response);
     } else if (EvaluationHelper.equals(command, (int) 0x0004)
         && EvaluationHelper.equals(response, (boolean) true)) {
-      builder = ListServicesResponse.staticParseBuilder(readBuffer, order, response);
+      builder = ListServicesResponse.staticParseEipPacketBuilder(readBuffer, order, response);
     } else if (EvaluationHelper.equals(command, (int) 0x0065)
         && EvaluationHelper.equals(response, (boolean) false)) {
-      builder = EipConnectionRequest.staticParseBuilder(readBuffer, order, response);
+      builder = EipConnectionRequest.staticParseEipPacketBuilder(readBuffer, order, response);
     } else if (EvaluationHelper.equals(command, (int) 0x0065)
         && EvaluationHelper.equals(response, (boolean) true)
         && EvaluationHelper.equals(packetLength, (int) 0)) {
-      builder = NullEipConnectionResponse.staticParseBuilder(readBuffer, order, response);
+      builder = NullEipConnectionResponse.staticParseEipPacketBuilder(readBuffer, order, response);
     } else if (EvaluationHelper.equals(command, (int) 0x0065)
         && EvaluationHelper.equals(response, (boolean) true)) {
-      builder = EipConnectionResponse.staticParseBuilder(readBuffer, order, response);
+      builder = EipConnectionResponse.staticParseEipPacketBuilder(readBuffer, order, response);
     } else if (EvaluationHelper.equals(command, (int) 0x0066)) {
-      builder = EipDisconnectRequest.staticParseBuilder(readBuffer, order, response);
+      builder = EipDisconnectRequest.staticParseEipPacketBuilder(readBuffer, order, response);
     } else if (EvaluationHelper.equals(command, (int) 0x006F)) {
-      builder = CipRRData.staticParseBuilder(readBuffer, order, response);
+      builder = CipRRData.staticParseEipPacketBuilder(readBuffer, order, response);
     } else if (EvaluationHelper.equals(command, (int) 0x0070)) {
-      builder = SendUnitData.staticParseBuilder(readBuffer, order, response);
+      builder = SendUnitData.staticParseEipPacketBuilder(readBuffer, order, response);
     }
     if (builder == null) {
       throw new ParseException(
@@ -316,7 +340,7 @@
     return _eipPacket;
   }
 
-  public static interface EipPacketBuilder {
+  public interface EipPacketBuilder {
     EipPacket build(
         long sessionHandle, long status, byte[] senderContext, long options, IntegerEncoding order);
   }
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/GetAttributeAllRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/GetAttributeAllRequest.java
index 5c0e6cc..4a614d1 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/GetAttributeAllRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/GetAttributeAllRequest.java
@@ -81,6 +81,7 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("GetAttributeAllRequest");
 
@@ -90,7 +91,14 @@
         (byte)
             ((((getClassSegment().getLengthInBytes()) + (getInstanceSegment().getLengthInBytes())))
                 / (2));
-    writeImplicitField("requestPathSize", requestPathSize, writeSignedByte(writeBuffer, 8));
+    writeImplicitField(
+        "requestPathSize",
+        requestPathSize,
+        writeSignedByte(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (classSegment)
     writeSimpleField(
@@ -124,6 +132,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     GetAttributeAllRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (requestPathSize)
     lengthInBits += 8;
@@ -137,13 +146,14 @@
     return lengthInBits;
   }
 
-  public static GetAttributeAllRequestBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("GetAttributeAllRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte requestPathSize =
         readImplicitField(
@@ -176,21 +186,20 @@
 
     readBuffer.closeContext("GetAttributeAllRequest");
     // Create the instance
-    return new GetAttributeAllRequestBuilder(classSegment, instanceSegment, serviceLen, order);
+    return new GetAttributeAllRequestBuilderImpl(classSegment, instanceSegment, serviceLen, order);
   }
 
-  public static class GetAttributeAllRequestBuilder implements CipService.CipServiceBuilder {
+  public static class GetAttributeAllRequestBuilderImpl implements CipService.CipServiceBuilder {
     private final PathSegment classSegment;
     private final PathSegment instanceSegment;
     private final Integer serviceLen;
     private final IntegerEncoding order;
 
-    public GetAttributeAllRequestBuilder(
+    public GetAttributeAllRequestBuilderImpl(
         PathSegment classSegment,
         PathSegment instanceSegment,
         Integer serviceLen,
         IntegerEncoding order) {
-
       this.classSegment = classSegment;
       this.instanceSegment = instanceSegment;
       this.serviceLen = serviceLen;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/GetAttributeAllResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/GetAttributeAllResponse.java
index 4d354dc..a0d17b9 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/GetAttributeAllResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/GetAttributeAllResponse.java
@@ -90,6 +90,7 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("GetAttributeAllResponse");
 
@@ -97,7 +98,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (short) 0x00,
-        writeUnsignedShort(writeBuffer, 8));
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (status)
     writeSimpleField(
@@ -124,7 +129,11 @@
         "attributes",
         attributes,
         new DataWriterComplexDefault<>(writeBuffer),
-        (((serviceLen) - (4))) > (0));
+        (((serviceLen) - (4))) > (0),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("GetAttributeAllResponse");
   }
@@ -138,6 +147,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     GetAttributeAllResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Reserved Field (reserved)
     lengthInBits += 8;
@@ -156,13 +166,14 @@
     return lengthInBits;
   }
 
-  public static GetAttributeAllResponseBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("GetAttributeAllResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     Short reservedField0 =
         readReservedField(
@@ -206,11 +217,11 @@
 
     readBuffer.closeContext("GetAttributeAllResponse");
     // Create the instance
-    return new GetAttributeAllResponseBuilder(
+    return new GetAttributeAllResponseBuilderImpl(
         status, extStatus, attributes, serviceLen, order, reservedField0);
   }
 
-  public static class GetAttributeAllResponseBuilder implements CipService.CipServiceBuilder {
+  public static class GetAttributeAllResponseBuilderImpl implements CipService.CipServiceBuilder {
     private final short status;
     private final short extStatus;
     private final CIPAttributes attributes;
@@ -218,7 +229,7 @@
     private final IntegerEncoding order;
     private final Short reservedField0;
 
-    public GetAttributeAllResponseBuilder(
+    public GetAttributeAllResponseBuilderImpl(
         short status,
         short extStatus,
         CIPAttributes attributes,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/InstanceID.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/InstanceID.java
index 50285ae..42eff95 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/InstanceID.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/InstanceID.java
@@ -68,6 +68,7 @@
   protected void serializeLogicalSegmentTypeChild(WriteBuffer writeBuffer)
       throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("InstanceID");
 
@@ -103,6 +104,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     InstanceID _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (format)
     lengthInBits += 2;
@@ -113,12 +115,13 @@
     return lengthInBits;
   }
 
-  public static InstanceIDBuilder staticParseBuilder(ReadBuffer readBuffer, IntegerEncoding order)
-      throws ParseException {
+  public static LogicalSegmentTypeBuilder staticParseLogicalSegmentTypeBuilder(
+      ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
     readBuffer.pullContext("InstanceID");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte format =
         readSimpleField(
@@ -140,16 +143,16 @@
 
     readBuffer.closeContext("InstanceID");
     // Create the instance
-    return new InstanceIDBuilder(format, instance, order);
+    return new InstanceIDBuilderImpl(format, instance, order);
   }
 
-  public static class InstanceIDBuilder implements LogicalSegmentType.LogicalSegmentTypeBuilder {
+  public static class InstanceIDBuilderImpl
+      implements LogicalSegmentType.LogicalSegmentTypeBuilder {
     private final byte format;
     private final short instance;
     private final IntegerEncoding order;
 
-    public InstanceIDBuilder(byte format, short instance, IntegerEncoding order) {
-
+    public InstanceIDBuilderImpl(byte format, short instance, IntegerEncoding order) {
       this.format = format;
       this.instance = instance;
       this.order = order;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/InstanceSegment.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/InstanceSegment.java
index f1283d7..47f322b 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/InstanceSegment.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/InstanceSegment.java
@@ -78,6 +78,7 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("InstanceSegment");
 
@@ -133,6 +134,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     InstanceSegment _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (pathSegmentType)
     lengthInBits += 3;
@@ -176,6 +178,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte pathSegmentType =
         readSimpleField(
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ListServicesRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ListServicesRequest.java
index 867dc7e..731e3d0 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ListServicesRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ListServicesRequest.java
@@ -62,6 +62,7 @@
   @Override
   protected void serializeEipPacketChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("ListServicesRequest");
 
@@ -77,27 +78,28 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     ListServicesRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     return lengthInBits;
   }
 
-  public static ListServicesRequestBuilder staticParseBuilder(
+  public static EipPacketBuilder staticParseEipPacketBuilder(
       ReadBuffer readBuffer, IntegerEncoding order, Boolean response) throws ParseException {
     readBuffer.pullContext("ListServicesRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     readBuffer.closeContext("ListServicesRequest");
     // Create the instance
-    return new ListServicesRequestBuilder(order);
+    return new ListServicesRequestBuilderImpl(order);
   }
 
-  public static class ListServicesRequestBuilder implements EipPacket.EipPacketBuilder {
+  public static class ListServicesRequestBuilderImpl implements EipPacket.EipPacketBuilder {
     private final IntegerEncoding order;
 
-    public ListServicesRequestBuilder(IntegerEncoding order) {
-
+    public ListServicesRequestBuilderImpl(IntegerEncoding order) {
       this.order = order;
     }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ListServicesResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ListServicesResponse.java
index a9791bb..09d6c9e 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ListServicesResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ListServicesResponse.java
@@ -82,6 +82,7 @@
   @Override
   protected void serializeEipPacketChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("ListServicesResponse");
 
@@ -96,7 +97,14 @@
                 : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (typeId)
-    writeComplexTypeArrayField("typeId", typeId, writeBuffer);
+    writeComplexTypeArrayField(
+        "typeId",
+        typeId,
+        writeBuffer,
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("ListServicesResponse");
   }
@@ -110,6 +118,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     ListServicesResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (itemCount)
     lengthInBits += 16;
@@ -118,7 +127,7 @@
     if (typeId != null) {
       int i = 0;
       for (TypeId element : typeId) {
-        boolean last = ++i >= typeId.size();
+        ThreadLocalHelper.lastItemThreadLocal.set(++i >= typeId.size());
         lengthInBits += element.getLengthInBits();
       }
     }
@@ -126,12 +135,13 @@
     return lengthInBits;
   }
 
-  public static ListServicesResponseBuilder staticParseBuilder(
+  public static EipPacketBuilder staticParseEipPacketBuilder(
       ReadBuffer readBuffer, IntegerEncoding order, Boolean response) throws ParseException {
     readBuffer.pullContext("ListServicesResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     int itemCount =
         readSimpleField(
@@ -155,16 +165,16 @@
 
     readBuffer.closeContext("ListServicesResponse");
     // Create the instance
-    return new ListServicesResponseBuilder(itemCount, typeId, order);
+    return new ListServicesResponseBuilderImpl(itemCount, typeId, order);
   }
 
-  public static class ListServicesResponseBuilder implements EipPacket.EipPacketBuilder {
+  public static class ListServicesResponseBuilderImpl implements EipPacket.EipPacketBuilder {
     private final int itemCount;
     private final List<TypeId> typeId;
     private final IntegerEncoding order;
 
-    public ListServicesResponseBuilder(int itemCount, List<TypeId> typeId, IntegerEncoding order) {
-
+    public ListServicesResponseBuilderImpl(
+        int itemCount, List<TypeId> typeId, IntegerEncoding order) {
       this.itemCount = itemCount;
       this.typeId = typeId;
       this.order = order;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/LogicalSegment.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/LogicalSegment.java
index eced012..ba2c6ea 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/LogicalSegment.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/LogicalSegment.java
@@ -61,6 +61,7 @@
   @Override
   protected void serializePathSegmentChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("LogicalSegment");
 
@@ -86,6 +87,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     LogicalSegment _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (segmentType)
     lengthInBits += segmentType.getLengthInBits();
@@ -93,12 +95,13 @@
     return lengthInBits;
   }
 
-  public static LogicalSegmentBuilder staticParseBuilder(
+  public static PathSegmentBuilder staticParsePathSegmentBuilder(
       ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
     readBuffer.pullContext("LogicalSegment");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     LogicalSegmentType segmentType =
         readSimpleField(
@@ -113,15 +116,14 @@
 
     readBuffer.closeContext("LogicalSegment");
     // Create the instance
-    return new LogicalSegmentBuilder(segmentType, order);
+    return new LogicalSegmentBuilderImpl(segmentType, order);
   }
 
-  public static class LogicalSegmentBuilder implements PathSegment.PathSegmentBuilder {
+  public static class LogicalSegmentBuilderImpl implements PathSegment.PathSegmentBuilder {
     private final LogicalSegmentType segmentType;
     private final IntegerEncoding order;
 
-    public LogicalSegmentBuilder(LogicalSegmentType segmentType, IntegerEncoding order) {
-
+    public LogicalSegmentBuilderImpl(LogicalSegmentType segmentType, IntegerEncoding order) {
       this.segmentType = segmentType;
       this.order = order;
     }
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/LogicalSegmentType.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/LogicalSegmentType.java
index 0a48414..164b621 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/LogicalSegmentType.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/LogicalSegmentType.java
@@ -53,12 +53,19 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("LogicalSegmentType");
 
     // Discriminator Field (logicalSegmentType) (Used as input to a switch field)
     writeDiscriminatorField(
-        "logicalSegmentType", getLogicalSegmentType(), writeUnsignedByte(writeBuffer, 3));
+        "logicalSegmentType",
+        getLogicalSegmentType(),
+        writeUnsignedByte(writeBuffer, 3),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Switch field (Serialize the sub-type)
     serializeLogicalSegmentTypeChild(writeBuffer);
@@ -75,6 +82,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     LogicalSegmentType _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Discriminator Field (logicalSegmentType)
     lengthInBits += 3;
@@ -111,6 +119,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte logicalSegmentType =
         readDiscriminatorField(
@@ -124,11 +133,11 @@
     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
     LogicalSegmentTypeBuilder builder = null;
     if (EvaluationHelper.equals(logicalSegmentType, (byte) 0x00)) {
-      builder = ClassID.staticParseBuilder(readBuffer, order);
+      builder = ClassID.staticParseLogicalSegmentTypeBuilder(readBuffer, order);
     } else if (EvaluationHelper.equals(logicalSegmentType, (byte) 0x01)) {
-      builder = InstanceID.staticParseBuilder(readBuffer, order);
+      builder = InstanceID.staticParseLogicalSegmentTypeBuilder(readBuffer, order);
     } else if (EvaluationHelper.equals(logicalSegmentType, (byte) 0x02)) {
-      builder = MemberID.staticParseBuilder(readBuffer, order);
+      builder = MemberID.staticParseLogicalSegmentTypeBuilder(readBuffer, order);
     }
     if (builder == null) {
       throw new ParseException(
@@ -146,7 +155,7 @@
     return _logicalSegmentType;
   }
 
-  public static interface LogicalSegmentTypeBuilder {
+  public interface LogicalSegmentTypeBuilder {
     LogicalSegmentType build(IntegerEncoding order);
   }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MemberID.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MemberID.java
index 99337f0..08f45f9 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MemberID.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MemberID.java
@@ -68,6 +68,7 @@
   protected void serializeLogicalSegmentTypeChild(WriteBuffer writeBuffer)
       throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("MemberID");
 
@@ -103,6 +104,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     MemberID _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (format)
     lengthInBits += 2;
@@ -113,12 +115,13 @@
     return lengthInBits;
   }
 
-  public static MemberIDBuilder staticParseBuilder(ReadBuffer readBuffer, IntegerEncoding order)
-      throws ParseException {
+  public static LogicalSegmentTypeBuilder staticParseLogicalSegmentTypeBuilder(
+      ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
     readBuffer.pullContext("MemberID");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte format =
         readSimpleField(
@@ -140,16 +143,15 @@
 
     readBuffer.closeContext("MemberID");
     // Create the instance
-    return new MemberIDBuilder(format, instance, order);
+    return new MemberIDBuilderImpl(format, instance, order);
   }
 
-  public static class MemberIDBuilder implements LogicalSegmentType.LogicalSegmentTypeBuilder {
+  public static class MemberIDBuilderImpl implements LogicalSegmentType.LogicalSegmentTypeBuilder {
     private final byte format;
     private final short instance;
     private final IntegerEncoding order;
 
-    public MemberIDBuilder(byte format, short instance, IntegerEncoding order) {
-
+    public MemberIDBuilderImpl(byte format, short instance, IntegerEncoding order) {
       this.format = format;
       this.instance = instance;
       this.order = order;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MultipleServiceRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MultipleServiceRequest.java
index 289e59e..b7e1253 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MultipleServiceRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MultipleServiceRequest.java
@@ -83,14 +83,29 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("MultipleServiceRequest");
 
     // Const Field (requestPathSize)
-    writeConstField("requestPathSize", REQUESTPATHSIZE, writeSignedByte(writeBuffer, 8));
+    writeConstField(
+        "requestPathSize",
+        REQUESTPATHSIZE,
+        writeSignedByte(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Const Field (requestPath)
-    writeConstField("requestPath", REQUESTPATH, writeUnsignedLong(writeBuffer, 32));
+    writeConstField(
+        "requestPath",
+        REQUESTPATH,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (data)
     writeSimpleField(
@@ -114,6 +129,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     MultipleServiceRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Const Field (requestPathSize)
     lengthInBits += 8;
@@ -127,13 +143,14 @@
     return lengthInBits;
   }
 
-  public static MultipleServiceRequestBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("MultipleServiceRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte requestPathSize =
         readConstField(
@@ -170,16 +187,16 @@
 
     readBuffer.closeContext("MultipleServiceRequest");
     // Create the instance
-    return new MultipleServiceRequestBuilder(data, serviceLen, order);
+    return new MultipleServiceRequestBuilderImpl(data, serviceLen, order);
   }
 
-  public static class MultipleServiceRequestBuilder implements CipService.CipServiceBuilder {
+  public static class MultipleServiceRequestBuilderImpl implements CipService.CipServiceBuilder {
     private final Services data;
     private final Integer serviceLen;
     private final IntegerEncoding order;
 
-    public MultipleServiceRequestBuilder(Services data, Integer serviceLen, IntegerEncoding order) {
-
+    public MultipleServiceRequestBuilderImpl(
+        Services data, Integer serviceLen, IntegerEncoding order) {
       this.data = data;
       this.serviceLen = serviceLen;
       this.order = order;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MultipleServiceResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MultipleServiceResponse.java
index 5f99def..ddb470e 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MultipleServiceResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/MultipleServiceResponse.java
@@ -104,6 +104,7 @@
   @Override
   protected void serializeCipServiceChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("MultipleServiceResponse");
 
@@ -111,7 +112,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (short) 0x0,
-        writeUnsignedShort(writeBuffer, 8));
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (status)
     writeSimpleField(
@@ -144,10 +149,24 @@
                 : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (offsets)
-    writeSimpleTypeArrayField("offsets", offsets, writeUnsignedInt(writeBuffer, 16));
+    writeSimpleTypeArrayField(
+        "offsets",
+        offsets,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (servicesData)
-    writeByteArrayField("servicesData", servicesData, writeByteArray(writeBuffer, 8));
+    writeByteArrayField(
+        "servicesData",
+        servicesData,
+        writeByteArray(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("MultipleServiceResponse");
   }
@@ -161,6 +180,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     MultipleServiceResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Reserved Field (reserved)
     lengthInBits += 8;
@@ -187,13 +207,14 @@
     return lengthInBits;
   }
 
-  public static MultipleServiceResponseBuilder staticParseBuilder(
+  public static CipServiceBuilder staticParseCipServiceBuilder(
       ReadBuffer readBuffer, Boolean connected, Integer serviceLen, IntegerEncoding order)
       throws ParseException {
     readBuffer.pullContext("MultipleServiceResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     Short reservedField0 =
         readReservedField(
@@ -253,11 +274,11 @@
 
     readBuffer.closeContext("MultipleServiceResponse");
     // Create the instance
-    return new MultipleServiceResponseBuilder(
+    return new MultipleServiceResponseBuilderImpl(
         status, extStatus, serviceNb, offsets, servicesData, serviceLen, order, reservedField0);
   }
 
-  public static class MultipleServiceResponseBuilder implements CipService.CipServiceBuilder {
+  public static class MultipleServiceResponseBuilderImpl implements CipService.CipServiceBuilder {
     private final short status;
     private final short extStatus;
     private final int serviceNb;
@@ -267,7 +288,7 @@
     private final IntegerEncoding order;
     private final Short reservedField0;
 
-    public MultipleServiceResponseBuilder(
+    public MultipleServiceResponseBuilderImpl(
         short status,
         short extStatus,
         int serviceNb,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NetworkConnectionParameters.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NetworkConnectionParameters.java
index 921b33b..13cc0c7 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NetworkConnectionParameters.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NetworkConnectionParameters.java
@@ -89,6 +89,7 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("NetworkConnectionParameters");
 
@@ -106,7 +107,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (short) 0x00,
-        writeUnsignedShort(writeBuffer, 8));
+        writeUnsignedShort(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (owner)
     writeSimpleField(
@@ -132,7 +137,11 @@
     writeReservedField(
         "reserved",
         reservedField1 != null ? reservedField1 : (boolean) false,
-        writeBoolean(writeBuffer));
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (priority)
     writeSimpleField(
@@ -158,7 +167,11 @@
     writeReservedField(
         "reserved",
         reservedField2 != null ? reservedField2 : (boolean) false,
-        writeBoolean(writeBuffer));
+        writeBoolean(writeBuffer),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("NetworkConnectionParameters");
   }
@@ -172,6 +185,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     NetworkConnectionParameters _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (connectionSize)
     lengthInBits += 16;
@@ -227,6 +241,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     int connectionSize =
         readSimpleField(
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullAddressItem.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullAddressItem.java
index 22a4bd0..2759612 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullAddressItem.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullAddressItem.java
@@ -55,6 +55,7 @@
   @Override
   protected void serializeTypeIdChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("NullAddressItem");
 
@@ -62,7 +63,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (int) 0x0000,
-        writeUnsignedInt(writeBuffer, 16));
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("NullAddressItem");
   }
@@ -76,6 +81,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     NullAddressItem _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Reserved Field (reserved)
     lengthInBits += 16;
@@ -83,12 +89,13 @@
     return lengthInBits;
   }
 
-  public static NullAddressItemBuilder staticParseBuilder(
-      ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
+  public static TypeIdBuilder staticParseTypeIdBuilder(ReadBuffer readBuffer, IntegerEncoding order)
+      throws ParseException {
     readBuffer.pullContext("NullAddressItem");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     Integer reservedField0 =
         readReservedField(
@@ -102,14 +109,14 @@
 
     readBuffer.closeContext("NullAddressItem");
     // Create the instance
-    return new NullAddressItemBuilder(order, reservedField0);
+    return new NullAddressItemBuilderImpl(order, reservedField0);
   }
 
-  public static class NullAddressItemBuilder implements TypeId.TypeIdBuilder {
+  public static class NullAddressItemBuilderImpl implements TypeId.TypeIdBuilder {
     private final IntegerEncoding order;
     private final Integer reservedField0;
 
-    public NullAddressItemBuilder(IntegerEncoding order, Integer reservedField0) {
+    public NullAddressItemBuilderImpl(IntegerEncoding order, Integer reservedField0) {
       this.order = order;
       this.reservedField0 = reservedField0;
     }
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullCommandRequest.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullCommandRequest.java
index dc05692..26158fc 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullCommandRequest.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullCommandRequest.java
@@ -62,6 +62,7 @@
   @Override
   protected void serializeEipPacketChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("NullCommandRequest");
 
@@ -77,27 +78,28 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     NullCommandRequest _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     return lengthInBits;
   }
 
-  public static NullCommandRequestBuilder staticParseBuilder(
+  public static EipPacketBuilder staticParseEipPacketBuilder(
       ReadBuffer readBuffer, IntegerEncoding order, Boolean response) throws ParseException {
     readBuffer.pullContext("NullCommandRequest");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     readBuffer.closeContext("NullCommandRequest");
     // Create the instance
-    return new NullCommandRequestBuilder(order);
+    return new NullCommandRequestBuilderImpl(order);
   }
 
-  public static class NullCommandRequestBuilder implements EipPacket.EipPacketBuilder {
+  public static class NullCommandRequestBuilderImpl implements EipPacket.EipPacketBuilder {
     private final IntegerEncoding order;
 
-    public NullCommandRequestBuilder(IntegerEncoding order) {
-
+    public NullCommandRequestBuilderImpl(IntegerEncoding order) {
       this.order = order;
     }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullCommandResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullCommandResponse.java
index b8c4534..c778775 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullCommandResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullCommandResponse.java
@@ -62,6 +62,7 @@
   @Override
   protected void serializeEipPacketChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("NullCommandResponse");
 
@@ -77,27 +78,28 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     NullCommandResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     return lengthInBits;
   }
 
-  public static NullCommandResponseBuilder staticParseBuilder(
+  public static EipPacketBuilder staticParseEipPacketBuilder(
       ReadBuffer readBuffer, IntegerEncoding order, Boolean response) throws ParseException {
     readBuffer.pullContext("NullCommandResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     readBuffer.closeContext("NullCommandResponse");
     // Create the instance
-    return new NullCommandResponseBuilder(order);
+    return new NullCommandResponseBuilderImpl(order);
   }
 
-  public static class NullCommandResponseBuilder implements EipPacket.EipPacketBuilder {
+  public static class NullCommandResponseBuilderImpl implements EipPacket.EipPacketBuilder {
     private final IntegerEncoding order;
 
-    public NullCommandResponseBuilder(IntegerEncoding order) {
-
+    public NullCommandResponseBuilderImpl(IntegerEncoding order) {
       this.order = order;
     }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullEipConnectionResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullEipConnectionResponse.java
index b622bad..1f25f8f 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullEipConnectionResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullEipConnectionResponse.java
@@ -62,6 +62,7 @@
   @Override
   protected void serializeEipPacketChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("NullEipConnectionResponse");
 
@@ -77,27 +78,28 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     NullEipConnectionResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     return lengthInBits;
   }
 
-  public static NullEipConnectionResponseBuilder staticParseBuilder(
+  public static EipPacketBuilder staticParseEipPacketBuilder(
       ReadBuffer readBuffer, IntegerEncoding order, Boolean response) throws ParseException {
     readBuffer.pullContext("NullEipConnectionResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     readBuffer.closeContext("NullEipConnectionResponse");
     // Create the instance
-    return new NullEipConnectionResponseBuilder(order);
+    return new NullEipConnectionResponseBuilderImpl(order);
   }
 
-  public static class NullEipConnectionResponseBuilder implements EipPacket.EipPacketBuilder {
+  public static class NullEipConnectionResponseBuilderImpl implements EipPacket.EipPacketBuilder {
     private final IntegerEncoding order;
 
-    public NullEipConnectionResponseBuilder(IntegerEncoding order) {
-
+    public NullEipConnectionResponseBuilderImpl(IntegerEncoding order) {
       this.order = order;
     }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullListServicesResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullListServicesResponse.java
index 2c8eff9..12e873a 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullListServicesResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/NullListServicesResponse.java
@@ -62,6 +62,7 @@
   @Override
   protected void serializeEipPacketChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("NullListServicesResponse");
 
@@ -77,27 +78,28 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     NullListServicesResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     return lengthInBits;
   }
 
-  public static NullListServicesResponseBuilder staticParseBuilder(
+  public static EipPacketBuilder staticParseEipPacketBuilder(
       ReadBuffer readBuffer, IntegerEncoding order, Boolean response) throws ParseException {
     readBuffer.pullContext("NullListServicesResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     readBuffer.closeContext("NullListServicesResponse");
     // Create the instance
-    return new NullListServicesResponseBuilder(order);
+    return new NullListServicesResponseBuilderImpl(order);
   }
 
-  public static class NullListServicesResponseBuilder implements EipPacket.EipPacketBuilder {
+  public static class NullListServicesResponseBuilderImpl implements EipPacket.EipPacketBuilder {
     private final IntegerEncoding order;
 
-    public NullListServicesResponseBuilder(IntegerEncoding order) {
-
+    public NullListServicesResponseBuilderImpl(IntegerEncoding order) {
       this.order = order;
     }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PathSegment.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PathSegment.java
index 95c798f..edc8884 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PathSegment.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PathSegment.java
@@ -53,11 +53,19 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("PathSegment");
 
     // Discriminator Field (pathSegment) (Used as input to a switch field)
-    writeDiscriminatorField("pathSegment", getPathSegment(), writeUnsignedByte(writeBuffer, 3));
+    writeDiscriminatorField(
+        "pathSegment",
+        getPathSegment(),
+        writeUnsignedByte(writeBuffer, 3),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Switch field (Serialize the sub-type)
     serializePathSegmentChild(writeBuffer);
@@ -74,6 +82,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     PathSegment _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Discriminator Field (pathSegment)
     lengthInBits += 3;
@@ -110,6 +119,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte pathSegment =
         readDiscriminatorField(
@@ -123,11 +133,11 @@
     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
     PathSegmentBuilder builder = null;
     if (EvaluationHelper.equals(pathSegment, (byte) 0x00)) {
-      builder = PortSegment.staticParseBuilder(readBuffer, order);
+      builder = PortSegment.staticParsePathSegmentBuilder(readBuffer, order);
     } else if (EvaluationHelper.equals(pathSegment, (byte) 0x01)) {
-      builder = LogicalSegment.staticParseBuilder(readBuffer, order);
+      builder = LogicalSegment.staticParsePathSegmentBuilder(readBuffer, order);
     } else if (EvaluationHelper.equals(pathSegment, (byte) 0x04)) {
-      builder = DataSegment.staticParseBuilder(readBuffer, order);
+      builder = DataSegment.staticParsePathSegmentBuilder(readBuffer, order);
     }
     if (builder == null) {
       throw new ParseException(
@@ -145,7 +155,7 @@
     return _pathSegment;
   }
 
-  public static interface PathSegmentBuilder {
+  public interface PathSegmentBuilder {
     PathSegment build(IntegerEncoding order);
   }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegment.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegment.java
index bca67b7..364e983 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegment.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegment.java
@@ -61,6 +61,7 @@
   @Override
   protected void serializePathSegmentChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("PortSegment");
 
@@ -86,6 +87,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     PortSegment _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (segmentType)
     lengthInBits += segmentType.getLengthInBits();
@@ -93,12 +95,13 @@
     return lengthInBits;
   }
 
-  public static PortSegmentBuilder staticParseBuilder(ReadBuffer readBuffer, IntegerEncoding order)
-      throws ParseException {
+  public static PathSegmentBuilder staticParsePathSegmentBuilder(
+      ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
     readBuffer.pullContext("PortSegment");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     PortSegmentType segmentType =
         readSimpleField(
@@ -113,15 +116,14 @@
 
     readBuffer.closeContext("PortSegment");
     // Create the instance
-    return new PortSegmentBuilder(segmentType, order);
+    return new PortSegmentBuilderImpl(segmentType, order);
   }
 
-  public static class PortSegmentBuilder implements PathSegment.PathSegmentBuilder {
+  public static class PortSegmentBuilderImpl implements PathSegment.PathSegmentBuilder {
     private final PortSegmentType segmentType;
     private final IntegerEncoding order;
 
-    public PortSegmentBuilder(PortSegmentType segmentType, IntegerEncoding order) {
-
+    public PortSegmentBuilderImpl(PortSegmentType segmentType, IntegerEncoding order) {
       this.segmentType = segmentType;
       this.order = order;
     }
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentExtended.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentExtended.java
index a58bdbc..7311490 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentExtended.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentExtended.java
@@ -79,6 +79,7 @@
   protected void serializePortSegmentTypeChild(WriteBuffer writeBuffer)
       throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("PortSegmentExtended");
 
@@ -110,6 +111,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     PortSegmentExtended _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (port)
     lengthInBits += 4;
@@ -125,12 +127,13 @@
     return lengthInBits;
   }
 
-  public static PortSegmentExtendedBuilder staticParseBuilder(
+  public static PortSegmentTypeBuilder staticParsePortSegmentTypeBuilder(
       ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
     readBuffer.pullContext("PortSegmentExtended");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte port = readSimpleField("port", readUnsignedByte(readBuffer, 4));
 
@@ -144,18 +147,18 @@
 
     readBuffer.closeContext("PortSegmentExtended");
     // Create the instance
-    return new PortSegmentExtendedBuilder(port, linkAddressSize, address, order);
+    return new PortSegmentExtendedBuilderImpl(port, linkAddressSize, address, order);
   }
 
-  public static class PortSegmentExtendedBuilder implements PortSegmentType.PortSegmentTypeBuilder {
+  public static class PortSegmentExtendedBuilderImpl
+      implements PortSegmentType.PortSegmentTypeBuilder {
     private final byte port;
     private final short linkAddressSize;
     private final String address;
     private final IntegerEncoding order;
 
-    public PortSegmentExtendedBuilder(
+    public PortSegmentExtendedBuilderImpl(
         byte port, short linkAddressSize, String address, IntegerEncoding order) {
-
       this.port = port;
       this.linkAddressSize = linkAddressSize;
       this.address = address;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentNormal.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentNormal.java
index 1a1c3ca..4b5f826 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentNormal.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentNormal.java
@@ -68,6 +68,7 @@
   protected void serializePortSegmentTypeChild(WriteBuffer writeBuffer)
       throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("PortSegmentNormal");
 
@@ -89,6 +90,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     PortSegmentNormal _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (port)
     lengthInBits += 4;
@@ -99,12 +101,13 @@
     return lengthInBits;
   }
 
-  public static PortSegmentNormalBuilder staticParseBuilder(
+  public static PortSegmentTypeBuilder staticParsePortSegmentTypeBuilder(
       ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
     readBuffer.pullContext("PortSegmentNormal");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     byte port = readSimpleField("port", readUnsignedByte(readBuffer, 4));
 
@@ -112,16 +115,16 @@
 
     readBuffer.closeContext("PortSegmentNormal");
     // Create the instance
-    return new PortSegmentNormalBuilder(port, linkAddress, order);
+    return new PortSegmentNormalBuilderImpl(port, linkAddress, order);
   }
 
-  public static class PortSegmentNormalBuilder implements PortSegmentType.PortSegmentTypeBuilder {
+  public static class PortSegmentNormalBuilderImpl
+      implements PortSegmentType.PortSegmentTypeBuilder {
     private final byte port;
     private final short linkAddress;
     private final IntegerEncoding order;
 
-    public PortSegmentNormalBuilder(byte port, short linkAddress, IntegerEncoding order) {
-
+    public PortSegmentNormalBuilderImpl(byte port, short linkAddress, IntegerEncoding order) {
       this.port = port;
       this.linkAddress = linkAddress;
       this.order = order;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentType.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentType.java
index 7ec14e7..63c825d 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentType.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/PortSegmentType.java
@@ -53,6 +53,7 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("PortSegmentType");
 
@@ -75,6 +76,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     PortSegmentType _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Discriminator Field (extendedLinkAddress)
     lengthInBits += 1;
@@ -111,6 +113,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     boolean extendedLinkAddress =
         readDiscriminatorField("extendedLinkAddress", readBoolean(readBuffer));
@@ -118,9 +121,9 @@
     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
     PortSegmentTypeBuilder builder = null;
     if (EvaluationHelper.equals(extendedLinkAddress, (boolean) false)) {
-      builder = PortSegmentNormal.staticParseBuilder(readBuffer, order);
+      builder = PortSegmentNormal.staticParsePortSegmentTypeBuilder(readBuffer, order);
     } else if (EvaluationHelper.equals(extendedLinkAddress, (boolean) true)) {
-      builder = PortSegmentExtended.staticParseBuilder(readBuffer, order);
+      builder = PortSegmentExtended.staticParsePortSegmentTypeBuilder(readBuffer, order);
     }
     if (builder == null) {
       throw new ParseException(
@@ -138,7 +141,7 @@
     return _portSegmentType;
   }
 
-  public static interface PortSegmentTypeBuilder {
+  public interface PortSegmentTypeBuilder {
     PortSegmentType build(IntegerEncoding order);
   }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/SendUnitData.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/SendUnitData.java
index b1ab929..f3e051e 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/SendUnitData.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/SendUnitData.java
@@ -96,11 +96,19 @@
   @Override
   protected void serializeEipPacketChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("SendUnitData");
 
     // Const Field (interfaceHandle)
-    writeConstField("interfaceHandle", INTERFACEHANDLE, writeUnsignedLong(writeBuffer, 32));
+    writeConstField(
+        "interfaceHandle",
+        INTERFACEHANDLE,
+        writeUnsignedLong(writeBuffer, 32),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (timeout)
     writeSimpleField(
@@ -123,7 +131,14 @@
                 : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (typeId)
-    writeComplexTypeArrayField("typeId", typeId, writeBuffer);
+    writeComplexTypeArrayField(
+        "typeId",
+        typeId,
+        writeBuffer,
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("SendUnitData");
   }
@@ -137,6 +152,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     SendUnitData _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Const Field (interfaceHandle)
     lengthInBits += 32;
@@ -151,7 +167,7 @@
     if (typeId != null) {
       int i = 0;
       for (TypeId element : typeId) {
-        boolean last = ++i >= typeId.size();
+        ThreadLocalHelper.lastItemThreadLocal.set(++i >= typeId.size());
         lengthInBits += element.getLengthInBits();
       }
     }
@@ -159,12 +175,13 @@
     return lengthInBits;
   }
 
-  public static SendUnitDataBuilder staticParseBuilder(
+  public static EipPacketBuilder staticParseEipPacketBuilder(
       ReadBuffer readBuffer, IntegerEncoding order, Boolean response) throws ParseException {
     readBuffer.pullContext("SendUnitData");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     long interfaceHandle =
         readConstField(
@@ -207,18 +224,17 @@
 
     readBuffer.closeContext("SendUnitData");
     // Create the instance
-    return new SendUnitDataBuilder(timeout, itemCount, typeId, order);
+    return new SendUnitDataBuilderImpl(timeout, itemCount, typeId, order);
   }
 
-  public static class SendUnitDataBuilder implements EipPacket.EipPacketBuilder {
+  public static class SendUnitDataBuilderImpl implements EipPacket.EipPacketBuilder {
     private final int timeout;
     private final int itemCount;
     private final List<TypeId> typeId;
     private final IntegerEncoding order;
 
-    public SendUnitDataBuilder(
+    public SendUnitDataBuilderImpl(
         int timeout, int itemCount, List<TypeId> typeId, IntegerEncoding order) {
-
       this.timeout = timeout;
       this.itemCount = itemCount;
       this.typeId = typeId;
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/Services.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/Services.java
index 51348be..4e34aa2 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/Services.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/Services.java
@@ -67,19 +67,41 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("Services");
 
     // Implicit Field (serviceNb) (Used for parsing, but its value is not stored as it's implicitly
     // given by the objects content)
     int serviceNb = (int) (COUNT(getOffsets()));
-    writeImplicitField("serviceNb", serviceNb, writeUnsignedInt(writeBuffer, 16));
+    writeImplicitField(
+        "serviceNb",
+        serviceNb,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (offsets)
-    writeSimpleTypeArrayField("offsets", offsets, writeUnsignedInt(writeBuffer, 16));
+    writeSimpleTypeArrayField(
+        "offsets",
+        offsets,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (services)
-    writeComplexTypeArrayField("services", services, writeBuffer);
+    writeComplexTypeArrayField(
+        "services",
+        services,
+        writeBuffer,
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("Services");
   }
@@ -93,6 +115,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     Services _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (serviceNb)
     lengthInBits += 16;
@@ -106,7 +129,7 @@
     if (services != null) {
       int i = 0;
       for (CipService element : services) {
-        boolean last = ++i >= services.size();
+        ThreadLocalHelper.lastItemThreadLocal.set(++i >= services.size());
         lengthInBits += element.getLengthInBits();
       }
     }
@@ -150,6 +173,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     int serviceNb =
         readImplicitField(
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ServicesResponse.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ServicesResponse.java
index f00fc83..23bc9e8 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ServicesResponse.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/ServicesResponse.java
@@ -87,13 +87,21 @@
   @Override
   protected void serializeTypeIdChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("ServicesResponse");
 
     // Implicit Field (serviceLen) (Used for parsing, but its value is not stored as it's implicitly
     // given by the objects content)
     int serviceLen = (int) ((getLengthInBytes()) - (4));
-    writeImplicitField("serviceLen", serviceLen, writeUnsignedInt(writeBuffer, 16));
+    writeImplicitField(
+        "serviceLen",
+        serviceLen,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (encapsulationProtocol)
     writeSimpleField(
@@ -109,7 +117,11 @@
     writeReservedField(
         "reserved",
         reservedField0 != null ? reservedField0 : (byte) 0x00,
-        writeUnsignedByte(writeBuffer, 2));
+        writeUnsignedByte(writeBuffer, 2),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (supportsCIPEncapsulation)
     writeSimpleField(
@@ -125,7 +137,11 @@
     writeReservedField(
         "reserved",
         reservedField1 != null ? reservedField1 : (int) 0x00,
-        writeUnsignedInt(writeBuffer, 12));
+        writeUnsignedInt(writeBuffer, 12),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (supportsUDP)
     writeSimpleField(
@@ -138,7 +154,14 @@
                 : ByteOrder.LITTLE_ENDIAN)));
 
     // Array Field (data)
-    writeByteArrayField("data", data, writeByteArray(writeBuffer, 8));
+    writeByteArrayField(
+        "data",
+        data,
+        writeByteArray(writeBuffer, 8),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     writeBuffer.popContext("ServicesResponse");
   }
@@ -152,6 +175,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     ServicesResponse _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (serviceLen)
     lengthInBits += 16;
@@ -179,12 +203,13 @@
     return lengthInBits;
   }
 
-  public static ServicesResponseBuilder staticParseBuilder(
-      ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
+  public static TypeIdBuilder staticParseTypeIdBuilder(ReadBuffer readBuffer, IntegerEncoding order)
+      throws ParseException {
     readBuffer.pullContext("ServicesResponse");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     int serviceLen =
         readImplicitField(
@@ -253,7 +278,7 @@
 
     readBuffer.closeContext("ServicesResponse");
     // Create the instance
-    return new ServicesResponseBuilder(
+    return new ServicesResponseBuilderImpl(
         encapsulationProtocol,
         supportsCIPEncapsulation,
         supportsUDP,
@@ -263,7 +288,7 @@
         reservedField1);
   }
 
-  public static class ServicesResponseBuilder implements TypeId.TypeIdBuilder {
+  public static class ServicesResponseBuilderImpl implements TypeId.TypeIdBuilder {
     private final int encapsulationProtocol;
     private final boolean supportsCIPEncapsulation;
     private final boolean supportsUDP;
@@ -272,7 +297,7 @@
     private final Byte reservedField0;
     private final Integer reservedField1;
 
-    public ServicesResponseBuilder(
+    public ServicesResponseBuilderImpl(
         int encapsulationProtocol,
         boolean supportsCIPEncapsulation,
         boolean supportsUDP,
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/TransportType.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/TransportType.java
index 23ad90d..b3fa34f 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/TransportType.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/TransportType.java
@@ -68,6 +68,7 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("TransportType");
 
@@ -113,6 +114,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     TransportType _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Simple field (direction)
     lengthInBits += 1;
@@ -153,6 +155,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     boolean direction =
         readSimpleField(
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/TypeId.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/TypeId.java
index b73371d..914d42d 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/TypeId.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/TypeId.java
@@ -53,11 +53,19 @@
 
   public void serialize(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("TypeId");
 
     // Discriminator Field (id) (Used as input to a switch field)
-    writeDiscriminatorField("id", getId(), writeUnsignedInt(writeBuffer, 16));
+    writeDiscriminatorField(
+        "id",
+        getId(),
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Switch field (Serialize the sub-type)
     serializeTypeIdChild(writeBuffer);
@@ -74,6 +82,7 @@
   public int getLengthInBits() {
     int lengthInBits = 0;
     TypeId _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Discriminator Field (id)
     lengthInBits += 16;
@@ -109,6 +118,7 @@
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     int id =
         readDiscriminatorField(
@@ -122,15 +132,15 @@
     // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
     TypeIdBuilder builder = null;
     if (EvaluationHelper.equals(id, (int) 0x0000)) {
-      builder = NullAddressItem.staticParseBuilder(readBuffer, order);
+      builder = NullAddressItem.staticParseTypeIdBuilder(readBuffer, order);
     } else if (EvaluationHelper.equals(id, (int) 0x0100)) {
-      builder = ServicesResponse.staticParseBuilder(readBuffer, order);
+      builder = ServicesResponse.staticParseTypeIdBuilder(readBuffer, order);
     } else if (EvaluationHelper.equals(id, (int) 0x00A1)) {
-      builder = ConnectedAddressItem.staticParseBuilder(readBuffer, order);
+      builder = ConnectedAddressItem.staticParseTypeIdBuilder(readBuffer, order);
     } else if (EvaluationHelper.equals(id, (int) 0x00B1)) {
-      builder = ConnectedDataItem.staticParseBuilder(readBuffer, order);
+      builder = ConnectedDataItem.staticParseTypeIdBuilder(readBuffer, order);
     } else if (EvaluationHelper.equals(id, (int) 0x00B2)) {
-      builder = UnConnectedDataItem.staticParseBuilder(readBuffer, order);
+      builder = UnConnectedDataItem.staticParseTypeIdBuilder(readBuffer, order);
     }
     if (builder == null) {
       throw new ParseException(
@@ -144,7 +154,7 @@
     return _typeId;
   }
 
-  public static interface TypeIdBuilder {
+  public interface TypeIdBuilder {
     TypeId build(IntegerEncoding order);
   }
 
diff --git a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/UnConnectedDataItem.java b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/UnConnectedDataItem.java
index b63fe82..c5007d3 100644
--- a/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/UnConnectedDataItem.java
+++ b/plc4j/drivers/eip/src/main/generated/org/apache/plc4x/java/eip/readwrite/UnConnectedDataItem.java
@@ -61,13 +61,21 @@
   @Override
   protected void serializeTypeIdChild(WriteBuffer writeBuffer) throws SerializationException {
     PositionAware positionAware = writeBuffer;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
     int startPos = positionAware.getPos();
     writeBuffer.pushContext("UnConnectedDataItem");
 
     // Implicit Field (packetSize) (Used for parsing, but its value is not stored as it's implicitly
     // given by the objects content)
     int packetSize = (int) (getService().getLengthInBytes());
-    writeImplicitField("packetSize", packetSize, writeUnsignedInt(writeBuffer, 16));
+    writeImplicitField(
+        "packetSize",
+        packetSize,
+        writeUnsignedInt(writeBuffer, 16),
+        WithOption.WithByteOrder(
+            (((order) == (IntegerEncoding.BIG_ENDIAN))
+                ? ByteOrder.BIG_ENDIAN
+                : ByteOrder.LITTLE_ENDIAN)));
 
     // Simple Field (service)
     writeSimpleField(
@@ -91,6 +99,7 @@
   public int getLengthInBits() {
     int lengthInBits = super.getLengthInBits();
     UnConnectedDataItem _value = this;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     // Implicit Field (packetSize)
     lengthInBits += 16;
@@ -101,12 +110,13 @@
     return lengthInBits;
   }
 
-  public static UnConnectedDataItemBuilder staticParseBuilder(
-      ReadBuffer readBuffer, IntegerEncoding order) throws ParseException {
+  public static TypeIdBuilder staticParseTypeIdBuilder(ReadBuffer readBuffer, IntegerEncoding order)
+      throws ParseException {
     readBuffer.pullContext("UnConnectedDataItem");
     PositionAware positionAware = readBuffer;
     int startPos = positionAware.getPos();
     int curPos;
+    boolean _lastItem = ThreadLocalHelper.lastItemThreadLocal.get();
 
     int packetSize =
         readImplicitField(
@@ -135,15 +145,14 @@
 
     readBuffer.closeContext("UnConnectedDataItem");
     // Create the instance
-    return new UnConnectedDataItemBuilder(service, order);
+    return new UnConnectedDataItemBuilderImpl(service, order);
   }
 
-  public static class UnConnectedDataItemBuilder implements TypeId.TypeIdBuilder {
+  public static class UnConnectedDataItemBuilderImpl implements TypeId.TypeIdBuilder {
     private final CipService service;
     private final IntegerEncoding order;
 
-    public UnConnectedDataItemBuilder(CipService service, IntegerEncoding order) {
-
+    public UnConnectedDataItemBuilderImpl(CipService service, IntegerEncoding order) {
       this.service = service;
       this.order = order;
     }
diff --git a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/protocol/EipProtocolLogic.java b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/protocol/EipProtocolLogic.java
deleted file mode 100644
index e69de29..0000000
--- a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/protocol/EipProtocolLogic.java
+++ /dev/null
diff --git a/plc4j/drivers/eip/src/test/java/org/apache/plc4x/java/eip/readwrite/ManualEipIoTest.java b/plc4j/drivers/eip/src/test/java/org/apache/plc4x/java/eip/readwrite/ManualEipIoTest.java
index af5bdb3..bd9e995 100644
--- a/plc4j/drivers/eip/src/test/java/org/apache/plc4x/java/eip/readwrite/ManualEipIoTest.java
+++ b/plc4j/drivers/eip/src/test/java/org/apache/plc4x/java/eip/readwrite/ManualEipIoTest.java
@@ -18,7 +18,7 @@
  */
 package org.apache.plc4x.java.eip.readwrite;
 
-import org.apache.plc4x.java.PlcDriverManager;
+import org.apache.plc4x.java.DefaultPlcDriverManager;
 import org.apache.plc4x.java.api.PlcConnection;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
@@ -28,7 +28,7 @@
 public class ManualEipIoTest {
 
     public static void main(String[] args) throws Exception {
-        final PlcConnection connection = new PlcDriverManager().getConnection("logix://localhost");
+        final PlcConnection connection = new DefaultPlcDriverManager().getConnection("logix://localhost");
         final PlcReadRequest readRequest = connection.readRequestBuilder().addTagAddress("MyTag", "MyTag").build();
         final PlcReadResponse plcReadResponse = readRequest.execute().get();
         connection.close();