You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cg...@apache.org on 2024/03/25 00:21:53 UTC

(plc4x) 01/01: Merge develop repo.

This is an automated email from the ASF dual-hosted git repository.

cgarcia pushed a commit to branch feature/merlot
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 9e3c73509a16b9f13b3ef8270d47dd1725270a87
Merge: 529ea92ff4 57a0f62353
Author: cgarcia <ce...@ceos.com.ve>
AuthorDate: Sun Mar 24 20:21:33 2024 -0400

    Merge develop repo.

 .asf.yaml                                          |      2 +-
 .dockerignore                                      |     12 +-
 .github/workflows/c-platform.yml                   |      2 +-
 .github/workflows/dependency-review.yml            |      2 +-
 .github/workflows/go-platform.yml                  |      2 +-
 .github/workflows/java-platform-test-report.yml    |      2 +-
 .github/workflows/java-platform.yml                |      8 +-
 .github/workflows/python-platform.yml              |     12 +-
 .github/workflows/release-drafter.yml              |      2 +-
 .gitignore                                         |     26 +-
 .idea/sonarlint/issuestore/index.pb                |     31 +
 .idea/sonarlint/securityhotspotstore/index.pb      |     31 +
 .mvn/extensions.xml                                |      4 +-
 CHANGELOG.md                                       |    393 +
 Dockerfile                                         |      2 +-
 Jenkinsfile                                        |     14 +-
 NOTICE                                             |      2 +-
 README.md                                          |     16 +-
 RELEASE_NOTES                                      |     48 +-
 build-reproducible.sh                              |      4 +-
 .../language-base-freemarker/.factorypath          |     40 +
 code-generation/language-base-freemarker/pom.xml   |      6 +-
 code-generation/language-c/.factorypath            |     38 +
 code-generation/language-c/pom.xml                 |     14 +-
 code-generation/language-cs/.factorypath           |     38 +
 code-generation/language-cs/pom.xml                |      6 +-
 code-generation/language-go/.factorypath           |     38 +
 code-generation/language-go/pom.xml                |     14 +-
 .../templates/go/data-io-template.go.ftlh          |     53 +-
 code-generation/language-java/.factorypath         |     45 +
 code-generation/language-java/pom.xml              |     22 +-
 .../language/java/JavaLanguageTemplateHelper.java  |     76 +
 .../templates/java/complex-type-template.java.ftlh |      6 +-
 .../templates/java/data-io-template.java.ftlh      |    931 +-
 code-generation/language-python/.factorypath       |     38 +
 code-generation/language-python/pom.xml            |     16 +-
 .../python/PythonLanguageTemplateHelper.java       |     19 +-
 .../python/complex-type-template.python.ftlh       |    105 +-
 .../templates/python/data-io-template.python.ftlh  |     34 +-
 .../src/test/resources/integration-test/pom.xml    |     96 +-
 code-generation/pom.xml                            |     13 +-
 code-generation/protocol-base-mspec/.factorypath   |     35 +
 code-generation/protocol-base-mspec/pom.xml        |      4 +-
 .../plugins/codegenerator/language/mspec/MSpec.g4  |     10 +-
 .../mspec/parser/MessageFormatListener.java        |      4 +-
 code-generation/protocol-test/.factorypath         |     33 +
 code-generation/protocol-test/pom.xml              |      6 +-
 code-generation/tests/pom.xml                      |     89 -
 code-generation/tests/protocol-test-java/pom.xml   |    157 -
 .../java/test/readwrite/AbstractTypeTest.java      |    166 -
 .../test/readwrite/AbstractTypeTestSubType.java    |    260 -
 .../plc4x/java/test/readwrite/ArrayTypeTest.java   |    248 -
 .../java/test/readwrite/CheckSumTypeTest.java      |    141 -
 .../test/readwrite/ComplexOfComplexUsageA.java     |    131 -
 .../test/readwrite/ComplexOfComplexUsageB.java     |    158 -
 .../test/readwrite/ComplexOfComplexUsageC.java     |    127 -
 .../test/readwrite/ComplexOfComplexUsageD.java     |    127 -
 .../plc4x/java/test/readwrite/ConstTypeTest.java   |    196 -
 .../plc4x/java/test/readwrite/DataIOType.java      |    110 -
 .../java/test/readwrite/EnumDiscriminatedType.java |    155 -
 .../test/readwrite/EnumDiscriminatedTypeA.java     |    141 -
 .../test/readwrite/EnumDiscriminatedTypeB.java     |    141 -
 .../test/readwrite/EnumDiscriminatedTypeC.java     |    141 -
 .../readwrite/EnumDiscriminatedTypeMultiple.java   |    190 -
 .../readwrite/EnumDiscriminatedTypeMultipleA.java  |    147 -
 .../readwrite/EnumDiscriminatedTypeMultipleB.java  |    147 -
 .../readwrite/EnumDiscriminatedTypeMultipleC.java  |    147 -
 .../readwrite/EnumDiscriminatedTypeParameter.java  |    160 -
 .../readwrite/EnumDiscriminatedTypeParameterA.java |    144 -
 .../readwrite/EnumDiscriminatedTypeParameterB.java |    144 -
 .../readwrite/EnumDiscriminatedTypeParameterC.java |    144 -
 .../EnumDiscriminatedTypeParameterMultiple.java    |    183 -
 .../EnumDiscriminatedTypeParameterMultipleA.java   |    149 -
 .../EnumDiscriminatedTypeParameterMultipleB.java   |    149 -
 .../EnumDiscriminatedTypeParameterMultipleC.java   |    149 -
 .../apache/plc4x/java/test/readwrite/EnumType.java |     57 -
 .../plc4x/java/test/readwrite/EnumTypeBit.java     |     55 -
 .../plc4x/java/test/readwrite/EnumTypeInt.java     |     56 -
 .../java/test/readwrite/EnumTypeParameters.java    |    188 -
 .../plc4x/java/test/readwrite/EnumTypeTest.java    |    138 -
 .../plc4x/java/test/readwrite/FieldTypeTest.java   |    322 -
 .../readwrite/FieldTypeTestWithUnknownField.java   |    222 -
 .../readwrite/ImplicitPascalStringTypeTest.java    |    138 -
 .../java/test/readwrite/ImplicitTypeTest.java      |    187 -
 .../plc4x/java/test/readwrite/IntTypeTest.java     |    217 -
 .../plc4x/java/test/readwrite/LengthLoopTest.java  |    137 -
 .../java/test/readwrite/OptionalTypeTest.java      |    146 -
 .../plc4x/java/test/readwrite/PaddingTypeTest.java |    139 -
 .../java/test/readwrite/PascalStringTypeTest.java  |    143 -
 .../java/test/readwrite/ReservedTypeTest.java      |    120 -
 .../java/test/readwrite/ReservedTypeTestChild.java |    128 -
 .../test/readwrite/ReservedTypeTestParent.java     |    163 -
 .../java/test/readwrite/SimpleBitTypeTest.java     |    127 -
 .../test/readwrite/SimpleDiscriminatedType.java    |    147 -
 .../test/readwrite/SimpleDiscriminatedTypeA.java   |    141 -
 .../test/readwrite/SimpleDiscriminatedTypeB.java   |    141 -
 .../test/readwrite/SimpleDiscriminatedTypeC.java   |    141 -
 .../plc4x/java/test/readwrite/SimpleTypeTest.java  |    234 -
 .../TypeSwitchInTypeSwitchParentType.java          |    175 -
 .../TypeSwitchInTypeSwitchParentTypeChild0.java    |    192 -
 ...eSwitchInTypeSwitchParentTypeChild0Infant0.java |    194 -
 ...SwitchParentTypeChild0Infant0InfantsChild0.java |    160 -
 ...SwitchParentTypeChild0Infant0InfantsChild1.java |    160 -
 ...eSwitchInTypeSwitchParentTypeChild0Infant1.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild0Infant2.java |    151 -
 .../TypeSwitchInTypeSwitchParentTypeChild1.java    |    192 -
 ...eSwitchInTypeSwitchParentTypeChild1Infant3.java |    150 -
 ...eSwitchInTypeSwitchParentTypeChild1Infant4.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild1Infant5.java |    151 -
 .../TypeSwitchInTypeSwitchParentTypeChild2.java    |    198 -
 ...eSwitchInTypeSwitchParentTypeChild2Infant6.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild2Infant7.java |    151 -
 ...eSwitchInTypeSwitchParentTypeChild2Infant8.java |    151 -
 .../plc4x/java/test/readwrite/UIntTypeTest.java    |    219 -
 .../java/test/readwrite/VirtualFieldTest.java      |    194 -
 .../java/test/readwrite/utils/StaticHelper.java    |     90 -
 docker-compose.yaml                                |      2 +-
 jenkins.pom                                        |     26 +-
 media/release-image-template.svg                   |      4 +-
 plc4c/api/include/plc4c/data.h                     |      4 +
 plc4c/drivers/s7/include/plc4c/driver_s7_static.h  |      2 +
 plc4c/drivers/s7/src/driver_s7_sm_read.c           |      6 +-
 plc4c/drivers/s7/src/driver_s7_static.c            |      4 +
 plc4c/generated-sources/plc4x/src/plc4x_value.c    |      3 -
 .../generated-sources/s7/include/controller_type.h |     63 +
 plc4c/generated-sources/s7/include/data_item.h     |      9 +-
 .../s7/include/s7_payload_user_data_item.h         |      4 +-
 .../generated-sources/s7/include/transport_size.h  |     13 +-
 .../s7/src/alarm_message_ack_push_type.c           |     12 +-
 .../s7/src/alarm_message_push_type.c               |     12 +-
 .../s7/src/alarm_message_query_type.c              |     14 +-
 plc4c/generated-sources/s7/src/controller_type.c   |    127 +
 plc4c/generated-sources/s7/src/data_item.c         |    223 +-
 plc4c/generated-sources/s7/src/date_and_time.c     |     98 +-
 .../s7/src/s7_payload_user_data_item.c             |    218 +-
 plc4c/generated-sources/s7/src/transport_size.c    |    373 +-
 plc4c/pom.xml                                      |     12 +-
 plc4c/spi/include/plc4c/spi/types_private.h        |      1 +
 plc4c/spi/src/data.c                               |     10 +
 .../testing/protocols/ads/DriverTestsuite.xml      |   1404 +-
 .../protocols/modbus/tcp/Modbus-all-datatypes.xml  |   3404 +
 .../testing/protocols/opcua/DriverTestsuite.xml    |     48 +-
 plc4go/go.mod                                      |     28 +-
 plc4go/go.sum                                      |     54 +-
 plc4go/internal/ads/Discoverer.go                  |     30 +
 plc4go/internal/bacnetip/Discoverer.go             |     25 +-
 plc4go/internal/cbus/Browser_test.go               |      2 +
 plc4go/internal/cbus/Configuration.go              |     10 +
 plc4go/internal/cbus/Configuration_test.go         |      2 +-
 plc4go/internal/cbus/Discoverer.go                 |     17 +-
 plc4go/internal/knxnetip/Discoverer.go             |     21 +-
 plc4go/internal/opcua/Configuration.go             |     54 +-
 plc4go/internal/opcua/Configuration_plc4xgen.go    |     38 +-
 plc4go/internal/opcua/Driver.go                    |     12 +-
 plc4go/internal/opcua/DriverContext.go             |      2 +-
 plc4go/internal/opcua/EncryptionHandler.go         |      4 +-
 plc4go/internal/opcua/SecureChannel.go             |    265 +-
 plc4go/internal/opcua/SecureChannel_plc4xgen.go    |      4 +-
 plc4go/internal/s7/Reader.go                       |      7 +-
 plc4go/internal/s7/Writer.go                       |      2 +-
 plc4go/pkg/api/cache/PlcConnectionCache.go         |     21 +-
 plc4go/pkg/api/cache/connectionContainer.go        |     18 +-
 plc4go/pkg/api/cache/connectionContainer_test.go   |      4 +-
 .../pkg/api/cache/mock_PlcConnectionCache_test.go  |     47 +
 plc4go/pkg/api/cache/plcConnectionLease.go         |      2 +-
 plc4go/pkg/api/values/plc_value.go                 |      3 +-
 plc4go/pom.xml                                     |    170 +-
 plc4go/protocols/ads/readwrite/model/DataItem.go   |     27 +
 .../bacnetip/readwrite/model/BACnetVendorId.go     |    160 +-
 .../knxnetip/readwrite/model/KnxDatapoint.go       |    705 +-
 .../knxnetip/readwrite/model/KnxManufacturer.go    |    240 +-
 .../knxnetip/readwrite/model/KnxProperty.go        |    181 +-
 .../protocols/modbus/readwrite/model/DataItem.go   |     31 +
 plc4go/protocols/opcua/readwrite/ParserHelper.go   |     24 +
 .../protocols/opcua/readwrite/XmlParserHelper.go   |     19 +
 .../opcua/readwrite/model/BinaryPayload.go         |    212 +
 .../protocols/opcua/readwrite/model/ChunkType.go   |    159 +
 .../opcua/readwrite/model/ExtensiblePayload.go     |    223 +
 .../protocols/opcua/readwrite/model/MessagePDU.go  |     80 +-
 .../protocols/opcua/readwrite/model/MessageType.go |    183 +
 .../readwrite/model/OpcuaAcknowledgeResponse.go    |    188 +-
 .../opcua/readwrite/model/OpcuaCloseRequest.go     |    186 +-
 .../opcua/readwrite/model/OpcuaConstants.go        |    174 +
 .../opcua/readwrite/model/OpcuaHelloRequest.go     |    194 +-
 .../opcua/readwrite/model/OpcuaMessageError.go     |     51 +-
 .../opcua/readwrite/model/OpcuaMessageRequest.go   |    228 +-
 .../opcua/readwrite/model/OpcuaMessageResponse.go  |    228 +-
 .../opcua/readwrite/model/OpcuaOpenRequest.go      |    313 +-
 .../opcua/readwrite/model/OpcuaOpenResponse.go     |    313 +-
 .../opcua/readwrite/model/OpcuaProtocolLimits.go   |    250 +
 .../opcua/readwrite/model/OpenChannelMessage.go    |    185 +
 .../readwrite/model/OpenChannelMessageRequest.go   |    319 +
 .../readwrite/model/OpenChannelMessageResponse.go  |    319 +
 plc4go/protocols/opcua/readwrite/model/Payload.go  |    243 +
 .../opcua/readwrite/model/SecurityHeader.go        |    200 +
 .../opcua/readwrite/model/SequenceHeader.go        |    200 +
 plc4go/protocols/s7/readwrite/ParserHelper.go      |      5 +-
 plc4go/protocols/s7/readwrite/XmlParserHelper.go   |      7 +-
 .../s7/readwrite/model/AlarmMessageAckPushType.go  |     42 +-
 .../s7/readwrite/model/AlarmMessagePushType.go     |     42 +-
 .../s7/readwrite/model/AlarmMessageQueryType.go    |     22 +-
 .../protocols/s7/readwrite/model/ControllerType.go |    191 +
 plc4go/protocols/s7/readwrite/model/DataItem.go    |    190 +-
 plc4go/protocols/s7/readwrite/model/DateAndTime.go |    126 +-
 .../readwrite/model/S7PayloadDiagnosticMessage.go  |    198 +-
 .../model/S7PayloadUserDataItemClkFResponse.go     |    104 +-
 .../model/S7PayloadUserDataItemClkResponse.go      |    104 +-
 .../model/S7PayloadUserDataItemClkSetRequest.go    |     42 +-
 ...serDataItemCpuFunctionMsgSubscriptionRequest.go |    102 +-
 .../protocols/s7/readwrite/model/StaticHelper.go   |     22 +
 .../protocols/s7/readwrite/model/TransportSize.go  |    384 +-
 .../simulated/readwrite/model/DataItem.go          |     36 +
 plc4go/script/validate-go-test-results.groovy      |     36 -
 plc4go/spi/pool/executor_test.go                   |      3 +-
 plc4go/spi/pool/future_test.go                     |     23 +-
 plc4go/spi/pool/worker.go                          |      3 +-
 plc4go/spi/pool/worker_test.go                     |      3 +-
 .../transactions/RequestTransactionManager_test.go |      4 +-
 plc4go/spi/transactions/RequestTransaction_test.go |     11 +-
 plc4go/spi/utils/Buffer.go                         |     10 +
 plc4go/spi/utils/bufferCommons.go                  |     22 +
 plc4go/spi/utils/dumpUtils_test.go                 |      1 +
 plc4go/spi/values/PlcDATE_AND_LTIME.go             |    132 +
 plc4go/spi/values/PlcDATE_AND_TIME.go              |      4 +
 plc4j/api/.factorypath                             |     30 +
 plc4j/api/pom.xml                                  |      9 +-
 .../apache/plc4x/java/DefaultPlcDriverManager.java |      4 +-
 .../plc4x/java/api/PlcConnectionExtension.java     |     81 -
 .../java/org/apache/plc4x/java/api/PlcDriver.java  |     37 +-
 .../apache/plc4x/java/api/PlcDriverManager.java    |      2 +-
 .../plc4x/java/api/messages/PlcBrowseItem.java     |      2 -
 .../plc4x/java/api/messages/PlcRequestBuilder.java |      1 +
 .../plc4x/java/api/messages/PlcResponse.java       |      2 +
 .../org/apache/plc4x/java/api/metadata/Option.java |     36 +
 .../plc4x/java/api/metadata/OptionMetadata.java    |     30 +
 .../java/api/metadata/PlcConnectionMetadata.java   |      8 +-
 .../plc4x/java/api/metadata/PlcDriverMetadata.java |     28 +-
 .../apache/plc4x/java/api/types/OptionType.java    |     30 +
 .../apache/plc4x/java/api/types/PlcValueType.java  |      3 +-
 plc4j/drivers/ab-eth/.factorypath                  |     47 +
 plc4j/drivers/ab-eth/pom.xml                       |     18 +-
 .../org/apache/plc4x/java/abeth/AbEthDriver.java   |     39 +-
 .../abeth/configuration/AbEthConfiguration.java    |      6 +-
 .../java/abeth/protocol/AbEthProtocolLogic.java    |     57 +-
 plc4j/drivers/ads/.factorypath                     |     47 +
 plc4j/drivers/ads/pom.xml                          |     18 +-
 .../ads/discovery/readwrite/AdsDiscoveryBlock.java |      3 +-
 .../apache/plc4x/java/ads/readwrite/AmsPacket.java |      3 +-
 .../apache/plc4x/java/ads/readwrite/DataItem.java  |    571 +-
 .../org/apache/plc4x/java/ads/AdsPlcDriver.java    |     45 +-
 .../java/ads/configuration/AdsConfiguration.java   |     30 +-
 .../plc4x/java/ads/protocol/AdsProtocolLogic.java  |    188 +-
 .../org/apache/plc4x/protocol/ads/AdsDriverIT.java |      1 -
 .../plc4x/protocol/ads/ManualAdsDriverTest.java    |      2 +-
 .../org/apache/plc4x/protocol/ads/Scanner.java     |      4 +-
 .../ads/src/test/resources/logback-test.xml        |      2 +-
 plc4j/drivers/all/pom.xml                          |     87 +-
 plc4j/drivers/all/src/site/generated/ab-eth.adoc   |     48 +
 plc4j/drivers/all/src/site/generated/ads.adoc      |     53 +
 .../drivers/all/src/site/generated/bacnet-ip.adoc  |     73 +
 plc4j/drivers/all/src/site/generated/c-bus.adoc    |     48 +
 plc4j/drivers/all/src/site/generated/canopen.adoc  |     47 +
 plc4j/drivers/all/src/site/generated/eip.adoc      |     50 +
 plc4j/drivers/all/src/site/generated/firmata.adoc  |     72 +
 .../drivers/all/src/site/generated/genericcan.adoc |     46 +
 .../all/src/site/generated/iec-60870-5-104.adoc    |     48 +
 .../drivers/all/src/site/generated/knxnet-ip.adoc  |     84 +
 plc4j/drivers/all/src/site/generated/logix.adoc    |     53 +
 .../all/src/site/generated/modbus-ascii.adoc       |     82 +
 .../drivers/all/src/site/generated/modbus-rtu.adoc |     82 +
 .../drivers/all/src/site/generated/modbus-tcp.adoc |     50 +
 plc4j/drivers/all/src/site/generated/opcua.adoc    |     80 +
 .../all/src/site/generated/open-protocol.adoc      |     47 +
 plc4j/drivers/all/src/site/generated/plc4x.adoc    |     49 +
 plc4j/drivers/all/src/site/generated/profinet.adoc |     50 +
 plc4j/drivers/all/src/site/generated/s7.adoc       |     67 +
 .../drivers/all/src/site/generated/simulated.adoc  |     37 +
 .../groovy/generate-config-documentation.groovy    |    132 +
 plc4j/drivers/bacnet/.factorypath                  |     58 +
 plc4j/drivers/bacnet/pom.xml                       |     77 +-
 .../apache/plc4x/java/bacnetip/readwrite/APDU.java |      3 +-
 .../readwrite/BACnetConfirmedServiceRequest.java   |      3 +-
 .../java/bacnetip/readwrite/BACnetServiceAck.java  |      3 +-
 .../readwrite/BACnetUnconfirmedServiceRequest.java |      3 +-
 .../java/bacnetip/readwrite/BACnetVendorId.java    |     11 +-
 .../apache/plc4x/java/bacnetip/BacNetIpDriver.java |     46 +-
 .../configuration/BacNetIpConfiguration.java       |      7 +-
 .../BacNetPcapReplayTransportConfiguration.java    |      2 +
 .../BacNetRawSocketTransportConfiguration.java     |      2 +
 plc4j/drivers/c-bus/.factorypath                   |     48 +
 plc4j/drivers/c-bus/pom.xml                        |     18 +-
 .../org/apache/plc4x/java/cbus/CBusDriver.java     |     44 +-
 .../java/cbus/configuration/CBusConfiguration.java |      6 +-
 .../java/cbus/protocol/CBusProtocolLogic.java      |      9 +-
 plc4j/drivers/can/.factorypath                     |     47 +
 plc4j/drivers/can/pom.xml                          |     26 +-
 .../plc4x/java/genericcan/readwrite/DataItem.java  |    321 +-
 .../genericcan/readwrite/GenericCANDataType.java   |      3 +-
 .../conversation/ConversationContextWrapper.java   |      4 +-
 .../plc4x/java/can/generic/GenericCANDriver.java   |     16 +-
 .../configuration/GenericCANConfiguration.java     |      9 +-
 .../generic/protocol/GenericCANProtocolLogic.java  |     30 +-
 .../transport/GenericCANFrameDataHandler.java      |      6 +
 .../java/can/generic/transport/GenericFrame.java   |     32 +-
 .../java/can/generic/GenericCANDriverTest.java     |    168 +-
 plc4j/drivers/canopen/.factorypath                 |     47 +
 plc4j/drivers/canopen/pom.xml                      |     22 +-
 .../java/canopen/readwrite/CANOpenDataType.java    |      4 +-
 .../plc4x/java/canopen/readwrite/DataItem.java     |    369 +-
 .../plc4x/java/canopen/CANOpenPlcDriver.java       |     18 +-
 .../canopen/SDODownloadConversation.java           |      2 +-
 .../configuration/CANOpenConfiguration.java        |     10 +-
 .../canopen/protocol/CANOpenProtocolLogic.java     |     21 +-
 .../canopen/transport/CANOpenFrameDataHandler.java |      2 +-
 .../plc4x/java/canopen/CANTestTransport.java       |      4 +-
 plc4j/drivers/ctrlx/.factorypath                   |     54 +
 plc4j/drivers/ctrlx/pom.xml                        |      8 +-
 .../ctrlx/readwrite/rest/datalayer/ApiClient.java  |   1028 -
 .../plc4x/java/ctrlx/readwrite/CtrlXDriver.java    |     14 +-
 .../configuration/CtrlXConfiguration.java          |      6 +-
 .../readwrite/connection/CtrlXConnection.java      |     10 +-
 .../ctrlx/readwrite/rest/datalayer/ApiClient.java  |   1028 +
 .../readwrite/rest/datalayer/ApiException.java     |      0
 .../readwrite/rest/datalayer/Configuration.java    |      0
 .../rest/datalayer/JavaTimeFormatter.java          |      0
 .../java/ctrlx/readwrite/rest/datalayer/Pair.java  |      0
 .../rest/datalayer/RFC3339DateFormat.java          |      0
 .../rest/datalayer/ServerConfiguration.java        |      0
 .../readwrite/rest/datalayer/ServerVariable.java   |      0
 .../ctrlx/readwrite/rest/datalayer/StringUtil.java |      0
 .../rest/datalayer/api/BulkAccessApi.java          |      0
 .../api/DataLayerInformationAndSettingsApi.java    |      0
 .../readwrite/rest/datalayer/api/NodesApi.java     |      0
 .../readwrite/rest/datalayer/api/RemotesApi.java   |      0
 .../rest/datalayer/api/RetainMemoryApi.java        |      0
 .../api/SubscriptionInformationAndSettingsApi.java |      0
 .../rest/datalayer/api/SubscriptionsApi.java       |      0
 .../readwrite/rest/datalayer/api/TypesApi.java     |      0
 .../readwrite/rest/datalayer/auth/ApiKeyAuth.java  |      0
 .../rest/datalayer/auth/Authentication.java        |      0
 .../rest/datalayer/auth/HttpBasicAuth.java         |      0
 .../rest/datalayer/auth/HttpBearerAuth.java        |      0
 .../ctrlx/readwrite/rest/datalayer/auth/OAuth.java |      0
 .../readwrite/rest/datalayer/auth/OAuthFlow.java   |      0
 .../readwrite/rest/datalayer/model/ARString.java   |      0
 .../rest/datalayer/model/AllowedOperations.java    |      0
 .../readwrite/rest/datalayer/model/BrowseData.java |      0
 .../rest/datalayer/model/BulkRequestInner.java     |      0
 .../rest/datalayer/model/BulkResponseInner.java    |      0
 .../datalayer/model/ChangeSubscriptionRequest.java |      0
 .../datalayer/model/CommDatalayerChangeEvents.java |      0
 .../datalayer/model/CommDatalayerCounting.java     |      0
 .../model/CommDatalayerDataChangeFilter.java       |      0
 .../model/CommDatalayerDataChangeTrigger.java      |      0
 .../datalayer/model/CommDatalayerProperties.java   |      0
 .../datalayer/model/CommDatalayerProperty.java     |      0
 .../datalayer/model/CommDatalayerPropertyRule.java |      0
 .../model/CommDatalayerQueueBehaviour.java         |      0
 .../datalayer/model/CommDatalayerQueueing.java     |      0
 .../model/CommDatalayerRemoteConfigItem.java       |      0
 .../datalayer/model/CommDatalayerSampling.java     |      0
 .../model/CommDatalayerServerSettings.java         |      0
 .../model/CommDatalayerSubscriptionData.java       |      0
 .../model/CommDatalayerSubscriptionProperties.java |      0
 .../rest/datalayer/model/CreateRemoteRequest.java  |      0
 .../datalayer/model/CreateSubscriptionRequest.java |      0
 .../model/CreateSubscriptionRequestAllOf.java      |      0
 .../readwrite/rest/datalayer/model/DLARString.java |      0
 .../readwrite/rest/datalayer/model/DLString.java   |      0
 .../readwrite/rest/datalayer/model/DLUInt32.java   |      0
 .../ctrlx/readwrite/rest/datalayer/model/Data.java |      0
 .../readwrite/rest/datalayer/model/Extension.java  |      0
 .../readwrite/rest/datalayer/model/JsonString.java |      0
 .../readwrite/rest/datalayer/model/Memory.java     |      0
 .../readwrite/rest/datalayer/model/MemoryType.java |      0
 .../rest/datalayer/model/MemoryValue.java          |      0
 .../readwrite/rest/datalayer/model/MetaData.java   |      0
 .../readwrite/rest/datalayer/model/NodeClass.java  |      0
 .../readwrite/rest/datalayer/model/Problem.java    |      0
 .../rest/datalayer/model/ReadNode200Response.java  |      0
 .../readwrite/rest/datalayer/model/Reference.java  |      0
 .../readwrite/rest/datalayer/model/Reflection.java |      0
 .../rest/datalayer/model/ReflectionBaseType.java   |      0
 .../rest/datalayer/model/ReflectionEnum.java       |      0
 .../rest/datalayer/model/ReflectionEnumVal.java    |      0
 .../rest/datalayer/model/ReflectionField.java      |      0
 .../rest/datalayer/model/ReflectionKeyValue.java   |      0
 .../rest/datalayer/model/ReflectionObject.java     |      0
 .../rest/datalayer/model/ReflectionRPCCall.java    |      0
 .../rest/datalayer/model/ReflectionSchema.java     |      0
 .../rest/datalayer/model/ReflectionService.java    |      0
 .../rest/datalayer/model/ReflectionType.java       |      0
 .../rest/datalayer/model/RemoteConfig.java         |      0
 .../rest/datalayer/model/RetainStats.java          |      0
 .../readwrite/rest/datalayer/model/SSEEvent.java   |      0
 .../rest/datalayer/model/SSEEventData.java         |      0
 .../rest/datalayer/model/SSEEventData1.java        |      0
 .../rest/datalayer/model/ServerSettings.java       |      0
 .../readwrite/rest/datalayer/model/State.java      |      0
 .../rest/datalayer/model/SubscriptionData.java     |      0
 .../rest/datalayer/model/SubscriptionID.java       |      0
 .../rest/datalayer/model/SubscriptionNodeList.java |      0
 .../datalayer/model/SubscriptionProperties.java    |      0
 .../model/SubscriptionPropertiesData.java          |      0
 .../rest/datalayer/model/SubscriptionSettings.java |      0
 .../ctrlx/readwrite/rest/datalayer/model/Task.java |      0
 .../readwrite/rest/datalayer/model/UInt32.java     |      0
 .../plc4x/java/ctrlx/readwrite/tag/CtrlXQuery.java |      2 +-
 .../plc4x/java/ctrlx/readwrite/tag/CtrlXTag.java   |      2 +-
 .../java/ctrlx/readwrite/tag/CtrlXTagHandler.java  |      2 +-
 .../ctrlx/readwrite/utils/ApiClientFactory.java    |      2 +-
 .../java/ctrlx/readwrite/utils/OauthHelper.java    |      2 +-
 .../plc4x/java/ctrlx/readwrite/BrowseTest.java     |      2 +-
 .../java/ctrlx/readwrite/ManualDriverTest.java     |      2 +-
 plc4j/drivers/eip/.factorypath                     |     48 +
 plc4j/drivers/eip/pom.xml                          |     18 +-
 .../plc4x/java/eip/readwrite/CipExchange.java      |    204 -
 .../org/apache/plc4x/java/eip/base/EIPDriver.java  |     53 +-
 .../eip/base/configuration/EIPConfiguration.java   |     12 +-
 .../java/eip/base/protocol/EipProtocolLogic.java   |    201 +-
 .../apache/plc4x/java/eip/logix/LogixDriver.java   |     36 +-
 .../logix/configuration/LogixConfiguration.java    |      6 +-
 .../LogixTcpTransportConfiguration.java            |     32 +
 plc4j/drivers/firmata/.factorypath                 |     50 +
 plc4j/drivers/firmata/pom.xml                      |     23 +-
 .../java/firmata/readwrite/FirmataDriver.java      |     16 +-
 .../configuration/FirmataConfiguration.java        |      4 +-
 .../readwrite/protocol/FirmataProtocolLogic.java   |     20 +-
 .../java/firmata/readwrite/FirmataManualTest.java  |     41 +
 .../firmata/src/test/resources/logback-test.xml    |      2 +-
 plc4j/drivers/iec-60870/.factorypath               |     47 +
 plc4j/drivers/iec-60870/pom.xml                    |     18 +-
 .../readwrite/Iec60870514PlcDriver.java            |     45 +-
 .../configuration/Iec608705014Configuration.java   |     18 +-
 .../readwrite/protocol/Iec608705104Protocol.java   |     37 +-
 .../apache/plc4x/java/iec608705104/ManualTest.java |      3 +-
 plc4j/drivers/knxnetip/.factorypath                |     59 +
 plc4j/drivers/knxnetip/pom.xml                     |     24 +-
 .../java/knxnetip/readwrite/KnxDatapoint.java      |  19263 +--
 .../java/knxnetip/readwrite/KnxManufacturer.java   |     23 +-
 .../plc4x/java/knxnetip/readwrite/KnxProperty.java |   2024 +-
 .../apache/plc4x/java/knxnetip/KnxNetIpDriver.java |     55 +-
 .../configuration/KnxNetIpConfiguration.java       |     19 +-
 .../knxnetip/protocol/KnxNetIpProtocolLogic.java   |     47 +-
 plc4j/drivers/mock/.factorypath                    |     53 +
 plc4j/drivers/mock/pom.xml                         |      8 +-
 .../plc4x/java/mock/connection/MockConnection.java |      8 +-
 plc4j/drivers/modbus/.factorypath                  |     53 +
 plc4j/drivers/modbus/pom.xml                       |     27 +-
 .../plc4x/java/modbus/readwrite/DataItem.java      |   1061 +-
 .../plc4x/java/modbus/ascii/ModbusAsciiDriver.java |     39 +-
 .../ascii/config/ModbusAsciiConfiguration.java     |     11 +-
 .../ascii/protocol/ModbusAsciiProtocolLogic.java   |     17 +-
 .../modbus/base/protocol/ModbusProtocolLogic.java  |      6 +-
 .../plc4x/java/modbus/rtu/ModbusRtuDriver.java     |     39 +-
 .../modbus/rtu/config/ModbusRtuConfiguration.java  |      7 +-
 .../rtu/protocol/ModbusRtuProtocolLogic.java       |     22 +-
 .../plc4x/java/modbus/tcp/ModbusTcpDriver.java     |     39 +-
 .../modbus/tcp/config/ModbusTcpConfiguration.java  |     18 +-
 .../tcp/protocol/ModbusTcpProtocolLogic.java       |     19 +-
 .../java/modbus/ManualModbusASCIIDriverTest.java   |    105 +
 .../plc4x/java/modbus/ManualModbusDriverTest.java  |    106 -
 .../java/modbus/ManualModbusRTUDriverTest.java     |    105 +
 .../java/modbus/ManualModbusTCPDriverTest.java     |    104 +
 .../java/modbus/tcp/ModbusTcpAllDatatypesIT.java   |     29 +
 plc4j/drivers/opcua/.factorypath                   |     49 +
 plc4j/drivers/opcua/pom.xml                        |     22 +-
 .../plc4x/java/opcua/readwrite/BinaryPayload.java  |    141 +
 .../plc4x/java/opcua/readwrite/ChunkType.java      |     56 +
 .../apache/plc4x/java/opcua/readwrite/Date.java    |    110 -
 .../java/opcua/readwrite/DecimalDataType.java      |    164 -
 .../java/opcua/readwrite/ExtensiblePayload.java    |    143 +
 .../plc4x/java/opcua/readwrite/MessagePDU.java     |     54 +-
 .../plc4x/java/opcua/readwrite/MessageType.java    |     59 +
 .../apache/plc4x/java/opcua/readwrite/Node.java    |    362 -
 .../java/opcua/readwrite/NodeIdTypeDefinition.java |      3 +-
 .../opcua/readwrite/OpcuaAcknowledgeResponse.java  |    153 +-
 .../java/opcua/readwrite/OpcuaCloseRequest.java    |    152 +-
 .../plc4x/java/opcua/readwrite/OpcuaConstants.java |    128 +
 .../java/opcua/readwrite/OpcuaHelloRequest.java    |    161 +-
 .../java/opcua/readwrite/OpcuaMessageError.java    |     41 +-
 .../java/opcua/readwrite/OpcuaMessageRequest.java  |    172 +-
 .../java/opcua/readwrite/OpcuaMessageResponse.java |    172 +-
 .../OpcuaNodeIdServicesVariableAddress.java        |     69 -
 .../OpcuaNodeIdServicesVariableChoice.java         |     54 -
 .../OpcuaNodeIdServicesVariableDevice.java         |     66 -
 .../OpcuaNodeIdServicesVariableDiscrete.java       |    193 -
 .../OpcuaNodeIdServicesVariableInitial.java        |     54 -
 .../OpcuaNodeIdServicesVariableInstrument.java     |    193 -
 .../OpcuaNodeIdServicesVariableRefresh.java        |     92 -
 .../readwrite/OpcuaNodeIdServicesVariableTrip.java |    192 -
 .../java/opcua/readwrite/OpcuaOpenRequest.java     |    247 +-
 .../java/opcua/readwrite/OpcuaOpenResponse.java    |    248 +-
 .../java/opcua/readwrite/OpcuaProtocolLimits.java  |    176 +
 .../java/opcua/readwrite/OpenChannelMessage.java   |    158 +
 .../opcua/readwrite/OpenChannelMessageRequest.java |    225 +
 .../readwrite/OpenChannelMessageResponse.java      |    226 +
 .../apache/plc4x/java/opcua/readwrite/Payload.java |    185 +
 .../plc4x/java/opcua/readwrite/ReferenceNode.java  |    195 -
 .../plc4x/java/opcua/readwrite/SecurityHeader.java |    143 +
 .../plc4x/java/opcua/readwrite/SequenceHeader.java |    143 +
 .../apache/plc4x/java/opcua/readwrite/Time.java    |    110 -
 .../apache/plc4x/java/opcua/OpcuaPlcDriver.java    |     22 +-
 .../org/apache/plc4x/java/opcua/config/Limits.java |     74 +
 .../java/opcua/config/OpcuaConfiguration.java      |    171 +-
 .../opcua/context/AsymmetricEncryptionHandler.java |    108 +
 .../java/opcua/context/BaseEncryptionHandler.java  |    239 +
 .../plc4x/java/opcua/context/CallContext.java      |     49 +
 .../java/opcua/context/CertificateKeyPair.java     |     24 +-
 .../plc4x/java/opcua/context/Conversation.java     |    497 +
 .../java/opcua/context/EncryptionHandler.java      |    263 +-
 .../java/opcua/context/OpcuaDriverContext.java     |    112 +-
 .../plc4x/java/opcua/context/SecureChannel.java    |   1236 +-
 .../context/SecureChannelTransactionManager.java   |     88 +-
 .../opcua/context/SymmetricEncryptionHandler.java  |    126 +
 .../java/opcua/protocol/OpcuaProtocolLogic.java    |    430 +-
 .../opcua/protocol/OpcuaSubscriptionHandle.java    |    359 +-
 .../plc4x/java/opcua/protocol/chunk/Chunk.java     |    149 +
 .../java/opcua/protocol/chunk/ChunkFactory.java    |    156 +
 .../java/opcua/protocol/chunk/ChunkStorage.java    |     46 +
 .../opcua/protocol/chunk/MemoryChunkStorage.java   |     59 +
 .../opcua/protocol/chunk/PayloadConverter.java     |     93 +
 .../java/opcua/security/CertificateVerifier.java   |     29 +
 .../plc4x/java/opcua/security/MessageSecurity.java |     40 +
 .../security/PermissiveCertificateVerifier.java    |     35 +
 .../plc4x/java/opcua/security/SecurityPolicy.java  |    210 +
 .../plc4x/java/opcua/security/SymmetricKeys.java   |    155 +
 .../security/TrustStoreCertificateVerifier.java    |     55 +
 .../org/apache/plc4x/java/opcua/OpcuaDriverIT.java |      1 +
 .../plc4x/java/opcua/OpcuaPlcDriverTest.java       |    313 +-
 .../plc4x/java/opcua/TestCertificateGenerator.java |     69 +
 .../java/opcua/context/EncryptionHandlerTest.java  |    276 +
 .../protocol/OpcuaSubscriptionHandleTest.java      |    439 +-
 .../opcua/protocol/chunk/ChunkFactoryTest.java     |    140 +
 .../opcua/protocol/chunk/PayloadConverterTest.java |     71 +
 .../milo/examples/server/TestMiloServer.java       |    281 +
 .../src/test/resources/chunk-calculation-1024.csv  |     49 +
 .../src/test/resources/chunk-calculation-2048.csv  |     49 +
 .../src/test/resources/chunk-calculation-3072.csv  |     49 +
 .../src/test/resources/chunk-calculation-4096.csv  |     49 +
 .../src/test/resources/chunk-calculation-5120.csv  |     49 +
 .../opcua/src/test/resources/log4j.properties      |     24 -
 .../opcua/src/test/resources/logback-test.xml      |      6 +-
 plc4j/drivers/open-protocol/.factorypath           |     49 +
 plc4j/drivers/open-protocol/pom.xml                |     20 +-
 .../readwrite/OpenProtocolMessage.java             |      3 +-
 .../java/openprotocol/OpenProtocolDriver.java      |     39 +-
 .../config/OpenProtocolConfiguration.java          |      4 +-
 plc4j/drivers/plc4x/.factorypath                   |     48 +
 plc4j/drivers/plc4x/pom.xml                        |     18 +-
 .../plc4x/java/plc4x/readwrite/Plc4xMessage.java   |      3 +-
 .../plc4x/java/plc4x/readwrite/Plc4xValue.java     |    461 +-
 .../org/apache/plc4x/java/plc4x/Plc4xDriver.java   |     47 +-
 .../java/plc4x/config/Plc4xConfiguration.java      |      7 +-
 .../java/plc4x/protocol/Plc4xProtocolLogic.java    |     18 +-
 plc4j/drivers/pom.xml                              |      4 +-
 plc4j/drivers/profinet-ng/.factorypath             |     56 +
 plc4j/drivers/profinet-ng/pom.xml                  |     24 +-
 .../plc4x/java/profinet/readwrite/DataItem.java    |   1332 +-
 .../plc4x/java/profinet/readwrite/LldpUnit.java    |      3 +-
 .../plc4x/java/profinet/readwrite/PnDcp_Block.java |      3 +-
 .../readwrite/PnDcp_Pdu_IdentifyRes_Payload.java   |      3 +-
 .../java/profinet/readwrite/PnIoCm_Block.java      |      3 +-
 .../java/profinet/readwrite/PnIoCm_Submodule.java  |      3 +-
 .../readwrite/TlvOrgSpecificIeee8023Unit.java      |      3 +-
 .../readwrite/TlvOrgSpecificProfibusUnit.java      |      3 +-
 .../apache/plc4x/java/profinet/ProfinetDriver.java |     49 +-
 .../profinet/config/ProfinetConfiguration.java     |      4 +-
 .../java/profinet/packets/PnDcpPacketFactory.java  |     70 +-
 .../profinet/protocol/ProfinetProtocolLogic.java   |     89 +-
 .../profinet/ManualProfinetIoTestAdam6117PN.java   |     48 +
 .../profinet/ManualProfinetIoTestAdam6150PN.java   |     48 +
 .../java/profinet/ManualProfinetIoTestAdamPN.java  |     45 -
 .../profinet/ManualProfinetIoTestSimocode.java     |     44 -
 .../profinet/ManualProfinetIoTestSimocodePN.java   |     55 +
 .../java/profinet/ManualProfinetIoTestWagoPN.java  |     44 +
 .../ManualProfinetIoTestWagoPNCoupler.java         |     45 -
 .../profinet/ManualProfinetIoTestZylkSimocode.java |      2 +-
 .../GSDML-V2.2-Advantech-ADAM6100-20111216.xml     |    346 +
 .../GSDML-V2.3-SIEMENS-SIMOCODEproVPN-20201104.xml |    873 +
 .../GSDML-V2.33-wago-series750_753-20230115.xml    | 113157 ++++++++++++++++++
 ...GSDML-V2.43-SIEMENS-SIMOCODEproVPN-20220817.xml |   1217 +
 .../src/test/resources/logback-test.xml            |      2 +-
 plc4j/drivers/profinet/.factorypath                |     55 +
 plc4j/drivers/profinet/pom.xml                     |     42 +-
 .../plc4x/java/profinet/readwrite/DataItem.java    |   1332 +-
 .../plc4x/java/profinet/readwrite/LldpUnit.java    |      3 +-
 .../plc4x/java/profinet/readwrite/PnDcp_Block.java |      3 +-
 .../readwrite/PnDcp_Pdu_IdentifyRes_Payload.java   |      3 +-
 .../java/profinet/readwrite/PnIoCm_Block.java      |      3 +-
 .../java/profinet/readwrite/PnIoCm_Submodule.java  |      3 +-
 .../readwrite/TlvOrgSpecificIeee8023Unit.java      |      3 +-
 .../readwrite/TlvOrgSpecificProfibusUnit.java      |      3 +-
 .../apache/plc4x/java/profinet/ProfinetDriver.java |     45 +-
 .../profinet/config/ProfinetConfiguration.java     |     25 +-
 .../profinet/context/ProfinetDeviceContext.java    |      2 +-
 .../plc4x/java/profinet/device/ProfinetDevice.java |     62 +-
 .../java/profinet/ManualProfinetIoAdamTest.java    |     73 +
 .../profinet/ManualProfinetIoSimocodeTest.java     |     76 +
 .../plc4x/java/profinet/ManualProfinetIoTest.java  |     73 -
 .../java/profinet/ManualProfinetPcapTest.java      |    120 +
 plc4j/drivers/s7/.factorypath                      |     49 +
 plc4j/drivers/s7/pom.xml                           |     18 +-
 .../java/s7/readwrite/AlarmMessageAckPushType.java |     22 +-
 .../java/s7/readwrite/AlarmMessagePushType.java    |     22 +-
 .../java/s7/readwrite/AlarmMessageQueryType.java   |     10 +-
 .../java/s7/readwrite/AssociatedValueType.java     |      6 +-
 .../plc4x/java/s7/readwrite/ControllerType.java    |     60 +
 .../apache/plc4x/java/s7/readwrite/DataItem.java   |    943 +-
 .../plc4x/java/s7/readwrite/DateAndTime.java       |    141 +-
 .../s7/readwrite/S7PayloadDiagnosticMessage.java   |    174 +-
 .../S7PayloadUserDataItemClkFResponse.java         |     76 +-
 .../S7PayloadUserDataItemClkResponse.java          |     76 +-
 .../S7PayloadUserDataItemClkSetRequest.java        |     30 +-
 ...rDataItemCpuFunctionMsgSubscriptionRequest.java |     82 +-
 .../plc4x/java/s7/readwrite/TransportSize.java     |    121 +-
 .../apache/plc4x/java/s7/events/S7CyclicEvent.java |    288 +-
 .../apache/plc4x/java/s7/readwrite/S7Driver.java   |     17 +-
 .../readwrite/configuration/S7Configuration.java   |     23 +-
 .../java/s7/readwrite/context/S7DriverContext.java |     12 +-
 .../readwrite/protocol/S7HGeneratedDriverBase.java |     74 +-
 .../plc4x/java/s7/readwrite/protocol/S7HMux.java   |      4 +-
 .../java/s7/readwrite/protocol/S7HMuxImpl.java     |      7 +-
 .../s7/readwrite/protocol/S7HPlcConnection.java    |     33 +-
 .../protocol/S7HSingleProtocolStackConfigurer.java |      6 +-
 .../readwrite/protocol/S7ProtocolEventLogic.java   |     36 +-
 .../s7/readwrite/protocol/S7ProtocolLogic.java     |    277 +-
 .../java/s7/readwrite/tag/S7SubscriptionTag.java   |     37 +-
 .../apache/plc4x/java/s7/readwrite/tag/S7Tag.java  |     14 +-
 .../java/s7/readwrite/types/S7ControllerType.java  |     31 -
 .../readwrite/utils/S7PlcSubscriptionRequest.java  |    363 +
 .../java/s7/readwrite/utils/StaticHelper.java      |    261 +-
 .../s7/src/test/java/BenchmarkGeneratedS7.java     |      2 +-
 .../java/s7/readwrite/ManualS71200DriverTest.java  |    104 +
 .../java/s7/readwrite/ManualS71500DriverTest.java  |     70 +
 .../java/s7/readwrite/ManualS7DriverTest.java      |    119 -
 .../readwrite/tag/S7StringFixedLengthTagTest.java  |      2 +-
 plc4j/drivers/simulated/.factorypath               |     46 +
 plc4j/drivers/simulated/pom.xml                    |     15 +-
 .../plc4x/java/simulated/readwrite/DataItem.java   |   1423 +-
 .../configuration/SimulatedConfiguration.java      |     25 +
 .../connection/SimulatedConnectionTest.java        |     12 +-
 plc4j/examples/hello-ads-telemetry/.factorypath    |     75 +
 plc4j/examples/hello-ads-telemetry/pom.xml         |      6 +-
 plc4j/examples/hello-cloud-azure/.factorypath      |     80 +
 plc4j/examples/hello-cloud-azure/pom.xml           |      8 +-
 plc4j/examples/hello-cloud-google/.factorypath     |     79 +
 plc4j/examples/hello-cloud-google/pom.xml          |      8 +-
 .../examples/hello-connectivity-mqtt/.factorypath  |     83 +
 plc4j/examples/hello-connectivity-mqtt/pom.xml     |      6 +-
 .../examples/connectivity/mqtt/MqttConnector.java  |      2 +-
 plc4j/examples/hello-discovery/.factorypath        |     76 +
 plc4j/examples/hello-discovery/pom.xml             |      6 +-
 .../examples/hellodiscovery/HelloDiscovery.java    |      5 +-
 plc4j/examples/hello-docker/Dockerfile             |      4 +-
 .../hello-influx-data-collection/.factorypath      |     94 +
 .../examples/hello-influx-data-collection/pom.xml  |     10 +-
 .../examples/hello-integration-iotdb/.factorypath  |    100 +
 plc4j/examples/hello-integration-iotdb/pom.xml     |      6 +-
 .../java/examples/integration/iotdb/PlcLogger.java |      2 +-
 plc4j/examples/hello-nats/.factorypath             |     78 +
 plc4j/examples/hello-nats/pom.xml                  |     11 +-
 .../plc4x/java/examples/hellonats/HelloNats.java   |     12 +-
 plc4j/examples/hello-opm/.factorypath              |     80 +
 plc4j/examples/hello-opm/pom.xml                   |      8 +-
 plc4j/examples/hello-webservice/.factorypath       |     80 +
 plc4j/examples/hello-webservice/pom.xml            |      6 +-
 .../examples/hellowebservice/HelloWebservice.java  |      2 +-
 plc4j/examples/hello-world-kotlin/.factorypath     |     75 +
 plc4j/examples/hello-world-kotlin/pom.xml          |     10 +-
 .../java/examples/hellokotlin/ReadModbusPal.kt     |      2 +-
 .../.factorypath                                   |     75 +
 .../hello-world-plc4x-discover-and-browse/pom.xml  |      6 +-
 .../HelloPlc4xDiscoverAndBrowse.java               |      6 +-
 plc4j/examples/hello-world-plc4x-read/.factorypath |     76 +
 plc4j/examples/hello-world-plc4x-read/pom.xml      |      6 +-
 .../examples/helloplc4x/read/HelloPlc4xRead.java   |      2 +-
 .../hello-world-plc4x-subscribe/.factorypath       |     77 +
 plc4j/examples/hello-world-plc4x-subscribe/pom.xml |     13 +-
 .../subscribe/HelloPlc4xSubscription.java          |      2 +-
 .../examples/hello-world-plc4x-write/.factorypath  |     76 +
 plc4j/examples/hello-world-plc4x-write/pom.xml     |      6 +-
 .../examples/helloplc4x/write/HelloPlc4xWrite.java |      2 +-
 plc4j/examples/plc4j-s7event/.factorypath          |     75 +
 plc4j/examples/plc4j-s7event/pom.xml               |      8 +-
 plc4j/examples/poll-loop/.factorypath              |     74 +
 plc4j/examples/poll-loop/pom.xml                   |      8 +-
 .../plc4x/java/examples/pollloop/PollLoop.java     |      2 +-
 plc4j/examples/pom.xml                             |      8 +-
 plc4j/integrations/apache-calcite/.factorypath     |    110 +
 plc4j/integrations/apache-calcite/pom.xml          |     14 +-
 plc4j/integrations/apache-kafka/.factorypath       |     72 +
 plc4j/integrations/apache-kafka/pom.xml            |     12 +-
 .../apache-nifi/nifi-plc4x-nar/.factorypath        |     93 +
 .../apache-nifi/nifi-plc4x-nar/pom.xml             |     10 +-
 .../apache-nifi/nifi-plc4x-processors/.factorypath |     73 +
 .../apache-nifi/nifi-plc4x-processors/pom.xml      |     28 +-
 .../org/apache/plc4x/nifi/Plc4xSinkProcessor.java  |      2 +-
 .../apache/plc4x/nifi/Plc4xSourceProcessor.java    |      2 +-
 .../nifi/subscription/Plc4xListenerDispatcher.java |      2 +-
 plc4j/integrations/apache-nifi/pom.xml             |      8 +-
 plc4j/integrations/plc4j-apache-karaf/pom.xml      |      2 +-
 plc4j/integrations/pom.xml                         |     18 +-
 plc4j/osgi/.factorypath                            |     46 +
 plc4j/osgi/pom.xml                                 |      8 +-
 plc4j/pom.xml                                      |      6 +-
 plc4j/spi/.factorypath                             |     45 +
 plc4j/spi/pom.xml                                  |      6 +-
 .../apache/plc4x/java/spi/ConversationContext.java |     58 +-
 .../apache/plc4x/java/spi/Plc4xNettyWrapper.java   |      5 +-
 .../fields/FieldReaderDiscriminatorEnum.java       |     41 +
 .../spi/codegen/fields/FieldReaderFactory.java     |      4 +
 .../java/spi/configuration/Configuration.java      |     23 -
 .../spi/configuration/ConfigurationFactory.java    |     47 +-
 .../java/spi/configuration/HasConfiguration.java   |      2 +-
 .../java/spi/configuration/PlcConfiguration.java   |     23 +
 .../configuration/PlcConnectionConfiguration.java  |     23 +
 .../configuration/PlcTransportConfiguration.java   |     22 +
 .../spi/configuration/annotations/Description.java |     32 +
 .../java/spi/connection/AbstractPlcConnection.java |     18 +-
 .../connection/CustomProtocolStackConfigurer.java  |     48 +-
 .../spi/connection/DefaultNettyPlcConnection.java  |     28 +-
 .../java/spi/connection/GeneratedDriverBase.java   |    261 +-
 .../spi/connection/ProtocolStackConfigurer.java    |      5 +-
 .../connection/SingleProtocolStackConfigurer.java  |      6 +-
 .../plc4x/java/spi/events/DiscoveredEvent.java     |      9 +-
 .../java/spi/generation/ReadBufferByteBased.java   |    113 +-
 .../java/spi/generation/ReadBufferXmlBased.java    |      3 +-
 .../java/spi/generation/WriteBufferByteBased.java  |     99 +-
 .../spi/internal/DefaultConversationContext.java   |      4 +-
 .../plc4x/java/spi/metadata/DefaultOption.java     |     67 +
 .../java/spi/metadata/DefaultOptionMetadata.java   |     46 +
 .../apache/plc4x/java/spi/transport/Transport.java |      3 +-
 .../java/spi/transport/TransportConfiguration.java |     25 -
 .../TransportConfigurationTypeProvider.java        |     26 -
 .../org/apache/plc4x/java/spi/values/PlcBINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcBOOL.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcBREAL.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcBYTE.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcCHAR.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcDATE.java  |      5 +
 .../plc4x/java/spi/values/PlcDATE_AND_LTIME.java   |    141 +
 .../org/apache/plc4x/java/spi/values/PlcDINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcDWORD.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcINT.java   |      5 +
 .../org/apache/plc4x/java/spi/values/PlcLDATE.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcLINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcLREAL.java |      5 +
 .../plc4x/java/spi/values/PlcLTIME_OF_DAY.java     |      2 +-
 .../org/apache/plc4x/java/spi/values/PlcLWORD.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcREAL.java  |      5 +
 .../plc4x/java/spi/values/PlcRawByteArray.java     |      9 +-
 .../org/apache/plc4x/java/spi/values/PlcSINT.java  |      7 +-
 .../apache/plc4x/java/spi/values/PlcStruct.java    |      2 +-
 .../org/apache/plc4x/java/spi/values/PlcUBINT.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcUDINT.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcUINT.java  |      5 +
 .../org/apache/plc4x/java/spi/values/PlcULINT.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcUSINT.java |      5 +
 .../plc4x/java/spi/values/PlcValueHandler.java     |     24 +
 .../org/apache/plc4x/java/spi/values/PlcWCHAR.java |      5 +
 .../org/apache/plc4x/java/spi/values/PlcWORD.java  |      5 +
 .../config/TestConfigurationComplex.java           |      5 +-
 .../config/TestConfigurationDefaults.java          |      4 +-
 .../TestConfigurationParameterConverter.java       |      4 +-
 .../config/TestConfigurationRequired.java          |      4 +-
 .../config/TestConfigurationSimple.java            |      4 +-
 .../connection/DefaultNettyPlcConnectionTest.java  |     35 +-
 .../plc4x/java/spi/connection/GateKeeper.java      |      2 +-
 .../java/spi/connection/PlcConnectionFactory.java  |      2 +-
 .../SingleProtocolStackConfigurerTest.java         |      2 +-
 .../java/spi/connection/TestChannelFactory.java    |      2 +-
 .../plc4x/java/spi/connection/TestMessage.java     |      2 +-
 .../plc4x/java/spi/connection/TestProtocol.java    |      2 +-
 .../optimizer/RequestTransactionManagerTest.java   |      2 +-
 .../java/spi/parser/ConnectionParserTest.java      |      4 +-
 plc4j/tools/capture-replay/.factorypath            |     35 +
 plc4j/tools/capture-replay/pom.xml                 |      4 +-
 plc4j/tools/connection-cache/.factorypath          |     30 +
 plc4j/tools/connection-cache/pom.xml               |     10 +-
 .../java/utils/cache/ConnectionContainer.java      |     10 +
 .../java/utils/cache/LeasedPlcConnection.java      |     12 +-
 plc4j/tools/opcua-server/.factorypath              |     83 +
 plc4j/tools/opcua-server/pom.xml                   |     12 +-
 .../opcuaserver/backend/Plc4xCommunication.java    |      4 +-
 plc4j/tools/opm/.factorypath                       |     49 +
 plc4j/tools/opm/pom.xml                            |     10 +-
 .../java/opm/PlcEntityManagerComplexTest.java      |      8 +-
 plc4j/tools/plc4x-server/.factorypath              |     65 +
 plc4j/tools/plc4x-server/pom.xml                   |     14 +-
 plc4j/tools/pom.xml                                |     21 +-
 plc4j/tools/scraper-ng/.factorypath                |     30 +
 plc4j/tools/scraper-ng/pom.xml                     |      8 +-
 plc4j/tools/scraper/.factorypath                   |     38 +
 plc4j/tools/scraper/pom.xml                        |     12 +-
 .../triggeredscraper/TriggeredScraperImpl.java     |     26 +-
 .../triggeredscraper/TriggeredScraperTask.java     |      4 +-
 plc4j/tools/ui/application/.factorypath            |    126 +
 plc4j/tools/ui/application/pom.xml                 |    179 +
 .../java/tools/ui/Plc4xUiBackendApplication.java   |     34 +
 .../src/main/resources/application-dev.properties  |     18 +
 .../src/main/resources/application.properties      |     31 +
 .../ui/application/src/main/resources/logback.xml  |     39 +
 .../tools/ui/Plc4xUiBackendApplicationTests.java   |     34 +
 .../src/test/resources/application-test.properties |     19 +
 plc4j/tools/ui/backend/.factorypath                |    126 +
 plc4j/tools/ui/backend/pom.xml                     |    161 +
 .../tools/ui/configuration/Plc4xConfiguration.java |     34 +
 .../tools/ui/configuration/WebSocketConfig.java    |     43 +
 .../java/tools/ui/controller/DeviceController.java |     64 +
 .../java/tools/ui/controller/DriverController.java |     51 +
 .../plc4x/java/tools/ui/event/DeviceEvent.java     |     30 +
 .../plc4x/java/tools/ui/event/EventType.java       |     28 +
 .../java/tools/ui/event/UiApplicationEvent.java    |     42 +
 .../java/tools/ui/handler/WebSocketHandler.java    |    107 +
 .../java/tools/ui/model/ConfigurationOption.java   |     52 +
 .../apache/plc4x/java/tools/ui/model/Device.java   |    109 +
 .../apache/plc4x/java/tools/ui/model/Driver.java   |     49 +
 .../plc4x/java/tools/ui/model/Transport.java       |     49 +
 .../java/tools/ui/repository/DeviceRepository.java |     30 +
 .../plc4x/java/tools/ui/service/DeviceService.java |     82 +
 .../plc4x/java/tools/ui/service/DriverService.java |    119 +
 plc4j/tools/ui/backend/ws.html                     |     36 +
 plc4j/tools/ui/frontend/.factorypath               |    124 +
 plc4j/tools/ui/frontend/pom.xml                    |    222 +
 plc4j/tools/ui/frontend/project/.eslintrc.cjs      |     37 +
 plc4j/tools/ui/frontend/project/.gitignore         |     25 +
 plc4j/tools/ui/frontend/project/README.md          |     49 +
 plc4j/tools/ui/frontend/project/index.html         |     32 +
 plc4j/tools/ui/frontend/project/package.json       |     51 +
 .../ui/frontend/project/public/plc4x-favicon.png   |    Bin 0 -> 6065 bytes
 plc4j/tools/ui/frontend/project/src/App.css        |     19 +
 plc4j/tools/ui/frontend/project/src/App.tsx        |    106 +
 .../ui/frontend/project/src/assets/plc4x-logo.svg  |   1494 +
 .../tools/ui/frontend/project/src/assets/react.svg |     23 +
 .../project/src/components/DeviceDialog.tsx        |    184 +
 .../project/src/components/NavigationTree.tsx      |    221 +
 .../project/src/components/PlcConnection.tsx       |     45 +
 .../src/generated/plc4j-tools-ui-frontend.ts       |    208 +
 plc4j/tools/ui/frontend/project/src/index.css      |    102 +
 .../ui/frontend/project/src/layouts/MainLayout.tsx |     73 +
 plc4j/tools/ui/frontend/project/src/main.tsx       |     37 +
 .../ui/frontend/project/src/model/TreeItemData.ts  |     37 +
 .../tools/ui/frontend/project/src/pages/About.tsx  |     24 +
 .../ui/frontend/project/src/pages/Inspect.tsx      |    140 +
 plc4j/tools/ui/frontend/project/src/pages/Mqtt.tsx |     24 +
 .../tools/ui/frontend/project/src/pages/OpcUa.tsx  |     24 +
 .../ui/frontend/project/src/pages/Settings.tsx     |     24 +
 plc4j/tools/ui/frontend/project/src/store/index.ts |     91 +
 .../tools/ui/frontend/project/src/utils/Counter.ts |     28 +
 plc4j/tools/ui/frontend/project/src/vite-env.d.ts  |     20 +
 plc4j/tools/ui/frontend/project/tsconfig.json      |     25 +
 plc4j/tools/ui/frontend/project/tsconfig.node.json |     10 +
 plc4j/tools/ui/frontend/project/vite.config.ts     |     26 +
 plc4j/tools/ui/pom.xml                             |    113 +
 plc4j/transports/can/.factorypath                  |     45 +
 plc4j/transports/can/pom.xml                       |      6 +-
 .../plc4x/java/transport/can/CANTransport.java     |      5 +-
 .../transport/can/CANTransportConfiguration.java   |      4 +-
 plc4j/transports/pcap-replay/.factorypath          |     48 +
 plc4j/transports/pcap-replay/pom.xml               |     14 +-
 .../DefaultPcapReplayTransportConfiguration.java   |     10 +
 .../transport/pcapreplay/PcapReplayTransport.java  |      4 +-
 plc4j/transports/pcap-shared/.factorypath          |     48 +
 plc4j/transports/pcap-shared/pom.xml               |      8 +-
 .../pcap/DefaultPcapTransportConfiguration.java    |      3 +
 .../transport/pcap/PcapTransportConfiguration.java |      4 +-
 plc4j/transports/pom.xml                           |      4 +-
 plc4j/transports/raw-socket/.factorypath           |     49 +
 plc4j/transports/raw-socket/pom.xml                |     14 +-
 .../DefaultRawSocketTransportConfiguration.java    |      2 +
 .../transport/rawsocket/RawSocketTransport.java    |      4 +-
 plc4j/transports/serial/.factorypath               |     45 +
 plc4j/transports/serial/pom.xml                    |      8 +-
 .../DefaultSerialTransportConfiguration.java       |     47 +-
 .../java/transport/serial/SerialChannelConfig.java |     18 +-
 .../transport/serial/SerialChannelFactory.java     |      2 +-
 .../transport/serial/SerialChannelHandler.java     |      2 +-
 .../transport/serial/SerialChannelOptions.java     |      6 +-
 .../serial/SerialChannelOptionsParity.java         |     35 +
 .../java/transport/serial/SerialTransport.java     |     20 +-
 .../serial/SerialTransportConfiguration.java       |      6 +-
 plc4j/transports/socketcan/.factorypath            |     46 +
 plc4j/transports/socketcan/pom.xml                 |     14 +-
 .../transport/socketcan/SocketCANTransport.java    |     13 +-
 plc4j/transports/tcp/.factorypath                  |     45 +
 plc4j/transports/tcp/pom.xml                       |      8 +-
 .../tcp/DefaultTcpTransportConfiguration.java      |      4 +
 .../plc4x/java/transport/tcp/TcpTransport.java     |      4 +-
 .../transport/tcp/TcpTransportConfiguration.java   |      4 +-
 plc4j/transports/test/.factorypath                 |     52 +
 plc4j/transports/test/pom.xml                      |      6 +-
 .../plc4x/java/transport/test/TestTransport.java   |      6 +
 .../transport/test/TestTransportConfiguration.java |      4 +-
 plc4j/transports/udp/.factorypath                  |     45 +
 plc4j/transports/udp/pom.xml                       |      8 +-
 .../udp/DefaultUdpTransportConfiguration.java      |      4 +
 .../plc4x/java/transport/udp/UdpTransport.java     |      4 +-
 .../transport/udp/UdpTransportConfiguration.java   |      4 +-
 plc4j/transports/virtualcan/.factorypath           |     45 +
 plc4j/transports/virtualcan/pom.xml                |     12 +-
 .../java/transport/virtualcan/VirtualCANFrame.java |     37 +-
 .../transport/virtualcan/VirtualCANTransport.java  |     17 +-
 .../transport/virtualcan/io/VirtualCANFrameIO.java |     43 -
 plc4j/utils/pcap-replay/.factorypath               |     39 +
 plc4j/utils/pcap-replay/pom.xml                    |      6 +-
 plc4j/utils/pcap-shared/.factorypath               |     38 +
 plc4j/utils/pcap-shared/pom.xml                    |      4 +-
 plc4j/utils/plc-simulator/.factorypath             |     56 +
 plc4j/utils/plc-simulator/pom.xml                  |     14 +-
 plc4j/utils/pom.xml                                |      4 +-
 plc4j/utils/raw-sockets/.factorypath               |     40 +
 plc4j/utils/raw-sockets/pom.xml                    |      8 +-
 plc4j/utils/test-generator/.factorypath            |     58 +
 plc4j/utils/test-generator/pom.xml                 |     14 +-
 plc4j/utils/test-utils/.factorypath                |     56 +
 plc4j/utils/test-utils/pom.xml                     |     10 +-
 .../apache/plc4x/test/DisableOnJenkinsFlag.java    |     37 +
 .../plc4x/test/DisableOnJenkinsFlagCondition.java  |     42 +
 .../plc4x/test/driver/internal/TestStep.java       |      5 +-
 .../internal/handlers/ApiRequestHandler.java       |    144 +-
 .../handlers/IncomingPlcMessageHandler.java        |      7 +-
 .../org/apache/plc4x/test/manual/ManualTest.java   |     13 +-
 .../migration/MessageValidatorAndMigrator.java     |      9 +-
 plc4net/api/pom.xml                                |     71 -
 .../knxnetip/readwrite/model/KnxManufacturer.cs    |    111 +-
 .../knxnetip/readwrite/model/KnxProperty.cs        |     88 +-
 plc4net/pom.xml                                    |     10 +-
 {sandbox/plc4py => plc4py}/.gitignore              |      0
 {sandbox/plc4py => plc4py}/.pre-commit-config.yaml |      0
 plc4py/plc4py/PlcDriverManager.py                  |    103 +
 {sandbox/plc4py => plc4py}/plc4py/__init__.py      |      0
 plc4py/plc4py/api/PlcConnection.py                 |    119 +
 {sandbox/plc4py => plc4py}/plc4py/api/PlcDriver.py |      0
 {sandbox/plc4py => plc4py}/plc4py/api/__init__.py  |      0
 .../plc4py/api/authentication/PlcAuthentication.py |      0
 .../plc4py/api/authentication/__init__.py          |      0
 .../plc4py/api/exceptions/__init__.py              |      0
 plc4py/plc4py/api/exceptions/exceptions.py         |     51 +
 .../plc4py/api/listener/__init__.py                |      0
 .../plc4py/api/messages/PlcDiscovery.py            |      0
 .../plc4py/api/messages/PlcField.py                |      0
 plc4py/plc4py/api/messages/PlcMessage.py           |     23 +
 plc4py/plc4py/api/messages/PlcRequest.py           |    104 +
 plc4py/plc4py/api/messages/PlcResponse.py          |     88 +
 .../plc4py/api/messages/__init__.py                |      0
 plc4py/plc4py/api/value/PlcValue.py                |     67 +
 .../plc4py => plc4py}/plc4py/api/value/__init__.py |      0
 plc4py/plc4py/drivers/PlcDriverLoader.py           |     45 +
 .../plc4py => plc4py}/plc4py/drivers/__init__.py   |      0
 plc4py/plc4py/drivers/mock/MockConnection.py       |    232 +
 .../plc4py/drivers/mock/MockReadRequestBuilder.py  |      0
 .../plc4py/drivers/mock/MockTag.py                 |      0
 .../plc4py/drivers/mock/__init__.py                |      0
 .../plc4py/drivers/modbus/ModbusConfiguration.py   |     37 +
 plc4py/plc4py/drivers/modbus/ModbusConnection.py   |    228 +
 plc4py/plc4py/drivers/modbus/ModbusDevice.py       |    161 +
 .../plc4py/drivers/modbus/ModbusProtocol.py        |      0
 .../plc4py/drivers/modbus/ModbusTag.py             |      0
 .../plc4py/drivers/modbus/__init__.py              |      0
 plc4py/plc4py/drivers/umas/UmasConfiguration.py    |     38 +
 plc4py/plc4py/drivers/umas/UmasConnection.py       |    290 +
 plc4py/plc4py/drivers/umas/UmasDevice.py           |    465 +
 plc4py/plc4py/drivers/umas/UmasProtocol.py         |    101 +
 plc4py/plc4py/drivers/umas/UmasTag.py              |     79 +
 plc4py/plc4py/drivers/umas/UmasVariables.py        |    212 +
 .../plc4py/drivers/umas}/__init__.py               |      0
 .../modbus => plc4py/plc4py/protocols}/__init__.py |      0
 .../plc4py/protocols/modbus/StaticHelper.py        |      0
 .../plc4py/protocols/modbus}/__init__.py           |      0
 .../plc4py/protocols/modbus/readwrite/DataItem.py  |    654 +
 .../protocols/modbus/readwrite/DriverType.py       |     28 +
 .../plc4py/protocols/modbus/readwrite/ModbusADU.py |    169 +
 .../protocols/modbus/readwrite/ModbusAsciiADU.py   |    155 +
 .../protocols/modbus/readwrite/ModbusConstants.py  |      0
 .../protocols/modbus/readwrite/ModbusDataType.py   |      0
 .../ModbusDeviceInformationConformityLevel.py      |     28 +
 .../readwrite/ModbusDeviceInformationLevel.py      |     29 +
 .../ModbusDeviceInformationMoreFollows.py          |     27 +
 .../readwrite/ModbusDeviceInformationObject.py     |    121 +
 .../protocols/modbus/readwrite/ModbusErrorCode.py  |     35 +
 .../plc4py/protocols/modbus/readwrite/ModbusPDU.py |    676 +
 .../modbus/readwrite/ModbusPDUDiagnosticRequest.py |    125 +
 .../readwrite/ModbusPDUDiagnosticResponse.py       |    125 +
 .../protocols/modbus/readwrite/ModbusPDUError.py   |    114 +
 .../ModbusPDUGetComEventCounterRequest.py          |     94 +
 .../ModbusPDUGetComEventCounterResponse.py         |    129 +
 .../readwrite/ModbusPDUGetComEventLogRequest.py    |     94 +
 .../readwrite/ModbusPDUGetComEventLogResponse.py   |    176 +
 .../ModbusPDUMaskWriteHoldingRegisterRequest.py    |    148 +
 .../ModbusPDUMaskWriteHoldingRegisterResponse.py   |    148 +
 .../modbus/readwrite/ModbusPDUReadCoilsRequest.py  |    127 +
 .../modbus/readwrite/ModbusPDUReadCoilsResponse.py |    123 +
 .../ModbusPDUReadDeviceIdentificationRequest.py    |    144 +
 .../ModbusPDUReadDeviceIdentificationResponse.py   |    251 +
 .../ModbusPDUReadDiscreteInputsRequest.py          |    127 +
 .../ModbusPDUReadDiscreteInputsResponse.py         |    125 +
 .../ModbusPDUReadExceptionStatusRequest.py         |     96 +
 .../ModbusPDUReadExceptionStatusResponse.py        |    108 +
 .../readwrite/ModbusPDUReadFifoQueueRequest.py     |    112 +
 .../readwrite/ModbusPDUReadFifoQueueResponse.py    |    136 +
 .../readwrite/ModbusPDUReadFileRecordRequest.py    |    128 +
 .../ModbusPDUReadFileRecordRequestItem.py          |    143 +
 .../readwrite/ModbusPDUReadFileRecordResponse.py   |    128 +
 .../ModbusPDUReadFileRecordResponseItem.py         |    127 +
 .../ModbusPDUReadHoldingRegistersRequest.py        |    129 +
 .../ModbusPDUReadHoldingRegistersResponse.py       |    125 +
 .../ModbusPDUReadInputRegistersRequest.py          |    127 +
 .../ModbusPDUReadInputRegistersResponse.py         |    125 +
 ...sPDUReadWriteMultipleHoldingRegistersRequest.py |    205 +
 ...PDUReadWriteMultipleHoldingRegistersResponse.py |    125 +
 .../readwrite/ModbusPDUReportServerIdRequest.py    |     94 +
 .../readwrite/ModbusPDUReportServerIdResponse.py   |    123 +
 .../readwrite/ModbusPDUWriteFileRecordRequest.py   |    128 +
 .../ModbusPDUWriteFileRecordRequestItem.py         |    159 +
 .../readwrite/ModbusPDUWriteFileRecordResponse.py  |    128 +
 .../ModbusPDUWriteFileRecordResponseItem.py        |    159 +
 .../ModbusPDUWriteMultipleCoilsRequest.py          |    161 +
 .../ModbusPDUWriteMultipleCoilsResponse.py         |    129 +
 ...odbusPDUWriteMultipleHoldingRegistersRequest.py |    163 +
 ...dbusPDUWriteMultipleHoldingRegistersResponse.py |    133 +
 .../readwrite/ModbusPDUWriteSingleCoilRequest.py   |    127 +
 .../readwrite/ModbusPDUWriteSingleCoilResponse.py  |    127 +
 .../ModbusPDUWriteSingleRegisterRequest.py         |    129 +
 .../ModbusPDUWriteSingleRegisterResponse.py        |    129 +
 .../protocols/modbus/readwrite/ModbusRtuADU.py     |    153 +
 .../protocols/modbus/readwrite/ModbusTcpADU.py     |    190 +
 .../plc4py/protocols/modbus/readwrite}/__init__.py |      0
 .../protocols/simulated/readwrite/DataItem.py      |    680 +
 .../plc4py/protocols/simulated/readwrite/Dummy.py  |     95 +
 .../simulated/readwrite/SimulatedDataTypeSizes.py  |      0
 plc4py/plc4py/protocols/umas/StaticHelper.py       |    141 +
 .../plc4py/protocols/umas}/__init__.py             |      0
 plc4py/plc4py/protocols/umas/readwrite/DataItem.py |    384 +
 .../protocols/umas/readwrite/ModbusErrorCode.py    |     35 +
 .../plc4py/protocols/umas/readwrite/ModbusPDU.py   |    200 +
 .../protocols/umas/readwrite/ModbusPDUError.py     |    123 +
 .../protocols/umas/readwrite/ModbusTcpADU.py       |    160 +
 .../umas/readwrite/PlcMemoryBlockIdent.py          |    137 +
 .../protocols/umas/readwrite/UmasConstants.py      |     94 +
 .../protocols/umas/readwrite/UmasDataType.py       |     50 +
 .../umas/readwrite/UmasDatatypeReference.py        |    175 +
 .../UmasDeviceInformationConformityLevel.py        |     28 +
 .../umas/readwrite/UmasDeviceInformationLevel.py   |     29 +
 .../readwrite/UmasDeviceInformationMoreFollows.py  |     27 +
 .../umas/readwrite/UmasInitCommsRequest.py         |    118 +
 .../umas/readwrite/UmasInitCommsResponse.py        |    225 +
 .../protocols/umas/readwrite/UmasMemoryBlock.py    |    161 +
 .../umas/readwrite/UmasMemoryBlockBasicInfo.py     |    165 +
 plc4py/plc4py/protocols/umas/readwrite/UmasPDU.py  |    114 +
 .../plc4py/protocols/umas/readwrite/UmasPDUItem.py |    314 +
 .../umas/readwrite/UmasPDUPlcIdentRequest.py       |     96 +
 .../umas/readwrite/UmasPDUPlcIdentResponse.py      |    378 +
 .../umas/readwrite/UmasPDUPlcStatusRequest.py      |     96 +
 .../umas/readwrite/UmasPDUPlcStatusResponse.py     |    188 +
 .../umas/readwrite/UmasPDUProjectInfoRequest.py    |    114 +
 .../readwrite/UmasPDUReadDatatypeNamesResponse.py  |    158 +
 .../readwrite/UmasPDUReadMemoryBlockRequest.py     |    202 +
 .../readwrite/UmasPDUReadMemoryBlockResponse.py    |    160 +
 .../UmasPDUReadUmasUDTDefinitionResponse.py        |    146 +
 .../readwrite/UmasPDUReadUnlocatedVariableNames.py |    153 +
 .../UmasPDUReadUnlocatedVariableNamesRequest.py    |    220 +
 .../UmasPDUReadUnlocatedVariableNamesResponse.py   |    164 +
 .../UmasPDUReadUnlocatedVariableResponse.py        |    122 +
 .../umas/readwrite/UmasPDUReadVariableRequest.py   |    162 +
 .../umas/readwrite/UmasPDUReadVariableResponse.py  |    118 +
 .../protocols/umas/readwrite/UmasUDTDefinition.py  |    159 +
 .../readwrite/UmasUnlocatedVariableReference.py    |    212 +
 .../protocols/umas/readwrite/UmasVariableBlock.py  |    148 +
 .../umas/readwrite/VariableRequestReference.py     |    182 +
 .../plc4py/protocols/umas/readwrite}/__init__.py   |      0
 plc4py/plc4py/spi/Plc4xBaseProtocol.py             |     38 +
 .../plc4py/spi/PlcDriverClassLoader.py             |      0
 .../spi/context => plc4py/plc4py/spi}/__init__.py  |      0
 .../plc4py/spi/configuration/PlcConfiguration.py   |      0
 .../plc4py/spi/configuration}/__init__.py          |      0
 .../plc4py/spi/connection/ProtocolStack.py         |      0
 .../plc4py/spi/connection}/__init__.py             |      0
 .../plc4py/spi/context/DriverContext.py            |      0
 .../plc4py/spi/context}/__init__.py                |      0
 plc4py/plc4py/spi/generation/ReadBuffer.py         |    425 +
 plc4py/plc4py/spi/generation/WriteBuffer.py        |    577 +
 .../plc4py/spi/generation/__init__.py              |      0
 .../plc4py/spi/messages/ChannelMessage.py          |      0
 .../plc4py/spi/messages/PlcReader.py               |      0
 plc4py/plc4py/spi/messages/PlcRequest.py           |     81 +
 plc4py/plc4py/spi/messages/PlcWriter.py            |     37 +
 .../plc4py/spi/messages}/__init__.py               |      0
 plc4py/plc4py/spi/messages/utils/ResponseItem.py   |     32 +
 .../plc4py/spi/messages}/utils/__init__.py         |      0
 .../plc4py/spi/transport/Plc4xBaseTransport.py     |      0
 .../plc4py/spi/transport/TCPTransport.py           |      0
 .../plc4py/spi/transport}/__init__.py              |      0
 plc4py/plc4py/spi/values/Common.py                 |     30 +
 .../plc4py/spi/values/PlcValues.py                 |      0
 .../unit => plc4py/plc4py/spi/values}/__init__.py  |      0
 .../plc4py/utils/ConnectionStringHandling.py       |      0
 .../plc4py => plc4py}/plc4py/utils/GenericTypes.py |      0
 .../plc4py => plc4py/plc4py/utils}/__init__.py     |      0
 plc4py/pom.xml                                     |    318 +
 plc4py/pytest.ini                                  |     21 +
 plc4py/requirements.txt                            |     54 +
 {sandbox/plc4py => plc4py}/setup.cfg               |      0
 plc4py/setup.py                                    |     68 +
 .../unit/plc4py/api => plc4py/tests}/__init__.py   |      0
 plc4py/tests/test_plc4py.py                        |     72 +
 .../drivers => plc4py/tests/unit}/__init__.py      |      0
 .../tests/unit/plc4py}/__init__.py                 |      0
 .../tests/unit/plc4py/api}/__init__.py             |      0
 plc4py/tests/unit/plc4py/api/test_PlcRequest.py    |    167 +
 .../tests/unit/plc4py/drivers}/__init__.py         |      0
 .../tests/unit/plc4py/drivers/modbus}/__init__.py  |      0
 .../plc4py/drivers/modbus/test_modbus_codegen.py   |     59 +
 .../drivers/modbus/test_modbus_connection.py       |     70 +
 .../tests/unit/plc4py/drivers/umas}/__init__.py    |      0
 .../plc4py/drivers/umas/test_umas_connection.py    |     66 +
 .../tests/unit/plc4py/spi}/__init__.py             |      0
 .../unit/plc4py/spi/configuration}/__init__.py     |      0
 .../plc4py/spi/configuration/test_configuration.py |      0
 .../tests/unit/plc4py/spi/tcp}/__init__.py         |      0
 plc4py/tests/unit/plc4py/spi/tcp/server.py         |     47 +
 plc4py/tests/unit/plc4py/spi/test_protocol.py      |     65 +
 plc4py/tests/unit/plc4py/spi/test_read_buffer.py   |    153 +
 plc4py/tests/unit/plc4py/spi/test_transport.py     |     92 +
 plc4py/tests/unit/plc4py/spi/test_write_buffer.py  |    285 +
 pom.xml                                            |    147 +-
 protocols/ab-eth/.factorypath                      |     34 +
 protocols/ab-eth/pom.xml                           |      6 +-
 protocols/ads/.factorypath                         |     34 +
 protocols/ads/pom.xml                              |      6 +-
 .../resources/protocols/ads/DriverTestsuite.xml    |   1404 +-
 protocols/bacnetip/.factorypath                    |     34 +
 protocols/bacnetip/pom.xml                         |      6 +-
 .../protocols/bacnetip/bacnet-vendorids.mspec      |     11 +-
 protocols/c-bus/.factorypath                       |     34 +
 protocols/c-bus/pom.xml                            |      6 +-
 protocols/canopen/.factorypath                     |     34 +
 protocols/canopen/pom.xml                          |      6 +-
 .../src/main/resources/protocols/can/canopen.mspec |      6 +-
 protocols/df1/.factorypath                         |     34 +
 protocols/df1/pom.xml                              |      6 +-
 protocols/eip/.factorypath                         |     34 +
 protocols/eip/pom.xml                              |      6 +-
 protocols/firmata/.factorypath                     |     34 +
 protocols/firmata/pom.xml                          |      6 +-
 protocols/genericcan/.factorypath                  |     34 +
 protocols/genericcan/pom.xml                       |      6 +-
 .../main/resources/protocols/can/genericcan.mspec  |      6 +-
 protocols/iec-60870/.factorypath                   |     34 +
 protocols/iec-60870/pom.xml                        |      6 +-
 protocols/knxnetip/.factorypath                    |     35 +
 protocols/knxnetip/pom.xml                         |      6 +-
 .../protocols/knxnetip/knx-master-data.mspec       |   1029 +-
 .../resources/protocols/knxnetip/knxnetip.mspec    |     14 +-
 protocols/knxnetip/src/main/xslt/knx-types.xsl     |     24 +-
 protocols/modbus/.factorypath                      |     34 +
 protocols/modbus/pom.xml                           |      6 +-
 .../protocols/modbus/tcp/Modbus-all-datatypes.xml  |   3404 +
 protocols/mqtt/.factorypath                        |     34 +
 protocols/mqtt/pom.xml                             |      6 +-
 protocols/opcua/.factorypath                       |     62 +
 protocols/opcua/pom.xml                            |      6 +-
 .../generated/protocols/opcua/opc-manual.mspec     |    167 +-
 protocols/opcua/src/main/xslt/opc-manual.xsl       |    167 +-
 .../resources/protocols/opcua/DriverTestsuite.xml  |     48 +-
 protocols/open-protocol/.factorypath               |     35 +
 protocols/open-protocol/pom.xml                    |      6 +-
 protocols/plc4x-api/.factorypath                   |     34 +
 protocols/plc4x-api/pom.xml                        |      6 +-
 protocols/plc4x/.factorypath                       |     34 +
 protocols/plc4x/pom.xml                            |      6 +-
 .../main/resources/protocols/plc4x/v0/plc4x.mspec  |      2 +-
 .../protocols/plc4x/ParserSerializerTestsuite.xml  |      2 +-
 protocols/pom.xml                                  |      5 +-
 protocols/profinet/.factorypath                    |     34 +
 protocols/profinet/pom.xml                         |      6 +-
 protocols/s7/.factorypath                          |     34 +
 protocols/s7/pom.xml                               |      6 +-
 .../s7/src/main/resources/protocols/s7/s7.mspec    |    210 +-
 protocols/simulated/.factorypath                   |     34 +
 protocols/simulated/pom.xml                        |      6 +-
 protocols/socketcan/.factorypath                   |     34 +
 protocols/socketcan/pom.xml                        |      6 +-
 protocols/umas/.factorypath                        |     34 +
 protocols/umas/pom.xml                             |     53 +
 .../apache/plc4x/protocol/umas/UmasProtocol.java   |     42 +
 ...e.plc4x.plugins.codegenerator.protocol.Protocol |     19 +
 .../src/main/resources/protocols/umas/umas.mspec   |    340 +
 .../plc4x/protocol/umas/UmasProtocolTest.java      |     37 +
 .../umas}/src/test/resources/logback-test.xml      |      0
 reactors/all-drivers/pom.xml                       |      4 +-
 sandbox/.gitignore                                 |      1 -
 sandbox/discovery/pom.xml                          |     52 -
 .../plc4x/java/discovery/DiscoveryConnection.java  |    186 -
 .../plc4x/java/discovery/DiscoveryDriver.java      |     52 -
 .../plc4x/java/discovery/DiscoveryTagHandler.java  |     39 -
 .../services/org.apache.plc4x.java.api.PlcDriver   |     19 -
 sandbox/plc4py/plc4py/PlcDriverManager.py          |    103 -
 sandbox/plc4py/plc4py/api/PlcConnection.py         |     77 -
 sandbox/plc4py/plc4py/api/exceptions/exceptions.py |     47 -
 sandbox/plc4py/plc4py/api/messages/PlcMessage.py   |     22 -
 sandbox/plc4py/plc4py/api/messages/PlcRequest.py   |     57 -
 sandbox/plc4py/plc4py/api/messages/PlcResponse.py  |     72 -
 sandbox/plc4py/plc4py/api/value/PlcValue.py        |     62 -
 sandbox/plc4py/plc4py/drivers/PlcDriverLoader.py   |     45 -
 .../plc4py/plc4py/drivers/mock/MockConnection.py   |    174 -
 .../plc4py/drivers/modbus/ModbusConfiguration.py   |     33 -
 .../plc4py/drivers/modbus/ModbusConnection.py      |    150 -
 .../plc4py/plc4py/drivers/modbus/ModbusDevice.py   |    152 -
 .../plc4py/protocols/modbus/readwrite/DataItem.py  |    632 -
 .../protocols/modbus/readwrite/DriverType.py       |     27 -
 .../plc4py/protocols/modbus/readwrite/ModbusADU.py |    165 -
 .../protocols/modbus/readwrite/ModbusAsciiADU.py   |    153 -
 .../ModbusDeviceInformationConformityLevel.py      |     27 -
 .../readwrite/ModbusDeviceInformationLevel.py      |     28 -
 .../ModbusDeviceInformationMoreFollows.py          |     26 -
 .../readwrite/ModbusDeviceInformationObject.py     |    119 -
 .../protocols/modbus/readwrite/ModbusErrorCode.py  |     34 -
 .../plc4py/protocols/modbus/readwrite/ModbusPDU.py |    643 -
 .../modbus/readwrite/ModbusPDUDiagnosticRequest.py |    123 -
 .../readwrite/ModbusPDUDiagnosticResponse.py       |    123 -
 .../protocols/modbus/readwrite/ModbusPDUError.py   |    114 -
 .../ModbusPDUGetComEventCounterRequest.py          |     93 -
 .../ModbusPDUGetComEventCounterResponse.py         |    125 -
 .../readwrite/ModbusPDUGetComEventLogRequest.py    |     93 -
 .../readwrite/ModbusPDUGetComEventLogResponse.py   |    172 -
 .../ModbusPDUMaskWriteHoldingRegisterRequest.py    |    142 -
 .../ModbusPDUMaskWriteHoldingRegisterResponse.py   |    142 -
 .../modbus/readwrite/ModbusPDUReadCoilsRequest.py  |    125 -
 .../modbus/readwrite/ModbusPDUReadCoilsResponse.py |    123 -
 .../ModbusPDUReadDeviceIdentificationRequest.py    |    142 -
 .../ModbusPDUReadDeviceIdentificationResponse.py   |    247 -
 .../ModbusPDUReadDiscreteInputsRequest.py          |    125 -
 .../ModbusPDUReadDiscreteInputsResponse.py         |    125 -
 .../ModbusPDUReadExceptionStatusRequest.py         |     95 -
 .../ModbusPDUReadExceptionStatusResponse.py        |    108 -
 .../readwrite/ModbusPDUReadFifoQueueRequest.py     |    112 -
 .../readwrite/ModbusPDUReadFifoQueueResponse.py    |    136 -
 .../readwrite/ModbusPDUReadFileRecordRequest.py    |    128 -
 .../ModbusPDUReadFileRecordRequestItem.py          |    139 -
 .../readwrite/ModbusPDUReadFileRecordResponse.py   |    128 -
 .../ModbusPDUReadFileRecordResponseItem.py         |    127 -
 .../ModbusPDUReadHoldingRegistersRequest.py        |    127 -
 .../ModbusPDUReadHoldingRegistersResponse.py       |    125 -
 .../ModbusPDUReadInputRegistersRequest.py          |    125 -
 .../ModbusPDUReadInputRegistersResponse.py         |    125 -
 ...sPDUReadWriteMultipleHoldingRegistersRequest.py |    199 -
 ...PDUReadWriteMultipleHoldingRegistersResponse.py |    125 -
 .../readwrite/ModbusPDUReportServerIdRequest.py    |     93 -
 .../readwrite/ModbusPDUReportServerIdResponse.py   |    123 -
 .../readwrite/ModbusPDUWriteFileRecordRequest.py   |    128 -
 .../ModbusPDUWriteFileRecordRequestItem.py         |    155 -
 .../readwrite/ModbusPDUWriteFileRecordResponse.py  |    128 -
 .../ModbusPDUWriteFileRecordResponseItem.py        |    155 -
 .../ModbusPDUWriteMultipleCoilsRequest.py          |    159 -
 .../ModbusPDUWriteMultipleCoilsResponse.py         |    127 -
 ...odbusPDUWriteMultipleHoldingRegistersRequest.py |    159 -
 ...dbusPDUWriteMultipleHoldingRegistersResponse.py |    129 -
 .../readwrite/ModbusPDUWriteSingleCoilRequest.py   |    123 -
 .../readwrite/ModbusPDUWriteSingleCoilResponse.py  |    123 -
 .../ModbusPDUWriteSingleRegisterRequest.py         |    125 -
 .../ModbusPDUWriteSingleRegisterResponse.py        |    125 -
 .../protocols/modbus/readwrite/ModbusRtuADU.py     |    151 -
 .../protocols/modbus/readwrite/ModbusTcpADU.py     |    188 -
 .../protocols/simulated/readwrite/DataItem.py      |    658 -
 .../plc4py/protocols/simulated/readwrite/Dummy.py  |     93 -
 sandbox/plc4py/plc4py/spi/Plc4xBaseProtocol.py     |     38 -
 sandbox/plc4py/plc4py/spi/generation/ReadBuffer.py |    376 -
 .../plc4py/plc4py/spi/generation/WriteBuffer.py    |    320 -
 sandbox/plc4py/plc4py/spi/messages/PlcRequest.py   |     43 -
 .../plc4py/spi/messages/utils/ResponseItem.py      |     32 -
 sandbox/plc4py/plc4py/spi/values/Common.py         |     25 -
 sandbox/plc4py/pom.xml                             |    297 -
 sandbox/plc4py/setup.py                            |     65 -
 sandbox/plc4py/tests/test_plc4py.py                |     66 -
 .../tests/unit/plc4py/api/test_PlcRequest.py       |    167 -
 .../plc4py/drivers/modbus/test_modbus_codegen.py   |     55 -
 .../drivers/modbus/test_modbus_connection.py       |     41 -
 sandbox/plc4py/tests/unit/plc4py/spi/tcp/server.py |     48 -
 .../plc4py/tests/unit/plc4py/spi/test_protocol.py  |     64 -
 .../tests/unit/plc4py/spi/test_read_buffer.py      |    151 -
 .../plc4py/tests/unit/plc4py/spi/test_transport.py |     90 -
 .../tests/unit/plc4py/spi/test_write_buffer.py     |    285 -
 sandbox/pom.xml                                    |     78 -
 sandbox/test-java-df1-driver/README.adoc           |     35 -
 sandbox/test-java-df1-driver/pom.xml               |    180 -
 .../plc4x/java/df1/readwrite/DF1Command.java       |    181 -
 .../apache/plc4x/java/df1/readwrite/DF1Symbol.java |    182 -
 .../java/df1/readwrite/DF1SymbolMessageFrame.java  |    269 -
 .../df1/readwrite/DF1SymbolMessageFrameACK.java    |    120 -
 .../df1/readwrite/DF1SymbolMessageFrameNAK.java    |    120 -
 .../df1/readwrite/DF1UnprotectedReadRequest.java   |    159 -
 .../df1/readwrite/DF1UnprotectedReadResponse.java  |    156 -
 .../org/apache/plc4x/java/df1/DF1PlcDriver.java    |     70 -
 .../java/df1/configuration/Df1Configuration.java   |     48 -
 .../org/apache/plc4x/java/df1/field/Df1Tag.java    |     82 -
 .../apache/plc4x/java/df1/field/Df1TagHandler.java |     38 -
 .../plc4x/java/df1/protocol/Df1Protocol.java       |    157 -
 .../plc4x/java/df1/protocol/Df1ProtocolLogic.java  |     43 -
 .../plc4x/java/df1/protocol/Plc4XDf1Protocol.java  |    172 -
 .../java/df1/readwrite/utils/StaticHelper.java     |     95 -
 .../org/apache/plc4x/java/df1/types/DataType.java  |     52 -
 .../services/org.apache.plc4x.java.api.PlcDriver   |     19 -
 .../plc4x/protocol/df1/BenchmarkGeneratedDf1.java  |     75 -
 .../plc4x/protocol/df1/BenchmarkManualDf1.java     |    238 -
 .../protocol/df1/Df1ParserSerializerTest.java      |     31 -
 .../apache/plc4x/protocol/df1/EndToEndTest.java    |     50 -
 src/main/script/prerequisiteCheck.groovy           |      7 +-
 src/site/asciidoc/developers/building.adoc         |     54 +-
 src/site/asciidoc/developers/code-gen/index.adoc   |    111 +-
 .../developers/code-gen/protocol/mspec.adoc        |    263 +-
 .../asciidoc/developers/infrastructure/ci.adoc     |     41 +-
 .../asciidoc/developers/infrastructure/issues.adoc |      4 +-
 .../asciidoc/developers/infrastructure/vm.adoc     |      2 +-
 .../asciidoc/developers/infrastructure/vpn.adoc    |    189 -
 src/site/asciidoc/developers/maturity.adoc         |     14 +-
 src/site/asciidoc/developers/release/release.adoc  |     18 +-
 .../asciidoc/developers/release/validation.adoc    |      1 -
 src/site/asciidoc/developers/team.adoc             |     36 +-
 src/site/asciidoc/images/users/protocols/.png      |    Bin 2331 -> 0 bytes
 src/site/asciidoc/index.adoc                       |     31 +-
 src/site/asciidoc/users/download.adoc              |     60 +-
 .../users/getting-started/general-concepts.adoc    |     47 +-
 src/site/asciidoc/users/getting-started/index.adoc |     28 +
 src/site/asciidoc/users/getting-started/plc4c.adoc |     18 +
 .../asciidoc/users/getting-started/plc4cs.adoc     |     18 +
 .../asciidoc/users/getting-started/plc4go.adoc     |      2 +-
 src/site/asciidoc/users/getting-started/plc4j.adoc |     14 +-
 .../asciidoc/users/getting-started/plc4py.adoc     |    208 +
 .../users/getting-started/virtual-modbus.adoc      |     49 +-
 src/site/asciidoc/users/gettingstarted.adoc        |     28 -
 src/site/asciidoc/users/index.adoc                 |    121 +-
 .../users/integrations/apache-streampipes.adoc     |      4 +
 src/site/asciidoc/users/issues.adoc                |     24 +
 src/site/asciidoc/users/protocols/ab-eth.adoc      |      4 +
 src/site/asciidoc/users/protocols/ads.adoc         |     48 +-
 src/site/asciidoc/users/protocols/bacnet.adoc      |     52 +
 src/site/asciidoc/users/protocols/bacnetip.adoc    |     99 -
 src/site/asciidoc/users/protocols/c-bus.adoc       |     24 +
 src/site/asciidoc/users/protocols/can.adoc         |      1 +
 src/site/asciidoc/users/protocols/canopen.adoc     |     41 +-
 src/site/asciidoc/users/protocols/ctrlx.adoc       |     24 +
 src/site/asciidoc/users/protocols/eip.adoc         |     58 +
 src/site/asciidoc/users/protocols/ethernet-ip.adoc |     98 -
 src/site/asciidoc/users/protocols/firmata.adoc     |     29 +-
 src/site/asciidoc/users/protocols/genericcan.adoc  |     31 +-
 src/site/asciidoc/users/protocols/iec-60870.adoc   |     24 +
 src/site/asciidoc/users/protocols/index.adoc       |    286 +-
 src/site/asciidoc/users/protocols/knxnetip.adoc    |     78 +-
 src/site/asciidoc/users/protocols/logix.adoc       |     53 +-
 src/site/asciidoc/users/protocols/modbus.adoc      |     45 +-
 src/site/asciidoc/users/protocols/opc-ua.adoc      |    171 -
 src/site/asciidoc/users/protocols/opcua.adoc       |    175 +
 .../asciidoc/users/protocols/open-protocol.adoc    |     24 +
 src/site/asciidoc/users/protocols/plc4x.adoc       |     32 +-
 src/site/asciidoc/users/protocols/profinet.adoc    |     53 +-
 src/site/asciidoc/users/protocols/s7.adoc          |    128 +-
 src/site/asciidoc/users/protocols/simulated.adoc   |     24 +-
 src/site/asciidoc/users/tools/capture-replay.adoc  |      3 +
 .../asciidoc/users/tools/connection-cache.adoc     |    130 +-
 src/site/asciidoc/users/tools/scraper.adoc         |     18 +-
 src/site/asciidoc/users/tools/testing.adoc         |     34 +-
 src/site/asciidoc/users/transports/can.adoc        |      1 +
 .../asciidoc/users/transports/pcap-replay.adoc     |      1 +
 src/site/asciidoc/users/transports/raw-socket.adoc |      1 +
 src/site/asciidoc/users/transports/serial.adoc     |      1 +
 src/site/asciidoc/users/transports/socketcan.adoc  |      1 +
 src/site/asciidoc/users/transports/tcp.adoc        |      1 +
 src/site/asciidoc/users/transports/udp.adoc        |      1 +
 src/site/resources-filtered/plc4x-doap.rdf         |      9 +-
 .../images/integrations/apache_edgent_logo.png     |    Bin 19377 -> 0 bytes
 .../images/integrations/apache_hop_logo.png        |    Bin 0 -> 75995 bytes
 .../images/integrations/apache_iotdb_logo.png      |    Bin 22055 -> 54876 bytes
 src/site/resources/images/languages/c_logo.png     |    Bin 0 -> 23215 bytes
 src/site/resources/images/languages/cs_logo.png    |    Bin 0 -> 98426 bytes
 src/site/resources/images/languages/go_logo.png    |    Bin 0 -> 30834 bytes
 src/site/resources/images/languages/java_logo.png  |    Bin 0 -> 88149 bytes
 .../resources/images/languages/python_logo.png     |    Bin 0 -> 98345 bytes
 src/site/resources/images/team/glcj.jpg            |    Bin 0 -> 38971 bytes
 src/site/resources/plc4x-pmc.rdf                   |     30 +
 src/site/site.xml                                  |     32 +-
 tools/NOTES.md                                     |     22 +
 tools/docker-compose.yaml                          |     32 +
 tools/release-0-update-generated-code.sh           |     73 +
 tools/release-1-create-branch.sh                   |     92 +
 tools/release-2-prepare-release.sh                 |     44 +
 tools/release-3-perform-release.sh                 |     66 +
 tools/release-abort.sh                             |     62 +
 tools/validate-release.sh                          |    107 +
 1389 files changed, 192998 insertions(+), 60213 deletions(-)

diff --cc code-generation/language-base-freemarker/.factorypath
index 0000000000,0000000000..cd052ff378
new file mode 100644
--- /dev/null
+++ b/code-generation/language-base-freemarker/.factorypath
@@@ -1,0 -1,0 +1,40 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/language-c/.factorypath
index 0000000000,0000000000..f36dbfc1b5
new file mode 100644
--- /dev/null
+++ b/code-generation/language-c/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/language-cs/.factorypath
index 0000000000,0000000000..e0ccb616c5
new file mode 100644
--- /dev/null
+++ b/code-generation/language-cs/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/language-go/.factorypath
index 0000000000,0000000000..f36dbfc1b5
new file mode 100644
--- /dev/null
+++ b/code-generation/language-go/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/language-java/.factorypath
index 0000000000,0000000000..2b99c023e6
new file mode 100644
--- /dev/null
+++ b/code-generation/language-java/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/googlejavaformat/google-java-format/1.21.0/google-java-format-1.21.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.0.0-jre/guava-33.0.0-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.41.0/checker-qual-3.41.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.23.0/error_prone_annotations-2.23.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/language-python/.factorypath
index 0000000000,0000000000..5cf8f4e695
new file mode 100644
--- /dev/null
+++ b/code-generation/language-python/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-language-base/1.7.0/plc4x-code-generation-language-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/objecthunter/exp4j/0.4.8/exp4j-0.4.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/freemarker/freemarker/2.3.32/freemarker-2.3.32.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/protocol-base-mspec/.factorypath
index 0000000000,0000000000..aa25822af6
new file mode 100644
--- /dev/null
+++ b/code-generation/protocol-base-mspec/.factorypath
@@@ -1,0 -1,0 +1,35 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc code-generation/protocol-test/.factorypath
index 0000000000,0000000000..24c09035f0
new file mode 100644
--- /dev/null
+++ b/code-generation/protocol-test/.factorypath
@@@ -1,0 -1,0 +1,33 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/api/.factorypath
index 0000000000,0000000000..0e0a85f966
new file mode 100644
--- /dev/null
+++ b/plc4j/api/.factorypath
@@@ -1,0 -1,0 +1,30 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/ab-eth/.factorypath
index 0000000000,0000000000..f846b4b306
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/ab-eth/.factorypath
@@@ -1,0 -1,0 +1,47 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/ads/.factorypath
index 0000000000,0000000000..beb5d648cf
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/ads/.factorypath
@@@ -1,0 -1,0 +1,47 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/bacnet/.factorypath
index 0000000000,0000000000..f6ea54fdb8
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/bacnet/.factorypath
@@@ -1,0 -1,0 +1,58 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/c-bus/.factorypath
index 0000000000,0000000000..3b94b8329a
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/c-bus/.factorypath
@@@ -1,0 -1,0 +1,48 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/can/.factorypath
index 0000000000,0000000000..398485543f
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/can/.factorypath
@@@ -1,0 -1,0 +1,47 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/canopen/.factorypath
index 0000000000,0000000000..c545ff1ca9
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/canopen/.factorypath
@@@ -1,0 -1,0 +1,47 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/ctrlx/.factorypath
index 0000000000,0000000000..8554c1a1d3
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/ctrlx/.factorypath
@@@ -1,0 -1,0 +1,54 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpmime/4.5.14/httpmime-4.5.14.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.16.1/jackson-datatype-jsr310-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/hrakaroo/glob/0.9.0/glob-0.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/eip/.factorypath
index 0000000000,0000000000..9b8cb03a48
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/eip/.factorypath
@@@ -1,0 -1,0 +1,48 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/firmata/.factorypath
index 0000000000,0000000000..d603d161cc
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/firmata/.factorypath
@@@ -1,0 -1,0 +1,50 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/iec-60870/.factorypath
index 0000000000,0000000000..5c4424d234
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/iec-60870/.factorypath
@@@ -1,0 -1,0 +1,47 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/knxnetip/.factorypath
index 0000000000,0000000000..f12de984d5
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/knxnetip/.factorypath
@@@ -1,0 -1,0 +1,59 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
index 8bfa7c3038,e095950861..cf0304cd6d
--- a/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
+++ b/plc4j/drivers/knxnetip/src/main/generated/org/apache/plc4x/java/knxnetip/readwrite/KnxManufacturer.java
@@@ -755,10 -755,28 +755,29 @@@ public enum KnxManufacturer 
    M_CAV_AUDIOGUANGZHOUCO__LTD((int) 655, (int) 713, (String) "CAV AUDIO(GUANGZHOU)CO.,LTD"),
    M_HELKAMA_BICA_OY((int) 656, (int) 714, (String) "Helkama Bica Oy"),
    M_MODULYTE((int) 657, (int) 715, (String) "ModuLyte"),
-   M_ABB___RESERVED((int) 658, (int) 43954, (String) "ABB - reserved"),
+   M_CONSOLINNO_ENERGY_GMBH((int) 658, (int) 716, (String) "Consolinno Energy GmbH"),
+   M_SCHIDERON_ELECTRIC_ASIA_LIMITED(
+       (int) 659, (int) 717, (String) "SCHIDERON ELECTRIC (ASIA) LIMITED"),
+   M_3R((int) 660, (int) 718, (String) "3R"),
+   M_ARKLYFE((int) 661, (int) 719, (String) "Arklyfe"),
+   M_FOSHAN_HAYDN_TECHNOLOGY_LIGHTING_CO__LTD_(
+       (int) 662, (int) 720, (String) "Foshan Haydn Technology Lighting Co.,Ltd."),
+   M_KNXES_COMPANY_LIMITED((int) 663, (int) 721, (String) "KNXES COMPANY LIMITED"),
+   M_THE_AKUVOX_COMPANY((int) 664, (int) 722, (String) "The Akuvox Company"),
+   M_NINGBO_YINZHOU_SHENGRUIJIE_ELECTRONICS_CO__LTD_(
+       (int) 665, (int) 723, (String) "NingBo Yinzhou ShengRuiJie Electronics Co. Ltd."),
+   M_SHENZHEN_HAIZHICHUANG_TECHNOLOGY_CO___LTD(
+       (int) 666, (int) 724, (String) "Shenzhen Haizhichuang Technology Co., Ltd"),
+   M_SHENZHEN_EASYDETEK_TECHNOLOGY_CO_LTD(
+       (int) 667, (int) 725, (String) "Shenzhen easydetek technology Co.Ltd"),
+   M_MUTLUSAN_ELECTRIC((int) 668, (int) 726, (String) "Mutlusan Electric"),
+   M_HANGZHOU_BROADLINK_TECHNOLOGY_CO__LTD_(
+       (int) 669, (int) 727, (String) "Hangzhou BroadLink Technology Co.,Ltd."),
+   M_MARLEY_DEUTSCHLAND_GMBH((int) 670, (int) 728, (String) "Marley Deutschland GmbH"),
+   M_ABB___RESERVED((int) 671, (int) 43954, (String) "ABB - reserved"),
    M_BUSCH_JAEGER_ELEKTRO___RESERVED(
-       (int) 659, (int) 43959, (String) "Busch-Jaeger Elektro - reserved");
+       (int) 672, (int) 43959, (String) "Busch-Jaeger Elektro - reserved");
 +
    private static final Map<Integer, KnxManufacturer> map;
  
    static {
diff --cc plc4j/drivers/mock/.factorypath
index 0000000000,0000000000..4b31d581bc
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/mock/.factorypath
@@@ -1,0 -1,0 +1,53 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.10.2/junit-jupiter-api-5.10.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.10.2/junit-platform-commons-1.10.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hamcrest/hamcrest-core/2.2/hamcrest-core-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hamcrest/hamcrest-library/2.2/hamcrest-library-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/modbus/.factorypath
index 0000000000,0000000000..f141dee893
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/modbus/.factorypath
@@@ -1,0 -1,0 +1,53 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/opcua/.factorypath
index 0000000000,0000000000..b6d9bfd2b8
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/opcua/.factorypath
@@@ -1,0 -1,0 +1,49 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/open-protocol/.factorypath
index 0000000000,0000000000..51b8231731
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/open-protocol/.factorypath
@@@ -1,0 -1,0 +1,49 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/plc4x/.factorypath
index 0000000000,0000000000..11ec7f2cd7
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/plc4x/.factorypath
@@@ -1,0 -1,0 +1,48 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/profinet-ng/.factorypath
index 0000000000,0000000000..9e2929dacd
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/profinet-ng/.factorypath
@@@ -1,0 -1,0 +1,56 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/profinet/.factorypath
index 0000000000,0000000000..c834211f89
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/profinet/.factorypath
@@@ -1,0 -1,0 +1,55 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/s7/.factorypath
index 0000000000,0000000000..1dcd849b16
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/s7/.factorypath
@@@ -1,0 -1,0 +1,49 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/drivers/simulated/.factorypath
index 0000000000,0000000000..77dd75b6e8
new file mode 100644
--- /dev/null
+++ b/plc4j/drivers/simulated/.factorypath
@@@ -1,0 -1,0 +1,46 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-ads-telemetry/.factorypath
index 0000000000,0000000000..64d429058c
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-ads-telemetry/.factorypath
@@@ -1,0 -1,0 +1,75 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-cloud-azure/.factorypath
index 0000000000,0000000000..b8f4dc4c5d
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-cloud-azure/.factorypath
@@@ -1,0 -1,0 +1,80 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/microsoft/azure/sdk/iot/iot-device-client/2.4.1/iot-device-client-2.4.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/qpid/proton-j/0.34.1/proton-j-0.34.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/microsoft/azure/qpid-proton-j-extensions/1.2.4/qpid-proton-j-extensions-1.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.5/org.eclipse.paho.client.mqttv3-1.2.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/microsoft/azure/sdk/iot/provisioning/security/security-provider/2.0.1/security-provider-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-cloud-google/.factorypath
index 0000000000,0000000000..307b75591a
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-cloud-google/.factorypath
@@@ -1,0 -1,0 +1,79 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/paho/org.eclipse.paho.client.mqttv3/1.2.5/org.eclipse.paho.client.mqttv3-1.2.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/joda-time/joda-time/2.12.7/joda-time-2.12.7.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/jsonwebtoken/jjwt-api/0.12.5/jjwt-api-0.12.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-connectivity-mqtt/.factorypath
index 0000000000,0000000000..4e7559fe61
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-connectivity-mqtt/.factorypath
@@@ -1,0 -1,0 +1,83 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/hivemq/hivemq-mqtt-client/1.3.3/hivemq-mqtt-client-1.3.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jctools/jctools-core/2.1.2/jctools-core-2.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/16.0.3/annotations-16.0.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/dagger/dagger/2.27/dagger-2.27.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/reactivex/rxjava2/rxjava/2.2.21/rxjava-2.2.21.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-discovery/.factorypath
index 0000000000,0000000000..63ba2c6dec
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-discovery/.factorypath
@@@ -1,0 -1,0 +1,76 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-influx-data-collection/.factorypath
index 0000000000,0000000000..ed6af4d2b0
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-influx-data-collection/.factorypath
@@@ -1,0 -1,0 +1,94 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/influxdb/influxdb-client-java/7.0.0/influxdb-client-java-7.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/influxdb/influxdb-client-core/7.0.0/influxdb-client-core-7.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/influxdb/influxdb-client-utils/7.0.0/influxdb-client-utils-7.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio/3.7.0/okio-3.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio-jvm/3.7.0/okio-jvm-3.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib/1.9.21/kotlin-stdlib-1.9.21.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/13.0/annotations-13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.8.21/kotlin-stdlib-jdk8-1.8.21.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.8.21/kotlin-stdlib-jdk7-1.8.21.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/retrofit2/retrofit/2.9.0/retrofit-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/logging-interceptor/4.12.0/logging-interceptor-4.12.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/reactivex/rxjava3/rxjava/3.1.8/rxjava-3.1.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/retrofit2/adapter-rxjava3/2.9.0/adapter-rxjava3-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/retrofit2/converter-scalars/2.9.0/converter-scalars-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/retrofit2/converter-gson/2.9.0/converter-gson-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-integration-iotdb/.factorypath
index 0000000000,0000000000..9a79808f63
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-integration-iotdb/.factorypath
@@@ -1,0 -1,0 +1,100 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/tsfile/1.2.2/tsfile-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/luben/zstd-jni/1.5.4-2/zstd-jni-1.5.4-2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/xerial/snappy/snappy-java/1.1.8.4/snappy-java-1.1.8.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/lz4/lz4-java/1.8.0/lz4-java-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/openjdk/jol/jol-core/0.2/jol-core-0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/airlift/slice/0.41/slice-0.41.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/tukaani/xz/1.9/xz-1.9.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/iotdb-antlr/1.2.2/iotdb-antlr-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-jexl3/3.2.1/commons-jexl3-3.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/service-rpc/1.2.2/service-rpc-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/iotdb-thrift/1.2.2/iotdb-thrift-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/thrift/libthrift/0.14.1/libthrift-0.14.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/iotdb-thrift-commons/1.2.2/iotdb-thrift-commons-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/iotdb-jdbc/1.2.2/iotdb-jdbc-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/osgi/osgi.cmpn/6.0.0/osgi.cmpn-6.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/ops4j/pax/jdbc/pax-jdbc-common/1.4.5/pax-jdbc-common-1.4.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jcl-over-slf4j/1.7.28/jcl-over-slf4j-1.7.28.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/osgi/org.osgi.core/6.0.0/org.osgi.core-6.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/iotdb-session/1.2.2/iotdb-session-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/iotdb/isession/1.2.2/isession-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-nats/.factorypath
index 0000000000,0000000000..3ba856b416
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-nats/.factorypath
@@@ -1,0 -1,0 +1,78 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/nats/jnats/2.17.3/jnats-2.17.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/i2p/crypto/eddsa/0.3.0/eddsa-0.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-opm/.factorypath
index 0000000000,0000000000..b8f82d62d2
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-opm/.factorypath
@@@ -1,0 -1,0 +1,80 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-opm/0.13.0-SNAPSHOT/plc4j-opm-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-connection-cache/0.13.0-SNAPSHOT/plc4j-connection-cache-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-webservice/.factorypath
index 0000000000,0000000000..f876e674e3
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-webservice/.factorypath
@@@ -1,0 -1,0 +1,80 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpclient/4.5.14/httpclient-4.5.14.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-world-kotlin/.factorypath
index 0000000000,0000000000..442f2711f1
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-world-kotlin/.factorypath
@@@ -1,0 -1,0 +1,75 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib/1.9.22/kotlin-stdlib-1.9.22.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/13.0/annotations-13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-world-plc4x-discover-and-browse/.factorypath
index 0000000000,0000000000..59b1e83544
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-world-plc4x-discover-and-browse/.factorypath
@@@ -1,0 -1,0 +1,75 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-world-plc4x-read/.factorypath
index 0000000000,0000000000..63ba2c6dec
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-world-plc4x-read/.factorypath
@@@ -1,0 -1,0 +1,76 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-world-plc4x-subscribe/.factorypath
index 0000000000,0000000000..2d199aebd0
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-world-plc4x-subscribe/.factorypath
@@@ -1,0 -1,0 +1,77 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/hello-world-plc4x-write/.factorypath
index 0000000000,0000000000..63ba2c6dec
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/hello-world-plc4x-write/.factorypath
@@@ -1,0 -1,0 +1,76 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/plc4j-s7event/.factorypath
index 0000000000,0000000000..4735ca85c4
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/plc4j-s7event/.factorypath
@@@ -1,0 -1,0 +1,75 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-simple/2.0.12/slf4j-simple-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/examples/poll-loop/.factorypath
index 0000000000,0000000000..1485c6fedb
new file mode 100644
--- /dev/null
+++ b/plc4j/examples/poll-loop/.factorypath
@@@ -1,0 -1,0 +1,74 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/integrations/apache-calcite/.factorypath
index 0000000000,0000000000..1c7a4a7819
new file mode 100644
--- /dev/null
+++ b/plc4j/integrations/apache-calcite/.factorypath
@@@ -1,0 -1,0 +1,110 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/calcite/calcite-core/1.36.0/calcite-core-1.36.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/locationtech/jts/jts-core/1.19.0/jts-core-1.19.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/locationtech/jts/io/jts-io-common/1.19.0/jts-io-common-1.19.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/googlecode/json-simple/json-simple/1.1.1/json-simple-1.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/locationtech/proj4j/proj4j/1.2.2/proj4j-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.26.1/error_prone_annotations-2.26.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.0.0-jre/guava-33.0.0-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/2.8/j2objc-annotations-2.8.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/calcite/avatica/avatica-core/1.23.0/avatica-core-1.23.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/calcite/avatica/avatica-metrics/1.23.0/avatica-metrics-1.23.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/protobuf/protobuf-java/3.25.3/protobuf-java-3.25.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/client5/httpclient5/5.1.3/httpclient5-5.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/core5/httpcore5-h2/5.1.3/httpcore5-h2-5.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/core5/httpcore5/5.1.3/httpcore5-5.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.42.0/checker-qual-3.42.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/uzaygezen/uzaygezen-core/0.2/uzaygezen-core-0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/jayway/jsonpath/json-path/2.7.0/json-path-2.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/minidev/json-smart/2.4.7/json-smart-2.4.7.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/minidev/accessors-smart/2.4.7/accessors-smart-2.4.7.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/ow2/asm/asm/9.1/asm-9.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/yahoo/datasketches/sketches-core/0.9.0/sketches-core-0.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/yahoo/datasketches/memory/0.9.0/memory-0.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/hydromatic/aggdesigner-algorithm/6.0/aggdesigner-algorithm-6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-lang/commons-lang/2.4/commons-lang-2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-dbcp2/2.9.0/commons-dbcp2-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-pool2/2.12.0/commons-pool2-2.12.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/janino/commons-compiler/3.1.9/commons-compiler-3.1.9.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/janino/janino/3.1.9/janino-3.1.9.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/calcite/calcite-linq4j/1.36.0/calcite-linq4j-1.36.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-scraper/0.13.0-SNAPSHOT/plc4j-scraper-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-connection-cache/0.13.0-SNAPSHOT/plc4j-connection-cache-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/integrations/apache-kafka/.factorypath
index 0000000000,0000000000..1868479cd9
new file mode 100644
--- /dev/null
+++ b/plc4j/integrations/apache-kafka/.factorypath
@@@ -1,0 -1,0 +1,72 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/kafka/kafka-clients/3.2.0/kafka-clients-3.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/luben/zstd-jni/1.5.2-1/zstd-jni-1.5.2-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/lz4/lz4-java/1.8.0/lz4-java-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/xerial/snappy/snappy-java/1.1.8.4/snappy-java-1.1.8.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/kafka/connect-api/3.2.0/connect-api-3.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/ws/rs/javax.ws.rs-api/2.1.1/javax.ws.rs-api-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/integrations/apache-nifi/nifi-plc4x-nar/.factorypath
index 0000000000,0000000000..65f158ad02
new file mode 100644
--- /dev/null
+++ b/plc4j/integrations/apache-nifi/nifi-plc4x-nar/.factorypath
@@@ -1,0 -1,0 +1,93 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-connection-cache/0.13.0-SNAPSHOT/plc4j-connection-cache-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.106.Final/netty-buffer-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.106.Final/netty-codec-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.106.Final/netty-common-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.106.Final/netty-transport-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.106.Final/netty-resolver-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-utils/1.25.0/nifi-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-api/1.25.0/nifi-api-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-property-utils/1.25.0/nifi-property-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.1/jakarta.xml.bind-api-4.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.4/jaxb-runtime-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.4/jaxb-core-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.1/angus-activation-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.4/txw2-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-json-utils/1.25.0/nifi-json-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-avro-record-utils/1.25.0/nifi-avro-record-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-standard-record-utils/1.25.0/nifi-standard-record-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-security-socket-ssl/1.25.0/nifi-security-socket-ssl-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/ben-manes/caffeine/caffeine/2.9.3/caffeine-2.9.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.19.0/checker-qual-3.19.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/avro/avro/1.11.3/avro-1.11.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-compress/1.26.1/commons-compress-1.26.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-tcp/0.13.0-SNAPSHOT/plc4j-transport-tcp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-udp/0.13.0-SNAPSHOT/plc4j-transport-udp-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-can/0.13.0-SNAPSHOT/plc4j-transport-can-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-raw-socket/0.13.0-SNAPSHOT/plc4j-transport-raw-socket-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-shared/0.13.0-SNAPSHOT/plc4j-transport-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-pcap-replay/0.13.0-SNAPSHOT/plc4j-transport-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-replay/0.13.0-SNAPSHOT/plc4j-utils-pcap-replay-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-pcap-shared/0.13.0-SNAPSHOT/plc4j-utils-pcap-shared-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-utils-raw-sockets/0.13.0-SNAPSHOT/plc4j-utils-raw-sockets-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.106.Final/netty-handler-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.106.Final/netty-transport-native-unix-common-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-transport-serial/0.13.0-SNAPSHOT/plc4j-transport-serial-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/integrations/apache-nifi/nifi-plc4x-processors/.factorypath
index 0000000000,0000000000..87320e2e64
new file mode 100644
--- /dev/null
+++ b/plc4j/integrations/apache-nifi/nifi-plc4x-processors/.factorypath
@@@ -1,0 -1,0 +1,73 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-connection-cache/0.13.0-SNAPSHOT/plc4j-connection-cache-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plc4j-spi/0.13.0-SNAPSHOT/plc4j-spi-0.13.0-SNAPSHOT.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.106.Final/netty-buffer-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.106.Final/netty-codec-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.106.Final/netty-common-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.106.Final/netty-transport-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.106.Final/netty-resolver-4.1.106.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-api/1.25.0/nifi-api-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-record/1.25.0/nifi-record-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-record-serialization-service-api/1.25.0/nifi-record-serialization-service-api-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-deprecation-log/1.25.0/nifi-deprecation-log-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-utils/1.25.0/nifi-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-property-utils/1.25.0/nifi-property-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.1/jakarta.xml.bind-api-4.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.4/jaxb-runtime-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.4/jaxb-core-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.1/angus-activation-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.4/txw2-4.0.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-json-utils/1.25.0/nifi-json-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-avro-record-utils/1.25.0/nifi-avro-record-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-standard-record-utils/1.25.0/nifi-standard-record-utils-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-security-socket-ssl/1.25.0/nifi-security-socket-ssl-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/ben-manes/caffeine/caffeine/2.9.3/caffeine-2.9.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.19.0/checker-qual-3.19.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/avro/avro/1.11.3/avro-1.11.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-compress/1.26.1/commons-compress-1.26.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/nifi/nifi-framework-api/1.25.0/nifi-framework-api-1.25.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/integrations/plc4j-apache-karaf/pom.xml
index 9db27f494b,0000000000..c7e0d4c72a
mode 100644,000000..100644
--- a/plc4j/integrations/plc4j-apache-karaf/pom.xml
+++ b/plc4j/integrations/plc4j-apache-karaf/pom.xml
@@@ -1,113 -1,0 +1,113 @@@
 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 +<!--
 +Licensed to the Apache Software Foundation (ASF) under one
 +or more contributor license agreements.  See the NOTICE file
 +distributed with this work for additional information
 +regarding copyright ownership.  The ASF licenses this file
 +to you under the Apache License, Version 2.0 (the
 +"License"); you may not use this file except in compliance
 +with the License.  You may obtain a copy of the License at
 +
 +    https://www.apache.org/licenses/LICENSE-2.0
 +
 +Unless required by applicable law or agreed to in writing,
 +software distributed under the License is distributed on an
 +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 +KIND, either express or implied.  See the License for the
 +specific language governing permissions and limitations
 +under the License.
 +-->
 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 +
 +    <modelVersion>4.0.0</modelVersion>
 +  
 +<!--    <parent>
 +        <groupId>org.apache.plc4x</groupId>
 +        <artifactId>plc4j-integrations</artifactId>
 +        <version>0.12.0-SNAPSHOT</version>
 +    </parent>-->
 +
 +    <groupId>org.apache.plc4x</groupId>
 +    <artifactId>plc4j-apache-karaf</artifactId>
 +    <version>0.12.0-SNAPSHOT</version>
 +    <packaging>pom</packaging>
 +    
 +    <name>PLC4J: Integrations: Apache Karaf</name>
 +    <description>Integration module for integrating PLC4X into Apache Karaf.</description>
 +
 +    <properties>
 +    
 +        <!-- Inherited -->
 +        <apache.log4j.version>2.20.0</apache.log4j.version>
 +        <bit-io.version>1.4.3</bit-io.version>
 +        <c3p0.version>0.9.5.5</c3p0.version>   
 +        <commons-codec.version>1.16.0</commons-codec.version> 
 +        <commons-net.version>3.10.0</commons-net.version>               
 +        <commons-lang3.version>3.14.0</commons-lang3.version>
 +        <hikaricp.version>2.7.9</hikaricp.version>
 +        <netty.version>4.1.104.Final</netty.version>
 +        <quartz.version>2.3.2</quartz.version>
 +        <slf4j.version>2.0.3</slf4j.version>   
 +        <spifly.version>1.3.6</spifly.version>
 +        <jackson.version>2.16.1</jackson.version>  
 +        <jakarta.xml.bind.version>2.3.3</jakarta.xml.bind.version>
 +        <parser-ng.version>0.1.8</parser-ng.version>
 +        <vavr.version>0.10.4</vavr.version>
 +    
 +        <!-- Database used in Pax-jdbc -->
 +        <derby.version>10.14.2.0</derby.version>
 +        <h2.version>2.1.210</h2.version>
 +    
 +        <!-- Remove GPL licence -->   
 +        <javaluator.version>3.0.3</javaluator.version>
 +
 +        <!-- Integration version -->
 +    
 +        <karaf.version>4.4.4</karaf.version>
 +        <org.osgi.core.version>6.0.0</org.osgi.core.version>
 +        <osgi.core.version>8.0.0</osgi.core.version>    
 +        <osgi.cmpn.version>7.0.0</osgi.cmpn.version>
 +        <osgi.device.version>1.1.0</osgi.device.version>
 +        <org.osgi.dal.version>1.0.2</org.osgi.dal.version>        
 +        <disruptor.version>3.4.4</disruptor.version>
 +    
 +        <!-- EPICS -->
 +        <epics.core.version>7.0.9</epics.core.version>
 +        <epics.util.version>1.0.6</epics.util.version>
 +        <epics.vtype.version>1.0.6</epics.vtype.version>
 +        <epics.vtype.all.version>1.0.6</epics.vtype.all.version>
 +        <epics.ntypes.version>0.3.8</epics.ntypes.version>
 +        <epics.jca.version>2.4.8</epics.jca.version>
 +        <epics.pvaccess.version>5.1.8</epics.pvaccess.version>
 +        <epics.pvaclient.version>4.3.2</epics.pvaclient.version>
 +        <epics.pvdata.version>6.1.8</epics.pvdata.version>
 +        <epics.pvdatabase.version>4.3.1</epics.pvdatabase.version>
 +        <epics.gpclient.version>1.0.7</epics.gpclient.version>
 +        <epics.gpclient.core.version>1.0.7</epics.gpclient.core.version>
 +        <epics.gpclient.sim.version>1.0.7</epics.gpclient.sim.version>
 +        <epics.gpclient.loc.version>1.0.7</epics.gpclient.loc.version>
 +        <epics.gpclient.pva.version>1.0.7</epics.gpclient.pva.version>
 +        <epics.gpclient.ca.version>1.0.7</epics.gpclient.ca.version>
 +  
 +    </properties>
 +                           
 +    <modules>
-         <module>org.apache.plc4x.merlot</module>
 +        <module>org.apache.plc4x.merlot.modbus.dev</module>
 +        <module>org.apache.plc4x.merlot.modbus.svr</module>
 +        <module>org.apache.plc4x.merlot.scheduler</module>
 +        <module>org.apache.plc4x.merlot.branding</module>
 +        <module>org.apache.plc4x.merlot.uns</module>
 +        <module>org.apache.plc4x.merlot.features</module>
 +        <module>org.apache.plc4x.merlot.das</module>
 +        <module>org.apache.plc4x.merlot.modbus.sim</module>   
 +        <module>org.apache.plc4x.merlot.db</module>
 +        <module>org.apache.plc4x.merlot.das.api</module>
 +        <module>org.apache.plc4x.merlot.derby</module>
 +        <module>org.apache.plc4x.merlot.h2</module>  
 +        <module>org.apache.plc4x.merlot.drv.simulated</module>
 +        <module>org.apache.plc4x.merlot.das.ref</module>
 +        <module>org.apache.plc4x.merlot.das.base</module>
++	<module>org.apache.plc4x.merlot</module>
 +    </modules>
 +
 +</project>
diff --cc plc4j/integrations/pom.xml
index cb0abb6ade,3192c3f11d..c75c4185fd
--- a/plc4j/integrations/pom.xml
+++ b/plc4j/integrations/pom.xml
@@@ -40,21 -40,7 +40,9 @@@
    <modules>
      <module>apache-calcite</module>
      <module>apache-nifi</module>
 +    <!-- <module>opcua-server</module> -->
 +    <module>plc4j-apache-karaf</module>
+     <module>apache-kafka</module>
    </modules>
  
-   <!-- It seems that the Kafka-Connect plugin doesn't work with Java 21 -->
-   <profiles>
-     <profile>
-       <id>.below-java-21</id>
-       <activation>
-         <jdk>[11,21)</jdk>
-       </activation>
-       <modules>
-         <module>apache-kafka</module>
-       </modules>
-     </profile>
-   </profiles>
- 
  </project>
diff --cc plc4j/osgi/.factorypath
index 0000000000,0000000000..0bb05a2688
new file mode 100644
--- /dev/null
+++ b/plc4j/osgi/.factorypath
@@@ -1,0 -1,0 +1,46 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/osgi/osgi.core/8.0.0/osgi.core-8.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/spi/.factorypath
index 0000000000,0000000000..6119c90b03
new file mode 100644
--- /dev/null
+++ b/plc4j/spi/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/capture-replay/.factorypath
index 0000000000,0000000000..b6612a88e6
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/capture-replay/.factorypath
@@@ -1,0 -1,0 +1,35 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/connection-cache/.factorypath
index 0000000000,0000000000..0e0a85f966
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/connection-cache/.factorypath
@@@ -1,0 -1,0 +1,30 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/opcua-server/.factorypath
index 0000000000,0000000000..fd739d3243
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/opcua-server/.factorypath
@@@ -1,0 -1,0 +1,83 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/dictionary-manager/0.6.12/dictionary-manager-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/sdk-server/0.6.12/sdk-server-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/bsd-generator/0.6.12/bsd-generator-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/bsd-core/0.6.12/bsd-core-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/stack-server/0.6.12/stack-server-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec-http/4.1.107.Final/netty-codec-http-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/stack-core/0.6.12/stack-core-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.0.0-jre/guava-33.0.0-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/2.3.6/jaxb-runtime-2.3.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/2.3.6/txw2-2.3.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/3.0.12/istack-commons-runtime-3.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/activation/jakarta.activation/1.2.2/jakarta.activation-1.2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/milo/sdk-core/0.6.12/sdk-core-0.6.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jetty/jetty-util/11.0.20/jetty-util-11.0.20.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcmail-jdk18on/1.77/bcmail-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/opm/.factorypath
index 0000000000,0000000000..16dc4e4241
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/opm/.factorypath
@@@ -1,0 -1,0 +1,49 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-configuration2/2.9.0/commons-configuration2-2.9.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.0/commons-logging-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/plc4x-server/.factorypath
index 0000000000,0000000000..c7efa1df2c
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/plc4x-server/.factorypath
@@@ -1,0 -1,0 +1,65 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/log4j-over-slf4j/2.0.12/log4j-over-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/scraper-ng/.factorypath
index 0000000000,0000000000..0e0a85f966
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/scraper-ng/.factorypath
@@@ -1,0 -1,0 +1,30 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/scraper/.factorypath
index 0000000000,0000000000..5bb4f684fe
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/scraper/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/ui/application/.factorypath
index 0000000000,0000000000..db6f3d549f
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/ui/application/.factorypath
@@@ -1,0 -1,0 +1,126 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.2.4/spring-boot-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.5/spring-core-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.5/spring-jcl-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.2.4/spring-boot-autoconfigure-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.5/spring-context-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.5/spring-aop-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.5/spring-beans-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.5/spring-expression-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.12.4/micrometer-observation-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.12.4/micrometer-commons-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.2.4/spring-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.2.4/spring-data-commons-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.5/spring-orm-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.5/spring-jdbc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.5/spring-tx-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.2.4/spring-boot-starter-web-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.2.4/spring-boot-starter-json-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.15.4/jackson-datatype-jdk8-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.15.4/jackson-datatype-jsr310-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.15.4/jackson-module-parameter-names-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.2.4/spring-boot-starter-tomcat-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.19/tomcat-embed-core-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.19/tomcat-embed-el-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.19/tomcat-embed-websocket-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.5/spring-webmvc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-websocket/3.2.4/spring-boot-starter-websocket-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-messaging/6.1.5/spring-messaging-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.5/spring-web-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-websocket/6.1.5/spring-websocket-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.2.4/spring-boot-starter-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.2.4/spring-boot-starter-aop-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.21.1/aspectjweaver-1.9.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.2.4/spring-boot-starter-jdbc-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.0.1/HikariCP-5.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.4.4.Final/hibernate-core-6.4.4.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.6.0/classmate-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.5/spring-aspects-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derby/10.17.1.0/derby-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbyshared/10.16.1.1/derbyshared-10.16.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbytools/10.17.1.0/derbytools-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.2.4/spring-boot-starter-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.2.4/spring-boot-starter-logging-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.21.1/log4j-to-slf4j-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.21.1/log4j-api-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.12/jul-to-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/ui/backend/.factorypath
index 0000000000,0000000000..570a08e2b6
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/ui/backend/.factorypath
@@@ -1,0 -1,0 +1,126 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.2.4/spring-boot-starter-web-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.2.4/spring-boot-starter-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.2.4/spring-boot-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.2.4/spring-boot-autoconfigure-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.2.4/spring-boot-starter-logging-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.21.1/log4j-to-slf4j-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.21.1/log4j-api-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.12/jul-to-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.2.4/spring-boot-starter-json-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.15.4/jackson-datatype-jdk8-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.15.4/jackson-datatype-jsr310-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.15.4/jackson-module-parameter-names-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.2.4/spring-boot-starter-tomcat-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.19/tomcat-embed-core-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.19/tomcat-embed-el-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.19/tomcat-embed-websocket-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.5/spring-webmvc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-websocket/3.2.4/spring-boot-starter-websocket-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-messaging/6.1.5/spring-messaging-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.5/spring-core-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.5/spring-jcl-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.5/spring-context-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.5/spring-aop-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.5/spring-beans-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.5/spring-expression-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.12.4/micrometer-observation-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.12.4/micrometer-commons-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.5/spring-web-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.2.4/spring-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.2.4/spring-data-commons-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.5/spring-orm-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.5/spring-jdbc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.5/spring-tx-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-websocket/6.1.5/spring-websocket-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.2.4/spring-boot-starter-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.2.4/spring-boot-starter-aop-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.21.1/aspectjweaver-1.9.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.2.4/spring-boot-starter-jdbc-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.0.1/HikariCP-5.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.4.4.Final/hibernate-core-6.4.4.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.6.0/classmate-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.5/spring-aspects-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derby/10.17.1.0/derby-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbyshared/10.16.1.1/derbyshared-10.16.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbytools/10.17.1.0/derbytools-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/tools/ui/frontend/.factorypath
index 0000000000,0000000000..329652a57c
new file mode 100644
--- /dev/null
+++ b/plc4j/tools/ui/frontend/.factorypath
@@@ -1,0 -1,0 +1,124 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.2.4/spring-boot-starter-web-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.2.4/spring-boot-starter-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.2.4/spring-boot-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.2.4/spring-boot-autoconfigure-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.2.4/spring-boot-starter-logging-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.21.1/log4j-to-slf4j-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.21.1/log4j-api-2.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.12/jul-to-slf4j-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.2.4/spring-boot-starter-json-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.15.4/jackson-datatype-jdk8-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.15.4/jackson-datatype-jsr310-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.15.4/jackson-module-parameter-names-2.15.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.2.4/spring-boot-starter-tomcat-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.19/tomcat-embed-core-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.19/tomcat-embed-el-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.19/tomcat-embed-websocket-10.1.19.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.5/spring-webmvc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-websocket/3.2.4/spring-boot-starter-websocket-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-messaging/6.1.5/spring-messaging-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.5/spring-core-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.5/spring-jcl-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.5/spring-context-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.5/spring-aop-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.5/spring-beans-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.5/spring-expression-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.12.4/micrometer-observation-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.12.4/micrometer-commons-1.12.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.5/spring-web-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.2.4/spring-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.2.4/spring-data-commons-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.5/spring-orm-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.5/spring-jdbc-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.5/spring-tx-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-websocket/6.1.5/spring-websocket-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.2.4/spring-boot-starter-data-jpa-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.2.4/spring-boot-starter-aop-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.21.1/aspectjweaver-1.9.21.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.2.4/spring-boot-starter-jdbc-3.2.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.0.1/HikariCP-5.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.4.4.Final/hibernate-core-6.4.4.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.6.0/classmate-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.5/spring-aspects-6.1.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derby/10.17.1.0/derby-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbyshared/10.16.1.1/derbyshared-10.16.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/derby/derbytools/10.17.1.0/derbytools-10.17.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/purejavacomm/purejavacomm/1.0.2.RELEASE/purejavacomm-1.0.2.RELEASE.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/lingala/zip4j/zip4j/2.11.5/zip4j-2.11.5.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.77/bcprov-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcpkix-jdk18on/1.77/bcpkix-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcutil-jdk18on/1.77/bcutil-jdk18on-1.77.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-xml/2.16.1/jackson-dataformat-xml-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/can/.factorypath
index 0000000000,0000000000..ba2cf1ec8e
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/can/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/pcap-replay/.factorypath
index 0000000000,0000000000..7ab2ecb75d
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/pcap-replay/.factorypath
@@@ -1,0 -1,0 +1,48 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/pcap-shared/.factorypath
index 0000000000,0000000000..9379377d11
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/pcap-shared/.factorypath
@@@ -1,0 -1,0 +1,48 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/raw-socket/.factorypath
index 0000000000,0000000000..97c907f50d
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/raw-socket/.factorypath
@@@ -1,0 -1,0 +1,49 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/serial/.factorypath
index 0000000000,0000000000..fc71560bce
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/serial/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fazecast/jSerialComm/2.10.4/jSerialComm-2.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/socketcan/.factorypath
index 0000000000,0000000000..fa217bd024
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/socketcan/.factorypath
@@@ -1,0 -1,0 +1,46 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/tel/schich/javacan-core/3.3.2/javacan-core-3.3.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/tcp/.factorypath
index 0000000000,0000000000..43b9790ed5
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/tcp/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/test/.factorypath
index 0000000000,0000000000..34d55a9d5e
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/test/.factorypath
@@@ -1,0 -1,0 +1,52 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hamcrest/hamcrest-core/2.2/hamcrest-core-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/hamcrest/hamcrest-library/2.2/hamcrest-library-2.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/mockito/mockito-core/5.10.0/mockito-core-5.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.12/byte-buddy-1.14.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy-agent/1.14.11/byte-buddy-agent-1.14.11.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/objenesis/objenesis/3.3/objenesis-3.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/mockito/mockito-junit-jupiter/5.10.0/mockito-junit-jupiter-5.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/udp/.factorypath
index 0000000000,0000000000..843c91cdb7
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/udp/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/transports/virtualcan/.factorypath
index 0000000000,0000000000..ba2cf1ec8e
new file mode 100644
--- /dev/null
+++ b/plc4j/transports/virtualcan/.factorypath
@@@ -1,0 -1,0 +1,45 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/pcap-replay/.factorypath
index 0000000000,0000000000..ae00b50dea
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/pcap-replay/.factorypath
@@@ -1,0 -1,0 +1,39 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/pcap-shared/.factorypath
index 0000000000,0000000000..410ebe981e
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/pcap-shared/.factorypath
@@@ -1,0 -1,0 +1,38 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/plc-simulator/.factorypath
index 0000000000,0000000000..dadaf921fa
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/plc-simulator/.factorypath
@@@ -1,0 -1,0 +1,56 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.10.0/commons-csv-1.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-text/1.11.0/commons-text-1.11.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-cli/commons-cli/1.6.0/commons-cli-1.6.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/raw-sockets/.factorypath
index 0000000000,0000000000..8b64dbb39c
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/raw-sockets/.factorypath
@@@ -1,0 -1,0 +1,40 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-net/commons-net/3.10.0/commons-net-3.10.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/test-generator/.factorypath
index 0000000000,0000000000..1a73e8fbde
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/test-generator/.factorypath
@@@ -1,0 -1,0 +1,58 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-packetfactory-static/1.8.2/pcap4j-packetfactory-static-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/groovy/groovy-xml/4.0.18/groovy-xml-4.0.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/groovy/groovy/4.0.18/groovy-4.0.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/xmlunit/xmlunit-matchers/2.9.1/xmlunit-matchers-2.9.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/xmlunit/xmlunit-core/2.9.1/xmlunit-core-2.9.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.107.Final/netty-handler-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.107.Final/netty-transport-native-unix-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/json/json/20240205/json-20240205.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc plc4j/utils/test-utils/.factorypath
index 0000000000,0000000000..122c828e1b
new file mode 100644
--- /dev/null
+++ b/plc4j/utils/test-utils/.factorypath
@@@ -1,0 -1,0 +1,56 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.107.Final/netty-codec-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.107.Final/netty-common-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/woodstox/woodstox-core/6.5.1/woodstox-core-6.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/woodstox/stax2-api/4.2.1/stax2-api-4.2.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.16.1/jackson-annotations-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.16.1/jackson-core-2.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr/0.10.4/vavr-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/vavr/vavr-match/0.10.4/vavr-match-0.10.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/github/jinahya/bit-io/1.4.3/bit-io-1.4.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.107.Final/netty-buffer-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.107.Final/netty-transport-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.107.Final/netty-resolver-4.1.107.Final.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-artifact/3.9.4/maven-artifact-3.9.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/pcap4j/pcap4j-core/1.8.2/pcap4j-core-1.8.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/net/java/dev/jna/jna/5.14.0/jna-5.14.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/dom4j/dom4j/2.1.4/dom4j-2.1.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/xmlunit/xmlunit-core/2.9.1/xmlunit-core-2.9.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/2.3.3/jakarta.xml.bind-api-2.3.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.10.2/junit-jupiter-api-5.10.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.10.2/junit-platform-commons-1.10.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc pom.xml
index b250f6e388,17a4b8d3e3..79e8655e22
--- a/pom.xml
+++ b/pom.xml
@@@ -164,32 -170,6 +170,32 @@@
      <enable-all-tests>false</enable-all-tests>
      <excluded-test-groups>require-all-tests</excluded-test-groups>
      <reflow.skin.version>2.3.3</reflow.skin.version>
 +    
 +    <!-- Integration version -->
-     <karaf.version>4.4.3</karaf.version>
++    <karaf.version>4.4.5</karaf.version>
 +    <osgi.core.version>8.0.0</osgi.core.version>
 +    <osgi.cmpn.version>7.0.0</osgi.cmpn.version>
 +    <osgi.device.version>1.1.0</osgi.device.version>
 +    <javaluator.version>3.0.3</javaluator.version>
 +    <disruptor.version>3.4.4</disruptor.version>
 +    
 +    <!-- EPICS -->    
 +    <epics.core.version>7.0.9</epics.core.version>
 +    <epics.util.version>1.0.6</epics.util.version>
 +    <epics.vtype.version>1.0.6</epics.vtype.version>  
 +    <epics.vtype.all.version>1.0.6</epics.vtype.all.version>      
 +    <epics.ntypes.version>0.3.8</epics.ntypes.version>  
 +    <epics.jca.version>2.4.8</epics.jca.version>
 +    <epics.pvaccess.version>5.1.8</epics.pvaccess.version>  
 +    <epics.pvaclient.version>4.3.2</epics.pvaclient.version>       
 +    <epics.pvdata.version>6.1.8</epics.pvdata.version>
 +    <epics.pvdatabase.version>4.3.1</epics.pvdatabase.version>    
 +    <epics.gpclient.version>1.0.7</epics.gpclient.version>   
 +    <epics.gpclient.core.version>1.0.7</epics.gpclient.core.version>
 +    <epics.gpclient.sim.version>1.0.7</epics.gpclient.sim.version>                 
 +    <epics.gpclient.loc.version>1.0.7</epics.gpclient.loc.version>  
 +    <epics.gpclient.pva.version>1.0.7</epics.gpclient.pva.version>
 +    <epics.gpclient.ca.version>1.0.7</epics.gpclient.ca.version>    
    </properties>
  
    <modules>
diff --cc protocols/ab-eth/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/ab-eth/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/ads/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/ads/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/bacnetip/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/bacnetip/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/c-bus/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/c-bus/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/canopen/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/canopen/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/df1/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/df1/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/eip/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/eip/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/firmata/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/firmata/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/genericcan/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/genericcan/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/iec-60870/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/iec-60870/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/knxnetip/.factorypath
index 0000000000,0000000000..aa25822af6
new file mode 100644
--- /dev/null
+++ b/protocols/knxnetip/.factorypath
@@@ -1,0 -1,0 +1,35 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/modbus/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/modbus/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/mqtt/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/mqtt/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/opcua/.factorypath
index 0000000000,0000000000..9d47e196f7
new file mode 100644
--- /dev/null
+++ b/protocols/opcua/.factorypath
@@@ -1,0 -1,0 +1,62 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-core/3.9.6/maven-core-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-model/3.9.6/maven-model-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-settings/3.9.6/maven-settings-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-settings-builder/3.9.6/maven-settings-builder-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-sec-dispatcher/2.0/plexus-sec-dispatcher-2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-cipher/2.0/plexus-cipher-2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-builder-support/3.9.6/maven-builder-support-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-repository-metadata/3.9.6/maven-repository-metadata-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-artifact/3.9.4/maven-artifact-3.9.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-plugin-api/3.9.6/maven-plugin-api-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-model-builder/3.9.6/maven-model-builder-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/maven-resolver-provider/3.9.6/maven-resolver-provider-3.9.6.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-impl/1.9.18/maven-resolver-impl-1.9.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-named-locks/1.9.18/maven-resolver-named-locks-1.9.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-api/1.9.18/maven-resolver-api-1.9.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-spi/1.9.18/maven-resolver-spi-1.9.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/resolver/maven-resolver-util/1.9.18/maven-resolver-util-1.9.18.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/maven/shared/maven-shared-utils/3.3.4/maven-shared-utils-3.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.9.0.M2/org.eclipse.sisu.plexus-0.9.0.M2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.9.0.M2/org.eclipse.sisu.inject-0.9.0.M2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/5.1.0/guice-5.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.0.0-jre/guava-33.0.0-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/3.5.1/plexus-utils-3.5.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.7.0/plexus-classworlds-2.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-interpolation/1.26/plexus-interpolation-1.26.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.0/plexus-component-annotations-2.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/open-protocol/.factorypath
index 0000000000,0000000000..30ccc86872
new file mode 100644
--- /dev/null
+++ b/protocols/open-protocol/.factorypath
@@@ -1,0 -1,0 +1,35 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/plc4x-api/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/plc4x-api/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/plc4x/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/plc4x/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/profinet/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/profinet/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/s7/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/s7/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/simulated/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/simulated/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/socketcan/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/socketcan/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc protocols/umas/.factorypath
index 0000000000,0000000000..4be7263eaa
new file mode 100644
--- /dev/null
+++ b/protocols/umas/.factorypath
@@@ -1,0 -1,0 +1,34 @@@
++<factorypath>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-api/2.14.2/plexus-compiler-api-2.14.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-utils/4.0.0/plexus-utils-4.0.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-compiler-eclipse/2.13.0/plexus-compiler-eclipse-2.13.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-testing/1.1.0/plexus-testing-1.1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.4/org.eclipse.sisu.plexus-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.4/org.eclipse.sisu.inject-0.3.4.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/inject/guice/4.2.3/guice-4.2.3-no_aop.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/javax/inject/javax.inject/1/javax.inject-1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/aopalliance/aopalliance/1.0/aopalliance-1.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/27.1-jre/guava-27.1-jre.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/jupiter/junit-jupiter-api/5.8.0/junit-jupiter-api-5.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/junit/platform/junit-platform-commons/1.8.0/junit-platform-commons-1.8.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/jdt/ecj/3.32.0/ecj-3.32.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-protocol-base/1.7.0/plc4x-code-generation-protocol-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/apache/plc4x/plugins/plc4x-code-generation-types-base/1.7.0/plc4x-code-generation-types-base-1.7.0.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.1/commons-io-2.15.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.1/antlr4-runtime-4.13.1.jar" enabled="true" runInBatchMode="false"/>
++    <factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar" enabled="true" runInBatchMode="false"/>
++</factorypath>
diff --cc src/site/asciidoc/users/download.adoc
index bc17005e61,cf1edee462..cdac305361
--- a/src/site/asciidoc/users/download.adoc
+++ b/src/site/asciidoc/users/download.adoc
@@@ -21,7 -21,59 +21,63 @@@ Be sure to verify your downloads by the
  
  === Current Releases
  
++<<<<<<< HEAD
 +==== 0.11.0 Official https://www.apache.org/dyn/closer.lua/plc4x/0.11.0/apache-plc4x-0.12.0-source-release.zip[source release] [ https://downloads.apache.org/plc4x/0.11.0/apache-plc4x-0.12.0-source-release.zip.sha512[SHA512] ] [ https://downloads.apache.org/plc4x/0.11.0/apache-plc4x-0.12.0-source-release.zip.asc[ASC] ]
++=======
+ ==== 0.12.0 Official https://www.apache.org/dyn/closer.lua/plc4x/0.12.0/apache-plc4x-0.12.0-source-release.zip[source release] [ https://downloads.apache.org/plc4x/0.12.0/apache-plc4x-0.12.0-source-release.zip.sha512[SHA512] ] [ https://downloads.apache.org/plc4x/0.12.0/apache-plc4x-0.12.0-source-release.zip.asc[ASC] ]
+ 
+ This release was mainly a release containing many bugfixes. We literally halved the number of open issues. A second major topic would have been another API streamlining in preparation to aiming for the big 1.0.0 release. The API was extended by additional features, that now allow tools to automatically provide support for tool assist when connecting to devices. Now additional information such as:
+ - Which transports does a given driver support?
+ - Which is the default transport for a given driver?
+ - Which configuration-options does a driver have?
+ - What types are these configuration options?
+ - What are the default-values these configuration options have?
+ - Which of these configuration options are required?
+ - The same set of information is also available for the transports a driver is using.
+ 
+ ===== New Features
+ 
+ - API: Made several bits of information available via the API
+ allowing tools to provide more content assist when dealing
+ with PLC4X connections.
+ - S7: The S7 driver now supports reading of STRING and
+ WSTRING data-types without providing a maximum length.
+ - Build: Worked on making PLC4X provide reproducible builds.
+ - Added "Ping" functionality to: ADS, EIP, KNX, Mock, Modbus
+ and Simulated drivers.
+ - The OPC-UA Java driver now support certificate-based
+ authentication and encryption.
+ 
+ ===== Incompatible changes
+ 
+ - Java 8 is no longer officially supported and Java 11 is the
+ new base-line.
+ - Renamed the PlcDriverManager method `listDrivers` to
+ `getProtocolCodes`
+ - Renamed the PlcDriverMetadata method `canDiscover` to
+ `isDiscoverySupported`
+ - Renamed the PlcConnectionMetadata methods `canRead`, `canWrite`
+ `canSubscribe` and `canBrowse` to `isReadSupported`,
+ `isWriteSupported`, `isSubscribeSupported` and `isBrowseSupported`
+ - The configuration syntax for configuring transport-related
+ config options in the connection-string was updated to be
+ now prefixed with the transport name the option belongs to.
+ 
+ ===== Bug Fixes
+ 
+ - S7: Several bugs and issues regarding supporting various
+ duration, date and time data-types.
+ - S7: Implemented the missing 64bit (L-) types.
+ - KNX: Fixed an issue with decoding 16 bit floating point
+ numbers.
+ - NiFi-Integration: The NiFi integration module was greatly
+ improved.
+ - Core: Fixed several leaks of open threads.
+ 
+ === Previous Releases
+ 
+ ==== 0.11.0 Official https://archive.apache.org/dist/plc4x/0.11.0/apache-plc4x-0.11.0-source-release.zip[source release] [ https://downloads.apache.org/plc4x/0.11.0/apache-plc4x-0.11.0-source-release.zip.sha512[SHA512] ] [ https://downloads.apache.org/plc4x/0.11.0/apache-plc4x-0.10.0-source-release.zip.asc[ASC] ]
++>>>>>>> develop
  
  The APIs have been streamlined in a preparation for a hopefully soon 1.0.0 release.
  Many drivers have been re-implemented with much more features.