You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2021/03/18 16:55:08 UTC

[plc4x] branch feature/plc4golang-refactor created (now d9bb672)

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

sruehl pushed a change to branch feature/plc4golang-refactor
in repository https://gitbox.apache.org/repos/asf/plc4x.git.


      at d9bb672  plc4go: Refactor, deduplicate package name out of code

This branch includes the following new commits:

     new d9bb672  plc4go: Refactor, deduplicate package name out of code

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[plc4x] 01/01: plc4go: Refactor, deduplicate package name out of code

Posted by sr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch feature/plc4golang-refactor
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit d9bb672ba2a7965e5e552c83244ed4b3c465fa54
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Mar 18 17:54:44 2021 +0100

    plc4go: Refactor, deduplicate package name out of code
---
 plc4go/cmd/main/drivers/tests/ads_driver_test.go   |   2 +-
 .../cmd/main/drivers/tests/modbus_driver_test.go   |   2 +-
 plc4go/cmd/main/drivers/tests/s7_driver_test.go    |   2 +-
 plc4go/go.mod                                      |   3 +-
 plc4go/go.sum                                      |  47 +++++--
 .../plc4go/ads/{AdsDriver.go => Driver.go}         |  12 +-
 .../ads/{AdsFieldHandler.go => FieldHandler.go}    |   0
 .../bacnetip/{BacnetIpDriver.go => Driver.go}      |   2 +-
 .../knxnetip/{KnxNetIpBrowser.go => Browser.go}    |  48 +++----
 .../{KnxNetIpConnection.go => Connection.go}       | 118 ++++++++---------
 .../{KnxNetIpDiscoverer.go => Discoverer.go}       |  10 +-
 .../knxnetip/{KnxNetIpDriver.go => Driver.go}      |  24 ++--
 .../plc4go/knxnetip/{KnxNetIpField.go => Field.go} | 146 ++++++++++-----------
 .../{KnxNetIpFieldHandler.go => FieldHandler.go}   |  62 ++++-----
 .../{KnxNetIpMessageCodec.go => MessageCodec.go}   |  32 ++---
 .../knxnetip/{KnxNetIpReader.go => Reader.go}      |  60 ++++-----
 .../{KnxNetIpSubscriber.go => Subscriber.go}       |  24 ++--
 ...IpSubscriptionEvent.go => SubscriptionEvent.go} |  16 +--
 plc4go/internal/plc4go/knxnetip/Utils.go           |   8 +-
 .../{KnxNetIpValueDecoder.go => ValueDecoder.go}   |   8 +-
 .../{KnxNetIpValueHandler.go => ValueHandler.go}   |   8 +-
 .../knxnetip/{KnxNetIpWriter.go => Writer.go}      |  16 +--
 .../modbus/{ModbusConnection.go => Connection.go}  |  44 +++----
 .../plc4go/modbus/{ModbusDriver.go => Driver.go}   |  24 ++--
 .../plc4go/modbus/{ModbusField.go => Field.go}     |  38 +++---
 .../{ModbusFieldHandler.go => FieldHandler.go}     |  44 +++----
 .../{ModbusMessageCodec.go => MessageCodec.go}     |  32 ++---
 .../plc4go/modbus/{ModbusReader.go => Reader.go}   |  58 ++++----
 .../{ModbusValueHandler.go => ValueHandler.go}     |   0
 .../plc4go/modbus/{ModbusWriter.go => Writer.go}   |  68 +++++-----
 .../internal/plc4go/s7/{S7Driver.go => Driver.go}  |   2 +-
 plc4go/pkg/plc4go/drivers/drivers.go               |   6 +-
 32 files changed, 499 insertions(+), 467 deletions(-)

diff --git a/plc4go/cmd/main/drivers/tests/ads_driver_test.go b/plc4go/cmd/main/drivers/tests/ads_driver_test.go
index 417d96b..24def51 100644
--- a/plc4go/cmd/main/drivers/tests/ads_driver_test.go
+++ b/plc4go/cmd/main/drivers/tests/ads_driver_test.go
@@ -26,5 +26,5 @@ import (
 
 func TestAdsDriver(t *testing.T) {
 	t.Skip("Still a work in progress")
-	testutils.RunDriverTestsuite(t, ads.NewAdsDriver(), "assets/testing/protocols/ads/DriverTestsuite.xml")
+	testutils.RunDriverTestsuite(t, ads.NewDriver(), "assets/testing/protocols/ads/DriverTestsuite.xml")
 }
diff --git a/plc4go/cmd/main/drivers/tests/modbus_driver_test.go b/plc4go/cmd/main/drivers/tests/modbus_driver_test.go
index cb07dd6..3505472 100644
--- a/plc4go/cmd/main/drivers/tests/modbus_driver_test.go
+++ b/plc4go/cmd/main/drivers/tests/modbus_driver_test.go
@@ -25,5 +25,5 @@ import (
 )
 
 func TestModbusDriver(t *testing.T) {
-	testutils.RunDriverTestsuite(t, modbus.NewModbusDriver(), "assets/testing/protocols/modbus/DriverTestsuite.xml")
+	testutils.RunDriverTestsuite(t, modbus.NewDriver(), "assets/testing/protocols/modbus/DriverTestsuite.xml")
 }
diff --git a/plc4go/cmd/main/drivers/tests/s7_driver_test.go b/plc4go/cmd/main/drivers/tests/s7_driver_test.go
index e2b482e..14db3f7 100644
--- a/plc4go/cmd/main/drivers/tests/s7_driver_test.go
+++ b/plc4go/cmd/main/drivers/tests/s7_driver_test.go
@@ -26,5 +26,5 @@ import (
 
 func TestS7Driver(t *testing.T) {
 	t.Skip("Still a work in progress")
-	testutils.RunDriverTestsuite(t, s7.NewS7Driver(), "assets/testing/protocols/s7/DriverTestsuite.xml")
+	testutils.RunDriverTestsuite(t, s7.NewDriver(), "assets/testing/protocols/s7/DriverTestsuite.xml")
 }
diff --git a/plc4go/go.mod b/plc4go/go.mod
index 15e7197..5a72276 100644
--- a/plc4go/go.mod
+++ b/plc4go/go.mod
@@ -23,8 +23,9 @@ go 1.15
 require (
 	github.com/ajankovic/xdiff v0.0.1
 	github.com/icza/bitio v1.0.0
-	github.com/pkg/errors v0.8.1
+	github.com/pkg/errors v0.9.1
 	github.com/rs/zerolog v1.20.0
 	github.com/subchen/go-xmldom v1.1.2
 	github.com/tebeka/go2xunit v1.4.10 // indirect
+	gotest.tools/gotestsum v1.6.2 // indirect
 )
diff --git a/plc4go/go.sum b/plc4go/go.sum
index ad497f6..5d8570b 100644
--- a/plc4go/go.sum
+++ b/plc4go/go.sum
@@ -3,32 +3,63 @@ github.com/ajankovic/xdiff v0.0.1/go.mod h1:SUmEZ67uB97I0zkiuQ+lb+LOms9ipn8X+p+2
 github.com/antchfx/xpath v0.0.0-20170515025933-1f3266e77307 h1:C735MoY/X+UOx6SECmHk5pVOj51h839Ph13pEoY8UmU=
 github.com/antchfx/xpath v0.0.0-20170515025933-1f3266e77307/go.mod h1:Yee4kTMuNiPYJ7nSNorELQMr1J33uOpXDMByNYhvtNk=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-errors/errors v1.1.1/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs=
+github.com/dnephin/pflag v1.0.7 h1:oxONGlWxhmUct0YzKTgrpQv9AUA1wtPBn7zuSjJqptk=
+github.com/dnephin/pflag v1.0.7/go.mod h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE=
+github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=
+github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
+github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
+github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
 github.com/icza/bitio v1.0.0 h1:squ/m1SHyFeCA6+6Gyol1AxV9nmPPlJFT8c2vKdj3U8=
 github.com/icza/bitio v1.0.0/go.mod h1:0jGnlLAx8MKMr9VGnn/4YrvZiprkvBelsVIbA9Jjr9A=
 github.com/icza/mighty v0.0.0-20180919140131-cfd07d671de6 h1:8UsGZ2rr2ksmEru6lToqnXgA8Mz1DP11X4zSJ159C3k=
 github.com/icza/mighty v0.0.0-20180919140131-cfd07d671de6/go.mod h1:xQig96I1VNBDIWGCdTt54nHt6EeI639SmHycLYL7FkA=
+github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE=
+github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
+github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
 github.com/rs/zerolog v1.20.0 h1:38k9hgtUBdxFwE34yS8rTHmHBa4eN16E4DJlv177LNs=
 github.com/rs/zerolog v1.20.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo=
-github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/subchen/go-xmldom v1.1.2 h1:7evI2YqfYYOnuj+PBwyaOZZYjl3iWq35P6KfBUw9jeU=
 github.com/subchen/go-xmldom v1.1.2/go.mod h1:6Pg/HuX5/T4Jlj0IPJF1sRxKVoI/rrKP6LIMge9d5/8=
 github.com/tebeka/go2xunit v1.4.10 h1:0UO+9YoLpXTZ0DL9XbTmIIibgmKBGiwroo8uhFMSyR0=
 github.com/tebeka/go2xunit v1.4.10/go.mod h1:wmc9jKT7KlU4QLU6DNTaIXNnYNOjKKNlp6mjOS0UrqY=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 h1:bNEHhJCnrwMKNMmOx3yAynp5vs5/gRy+XWFtZFu7NBM=
+golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74 h1:4cFkmztxtMslUX2SctSl+blCyXfpzhGOy9LhKAqSMA4=
 golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gotest.tools v1.4.0 h1:BjtEgfuw8Qyd+jPvQz8CfoxiO/UjFEidWinwEXZiWv0=
+gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+gotest.tools/gotestsum v1.6.2 h1:QRO7xoLEUQOdSzBzUaasXvn6WOSQjf2hBIBDWEs3VqI=
+gotest.tools/gotestsum v1.6.2/go.mod h1:H74H1IvjJE+E/1INpsn2P4+QW0uLDgL/T2sVajPHmTM=
+gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
diff --git a/plc4go/internal/plc4go/ads/AdsDriver.go b/plc4go/internal/plc4go/ads/Driver.go
similarity index 83%
rename from plc4go/internal/plc4go/ads/AdsDriver.go
rename to plc4go/internal/plc4go/ads/Driver.go
index 5245058..a5f566b 100644
--- a/plc4go/internal/plc4go/ads/AdsDriver.go
+++ b/plc4go/internal/plc4go/ads/Driver.go
@@ -23,25 +23,25 @@ import (
 	"github.com/apache/plc4x/plc4go/pkg/plc4go"
 )
 
-type AdsDriver struct {
+type Driver struct {
 	fieldHandler spi.PlcFieldHandler
 	plc4go.PlcDriver
 }
 
-func NewAdsDriver() plc4go.PlcDriver {
-	return &AdsDriver{
+func NewDriver() plc4go.PlcDriver {
+	return &Driver{
 		fieldHandler: NewFieldHandler(),
 	}
 }
 
-func (m AdsDriver) GetProtocolCode() string {
+func (m Driver) GetProtocolCode() string {
 	return "ads"
 }
 
-func (m AdsDriver) GetProtocolName() string {
+func (m Driver) GetProtocolName() string {
 	return "Beckhoff TwinCat ADS"
 }
 
-func (m AdsDriver) SupportsDiscovery() bool {
+func (m Driver) SupportsDiscovery() bool {
 	return false
 }
diff --git a/plc4go/internal/plc4go/ads/AdsFieldHandler.go b/plc4go/internal/plc4go/ads/FieldHandler.go
similarity index 100%
rename from plc4go/internal/plc4go/ads/AdsFieldHandler.go
rename to plc4go/internal/plc4go/ads/FieldHandler.go
diff --git a/plc4go/internal/plc4go/bacnetip/BacnetIpDriver.go b/plc4go/internal/plc4go/bacnetip/Driver.go
similarity index 95%
rename from plc4go/internal/plc4go/bacnetip/BacnetIpDriver.go
rename to plc4go/internal/plc4go/bacnetip/Driver.go
index 6c7787f..095e575 100644
--- a/plc4go/internal/plc4go/bacnetip/BacnetIpDriver.go
+++ b/plc4go/internal/plc4go/bacnetip/Driver.go
@@ -20,6 +20,6 @@ package bacnetip
 
 import "github.com/apache/plc4x/plc4go/pkg/plc4go"
 
-func NewBacnetIpDriver() plc4go.PlcDriver {
+func NewDriver() plc4go.PlcDriver {
 	return nil
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go b/plc4go/internal/plc4go/knxnetip/Browser.go
similarity index 92%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go
rename to plc4go/internal/plc4go/knxnetip/Browser.go
index 54ef3ee..c836be8 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpBrowser.go
+++ b/plc4go/internal/plc4go/knxnetip/Browser.go
@@ -34,27 +34,27 @@ import (
 	"time"
 )
 
-type KnxNetIpBrowser struct {
-	connection      *KnxNetIpConnection
+type Browser struct {
+	connection      *Connection
 	messageCodec    spi.MessageCodec
 	sequenceCounter uint8
 }
 
-func NewKnxNetIpBrowser(connection *KnxNetIpConnection, messageCodec spi.MessageCodec) *KnxNetIpBrowser {
-	return &KnxNetIpBrowser{
+func NewBrowser(connection *Connection, messageCodec spi.MessageCodec) *Browser {
+	return &Browser{
 		connection:      connection,
 		messageCodec:    messageCodec,
 		sequenceCounter: 0,
 	}
 }
 
-func (m KnxNetIpBrowser) Browse(browseRequest apiModel.PlcBrowseRequest) <-chan apiModel.PlcBrowseRequestResult {
+func (m Browser) Browse(browseRequest apiModel.PlcBrowseRequest) <-chan apiModel.PlcBrowseRequestResult {
 	return m.BrowseWithInterceptor(browseRequest, func(result apiModel.PlcBrowseEvent) bool {
 		return true
 	})
 }
 
-func (m KnxNetIpBrowser) BrowseWithInterceptor(browseRequest apiModel.PlcBrowseRequest, interceptor func(result apiModel.PlcBrowseEvent) bool) <-chan apiModel.PlcBrowseRequestResult {
+func (m Browser) BrowseWithInterceptor(browseRequest apiModel.PlcBrowseRequest, interceptor func(result apiModel.PlcBrowseEvent) bool) <-chan apiModel.PlcBrowseRequestResult {
 	result := make(chan apiModel.PlcBrowseRequestResult)
 	sendResult := func(browseResponse apiModel.PlcBrowseResponse, err error) {
 		result <- apiModel.PlcBrowseRequestResult{
@@ -75,16 +75,16 @@ func (m KnxNetIpBrowser) BrowseWithInterceptor(browseRequest apiModel.PlcBrowseR
 			}
 
 			switch field.(type) {
-			case KnxNetIpDeviceQueryField:
-				queryResults, err := m.executeDeviceQuery(field.(KnxNetIpDeviceQueryField), browseRequest, queryName, interceptor)
+			case DeviceQueryField:
+				queryResults, err := m.executeDeviceQuery(field.(DeviceQueryField), browseRequest, queryName, interceptor)
 				if err != nil {
 					// TODO: Return some sort of return code like with the read and write APIs
 					results[queryName] = nil
 				} else {
 					results[queryName] = queryResults
 				}
-			case KnxNetIpCommunicationObjectQueryField:
-				queryResults, err := m.executeCommunicationObjectQuery(field.(KnxNetIpCommunicationObjectQueryField))
+			case CommunicationObjectQueryField:
+				queryResults, err := m.executeCommunicationObjectQuery(field.(CommunicationObjectQueryField))
 				if err != nil {
 					// TODO: Return some sort of return code like with the read and write APIs
 					results[queryName] = nil
@@ -101,7 +101,7 @@ func (m KnxNetIpBrowser) BrowseWithInterceptor(browseRequest apiModel.PlcBrowseR
 	return result
 }
 
-func (m KnxNetIpBrowser) executeDeviceQuery(field KnxNetIpDeviceQueryField, browseRequest apiModel.PlcBrowseRequest, queryName string, interceptor func(result apiModel.PlcBrowseEvent) bool) ([]apiModel.PlcBrowseQueryResult, error) {
+func (m Browser) executeDeviceQuery(field DeviceQueryField, browseRequest apiModel.PlcBrowseRequest, queryName string, interceptor func(result apiModel.PlcBrowseEvent) bool) ([]apiModel.PlcBrowseQueryResult, error) {
 	// Create a list of address strings, which doesn't contain any ranges, lists or wildcards
 	knxAddresses, err := m.calculateAddresses(field)
 	if err != nil {
@@ -122,7 +122,7 @@ func (m KnxNetIpBrowser) executeDeviceQuery(field KnxNetIpDeviceQueryField, brow
 			// otherwise just ignore it.
 			if deviceConnection.connection != nil {
 				queryResult := apiModel.PlcBrowseQueryResult{
-					Field: NewKnxNetIpDeviceQueryField(
+					Field: NewDeviceQueryField(
 						strconv.Itoa(int(knxAddress.MainGroup)),
 						strconv.Itoa(int(knxAddress.MiddleGroup)),
 						strconv.Itoa(int(knxAddress.SubGroup)),
@@ -162,7 +162,7 @@ func (m KnxNetIpBrowser) executeDeviceQuery(field KnxNetIpDeviceQueryField, brow
 	return queryResults, nil
 }
 
-func (m KnxNetIpBrowser) executeCommunicationObjectQuery(field KnxNetIpCommunicationObjectQueryField) ([]apiModel.PlcBrowseQueryResult, error) {
+func (m Browser) executeCommunicationObjectQuery(field CommunicationObjectQueryField) ([]apiModel.PlcBrowseQueryResult, error) {
 	var results []apiModel.PlcBrowseQueryResult
 
 	knxAddress := field.toKnxAddress()
@@ -400,17 +400,17 @@ func (m KnxNetIpBrowser) executeCommunicationObjectQuery(field KnxNetIpCommunica
 				switch groupAddress.Child.(type) {
 				case *driverModel.KnxGroupAddress3Level:
 					address3Level := driverModel.CastKnxGroupAddress3Level(groupAddress)
-					field = NewKnxNetIpGroupAddress3LevelPlcField(strconv.Itoa(int(address3Level.MainGroup)),
+					field = NewGroupAddress3LevelPlcField(strconv.Itoa(int(address3Level.MainGroup)),
 						strconv.Itoa(int(address3Level.MiddleGroup)), strconv.Itoa(int(address3Level.SubGroup)),
 						&fieldType)
 				case *driverModel.KnxGroupAddress2Level:
 					address2Level := driverModel.CastKnxGroupAddress2Level(groupAddress)
-					field = NewKnxNetIpGroupAddress2LevelPlcField(strconv.Itoa(int(address2Level.MainGroup)),
+					field = NewGroupAddress2LevelPlcField(strconv.Itoa(int(address2Level.MainGroup)),
 						strconv.Itoa(int(address2Level.SubGroup)),
 						&fieldType)
 				case *driverModel.KnxGroupAddressFreeLevel:
 					address1Level := driverModel.CastKnxGroupAddressFreeLevel(groupAddress)
-					field = NewKnxNetIpGroupAddress1LevelPlcField(strconv.Itoa(int(address1Level.SubGroup)),
+					field = NewGroupAddress1LevelPlcField(strconv.Itoa(int(address1Level.SubGroup)),
 						&fieldType)
 				}
 
@@ -523,7 +523,7 @@ func (m KnxNetIpBrowser) executeCommunicationObjectQuery(field KnxNetIpCommunica
 	return results, nil
 }
 
-func (m KnxNetIpBrowser) calculateAddresses(field KnxNetIpDeviceQueryField) ([]driverModel.KnxAddress, error) {
+func (m Browser) calculateAddresses(field DeviceQueryField) ([]driverModel.KnxAddress, error) {
 	var explodedAddresses []driverModel.KnxAddress
 	mainGroupOptions, err := m.explodeSegment(field.MainGroup, 1, 15)
 	if err != nil {
@@ -555,7 +555,7 @@ func (m KnxNetIpBrowser) calculateAddresses(field KnxNetIpDeviceQueryField) ([]d
 	return explodedAddresses, nil
 }
 
-func (m KnxNetIpBrowser) explodeSegment(segment string, min uint8, max uint8) ([]uint8, error) {
+func (m Browser) explodeSegment(segment string, min uint8, max uint8) ([]uint8, error) {
 	var options []uint8
 	if strings.Contains(segment, "*") {
 		for i := min; i <= max; i++ {
@@ -598,7 +598,7 @@ func (m KnxNetIpBrowser) explodeSegment(segment string, min uint8, max uint8) ([
 	return options, nil
 }
 
-func (m KnxNetIpBrowser) parseAssociationTable(deviceDescriptor uint16, knxGroupAddresses []*driverModel.KnxGroupAddress, value values.PlcValue) (*driverModel.KnxGroupAddress, uint16) {
+func (m Browser) parseAssociationTable(deviceDescriptor uint16, knxGroupAddresses []*driverModel.KnxGroupAddress, value values.PlcValue) (*driverModel.KnxGroupAddress, uint16) {
 	var addressIndex uint16
 	var comObjectNumber uint16
 	if deviceDescriptor == uint16(0x07B0) /* SystemB */ {
@@ -615,11 +615,11 @@ func (m KnxNetIpBrowser) parseAssociationTable(deviceDescriptor uint16, knxGroup
 	return nil, 0
 }
 
-func (m KnxNetIpBrowser) getFieldForGroupAddress(groupAddress *driverModel.KnxGroupAddress, datatype driverModel.KnxDatapointType) apiModel.PlcField {
+func (m Browser) getFieldForGroupAddress(groupAddress *driverModel.KnxGroupAddress, datatype driverModel.KnxDatapointType) apiModel.PlcField {
 	switch groupAddress.Child.(type) {
 	case *driverModel.KnxGroupAddress3Level:
 		groupAddress3Level := driverModel.CastKnxGroupAddress3Level(groupAddress)
-		return KnxNetIpGroupAddress3LevelPlcField{
+		return GroupAddress3LevelPlcField{
 			MainGroup:   strconv.Itoa(int(groupAddress3Level.MainGroup)),
 			MiddleGroup: strconv.Itoa(int(groupAddress3Level.MiddleGroup)),
 			SubGroup:    strconv.Itoa(int(groupAddress3Level.SubGroup)),
@@ -627,14 +627,14 @@ func (m KnxNetIpBrowser) getFieldForGroupAddress(groupAddress *driverModel.KnxGr
 		}
 	case *driverModel.KnxGroupAddress2Level:
 		groupAddress2Level := driverModel.CastKnxGroupAddress2Level(groupAddress)
-		return KnxNetIpGroupAddress2LevelPlcField{
+		return GroupAddress2LevelPlcField{
 			MainGroup: strconv.Itoa(int(groupAddress2Level.MainGroup)),
 			SubGroup:  strconv.Itoa(int(groupAddress2Level.SubGroup)),
 			FieldType: &datatype,
 		}
 	case *driverModel.KnxGroupAddressFreeLevel:
 		groupAddress1Level := driverModel.CastKnxGroupAddressFreeLevel(groupAddress)
-		return KnxNetIpGroupAddress1LevelPlcField{
+		return GroupAddress1LevelPlcField{
 			MainGroup: strconv.Itoa(int(groupAddress1Level.SubGroup)),
 			FieldType: &datatype,
 		}
@@ -642,7 +642,7 @@ func (m KnxNetIpBrowser) getFieldForGroupAddress(groupAddress *driverModel.KnxGr
 	return nil
 }
 
-func (m KnxNetIpBrowser) getFieldTypeForValueType(valueType driverModel.ComObjectValueType) driverModel.KnxDatapointType {
+func (m Browser) getFieldTypeForValueType(valueType driverModel.ComObjectValueType) driverModel.KnxDatapointType {
 	switch valueType {
 	case driverModel.ComObjectValueType_BIT1:
 		return driverModel.KnxDatapointType_BOOL
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpConnection.go b/plc4go/internal/plc4go/knxnetip/Connection.go
similarity index 92%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpConnection.go
rename to plc4go/internal/plc4go/knxnetip/Connection.go
index 423d22c..e0a141c 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpConnection.go
+++ b/plc4go/internal/plc4go/knxnetip/Connection.go
@@ -103,14 +103,14 @@ type KnxMemoryReadFragment struct {
 	startingAddress uint16
 }
 
-type KnxNetIpConnection struct {
+type Connection struct {
 	messageCodec             spi.MessageCodec
 	options                  map[string][]string
 	fieldHandler             spi.PlcFieldHandler
 	valueHandler             spi.PlcValueHandler
 	connectionStateTimer     *time.Ticker
 	quitConnectionStateTimer chan struct{}
-	subscribers              []*KnxNetIpSubscriber
+	subscribers              []*Subscriber
 
 	valueCache      map[uint16][]int8
 	valueCacheMutex sync.RWMutex
@@ -159,13 +159,13 @@ type InternalResult struct {
 	err             error
 }
 
-func NewKnxNetIpConnection(transportInstance transports.TransportInstance, options map[string][]string, fieldHandler spi.PlcFieldHandler) *KnxNetIpConnection {
-	connection := &KnxNetIpConnection{
+func NewConnection(transportInstance transports.TransportInstance, options map[string][]string, fieldHandler spi.PlcFieldHandler) *Connection {
+	connection := &Connection{
 		options:            options,
 		fieldHandler:       fieldHandler,
 		valueHandler:       NewValueHandler(),
 		requestInterceptor: interceptors.NewSingleItemRequestInterceptor(),
-		subscribers:        []*KnxNetIpSubscriber{},
+		subscribers:        []*Subscriber{},
 		valueCache:         map[uint16][]int8{},
 		valueCacheMutex:    sync.RWMutex{},
 		metadata:           &ConnectionMetadata{},
@@ -181,11 +181,11 @@ func NewKnxNetIpConnection(transportInstance transports.TransportInstance, optio
 			connection.buildingKey = bc
 		}
 	}
-	connection.messageCodec = NewKnxNetIpMessageCodec(transportInstance, connection.interceptIncomingMessage)
+	connection.messageCodec = NewMessageCodec(transportInstance, connection.interceptIncomingMessage)
 	return connection
 }
 
-func (m *KnxNetIpConnection) Connect() <-chan plc4go.PlcConnectionConnectResult {
+func (m *Connection) Connect() <-chan plc4go.PlcConnectionConnectResult {
 	result := make(chan plc4go.PlcConnectionConnectResult)
 	sendResult := func(connection plc4go.PlcConnection, err error) {
 		result <- plc4go.NewPlcConnectionConnectResult(connection, err)
@@ -317,7 +317,7 @@ func (m *KnxNetIpConnection) Connect() <-chan plc4go.PlcConnectionConnectResult
 	return result
 }
 
-func (m *KnxNetIpConnection) BlockingClose() {
+func (m *Connection) BlockingClose() {
 	closeResults := m.Close()
 	select {
 	case <-closeResults:
@@ -327,7 +327,7 @@ func (m *KnxNetIpConnection) BlockingClose() {
 	}
 }
 
-func (m *KnxNetIpConnection) Close() <-chan plc4go.PlcConnectionCloseResult {
+func (m *Connection) Close() <-chan plc4go.PlcConnectionCloseResult {
 	result := make(chan plc4go.PlcConnectionCloseResult)
 
 	go func() {
@@ -360,7 +360,7 @@ func (m *KnxNetIpConnection) Close() <-chan plc4go.PlcConnectionCloseResult {
 	return result
 }
 
-func (m *KnxNetIpConnection) IsConnected() bool {
+func (m *Connection) IsConnected() bool {
 	if m.messageCodec != nil {
 		pingChannel := m.Ping()
 		select {
@@ -374,7 +374,7 @@ func (m *KnxNetIpConnection) IsConnected() bool {
 	return false
 }
 
-func (m *KnxNetIpConnection) Ping() <-chan plc4go.PlcConnectionPingResult {
+func (m *Connection) Ping() <-chan plc4go.PlcConnectionPingResult {
 	result := make(chan plc4go.PlcConnectionPingResult)
 
 	go func() {
@@ -392,46 +392,46 @@ func (m *KnxNetIpConnection) Ping() <-chan plc4go.PlcConnectionPingResult {
 	return result
 }
 
-func (m *KnxNetIpConnection) GetMetadata() apiModel.PlcConnectionMetadata {
+func (m *Connection) GetMetadata() apiModel.PlcConnectionMetadata {
 	return m.metadata
 }
 
-func (m *KnxNetIpConnection) ReadRequestBuilder() apiModel.PlcReadRequestBuilder {
+func (m *Connection) ReadRequestBuilder() apiModel.PlcReadRequestBuilder {
 	return internalModel.NewDefaultPlcReadRequestBuilder(
-		m.fieldHandler, NewKnxNetIpReader(m))
+		m.fieldHandler, NewReader(m))
 }
 
-func (m *KnxNetIpConnection) WriteRequestBuilder() apiModel.PlcWriteRequestBuilder {
+func (m *Connection) WriteRequestBuilder() apiModel.PlcWriteRequestBuilder {
 	return internalModel.NewDefaultPlcWriteRequestBuilder(
-		m.fieldHandler, m.valueHandler, NewKnxNetIpWriter(m.messageCodec))
+		m.fieldHandler, m.valueHandler, NewWriter(m.messageCodec))
 }
 
-func (m *KnxNetIpConnection) SubscriptionRequestBuilder() apiModel.PlcSubscriptionRequestBuilder {
+func (m *Connection) SubscriptionRequestBuilder() apiModel.PlcSubscriptionRequestBuilder {
 	return internalModel.NewDefaultPlcSubscriptionRequestBuilder(
-		m.fieldHandler, m.valueHandler, NewKnxNetIpSubscriber(m))
+		m.fieldHandler, m.valueHandler, NewSubscriber(m))
 }
 
-func (m *KnxNetIpConnection) BrowseRequestBuilder() apiModel.PlcBrowseRequestBuilder {
-	return internalModel.NewDefaultPlcBrowseRequestBuilder(NewKnxNetIpBrowser(m, m.messageCodec))
+func (m *Connection) BrowseRequestBuilder() apiModel.PlcBrowseRequestBuilder {
+	return internalModel.NewDefaultPlcBrowseRequestBuilder(NewBrowser(m, m.messageCodec))
 }
 
-func (m *KnxNetIpConnection) UnsubscriptionRequestBuilder() apiModel.PlcUnsubscriptionRequestBuilder {
+func (m *Connection) UnsubscriptionRequestBuilder() apiModel.PlcUnsubscriptionRequestBuilder {
 	return nil /*internalModel.NewDefaultPlcUnsubscriptionRequestBuilder(
-	  m.fieldHandler, m.valueHandler, NewKnxNetIpSubscriber(m.messageCodec))*/
+	  m.fieldHandler, m.valueHandler, NewSubscriber(m.messageCodec))*/
 }
 
-func (m *KnxNetIpConnection) GetTransportInstance() transports.TransportInstance {
+func (m *Connection) GetTransportInstance() transports.TransportInstance {
 	if mc, ok := m.messageCodec.(spi.TransportInstanceExposer); ok {
 		return mc.GetTransportInstance()
 	}
 	return nil
 }
 
-func (m *KnxNetIpConnection) GetPlcFieldHandler() spi.PlcFieldHandler {
+func (m *Connection) GetPlcFieldHandler() spi.PlcFieldHandler {
 	return m.fieldHandler
 }
 
-func (m *KnxNetIpConnection) GetPlcValueHandler() spi.PlcValueHandler {
+func (m *Connection) GetPlcValueHandler() spi.PlcValueHandler {
 	return m.valueHandler
 }
 
@@ -446,7 +446,7 @@ func (m *KnxNetIpConnection) GetPlcValueHandler() spi.PlcValueHandler {
 // They expect the called private functions to handle timeouts, so these will not.
 ///////////////////////////////////////////////////////////////////////////////////////////////////////
 
-func (m *KnxNetIpConnection) ReadGroupAddress(groupAddress []int8, datapointType *driverModel.KnxDatapointType) <-chan KnxReadResult {
+func (m *Connection) ReadGroupAddress(groupAddress []int8, datapointType *driverModel.KnxDatapointType) <-chan KnxReadResult {
 	result := make(chan KnxReadResult)
 
 	sendResponse := func(value *values.PlcValue, numItems uint8, err error) {
@@ -497,7 +497,7 @@ func (m *KnxNetIpConnection) ReadGroupAddress(groupAddress []int8, datapointType
 	return result
 }
 
-func (m *KnxNetIpConnection) DeviceConnect(targetAddress driverModel.KnxAddress) <-chan KnxDeviceConnectResult {
+func (m *Connection) DeviceConnect(targetAddress driverModel.KnxAddress) <-chan KnxDeviceConnectResult {
 	result := make(chan KnxDeviceConnectResult)
 
 	sendResponse := func(connection *KnxDeviceConnection, err error) {
@@ -582,7 +582,7 @@ func (m *KnxNetIpConnection) DeviceConnect(targetAddress driverModel.KnxAddress)
 	return result
 }
 
-func (m *KnxNetIpConnection) DeviceDisconnect(targetAddress driverModel.KnxAddress) <-chan KnxDeviceDisconnectResult {
+func (m *Connection) DeviceDisconnect(targetAddress driverModel.KnxAddress) <-chan KnxDeviceDisconnectResult {
 	result := make(chan KnxDeviceDisconnectResult)
 
 	sendResponse := func(connection *KnxDeviceConnection, err error) {
@@ -611,7 +611,7 @@ func (m *KnxNetIpConnection) DeviceDisconnect(targetAddress driverModel.KnxAddre
 	return result
 }
 
-func (m *KnxNetIpConnection) DeviceAuthenticate(targetAddress driverModel.KnxAddress, buildingKey []byte) <-chan KnxDeviceAuthenticateResult {
+func (m *Connection) DeviceAuthenticate(targetAddress driverModel.KnxAddress, buildingKey []byte) <-chan KnxDeviceAuthenticateResult {
 	result := make(chan KnxDeviceAuthenticateResult)
 
 	sendResponse := func(err error) {
@@ -663,7 +663,7 @@ func (m *KnxNetIpConnection) DeviceAuthenticate(targetAddress driverModel.KnxAdd
 	return result
 }
 
-func (m *KnxNetIpConnection) DeviceReadProperty(targetAddress driverModel.KnxAddress, objectId uint8, propertyId uint8, propertyIndex uint16, numElements uint8) <-chan KnxReadResult {
+func (m *Connection) DeviceReadProperty(targetAddress driverModel.KnxAddress, objectId uint8, propertyId uint8, propertyIndex uint16, numElements uint8) <-chan KnxReadResult {
 	result := make(chan KnxReadResult)
 
 	sendResponse := func(value *values.PlcValue, numItems uint8, err error) {
@@ -737,7 +737,7 @@ func (m *KnxNetIpConnection) DeviceReadProperty(targetAddress driverModel.KnxAdd
 	return result
 }
 
-func (m *KnxNetIpConnection) DeviceReadPropertyDescriptor(targetAddress driverModel.KnxAddress, objectId uint8, propertyId uint8) <-chan KnxReadResult {
+func (m *Connection) DeviceReadPropertyDescriptor(targetAddress driverModel.KnxAddress, objectId uint8, propertyId uint8) <-chan KnxReadResult {
 	result := make(chan KnxReadResult)
 
 	sendResponse := func(value *values.PlcValue, numItems uint8, err error) {
@@ -790,7 +790,7 @@ func (m *KnxNetIpConnection) DeviceReadPropertyDescriptor(targetAddress driverMo
 	return result
 }
 
-func (m *KnxNetIpConnection) DeviceReadMemory(targetAddress driverModel.KnxAddress, address uint16, numElements uint8, datapointType *driverModel.KnxDatapointType) <-chan KnxReadResult {
+func (m *Connection) DeviceReadMemory(targetAddress driverModel.KnxAddress, address uint16, numElements uint8, datapointType *driverModel.KnxDatapointType) <-chan KnxReadResult {
 	result := make(chan KnxReadResult)
 
 	sendResponse := func(value *values.PlcValue, numItems uint8, err error) {
@@ -895,7 +895,7 @@ func (m *KnxNetIpConnection) DeviceReadMemory(targetAddress driverModel.KnxAddre
 // They all assume the connection is checked and is available.
 ///////////////////////////////////////////////////////////////////////////////////////////////////////
 
-func (m *KnxNetIpConnection) sendGatewaySearchRequest() (*driverModel.SearchResponse, error) {
+func (m *Connection) sendGatewaySearchRequest() (*driverModel.SearchResponse, error) {
 	localAddress, err := m.getLocalAddress()
 	if err != nil {
 		return nil, errors.New("error getting local address: " + err.Error())
@@ -940,7 +940,7 @@ func (m *KnxNetIpConnection) sendGatewaySearchRequest() (*driverModel.SearchResp
 	}
 }
 
-func (m *KnxNetIpConnection) sendGatewayConnectionRequest() (*driverModel.ConnectionResponse, error) {
+func (m *Connection) sendGatewayConnectionRequest() (*driverModel.ConnectionResponse, error) {
 	localAddress, err := m.getLocalAddress()
 	if err != nil {
 		return nil, errors.New("error getting local address: " + err.Error())
@@ -987,7 +987,7 @@ func (m *KnxNetIpConnection) sendGatewayConnectionRequest() (*driverModel.Connec
 	}
 }
 
-func (m *KnxNetIpConnection) sendGatewayDisconnectionRequest() (*driverModel.DisconnectResponse, error) {
+func (m *Connection) sendGatewayDisconnectionRequest() (*driverModel.DisconnectResponse, error) {
 	localAddress, err := m.getLocalAddress()
 	if err != nil {
 		return nil, errors.New("error getting local address: " + err.Error())
@@ -1035,7 +1035,7 @@ func (m *KnxNetIpConnection) sendGatewayDisconnectionRequest() (*driverModel.Dis
 	}
 }
 
-func (m *KnxNetIpConnection) sendConnectionStateRequest() (*driverModel.ConnectionStateResponse, error) {
+func (m *Connection) sendConnectionStateRequest() (*driverModel.ConnectionStateResponse, error) {
 	localAddress, err := m.getLocalAddress()
 	if err != nil {
 		return nil, errors.New("error getting local address: " + err.Error())
@@ -1082,7 +1082,7 @@ func (m *KnxNetIpConnection) sendConnectionStateRequest() (*driverModel.Connecti
 	}
 }
 
-func (m *KnxNetIpConnection) sendGroupAddressReadRequest(groupAddress []int8) (*driverModel.ApduDataGroupValueResponse, error) {
+func (m *Connection) sendGroupAddressReadRequest(groupAddress []int8) (*driverModel.ApduDataGroupValueResponse, error) {
 	// Send the property read request and wait for a confirmation that this property is readable.
 	groupAddressReadRequest := driverModel.NewTunnelingRequest(
 		driverModel.NewTunnelingRequestDataBlock(m.CommunicationChannelId, m.getNewSequenceCounter()),
@@ -1154,7 +1154,7 @@ func (m *KnxNetIpConnection) sendGroupAddressReadRequest(groupAddress []int8) (*
 	}
 }
 
-func (m *KnxNetIpConnection) sendDeviceConnectionRequest(targetAddress driverModel.KnxAddress) (*driverModel.ApduControlConnect, error) {
+func (m *Connection) sendDeviceConnectionRequest(targetAddress driverModel.KnxAddress) (*driverModel.ApduControlConnect, error) {
 	// Send a connection request to the individual KNX device
 	deviceConnectionRequest := driverModel.NewTunnelingRequest(
 		driverModel.NewTunnelingRequestDataBlock(m.CommunicationChannelId, m.getNewSequenceCounter()),
@@ -1232,7 +1232,7 @@ func (m *KnxNetIpConnection) sendDeviceConnectionRequest(targetAddress driverMod
 	}
 }
 
-func (m *KnxNetIpConnection) sendDeviceDisconnectionRequest(targetAddress driverModel.KnxAddress) (*driverModel.ApduControlDisconnect, error) {
+func (m *Connection) sendDeviceDisconnectionRequest(targetAddress driverModel.KnxAddress) (*driverModel.ApduControlDisconnect, error) {
 	// Send a connection request to the individual KNX device
 	deviceDisconnectionRequest := driverModel.NewTunnelingRequest(
 		driverModel.NewTunnelingRequestDataBlock(m.CommunicationChannelId, m.getNewSequenceCounter()),
@@ -1311,7 +1311,7 @@ func (m *KnxNetIpConnection) sendDeviceDisconnectionRequest(targetAddress driver
 	}
 }
 
-func (m *KnxNetIpConnection) sendDeviceAuthentication(targetAddress driverModel.KnxAddress, authenticationLevel uint8, buildingKey []byte) (*driverModel.ApduDataExtAuthorizeResponse, error) {
+func (m *Connection) sendDeviceAuthentication(targetAddress driverModel.KnxAddress, authenticationLevel uint8, buildingKey []byte) (*driverModel.ApduDataExtAuthorizeResponse, error) {
 	// Check if there is already a connection available,
 	// if not, create a new one.
 	connection, ok := m.DeviceConnections[targetAddress]
@@ -1421,7 +1421,7 @@ func (m *KnxNetIpConnection) sendDeviceAuthentication(targetAddress driverModel.
 	}
 }
 
-func (m *KnxNetIpConnection) sendDeviceDeviceDescriptorReadRequest(targetAddress driverModel.KnxAddress) (*driverModel.ApduDataDeviceDescriptorResponse, error) {
+func (m *Connection) sendDeviceDeviceDescriptorReadRequest(targetAddress driverModel.KnxAddress) (*driverModel.ApduDataDeviceDescriptorResponse, error) {
 	// Next, read the device descriptor so we know how we have to communicate with the device.
 	counter := m.getNextCounter(targetAddress)
 	deviceDescriptorReadRequest := driverModel.NewTunnelingRequest(
@@ -1513,7 +1513,7 @@ func (m *KnxNetIpConnection) sendDeviceDeviceDescriptorReadRequest(targetAddress
 	}
 }
 
-func (m *KnxNetIpConnection) sendDevicePropertyReadRequest(targetAddress driverModel.KnxAddress, objectId uint8, propertyId uint8, propertyIndex uint16, numElements uint8) (*driverModel.ApduDataExtPropertyValueResponse, error) {
+func (m *Connection) sendDevicePropertyReadRequest(targetAddress driverModel.KnxAddress, objectId uint8, propertyId uint8, propertyIndex uint16, numElements uint8) (*driverModel.ApduDataExtPropertyValueResponse, error) {
 	// Next, read the device descriptor so we know how we have to communicate with the device.
 	// Send the property read request and wait for a confirmation that this property is readable.
 	counter := m.getNextCounter(targetAddress)
@@ -1613,7 +1613,7 @@ func (m *KnxNetIpConnection) sendDevicePropertyReadRequest(targetAddress driverM
 	}
 }
 
-func (m *KnxNetIpConnection) sendDevicePropertyDescriptionReadRequest(targetAddress driverModel.KnxAddress, objectId uint8, propertyId uint8) (*driverModel.ApduDataExtPropertyDescriptionResponse, error) {
+func (m *Connection) sendDevicePropertyDescriptionReadRequest(targetAddress driverModel.KnxAddress, objectId uint8, propertyId uint8) (*driverModel.ApduDataExtPropertyDescriptionResponse, error) {
 	// Next, read the device descriptor so we know how we have to communicate with the device.
 	// Send the property read request and wait for a confirmation that this property is readable.
 	counter := m.getNextCounter(targetAddress)
@@ -1713,7 +1713,7 @@ func (m *KnxNetIpConnection) sendDevicePropertyDescriptionReadRequest(targetAddr
 	}
 }
 
-func (m *KnxNetIpConnection) sendDeviceMemoryReadRequest(targetAddress driverModel.KnxAddress, address uint16, numBytes uint8) (*driverModel.ApduDataMemoryResponse, error) {
+func (m *Connection) sendDeviceMemoryReadRequest(targetAddress driverModel.KnxAddress, address uint16, numBytes uint8) (*driverModel.ApduDataMemoryResponse, error) {
 	// Next, read the device descriptor so we know how we have to communicate with the device.
 	counter := m.getNextCounter(targetAddress)
 
@@ -1809,7 +1809,7 @@ func (m *KnxNetIpConnection) sendDeviceMemoryReadRequest(targetAddress driverMod
 	}
 }
 
-func (m *KnxNetIpConnection) sendDeviceAck(targetAddress driverModel.KnxAddress, counter uint8, callback func(err error)) error {
+func (m *Connection) sendDeviceAck(targetAddress driverModel.KnxAddress, counter uint8, callback func(err error)) error {
 	ack := driverModel.NewTunnelingRequest(
 		driverModel.NewTunnelingRequestDataBlock(m.CommunicationChannelId, m.getNewSequenceCounter()),
 		driverModel.NewLDataReq(0, nil,
@@ -1881,7 +1881,7 @@ func (m *KnxNetIpConnection) sendDeviceAck(targetAddress driverModel.KnxAddress,
 // Internal helper functions
 ///////////////////////////////////////////////////////////////////////////////////////////////////////
 
-func (m *KnxNetIpConnection) interceptIncomingMessage(interface{}) {
+func (m *Connection) interceptIncomingMessage(interface{}) {
 	m.resetTimeout()
 	if m.connectionStateTimer != nil {
 		// Reset the timer for sending the ConnectionStateRequest
@@ -1889,11 +1889,11 @@ func (m *KnxNetIpConnection) interceptIncomingMessage(interface{}) {
 	}
 }
 
-func (m *KnxNetIpConnection) castIpToKnxAddress(ip net.IP) *driverModel.IPAddress {
+func (m *Connection) castIpToKnxAddress(ip net.IP) *driverModel.IPAddress {
 	return driverModel.NewIPAddress(utils.ByteArrayToInt8Array(ip)[len(ip)-4:])
 }
 
-func (m *KnxNetIpConnection) handleIncomingTunnelingRequest(tunnelingRequest *driverModel.TunnelingRequest) {
+func (m *Connection) handleIncomingTunnelingRequest(tunnelingRequest *driverModel.TunnelingRequest) {
 	go func() {
 		lDataInd := driverModel.CastLDataInd(tunnelingRequest.Cemi.Child)
 		if lDataInd != nil {
@@ -1942,7 +1942,7 @@ func (m *KnxNetIpConnection) handleIncomingTunnelingRequest(tunnelingRequest *dr
 	}()
 }
 
-func (m *KnxNetIpConnection) handleValueCacheUpdate(destinationAddress []int8, payload []int8) {
+func (m *Connection) handleValueCacheUpdate(destinationAddress []int8, payload []int8) {
 	addressData := uint16(destinationAddress[0])<<8 | (uint16(destinationAddress[1]) & 0xFF)
 
 	m.valueCacheMutex.RLock()
@@ -1962,7 +1962,7 @@ func (m *KnxNetIpConnection) handleValueCacheUpdate(destinationAddress []int8, p
 	}
 }
 
-func (m *KnxNetIpConnection) handleTimeout() {
+func (m *Connection) handleTimeout() {
 	// If this is the first timeout in a sequence, start the timer.
 	if m.connectionTimeoutTimer == nil {
 		m.connectionTimeoutTimer = time.NewTimer(m.connectionTtl)
@@ -1973,18 +1973,18 @@ func (m *KnxNetIpConnection) handleTimeout() {
 	}
 }
 
-func (m *KnxNetIpConnection) resetTimeout() {
+func (m *Connection) resetTimeout() {
 	if m.connectionTimeoutTimer != nil {
 		m.connectionTimeoutTimer.Stop()
 		m.connectionTimeoutTimer = nil
 	}
 }
 
-func (m *KnxNetIpConnection) resetConnection() {
+func (m *Connection) resetConnection() {
 	fmt.Println("Bad connection detected")
 }
 
-func (m *KnxNetIpConnection) getGroupAddressNumLevels() uint8 {
+func (m *Connection) getGroupAddressNumLevels() uint8 {
 	if val, ok := m.options["group-address-num-levels"]; ok {
 		groupAddressNumLevels, err := strconv.Atoi(val[0])
 		if err == nil {
@@ -1994,7 +1994,7 @@ func (m *KnxNetIpConnection) getGroupAddressNumLevels() uint8 {
 	return 3
 }
 
-func (m *KnxNetIpConnection) addSubscriber(subscriber *KnxNetIpSubscriber) {
+func (m *Connection) addSubscriber(subscriber *Subscriber) {
 	for _, sub := range m.subscribers {
 		if sub == subscriber {
 			return
@@ -2003,7 +2003,7 @@ func (m *KnxNetIpConnection) addSubscriber(subscriber *KnxNetIpSubscriber) {
 	m.subscribers = append(m.subscribers, subscriber)
 }
 
-func (m *KnxNetIpConnection) removeSubscriber(subscriber *KnxNetIpSubscriber) {
+func (m *Connection) removeSubscriber(subscriber *Subscriber) {
 	for i, sub := range m.subscribers {
 		if sub == subscriber {
 			m.subscribers = append(m.subscribers[:i], m.subscribers[i+1:]...)
@@ -2011,7 +2011,7 @@ func (m *KnxNetIpConnection) removeSubscriber(subscriber *KnxNetIpSubscriber) {
 	}
 }
 
-func (m *KnxNetIpConnection) sliceEqual(a, b []int8) bool {
+func (m *Connection) sliceEqual(a, b []int8) bool {
 	if len(a) != len(b) {
 		return false
 	}
@@ -2023,7 +2023,7 @@ func (m *KnxNetIpConnection) sliceEqual(a, b []int8) bool {
 	return true
 }
 
-func (m *KnxNetIpConnection) getLocalAddress() (*net.UDPAddr, error) {
+func (m *Connection) getLocalAddress() (*net.UDPAddr, error) {
 	transportInstanceExposer, ok := m.messageCodec.(spi.TransportInstanceExposer)
 	if !ok {
 		return nil, errors.New("used transport, is not a TransportInstanceExposer")
@@ -2038,7 +2038,7 @@ func (m *KnxNetIpConnection) getLocalAddress() (*net.UDPAddr, error) {
 	return udpTransportInstance.LocalAddress, nil
 }
 
-func (m *KnxNetIpConnection) getNewSequenceCounter() uint8 {
+func (m *Connection) getNewSequenceCounter() uint8 {
 	sequenceCounter := atomic.AddInt32(&m.SequenceCounter, 1)
 	if sequenceCounter >= math.MaxUint8 {
 		atomic.StoreInt32(&m.SequenceCounter, -1)
@@ -2047,7 +2047,7 @@ func (m *KnxNetIpConnection) getNewSequenceCounter() uint8 {
 	return uint8(sequenceCounter)
 }
 
-func (m *KnxNetIpConnection) getNextCounter(targetAddress driverModel.KnxAddress) uint8 {
+func (m *Connection) getNextCounter(targetAddress driverModel.KnxAddress) uint8 {
 	m.Lock()
 	defer m.Unlock()
 
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpDiscoverer.go b/plc4go/internal/plc4go/knxnetip/Discoverer.go
similarity index 94%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpDiscoverer.go
rename to plc4go/internal/plc4go/knxnetip/Discoverer.go
index 0fc27cc..f5dc035 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpDiscoverer.go
+++ b/plc4go/internal/plc4go/knxnetip/Discoverer.go
@@ -34,15 +34,15 @@ import (
 	"time"
 )
 
-type KnxNetIpDiscoverer struct {
+type Discoverer struct {
 	messageCodec spi.MessageCodec
 }
 
-func NewKnxNetIpDiscoverer() *KnxNetIpDiscoverer {
-	return &KnxNetIpDiscoverer{}
+func NewDiscoverer() *Discoverer {
+	return &Discoverer{}
 }
 
-func (d *KnxNetIpDiscoverer) Discover(callback func(event model.PlcDiscoveryEvent)) error {
+func (d *Discoverer) Discover(callback func(event model.PlcDiscoveryEvent)) error {
 	udpTransport := udp.NewUdpTransport()
 
 	// Create a connection string for the KNX broadcast discovery address.
@@ -102,7 +102,7 @@ func (d *KnxNetIpDiscoverer) Discover(callback func(event model.PlcDiscoveryEven
 	if len(tranportInstances) > 0 {
 		for _, transportInstance := range tranportInstances {
 			// Create a codec for sending and receiving messages.
-			codec := NewKnxNetIpMessageCodec(transportInstance, nil)
+			codec := NewMessageCodec(transportInstance, nil)
 
 			// Cast to the UDP transport instance so we can access information on the local port.
 			udpTransportInstance, ok := transportInstance.(*udp.UdpTransportInstance)
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go b/plc4go/internal/plc4go/knxnetip/Driver.go
similarity index 74%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go
rename to plc4go/internal/plc4go/knxnetip/Driver.go
index 96cd332..2cd3314 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpDriver.go
+++ b/plc4go/internal/plc4go/knxnetip/Driver.go
@@ -27,34 +27,34 @@ import (
 	"net/url"
 )
 
-type KnxNetIpDriver struct {
+type Driver struct {
 	fieldHandler spi.PlcFieldHandler
 }
 
-func NewKnxNetIpDriver() *KnxNetIpDriver {
-	return &KnxNetIpDriver{
+func NewDriver() *Driver {
+	return &Driver{
 		fieldHandler: NewFieldHandler(),
 	}
 }
 
-func (m KnxNetIpDriver) GetProtocolCode() string {
+func (m Driver) GetProtocolCode() string {
 	return "knxnet-ip"
 }
 
-func (m KnxNetIpDriver) GetProtocolName() string {
+func (m Driver) GetProtocolName() string {
 	return "KNXNet/IP"
 }
 
-func (m KnxNetIpDriver) GetDefaultTransport() string {
+func (m Driver) GetDefaultTransport() string {
 	return "udp"
 }
 
-func (m KnxNetIpDriver) CheckQuery(query string) error {
+func (m Driver) CheckQuery(query string) error {
 	_, err := m.fieldHandler.ParseQuery(query)
 	return err
 }
 
-func (m KnxNetIpDriver) GetConnection(transportUrl url.URL, transports map[string]transports.Transport, options map[string][]string) <-chan plc4go.PlcConnectionConnectResult {
+func (m Driver) GetConnection(transportUrl url.URL, transports map[string]transports.Transport, options map[string][]string) <-chan plc4go.PlcConnectionConnectResult {
 	// Get an the transport specified in the url
 	transport, ok := transports[transportUrl.Scheme]
 	if !ok {
@@ -73,15 +73,15 @@ func (m KnxNetIpDriver) GetConnection(transportUrl url.URL, transports map[strin
 	}
 
 	// Create the new connection
-	connection := NewKnxNetIpConnection(transportInstance, options, m.fieldHandler)
+	connection := NewConnection(transportInstance, options, m.fieldHandler)
 
 	return connection.Connect()
 }
 
-func (m KnxNetIpDriver) SupportsDiscovery() bool {
+func (m Driver) SupportsDiscovery() bool {
 	return true
 }
 
-func (m KnxNetIpDriver) Discover(callback func(event model.PlcDiscoveryEvent)) error {
-	return NewKnxNetIpDiscoverer().Discover(callback)
+func (m Driver) Discover(callback func(event model.PlcDiscoveryEvent)) error {
+	return NewDiscoverer().Discover(callback)
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpField.go b/plc4go/internal/plc4go/knxnetip/Field.go
similarity index 61%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpField.go
rename to plc4go/internal/plc4go/knxnetip/Field.go
index e651c76..8e2a82f 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpField.go
+++ b/plc4go/internal/plc4go/knxnetip/Field.go
@@ -27,32 +27,32 @@ import (
 	"strings"
 )
 
-type KnxNetIpField interface {
+type Field interface {
 	apiModel.PlcField
 }
 
-type KnxNetIpGroupAddressField interface {
+type GroupAddressField interface {
 	GetFieldType() *driverModel.KnxDatapointType
 	IsPatternField() bool
 	matches(knxGroupAddress *driverModel.KnxGroupAddress) bool
 	toGroupAddress() *driverModel.KnxGroupAddress
-	KnxNetIpField
+	Field
 }
 
-type KnxNetIpDeviceField interface {
+type DeviceField interface {
 	toKnxAddress() *driverModel.KnxAddress
-	KnxNetIpField
+	Field
 }
 
-type KnxNetIpGroupAddress3LevelPlcField struct {
+type GroupAddress3LevelPlcField struct {
 	MainGroup   string // 5 Bits: Values 0-31
 	MiddleGroup string // 3 Bits: values 0-7
 	SubGroup    string // 8 Bits
 	FieldType   *driverModel.KnxDatapointType
 }
 
-func NewKnxNetIpGroupAddress3LevelPlcField(mainGroup string, middleGroup string, subGroup string, fieldType *driverModel.KnxDatapointType) KnxNetIpGroupAddress3LevelPlcField {
-	return KnxNetIpGroupAddress3LevelPlcField{
+func NewGroupAddress3LevelPlcField(mainGroup string, middleGroup string, subGroup string, fieldType *driverModel.KnxDatapointType) GroupAddress3LevelPlcField {
+	return GroupAddress3LevelPlcField{
 		MainGroup:   mainGroup,
 		MiddleGroup: middleGroup,
 		SubGroup:    subGroup,
@@ -60,23 +60,23 @@ func NewKnxNetIpGroupAddress3LevelPlcField(mainGroup string, middleGroup string,
 	}
 }
 
-func (k KnxNetIpGroupAddress3LevelPlcField) GetAddressString() string {
+func (k GroupAddress3LevelPlcField) GetAddressString() string {
 	return fmt.Sprintf("%s/%s/%s:%s", k.MainGroup, k.MiddleGroup, k.SubGroup, k.FieldType.String())
 }
 
-func (k KnxNetIpGroupAddress3LevelPlcField) GetTypeName() string {
+func (k GroupAddress3LevelPlcField) GetTypeName() string {
 	return k.FieldType.Name()
 }
 
-func (k KnxNetIpGroupAddress3LevelPlcField) GetFieldType() *driverModel.KnxDatapointType {
+func (k GroupAddress3LevelPlcField) GetFieldType() *driverModel.KnxDatapointType {
 	return k.FieldType
 }
 
-func (k KnxNetIpGroupAddress3LevelPlcField) GetQuantity() uint16 {
+func (k GroupAddress3LevelPlcField) GetQuantity() uint16 {
 	return 1
 }
 
-func (k KnxNetIpGroupAddress3LevelPlcField) IsPatternField() bool {
+func (k GroupAddress3LevelPlcField) IsPatternField() bool {
 	_, err := strconv.Atoi(k.MainGroup)
 	if err == nil {
 		_, err = strconv.Atoi(k.MiddleGroup)
@@ -90,7 +90,7 @@ func (k KnxNetIpGroupAddress3LevelPlcField) IsPatternField() bool {
 	return true
 }
 
-func (k KnxNetIpGroupAddress3LevelPlcField) matches(knxGroupAddress *driverModel.KnxGroupAddress) bool {
+func (k GroupAddress3LevelPlcField) matches(knxGroupAddress *driverModel.KnxGroupAddress) bool {
 	level3KnxGroupAddress := driverModel.CastKnxGroupAddress3Level(knxGroupAddress)
 	if level3KnxGroupAddress == nil {
 		return false
@@ -100,7 +100,7 @@ func (k KnxNetIpGroupAddress3LevelPlcField) matches(knxGroupAddress *driverModel
 		matches(k.SubGroup, strconv.Itoa(int(level3KnxGroupAddress.SubGroup)))
 }
 
-func (k KnxNetIpGroupAddress3LevelPlcField) toGroupAddress() *driverModel.KnxGroupAddress {
+func (k GroupAddress3LevelPlcField) toGroupAddress() *driverModel.KnxGroupAddress {
 	mainGroup, err := strconv.Atoi(k.MainGroup)
 	if err != nil {
 		return nil
@@ -124,38 +124,38 @@ func (k KnxNetIpGroupAddress3LevelPlcField) toGroupAddress() *driverModel.KnxGro
 	return ga
 }
 
-type KnxNetIpGroupAddress2LevelPlcField struct {
+type GroupAddress2LevelPlcField struct {
 	MainGroup string // 5 Bits: Values 0-31
 	SubGroup  string // 11 Bits
 	FieldType *driverModel.KnxDatapointType
-	KnxNetIpField
+	Field
 }
 
-func NewKnxNetIpGroupAddress2LevelPlcField(mainGroup string, subGroup string, fieldType *driverModel.KnxDatapointType) KnxNetIpGroupAddress2LevelPlcField {
-	return KnxNetIpGroupAddress2LevelPlcField{
+func NewGroupAddress2LevelPlcField(mainGroup string, subGroup string, fieldType *driverModel.KnxDatapointType) GroupAddress2LevelPlcField {
+	return GroupAddress2LevelPlcField{
 		MainGroup: mainGroup,
 		SubGroup:  subGroup,
 		FieldType: fieldType,
 	}
 }
 
-func (k KnxNetIpGroupAddress2LevelPlcField) GetAddressString() string {
+func (k GroupAddress2LevelPlcField) GetAddressString() string {
 	return fmt.Sprintf("%s/%s:%s", k.MainGroup, k.SubGroup, k.FieldType.String())
 }
 
-func (k KnxNetIpGroupAddress2LevelPlcField) GetTypeName() string {
+func (k GroupAddress2LevelPlcField) GetTypeName() string {
 	return k.FieldType.Name()
 }
 
-func (k KnxNetIpGroupAddress2LevelPlcField) GetFieldType() *driverModel.KnxDatapointType {
+func (k GroupAddress2LevelPlcField) GetFieldType() *driverModel.KnxDatapointType {
 	return k.FieldType
 }
 
-func (k KnxNetIpGroupAddress2LevelPlcField) GetQuantity() uint16 {
+func (k GroupAddress2LevelPlcField) GetQuantity() uint16 {
 	return 1
 }
 
-func (k KnxNetIpGroupAddress2LevelPlcField) IsPatternField() bool {
+func (k GroupAddress2LevelPlcField) IsPatternField() bool {
 	_, err := strconv.Atoi(k.MainGroup)
 	if err == nil {
 		_, err = strconv.Atoi(k.SubGroup)
@@ -166,7 +166,7 @@ func (k KnxNetIpGroupAddress2LevelPlcField) IsPatternField() bool {
 	return true
 }
 
-func (k KnxNetIpGroupAddress2LevelPlcField) matches(knxGroupAddress *driverModel.KnxGroupAddress) bool {
+func (k GroupAddress2LevelPlcField) matches(knxGroupAddress *driverModel.KnxGroupAddress) bool {
 	level2KnxGroupAddress := driverModel.CastKnxGroupAddress2Level(knxGroupAddress)
 	if level2KnxGroupAddress == nil {
 		return false
@@ -175,7 +175,7 @@ func (k KnxNetIpGroupAddress2LevelPlcField) matches(knxGroupAddress *driverModel
 		matches(k.SubGroup, strconv.Itoa(int(level2KnxGroupAddress.SubGroup)))
 }
 
-func (k KnxNetIpGroupAddress2LevelPlcField) toGroupAddress() *driverModel.KnxGroupAddress {
+func (k GroupAddress2LevelPlcField) toGroupAddress() *driverModel.KnxGroupAddress {
 	mainGroup, err := strconv.Atoi(k.MainGroup)
 	if err != nil {
 		return nil
@@ -194,36 +194,36 @@ func (k KnxNetIpGroupAddress2LevelPlcField) toGroupAddress() *driverModel.KnxGro
 	return ga
 }
 
-type KnxNetIpGroupAddress1LevelPlcField struct {
+type GroupAddress1LevelPlcField struct {
 	MainGroup string // 16 Bits
 	FieldType *driverModel.KnxDatapointType
-	KnxNetIpField
+	Field
 }
 
-func NewKnxNetIpGroupAddress1LevelPlcField(mainGroup string, fieldType *driverModel.KnxDatapointType) KnxNetIpGroupAddress1LevelPlcField {
-	return KnxNetIpGroupAddress1LevelPlcField{
+func NewGroupAddress1LevelPlcField(mainGroup string, fieldType *driverModel.KnxDatapointType) GroupAddress1LevelPlcField {
+	return GroupAddress1LevelPlcField{
 		MainGroup: mainGroup,
 		FieldType: fieldType,
 	}
 }
 
-func (k KnxNetIpGroupAddress1LevelPlcField) GetAddressString() string {
+func (k GroupAddress1LevelPlcField) GetAddressString() string {
 	return fmt.Sprintf("%s:%s", k.MainGroup, k.FieldType.String())
 }
 
-func (k KnxNetIpGroupAddress1LevelPlcField) GetTypeName() string {
+func (k GroupAddress1LevelPlcField) GetTypeName() string {
 	return k.FieldType.Name()
 }
 
-func (k KnxNetIpGroupAddress1LevelPlcField) GetFieldType() *driverModel.KnxDatapointType {
+func (k GroupAddress1LevelPlcField) GetFieldType() *driverModel.KnxDatapointType {
 	return k.FieldType
 }
 
-func (k KnxNetIpGroupAddress1LevelPlcField) GetQuantity() uint16 {
+func (k GroupAddress1LevelPlcField) GetQuantity() uint16 {
 	return 1
 }
 
-func (k KnxNetIpGroupAddress1LevelPlcField) IsPatternField() bool {
+func (k GroupAddress1LevelPlcField) IsPatternField() bool {
 	_, err := strconv.Atoi(k.MainGroup)
 	if err == nil {
 		return false
@@ -231,7 +231,7 @@ func (k KnxNetIpGroupAddress1LevelPlcField) IsPatternField() bool {
 	return true
 }
 
-func (k KnxNetIpGroupAddress1LevelPlcField) matches(knxGroupAddress *driverModel.KnxGroupAddress) bool {
+func (k GroupAddress1LevelPlcField) matches(knxGroupAddress *driverModel.KnxGroupAddress) bool {
 	level1KnxGroupAddress := driverModel.CastKnxGroupAddressFreeLevel(knxGroupAddress)
 	if level1KnxGroupAddress == nil {
 		return false
@@ -239,7 +239,7 @@ func (k KnxNetIpGroupAddress1LevelPlcField) matches(knxGroupAddress *driverModel
 	return matches(k.MainGroup, strconv.Itoa(int(level1KnxGroupAddress.SubGroup)))
 }
 
-func (k KnxNetIpGroupAddress1LevelPlcField) toGroupAddress() *driverModel.KnxGroupAddress {
+func (k GroupAddress1LevelPlcField) toGroupAddress() *driverModel.KnxGroupAddress {
 	mainGroup, err := strconv.Atoi(k.MainGroup)
 	if err != nil {
 		return nil
@@ -253,38 +253,38 @@ func (k KnxNetIpGroupAddress1LevelPlcField) toGroupAddress() *driverModel.KnxGro
 	return ga
 }
 
-type KnxNetIpDeviceQueryField struct {
+type DeviceQueryField struct {
 	MainGroup   string // 5 Bits: Values 0-31
 	MiddleGroup string // 3 Bits: values 0-7
 	SubGroup    string // 8 Bits
-	KnxNetIpDeviceField
+	DeviceField
 }
 
-func NewKnxNetIpDeviceQueryField(mainGroup string, middleGroup string, subGroup string) KnxNetIpDeviceQueryField {
-	return KnxNetIpDeviceQueryField{
+func NewDeviceQueryField(mainGroup string, middleGroup string, subGroup string) DeviceQueryField {
+	return DeviceQueryField{
 		MainGroup:   mainGroup,
 		MiddleGroup: middleGroup,
 		SubGroup:    subGroup,
 	}
 }
 
-func (k KnxNetIpDeviceQueryField) GetAddressString() string {
+func (k DeviceQueryField) GetAddressString() string {
 	return fmt.Sprintf("%s.%s.%s", k.MainGroup, k.MiddleGroup, k.SubGroup)
 }
 
-func (k KnxNetIpDeviceQueryField) GetTypeName() string {
+func (k DeviceQueryField) GetTypeName() string {
 	return ""
 }
 
-func (k KnxNetIpDeviceQueryField) GetQuantity() uint16 {
+func (k DeviceQueryField) GetQuantity() uint16 {
 	return 1
 }
 
-func (k KnxNetIpDeviceQueryField) toKnxAddress() *driverModel.KnxAddress {
+func (k DeviceQueryField) toKnxAddress() *driverModel.KnxAddress {
 	return nil
 }
 
-type KnxNetIpDevicePropertyAddressPlcField struct {
+type DevicePropertyAddressPlcField struct {
 	MainGroup     uint8 // 5 Bits: Values 0-31
 	MiddleGroup   uint8 // 3 Bits: values 0-7
 	SubGroup      uint8 // 8 Bits
@@ -292,11 +292,11 @@ type KnxNetIpDevicePropertyAddressPlcField struct {
 	PropertyId    uint8
 	PropertyIndex uint16
 	NumElements   uint8
-	KnxNetIpDeviceField
+	DeviceField
 }
 
-func NewKnxNetIpDevicePropertyAddressPlcField(mainGroup uint8, middleGroup uint8, subGroup uint8, objectId uint8, propertyId uint8, propertyIndex uint16, numElements uint8) KnxNetIpDevicePropertyAddressPlcField {
-	return KnxNetIpDevicePropertyAddressPlcField{
+func NewDevicePropertyAddressPlcField(mainGroup uint8, middleGroup uint8, subGroup uint8, objectId uint8, propertyId uint8, propertyIndex uint16, numElements uint8) DevicePropertyAddressPlcField {
+	return DevicePropertyAddressPlcField{
 		MainGroup:     mainGroup,
 		MiddleGroup:   middleGroup,
 		SubGroup:      subGroup,
@@ -307,20 +307,20 @@ func NewKnxNetIpDevicePropertyAddressPlcField(mainGroup uint8, middleGroup uint8
 	}
 }
 
-func (k KnxNetIpDevicePropertyAddressPlcField) GetAddressString() string {
+func (k DevicePropertyAddressPlcField) GetAddressString() string {
 	return fmt.Sprintf("%d/%d/%d#%d/%d/%d[%d]",
 		k.MainGroup, k.MiddleGroup, k.SubGroup, k.ObjectId, k.PropertyId, k.PropertyIndex, k.NumElements)
 }
 
-func (k KnxNetIpDevicePropertyAddressPlcField) GetTypeName() string {
+func (k DevicePropertyAddressPlcField) GetTypeName() string {
 	return ""
 }
 
-func (k KnxNetIpDevicePropertyAddressPlcField) GetQuantity() uint16 {
+func (k DevicePropertyAddressPlcField) GetQuantity() uint16 {
 	return 1
 }
 
-func (k KnxNetIpDevicePropertyAddressPlcField) toKnxAddress() *driverModel.KnxAddress {
+func (k DevicePropertyAddressPlcField) toKnxAddress() *driverModel.KnxAddress {
 	ga := &driverModel.KnxAddress{
 		MainGroup:   k.MainGroup,
 		MiddleGroup: k.MiddleGroup,
@@ -329,18 +329,18 @@ func (k KnxNetIpDevicePropertyAddressPlcField) toKnxAddress() *driverModel.KnxAd
 	return ga
 }
 
-type KnxNetIpDeviceMemoryAddressPlcField struct {
+type DeviceMemoryAddressPlcField struct {
 	MainGroup   uint8 // 5 Bits: Values 0-31
 	MiddleGroup uint8 // 3 Bits: values 0-7
 	SubGroup    uint8 // 8 Bits
 	Address     uint16
 	NumElements uint8
 	FieldType   *driverModel.KnxDatapointType
-	KnxNetIpDeviceField
+	DeviceField
 }
 
-func NewKnxNetIpDeviceMemoryAddressPlcField(mainGroup uint8, middleGroup uint8, subGroup uint8, address uint16, numElements uint8, fieldType *driverModel.KnxDatapointType) KnxNetIpDeviceMemoryAddressPlcField {
-	return KnxNetIpDeviceMemoryAddressPlcField{
+func NewDeviceMemoryAddressPlcField(mainGroup uint8, middleGroup uint8, subGroup uint8, address uint16, numElements uint8, fieldType *driverModel.KnxDatapointType) DeviceMemoryAddressPlcField {
+	return DeviceMemoryAddressPlcField{
 		MainGroup:   mainGroup,
 		MiddleGroup: middleGroup,
 		SubGroup:    subGroup,
@@ -350,27 +350,27 @@ func NewKnxNetIpDeviceMemoryAddressPlcField(mainGroup uint8, middleGroup uint8,
 	}
 }
 
-func (k KnxNetIpDeviceMemoryAddressPlcField) GetAddressString() string {
+func (k DeviceMemoryAddressPlcField) GetAddressString() string {
 	return fmt.Sprintf("%d/%d/%d#%d:%s[%d]",
 		k.MainGroup, k.MiddleGroup, k.SubGroup, k.Address, k.FieldType.String(), k.NumElements)
 }
 
-func (k KnxNetIpDeviceMemoryAddressPlcField) GetTypeName() string {
+func (k DeviceMemoryAddressPlcField) GetTypeName() string {
 	if k.FieldType != nil {
 		return k.FieldType.Name()
 	}
 	return ""
 }
 
-func (k KnxNetIpDeviceMemoryAddressPlcField) GetFieldType() *driverModel.KnxDatapointType {
+func (k DeviceMemoryAddressPlcField) GetFieldType() *driverModel.KnxDatapointType {
 	return k.FieldType
 }
 
-func (k KnxNetIpDeviceMemoryAddressPlcField) GetQuantity() uint16 {
+func (k DeviceMemoryAddressPlcField) GetQuantity() uint16 {
 	return uint16(k.NumElements)
 }
 
-func (k KnxNetIpDeviceMemoryAddressPlcField) toKnxAddress() *driverModel.KnxAddress {
+func (k DeviceMemoryAddressPlcField) toKnxAddress() *driverModel.KnxAddress {
 	individualAddress := &driverModel.KnxAddress{
 		MainGroup:   k.MainGroup,
 		MiddleGroup: k.MiddleGroup,
@@ -379,35 +379,35 @@ func (k KnxNetIpDeviceMemoryAddressPlcField) toKnxAddress() *driverModel.KnxAddr
 	return individualAddress
 }
 
-type KnxNetIpCommunicationObjectQueryField struct {
+type CommunicationObjectQueryField struct {
 	MainGroup   uint8 // 5 Bits: Values 0-31
 	MiddleGroup uint8 // 3 Bits: values 0-7
 	SubGroup    uint8 // 8 Bits
-	KnxNetIpDeviceField
+	DeviceField
 }
 
-func NewKnxNetIpCommunicationObjectQueryField(mainGroup uint8, middleGroup uint8, subGroup uint8) KnxNetIpCommunicationObjectQueryField {
-	return KnxNetIpCommunicationObjectQueryField{
+func NewCommunicationObjectQueryField(mainGroup uint8, middleGroup uint8, subGroup uint8) CommunicationObjectQueryField {
+	return CommunicationObjectQueryField{
 		MainGroup:   mainGroup,
 		MiddleGroup: middleGroup,
 		SubGroup:    subGroup,
 	}
 }
 
-func (k KnxNetIpCommunicationObjectQueryField) GetAddressString() string {
+func (k CommunicationObjectQueryField) GetAddressString() string {
 	return fmt.Sprintf("%d.%d.%d#com-obj",
 		k.MainGroup, k.MiddleGroup, k.SubGroup)
 }
 
-func (k KnxNetIpCommunicationObjectQueryField) GetTypeName() string {
+func (k CommunicationObjectQueryField) GetTypeName() string {
 	return ""
 }
 
-func (k KnxNetIpCommunicationObjectQueryField) GetQuantity() uint16 {
+func (k CommunicationObjectQueryField) GetQuantity() uint16 {
 	return 1
 }
 
-func (k KnxNetIpCommunicationObjectQueryField) toKnxAddress() *driverModel.KnxAddress {
+func (k CommunicationObjectQueryField) toKnxAddress() *driverModel.KnxAddress {
 	individualAddress := &driverModel.KnxAddress{
 		MainGroup:   k.MainGroup,
 		MiddleGroup: k.MiddleGroup,
@@ -416,9 +416,9 @@ func (k KnxNetIpCommunicationObjectQueryField) toKnxAddress() *driverModel.KnxAd
 	return individualAddress
 }
 
-func CastToKnxNetIpFieldFromPlcField(plcField apiModel.PlcField) (KnxNetIpField, error) {
-	if knxNetIpField, ok := plcField.(KnxNetIpField); ok {
-		return knxNetIpField, nil
+func CastToFieldFromPlcField(plcField apiModel.PlcField) (Field, error) {
+	if field, ok := plcField.(Field); ok {
+		return field, nil
 	}
 	return nil, errors.New("couldn't cast to KnxNetIpField")
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpFieldHandler.go b/plc4go/internal/plc4go/knxnetip/FieldHandler.go
similarity index 52%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpFieldHandler.go
rename to plc4go/internal/plc4go/knxnetip/FieldHandler.go
index 05d2636..07afd78 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpFieldHandler.go
+++ b/plc4go/internal/plc4go/knxnetip/FieldHandler.go
@@ -28,13 +28,13 @@ import (
 	"strconv"
 )
 
-type KnxNetIpFieldType uint8
+type FieldType uint8
 
 const (
-	KNX_NET_IP_FIELD_COIL KnxNetIpFieldType = 0x00
+	KNX_NET_IP_FIELD_COIL FieldType = 0x00
 )
 
-func (m KnxNetIpFieldType) GetName() string {
+func (m FieldType) GetName() string {
 	switch m {
 	case KNX_NET_IP_FIELD_COIL:
 		return "ModbusFieldHoldingRegister"
@@ -43,54 +43,54 @@ func (m KnxNetIpFieldType) GetName() string {
 }
 
 type FieldHandler struct {
-	knxNetIpGroupAddress3Level             *regexp.Regexp
-	knxNetIpGroupAddress2Level             *regexp.Regexp
-	knxNetIpGroupAddress1Level             *regexp.Regexp
-	knxNetIpDeviceQuery                    *regexp.Regexp
-	knxNetIpDevicePropertyAddress          *regexp.Regexp
-	knxNetIpDeviceMemoryAddress            *regexp.Regexp
-	knxNetIpDeviceCommunicationObjectQuery *regexp.Regexp
+	groupAddress3Level             *regexp.Regexp
+	groupAddress2Level             *regexp.Regexp
+	groupAddress1Level             *regexp.Regexp
+	deviceQuery                    *regexp.Regexp
+	devicePropertyAddress          *regexp.Regexp
+	deviceMemoryAddress            *regexp.Regexp
+	deviceCommunicationObjectQuery *regexp.Regexp
 }
 
 func NewFieldHandler() FieldHandler {
 	return FieldHandler{
-		knxNetIpGroupAddress3Level: regexp.MustCompile(`^(?P<mainGroup>(\d{1,2}|\*|\[(\d{1,2}|\d{1,2}\-\d{1,2})(,(\d{1,2}|\d{1,2}\-\d{1,2}))*]))\/(?P<middleGroup>(\d{1,2}|\*|\[(\d{1,2}|\d{1,2}\-\d{1,2})(,(\d{1,2}|\d{1,2}\-\d{1,2}))*]))\/(?P<subGroup>(\d{1,3}|\*|\[(\d{1,3}|\d{1,3}\-\d{1,3})(,(\d{1,3}|\d{1,3}\-\d{1,3}))*]))(:(?P<datatype>[a-zA-Z_]+))?$`),
-		knxNetIpGroupAddress2Level: regexp.MustCompile(`^(?P<mainGroup>(\d{1,2}|\*|\[(\d{1,2}|\d{1,2}\-\d{1,2})(,(\d{1,2}|\d{1,2}\-\d{1,2}))*]))/(?P<subGroup>(\d{1,4}|\*|\[(\d{1,4}|\d{1,4}\-\d{1,4})(,(\d{1,4}|\d{1,4}\-\d{1,4}))*]))(:(?P<datatype>[a-zA-Z_]+))?$`),
-		knxNetIpGroupAddress1Level: regexp.MustCompile(`^(?P<mainGroup>(\d{1,5}|\*|\[(\d{1,5}|\d{1,5}\-\d{1,5})(,(\d{1,5}|\d{1,5}\-\d{1,5}))*]))(:(?P<datatype>[a-zA-Z_]+))?$`),
+		groupAddress3Level: regexp.MustCompile(`^(?P<mainGroup>(\d{1,2}|\*|\[(\d{1,2}|\d{1,2}\-\d{1,2})(,(\d{1,2}|\d{1,2}\-\d{1,2}))*]))\/(?P<middleGroup>(\d{1,2}|\*|\[(\d{1,2}|\d{1,2}\-\d{1,2})(,(\d{1,2}|\d{1,2}\-\d{1,2}))*]))\/(?P<subGroup>(\d{1,3}|\*|\[(\d{1,3}|\d{1,3}\-\d{1,3})(,(\d{1,3}|\d{1,3}\-\d{1,3}))*]))(:(?P<datatype>[a-zA-Z_]+))?$`),
+		groupAddress2Level: regexp.MustCompile(`^(?P<mainGroup>(\d{1,2}|\*|\[(\d{1,2}|\d{1,2}\-\d{1,2})(,(\d{1,2}|\d{1,2}\-\d{1,2}))*]))/(?P<subGroup>(\d{1,4}|\*|\[(\d{1,4}|\d{1,4}\-\d{1,4})(,(\d{1,4}|\d{1,4}\-\d{1,4}))*]))(:(?P<datatype>[a-zA-Z_]+))?$`),
+		groupAddress1Level: regexp.MustCompile(`^(?P<mainGroup>(\d{1,5}|\*|\[(\d{1,5}|\d{1,5}\-\d{1,5})(,(\d{1,5}|\d{1,5}\-\d{1,5}))*]))(:(?P<datatype>[a-zA-Z_]+))?$`),
 
-		knxNetIpDeviceQuery:                    regexp.MustCompile(`^(?P<mainGroup>(\d{1,2}|\*|\[(\d{1,2}|\d{1,2}\-\d{1,2})(,(\d{1,2}|\d{1,2}\-\d{1,2}))*]))\.(?P<middleGroup>(\d{1,2}|\*|\[(\d{1,2}|\d{1,2}\-\d{1,2})(,(\d{1,2}|\d{1,2}\-\d{1,2}))*]))\.(?P<subGroup>(\d{1,3}|\*|\[(\d{1,3}|\d{1,3}\-\d{1,3})(,(\d{1,3}|\d{1,3}\-\d{1,3}))*]))$`),
-		knxNetIpDevicePropertyAddress:          regexp.MustCompile(`^(?P<mainGroup>\d{1,2})\.(?P<middleGroup>\d)\.(?P<subGroup>\d{1,3})#(?P<objectId>\d{1,3})\/(?P<propertyId>\d{1,3})(\/(?P<propertyIndex>\d{1,4}))?(\[(?P<numElements>\d{1,2})])?$`),
-		knxNetIpDeviceMemoryAddress:            regexp.MustCompile(`^(?P<mainGroup>\d{1,2})\.(?P<middleGroup>\d)\.(?P<subGroup>\d{1,3})#(?P<address>[0-9a-fA-F]{1,8})(:(?P<datatype>[a-zA-Z_]+)(\[(?P<numElements>\d+)])?)?$`),
-		knxNetIpDeviceCommunicationObjectQuery: regexp.MustCompile(`^(?P<mainGroup>\d{1,2})\.(?P<middleGroup>\d)\.(?P<subGroup>\d{1,3})#com-obj$`),
+		deviceQuery:                    regexp.MustCompile(`^(?P<mainGroup>(\d{1,2}|\*|\[(\d{1,2}|\d{1,2}\-\d{1,2})(,(\d{1,2}|\d{1,2}\-\d{1,2}))*]))\.(?P<middleGroup>(\d{1,2}|\*|\[(\d{1,2}|\d{1,2}\-\d{1,2})(,(\d{1,2}|\d{1,2}\-\d{1,2}))*]))\.(?P<subGroup>(\d{1,3}|\*|\[(\d{1,3}|\d{1,3}\-\d{1,3})(,(\d{1,3}|\d{1,3}\-\d{1,3}))*]))$`),
+		devicePropertyAddress:          regexp.MustCompile(`^(?P<mainGroup>\d{1,2})\.(?P<middleGroup>\d)\.(?P<subGroup>\d{1,3})#(?P<objectId>\d{1,3})\/(?P<propertyId>\d{1,3})(\/(?P<propertyIndex>\d{1,4}))?(\[(?P<numElements>\d{1,2})])?$`),
+		deviceMemoryAddress:            regexp.MustCompile(`^(?P<mainGroup>\d{1,2})\.(?P<middleGroup>\d)\.(?P<subGroup>\d{1,3})#(?P<address>[0-9a-fA-F]{1,8})(:(?P<datatype>[a-zA-Z_]+)(\[(?P<numElements>\d+)])?)?$`),
+		deviceCommunicationObjectQuery: regexp.MustCompile(`^(?P<mainGroup>\d{1,2})\.(?P<middleGroup>\d)\.(?P<subGroup>\d{1,3})#com-obj$`),
 	}
 }
 
 func (m FieldHandler) ParseQuery(query string) (apiModel.PlcField, error) {
-	if match := utils.GetSubgroupMatches(m.knxNetIpGroupAddress1Level, query); match != nil {
+	if match := utils.GetSubgroupMatches(m.groupAddress1Level, query); match != nil {
 		fieldTypeName, ok := match["datatype"]
 		var fieldType driverModel.KnxDatapointType
 		if ok {
 			fieldType = driverModel.KnxDatapointTypeByName(fieldTypeName)
 		}
-		return NewKnxNetIpGroupAddress1LevelPlcField(match["mainGroup"], &fieldType), nil
-	} else if match := utils.GetSubgroupMatches(m.knxNetIpGroupAddress2Level, query); match != nil {
+		return NewGroupAddress1LevelPlcField(match["mainGroup"], &fieldType), nil
+	} else if match := utils.GetSubgroupMatches(m.groupAddress2Level, query); match != nil {
 		fieldTypeName, ok := match["datatype"]
 		var fieldType driverModel.KnxDatapointType
 		if ok {
 			fieldType = driverModel.KnxDatapointTypeByName(fieldTypeName)
 		}
-		return NewKnxNetIpGroupAddress2LevelPlcField(match["mainGroup"], match["subGroup"], &fieldType), nil
-	} else if match := utils.GetSubgroupMatches(m.knxNetIpGroupAddress3Level, query); match != nil {
+		return NewGroupAddress2LevelPlcField(match["mainGroup"], match["subGroup"], &fieldType), nil
+	} else if match := utils.GetSubgroupMatches(m.groupAddress3Level, query); match != nil {
 		fieldTypeName, ok := match["datatype"]
 		var fieldType driverModel.KnxDatapointType
 		if ok {
 			fieldType = driverModel.KnxDatapointTypeByName(fieldTypeName)
 		}
-		return NewKnxNetIpGroupAddress3LevelPlcField(match["mainGroup"], match["middleGroup"], match["subGroup"], &fieldType), nil
-	} else if match := utils.GetSubgroupMatches(m.knxNetIpDeviceQuery, query); match != nil {
-		return NewKnxNetIpDeviceQueryField(
+		return NewGroupAddress3LevelPlcField(match["mainGroup"], match["middleGroup"], match["subGroup"], &fieldType), nil
+	} else if match := utils.GetSubgroupMatches(m.deviceQuery, query); match != nil {
+		return NewDeviceQueryField(
 			match["mainGroup"], match["middleGroup"], match["subGroup"]), nil
-	} else if match := utils.GetSubgroupMatches(m.knxNetIpDevicePropertyAddress, query); match != nil {
+	} else if match := utils.GetSubgroupMatches(m.devicePropertyAddress, query); match != nil {
 		mainGroup, _ := strconv.Atoi(match["mainGroup"])
 		middleGroup, _ := strconv.Atoi(match["middleGroup"])
 		subGroup, _ := strconv.Atoi(match["subGroup"])
@@ -106,10 +106,10 @@ func (m FieldHandler) ParseQuery(query string) (apiModel.PlcField, error) {
 		if ok && len(numElements) > 0 {
 			numberOfElements, _ = strconv.Atoi(numElements)
 		}
-		return NewKnxNetIpDevicePropertyAddressPlcField(
+		return NewDevicePropertyAddressPlcField(
 			uint8(mainGroup), uint8(middleGroup), uint8(subGroup), uint8(objectId), uint8(propertyId),
 			uint16(propertyIndex), uint8(numberOfElements)), nil
-	} else if match := utils.GetSubgroupMatches(m.knxNetIpDeviceMemoryAddress, query); match != nil {
+	} else if match := utils.GetSubgroupMatches(m.deviceMemoryAddress, query); match != nil {
 		fieldTypeName, ok := match["datatype"]
 		// This is a 0-255 valued 1-byte value.
 		fieldType := driverModel.KnxDatapointType_DPT_DecimalFactor
@@ -133,12 +133,12 @@ func (m FieldHandler) ParseQuery(query string) (apiModel.PlcField, error) {
 		if ok && len(numElements) > 0 {
 			numberOfElements, _ = strconv.Atoi(numElements)
 		}
-		return NewKnxNetIpDeviceMemoryAddressPlcField(uint8(mainGroup), uint8(middleGroup), uint8(subGroup), address, uint8(numberOfElements), &fieldType), nil
-	} else if match := utils.GetSubgroupMatches(m.knxNetIpDeviceCommunicationObjectQuery, query); match != nil {
+		return NewDeviceMemoryAddressPlcField(uint8(mainGroup), uint8(middleGroup), uint8(subGroup), address, uint8(numberOfElements), &fieldType), nil
+	} else if match := utils.GetSubgroupMatches(m.deviceCommunicationObjectQuery, query); match != nil {
 		mainGroup, _ := strconv.Atoi(match["mainGroup"])
 		middleGroup, _ := strconv.Atoi(match["middleGroup"])
 		subGroup, _ := strconv.Atoi(match["subGroup"])
-		return NewKnxNetIpCommunicationObjectQueryField(
+		return NewCommunicationObjectQueryField(
 			uint8(mainGroup), uint8(middleGroup), uint8(subGroup)), nil
 	}
 	return nil, errors.New("Invalid address format for address '" + query + "'")
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpMessageCodec.go b/plc4go/internal/plc4go/knxnetip/MessageCodec.go
similarity index 85%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpMessageCodec.go
rename to plc4go/internal/plc4go/knxnetip/MessageCodec.go
index 44c85aa..7ffeaa4 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpMessageCodec.go
+++ b/plc4go/internal/plc4go/knxnetip/MessageCodec.go
@@ -30,28 +30,28 @@ import (
 	"time"
 )
 
-type KnxNetIpExpectation struct {
+type Expectation struct {
 	expiration     time.Time
 	acceptsMessage spi.AcceptsMessage
 	handleMessage  spi.HandleMessage
 	handleError    spi.HandleError
 }
 
-type KnxNetIpMessageCodec struct {
+type MessageCodec struct {
 	sequenceCounter               int32
 	transportInstance             transports.TransportInstance
 	messageInterceptor            func(message interface{})
 	defaultIncomingMessageChannel chan interface{}
-	expectations                  []KnxNetIpExpectation
+	expectations                  []Expectation
 }
 
-func NewKnxNetIpMessageCodec(transportInstance transports.TransportInstance, messageInterceptor func(message interface{})) *KnxNetIpMessageCodec {
-	codec := &KnxNetIpMessageCodec{
+func NewMessageCodec(transportInstance transports.TransportInstance, messageInterceptor func(message interface{})) *MessageCodec {
+	codec := &MessageCodec{
 		sequenceCounter:               0,
 		transportInstance:             transportInstance,
 		messageInterceptor:            messageInterceptor,
 		defaultIncomingMessageChannel: make(chan interface{}),
-		expectations:                  []KnxNetIpExpectation{},
+		expectations:                  []Expectation{},
 	}
 	// Start a worker that handles processing of responses
 	go func() {
@@ -63,16 +63,16 @@ func NewKnxNetIpMessageCodec(transportInstance transports.TransportInstance, mes
 	return codec
 }
 
-func (m *KnxNetIpMessageCodec) Connect() error {
+func (m *MessageCodec) Connect() error {
 	// "connect" to the remote UDP server
 	return m.transportInstance.Connect()
 }
 
-func (m *KnxNetIpMessageCodec) Disconnect() error {
+func (m *MessageCodec) Disconnect() error {
 	return m.transportInstance.Close()
 }
 
-func (m *KnxNetIpMessageCodec) Send(message interface{}) error {
+func (m *MessageCodec) Send(message interface{}) error {
 	// Cast the message to the correct type of struct
 	knxMessage := model.CastKnxNetIpMessage(message)
 	// Serialize the request
@@ -91,8 +91,8 @@ func (m *KnxNetIpMessageCodec) Send(message interface{}) error {
 	return nil
 }
 
-func (m *KnxNetIpMessageCodec) Expect(acceptsMessage spi.AcceptsMessage, handleMessage spi.HandleMessage, handleError spi.HandleError, ttl time.Duration) error {
-	expectation := KnxNetIpExpectation{
+func (m *MessageCodec) Expect(acceptsMessage spi.AcceptsMessage, handleMessage spi.HandleMessage, handleError spi.HandleError, ttl time.Duration) error {
+	expectation := Expectation{
 		expiration:     time.Now().Add(ttl),
 		acceptsMessage: acceptsMessage,
 		handleMessage:  handleMessage,
@@ -102,7 +102,7 @@ func (m *KnxNetIpMessageCodec) Expect(acceptsMessage spi.AcceptsMessage, handleM
 	return nil
 }
 
-func (m *KnxNetIpMessageCodec) SendRequest(message interface{}, acceptsMessage spi.AcceptsMessage, handleMessage spi.HandleMessage, handleError spi.HandleError, ttl time.Duration) error {
+func (m *MessageCodec) SendRequest(message interface{}, acceptsMessage spi.AcceptsMessage, handleMessage spi.HandleMessage, handleError spi.HandleError, ttl time.Duration) error {
 	// Send the actual message
 	err := m.Send(message)
 	if err != nil {
@@ -112,11 +112,11 @@ func (m *KnxNetIpMessageCodec) SendRequest(message interface{}, acceptsMessage s
 	return err
 }
 
-func (m *KnxNetIpMessageCodec) GetDefaultIncomingMessageChannel() chan interface{} {
+func (m *MessageCodec) GetDefaultIncomingMessageChannel() chan interface{} {
 	return m.defaultIncomingMessageChannel
 }
 
-func (m *KnxNetIpMessageCodec) receive() (interface{}, error) {
+func (m *MessageCodec) receive() (interface{}, error) {
 	// We need at least 6 bytes in order to know how big the packet is in total
 	if num, err := m.transportInstance.GetNumReadableBytes(); (err == nil) && (num >= 6) {
 		data, err := m.transportInstance.PeekReadableBytes(6)
@@ -151,7 +151,7 @@ func (m *KnxNetIpMessageCodec) receive() (interface{}, error) {
 	return nil, nil
 }
 
-func work(m *KnxNetIpMessageCodec) {
+func work(m *MessageCodec) {
 	// If this method ever exits, start it again.
 	defer work(m)
 	// Start an endless loop
@@ -241,6 +241,6 @@ func work(m *KnxNetIpMessageCodec) {
 	}
 }
 
-func (m KnxNetIpMessageCodec) GetTransportInstance() transports.TransportInstance {
+func (m MessageCodec) GetTransportInstance() transports.TransportInstance {
 	return m.transportInstance
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go b/plc4go/internal/plc4go/knxnetip/Reader.go
similarity index 85%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go
rename to plc4go/internal/plc4go/knxnetip/Reader.go
index cf3bb5b..f6a9738 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpReader.go
+++ b/plc4go/internal/plc4go/knxnetip/Reader.go
@@ -31,17 +31,17 @@ import (
 	"time"
 )
 
-type KnxNetIpReader struct {
-	connection *KnxNetIpConnection
+type Reader struct {
+	connection *Connection
 }
 
-func NewKnxNetIpReader(connection *KnxNetIpConnection) *KnxNetIpReader {
-	return &KnxNetIpReader{
+func NewReader(connection *Connection) *Reader {
+	return &Reader{
 		connection: connection,
 	}
 }
 
-func (m KnxNetIpReader) Read(readRequest apiModel.PlcReadRequest) <-chan apiModel.PlcReadRequestResult {
+func (m Reader) Read(readRequest apiModel.PlcReadRequest) <-chan apiModel.PlcReadRequestResult {
 	resultChan := make(chan apiModel.PlcReadRequestResult)
 	go func() {
 		responseCodes := map[string]apiModel.PlcResponseCode{}
@@ -49,11 +49,11 @@ func (m KnxNetIpReader) Read(readRequest apiModel.PlcReadRequest) <-chan apiMode
 
 		// Sort the fields in direct properties and memory addresses, which will have to be actively
 		// read from the devices and group-addresses which will be locally processed from the local cache.
-		deviceAddresses := map[driverModel.KnxAddress]map[string]KnxNetIpDeviceField{}
-		groupAddresses := map[string]KnxNetIpGroupAddressField{}
+		deviceAddresses := map[driverModel.KnxAddress]map[string]DeviceField{}
+		groupAddresses := map[string]GroupAddressField{}
 		for _, fieldName := range readRequest.GetFieldNames() {
 			// Get the knx field
-			field, err := CastToKnxNetIpFieldFromPlcField(readRequest.GetField(fieldName))
+			field, err := CastToFieldFromPlcField(readRequest.GetField(fieldName))
 			if err != nil {
 				responseCodes[fieldName] = apiModel.PlcResponseCode_INVALID_ADDRESS
 				plcValues[fieldName] = nil
@@ -61,32 +61,32 @@ func (m KnxNetIpReader) Read(readRequest apiModel.PlcReadRequest) <-chan apiMode
 			}
 
 			switch field.(type) {
-			case KnxNetIpDevicePropertyAddressPlcField:
-				propertyField := field.(KnxNetIpDevicePropertyAddressPlcField)
+			case DevicePropertyAddressPlcField:
+				propertyField := field.(DevicePropertyAddressPlcField)
 				knxAddress := propertyField.toKnxAddress()
 				if knxAddress == nil {
 					continue
 				}
 				if _, ok := deviceAddresses[*knxAddress]; !ok {
-					deviceAddresses[*knxAddress] = map[string]KnxNetIpDeviceField{}
+					deviceAddresses[*knxAddress] = map[string]DeviceField{}
 				}
 				deviceAddresses[*knxAddress][fieldName] = propertyField
-			case KnxNetIpDeviceMemoryAddressPlcField:
-				memoryField := field.(KnxNetIpDeviceMemoryAddressPlcField)
+			case DeviceMemoryAddressPlcField:
+				memoryField := field.(DeviceMemoryAddressPlcField)
 				knxAddress := memoryField.toKnxAddress()
 				if knxAddress == nil {
 					continue
 				}
 				if _, ok := deviceAddresses[*knxAddress]; !ok {
-					deviceAddresses[*knxAddress] = map[string]KnxNetIpDeviceField{}
+					deviceAddresses[*knxAddress] = map[string]DeviceField{}
 				}
 				deviceAddresses[*knxAddress][fieldName] = memoryField
-			case KnxNetIpCommunicationObjectQueryField:
+			case CommunicationObjectQueryField:
 				responseCodes[fieldName] = apiModel.PlcResponseCode_INVALID_ADDRESS
 				plcValues[fieldName] = nil
 				continue
-			case KnxNetIpGroupAddressField:
-				groupAddressField := field.(KnxNetIpGroupAddressField)
+			case GroupAddressField:
+				groupAddressField := field.(GroupAddressField)
 				groupAddresses[fieldName] = groupAddressField
 			default:
 				responseCodes[fieldName] = apiModel.PlcResponseCode_INVALID_ADDRESS
@@ -100,8 +100,8 @@ func (m KnxNetIpReader) Read(readRequest apiModel.PlcReadRequest) <-chan apiMode
 			// Collect all the properties on this device
 			for fieldName, field := range fields {
 				switch field.(type) {
-				case KnxNetIpDevicePropertyAddressPlcField:
-					propertyField := field.(KnxNetIpDevicePropertyAddressPlcField)
+				case DevicePropertyAddressPlcField:
+					propertyField := field.(DevicePropertyAddressPlcField)
 
 					results := m.connection.DeviceReadProperty(deviceAddress, propertyField.ObjectId, propertyField.PropertyId, propertyField.PropertyIndex, propertyField.NumElements)
 					select {
@@ -117,8 +117,8 @@ func (m KnxNetIpReader) Read(readRequest apiModel.PlcReadRequest) <-chan apiMode
 						responseCodes[fieldName] = apiModel.PlcResponseCode_REMOTE_BUSY
 						plcValues[fieldName] = nil
 					}
-				case KnxNetIpDeviceMemoryAddressPlcField:
-					memoryField := field.(KnxNetIpDeviceMemoryAddressPlcField)
+				case DeviceMemoryAddressPlcField:
+					memoryField := field.(DeviceMemoryAddressPlcField)
 					results := m.connection.DeviceReadMemory(deviceAddress, memoryField.Address, memoryField.NumElements, memoryField.FieldType)
 					select {
 					case result := <-results:
@@ -155,7 +155,7 @@ func (m KnxNetIpReader) Read(readRequest apiModel.PlcReadRequest) <-chan apiMode
 	return resultChan
 }
 
-func (m KnxNetIpReader) readGroupAddress(field KnxNetIpGroupAddressField) (apiModel.PlcResponseCode, apiValues.PlcValue) {
+func (m Reader) readGroupAddress(field GroupAddressField) (apiModel.PlcResponseCode, apiValues.PlcValue) {
 	rawAddresses, err := m.resolveAddresses(field)
 	if err != nil {
 		return apiModel.PlcResponseCode_INVALID_ADDRESS, nil
@@ -235,12 +235,12 @@ func (m KnxNetIpReader) readGroupAddress(field KnxNetIpGroupAddressField) (apiMo
 
 // If the given field is a field containing a pattern, resolve to all the possible addresses
 // it could be referring to.
-func (m KnxNetIpReader) resolveAddresses(field KnxNetIpGroupAddressField) ([]uint16, error) {
+func (m Reader) resolveAddresses(field GroupAddressField) ([]uint16, error) {
 	// Depending on the type of field, get the uint16 ids of all values that match the current field
 	var result []uint16
 	switch field.(type) {
-	case KnxNetIpGroupAddress3LevelPlcField:
-		address3LevelPlcField := field.(KnxNetIpGroupAddress3LevelPlcField)
+	case GroupAddress3LevelPlcField:
+		address3LevelPlcField := field.(GroupAddress3LevelPlcField)
 		mainSegmentValues, err := m.resoleSegment(address3LevelPlcField.MainGroup, 0, 31)
 		if err != nil {
 			return []uint16{}, err
@@ -260,8 +260,8 @@ func (m KnxNetIpReader) resolveAddresses(field KnxNetIpGroupAddressField) ([]uin
 				}
 			}
 		}
-	case KnxNetIpGroupAddress2LevelPlcField:
-		address2LevelPlcField := field.(KnxNetIpGroupAddress2LevelPlcField)
+	case GroupAddress2LevelPlcField:
+		address2LevelPlcField := field.(GroupAddress2LevelPlcField)
 		mainSegmentValues, err := m.resoleSegment(address2LevelPlcField.MainGroup, 0, 31)
 		if err != nil {
 			return []uint16{}, err
@@ -275,8 +275,8 @@ func (m KnxNetIpReader) resolveAddresses(field KnxNetIpGroupAddressField) ([]uin
 				result = append(result, main<<11|sub)
 			}
 		}
-	case KnxNetIpGroupAddress1LevelPlcField:
-		address1LevelPlcField := field.(KnxNetIpGroupAddress1LevelPlcField)
+	case GroupAddress1LevelPlcField:
+		address1LevelPlcField := field.(GroupAddress1LevelPlcField)
 		mainSegmentValues, err := m.resoleSegment(address1LevelPlcField.MainGroup, 0, 65535)
 		if err != nil {
 			return []uint16{}, err
@@ -288,7 +288,7 @@ func (m KnxNetIpReader) resolveAddresses(field KnxNetIpGroupAddressField) ([]uin
 	return result, nil
 }
 
-func (m KnxNetIpReader) resoleSegment(pattern string, minValue uint16, maxValue uint16) ([]uint16, error) {
+func (m Reader) resoleSegment(pattern string, minValue uint16, maxValue uint16) ([]uint16, error) {
 	var results []uint16
 	// A "*" simply matches everything
 	if pattern == "*" {
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriber.go b/plc4go/internal/plc4go/knxnetip/Subscriber.go
similarity index 87%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriber.go
rename to plc4go/internal/plc4go/knxnetip/Subscriber.go
index f1c62c4..1c2d16a 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriber.go
+++ b/plc4go/internal/plc4go/knxnetip/Subscriber.go
@@ -28,19 +28,19 @@ import (
 	"time"
 )
 
-type KnxNetIpSubscriber struct {
-	connection           *KnxNetIpConnection
+type Subscriber struct {
+	connection           *Connection
 	subscriptionRequests []internalModel.DefaultPlcSubscriptionRequest
 }
 
-func NewKnxNetIpSubscriber(connection *KnxNetIpConnection) *KnxNetIpSubscriber {
-	return &KnxNetIpSubscriber{
+func NewSubscriber(connection *Connection) *Subscriber {
+	return &Subscriber{
 		connection:           connection,
 		subscriptionRequests: []internalModel.DefaultPlcSubscriptionRequest{},
 	}
 }
 
-func (m *KnxNetIpSubscriber) Subscribe(subscriptionRequest apiModel.PlcSubscriptionRequest) <-chan apiModel.PlcSubscriptionRequestResult {
+func (m *Subscriber) Subscribe(subscriptionRequest apiModel.PlcSubscriptionRequest) <-chan apiModel.PlcSubscriptionRequestResult {
 	result := make(chan apiModel.PlcSubscriptionRequestResult)
 	go func() {
 		// Add this subscriber to the connection.
@@ -64,7 +64,7 @@ func (m *KnxNetIpSubscriber) Subscribe(subscriptionRequest apiModel.PlcSubscript
 	return result
 }
 
-func (m *KnxNetIpSubscriber) Unsubscribe(unsubscriptionRequest apiModel.PlcUnsubscriptionRequest) <-chan apiModel.PlcUnsubscriptionRequestResult {
+func (m *Subscriber) Unsubscribe(unsubscriptionRequest apiModel.PlcUnsubscriptionRequest) <-chan apiModel.PlcUnsubscriptionRequestResult {
 	result := make(chan apiModel.PlcUnsubscriptionRequestResult)
 
 	// TODO: As soon as we establish a connection, we start getting data...
@@ -76,7 +76,7 @@ func (m *KnxNetIpSubscriber) Unsubscribe(unsubscriptionRequest apiModel.PlcUnsub
 /*
  * Callback for incoming value change events from the KNX bus
  */
-func (m *KnxNetIpSubscriber) handleValueChange(destinationAddress []int8, payload []int8, changed bool) {
+func (m *Subscriber) handleValueChange(destinationAddress []int8, payload []int8, changed bool) {
 	// Decode the group-address according to the settings in the driver
 	// Group addresses can be 1, 2 or 3 levels (3 being the default)
 	garb := utils.NewReadBuffer(utils.Int8ArrayToUint8Array(destinationAddress))
@@ -97,14 +97,14 @@ func (m *KnxNetIpSubscriber) handleValueChange(destinationAddress []int8, payloa
 		// Check if this datagram matches any address in this subscription request
 		// As depending on the address used for fields, the decoding is different, we need to decode on-demand here.
 		for _, fieldName := range subscriptionRequest.GetFieldNames() {
-			field, err := CastToKnxNetIpFieldFromPlcField(subscriptionRequest.GetField(fieldName))
+			field, err := CastToFieldFromPlcField(subscriptionRequest.GetField(fieldName))
 			if err != nil {
 				continue
 			}
 			switch field.(type) {
-			case KnxNetIpGroupAddressField:
+			case GroupAddressField:
 				subscriptionType := subscriptionRequest.GetType(fieldName)
-				groupAddressField := field.(KnxNetIpGroupAddressField)
+				groupAddressField := field.(GroupAddressField)
 				// If it matches, take the datatype of each matching field and try to decode the payload
 				if groupAddressField.matches(groupAddress) {
 					// If this is a CHANGE_OF_STATE field, filter out the events where the value actually hasn't changed.
@@ -137,7 +137,7 @@ func (m *KnxNetIpSubscriber) handleValueChange(destinationAddress []int8, payloa
 								if !rb.HasMore(1) {
 									rb.Reset()
 								}
-								plcValue := values2.NewRawPlcValue(rb, NewKnxNetIpValueDecoder(rb))
+								plcValue := values2.NewRawPlcValue(rb, NewValueDecoder(rb))
 								plcValueList = append(plcValueList, plcValue)
 							} else {
 								plcValue, err2 := driverModel.KnxDatapointParse(rb, elementType)
@@ -168,7 +168,7 @@ func (m *KnxNetIpSubscriber) handleValueChange(destinationAddress []int8, payloa
 
 		// Assemble a PlcSubscription event
 		if len(plcValues) > 0 {
-			event := NewKnxNetIpSubscriptionEvent(
+			event := NewSubscriptionEvent(
 				fields, types, intervals, responseCodes, addresses, plcValues)
 			eventHandler := subscriptionRequest.GetEventHandler()
 			eventHandler(event)
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriptionEvent.go b/plc4go/internal/plc4go/knxnetip/SubscriptionEvent.go
similarity index 84%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriptionEvent.go
rename to plc4go/internal/plc4go/knxnetip/SubscriptionEvent.go
index d5cf0ea..87ab82d 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpSubscriptionEvent.go
+++ b/plc4go/internal/plc4go/knxnetip/SubscriptionEvent.go
@@ -27,15 +27,15 @@ import (
 	"time"
 )
 
-type KnxNetIpSubscriptionEvent struct {
+type SubscriptionEvent struct {
 	addresses map[string][]int8
 	internalMode.DefaultPlcSubscriptionEvent
 }
 
-func NewKnxNetIpSubscriptionEvent(fields map[string]apiModel.PlcField, types map[string]internalMode.SubscriptionType,
+func NewSubscriptionEvent(fields map[string]apiModel.PlcField, types map[string]internalMode.SubscriptionType,
 	intervals map[string]time.Duration, responseCodes map[string]apiModel.PlcResponseCode,
-	addresses map[string][]int8, values map[string]values.PlcValue) KnxNetIpSubscriptionEvent {
-	return KnxNetIpSubscriptionEvent{
+	addresses map[string][]int8, values map[string]values.PlcValue) SubscriptionEvent {
+	return SubscriptionEvent{
 		addresses:                   addresses,
 		DefaultPlcSubscriptionEvent: internalMode.NewDefaultPlcSubscriptionEvent(fields, types, intervals, responseCodes, values),
 	}
@@ -44,18 +44,18 @@ func NewKnxNetIpSubscriptionEvent(fields map[string]apiModel.PlcField, types map
 /*
  * Decode the binary data in the address according to the field requested
  */
-func (m KnxNetIpSubscriptionEvent) GetAddress(name string) string {
+func (m SubscriptionEvent) GetAddress(name string) string {
 	rawAddress := m.addresses[name]
 	rawAddressReadBuffer := utils.NewReadBuffer(utils.Int8ArrayToUint8Array(rawAddress))
 	field := m.DefaultPlcSubscriptionEvent.GetField(name)
 	var groupAddress *driverModel.KnxGroupAddress
 	var err error
 	switch field.(type) {
-	case KnxNetIpGroupAddress3LevelPlcField:
+	case GroupAddress3LevelPlcField:
 		groupAddress, err = driverModel.KnxGroupAddressParse(rawAddressReadBuffer, 3)
-	case KnxNetIpGroupAddress2LevelPlcField:
+	case GroupAddress2LevelPlcField:
 		groupAddress, err = driverModel.KnxGroupAddressParse(rawAddressReadBuffer, 2)
-	case KnxNetIpGroupAddress1LevelPlcField:
+	case GroupAddress1LevelPlcField:
 		groupAddress, err = driverModel.KnxGroupAddressParse(rawAddressReadBuffer, 1)
 	}
 	if err != nil {
diff --git a/plc4go/internal/plc4go/knxnetip/Utils.go b/plc4go/internal/plc4go/knxnetip/Utils.go
index 54ef154..b5ee41b 100644
--- a/plc4go/internal/plc4go/knxnetip/Utils.go
+++ b/plc4go/internal/plc4go/knxnetip/Utils.go
@@ -24,19 +24,19 @@ import (
 	"strconv"
 )
 
-func NumericGroupAddressToString(numericAddress uint16, groupAddress KnxNetIpGroupAddressField) string {
+func NumericGroupAddressToString(numericAddress uint16, groupAddress GroupAddressField) string {
 	if groupAddress != nil {
 		switch groupAddress.(type) {
-		case KnxNetIpGroupAddress3LevelPlcField:
+		case GroupAddress3LevelPlcField:
 			main := numericAddress >> 11
 			middle := (numericAddress >> 8) & 0x07
 			sub := numericAddress & 0xFF
 			return strconv.Itoa(int(main)) + "/" + strconv.Itoa(int(middle)) + "/" + strconv.Itoa(int(sub))
-		case KnxNetIpGroupAddress2LevelPlcField:
+		case GroupAddress2LevelPlcField:
 			main := numericAddress >> 11
 			sub := numericAddress & 0x07FF
 			return strconv.Itoa(int(main)) + "/" + strconv.Itoa(int(sub))
-		case KnxNetIpGroupAddress1LevelPlcField:
+		case GroupAddress1LevelPlcField:
 			return strconv.Itoa(int(numericAddress))
 		}
 	}
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpValueDecoder.go b/plc4go/internal/plc4go/knxnetip/ValueDecoder.go
similarity index 85%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpValueDecoder.go
rename to plc4go/internal/plc4go/knxnetip/ValueDecoder.go
index 629c75d..bc7f771 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpValueDecoder.go
+++ b/plc4go/internal/plc4go/knxnetip/ValueDecoder.go
@@ -24,17 +24,17 @@ import (
 	api "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
 )
 
-type KnxNetIpValueDecoder struct {
+type ValueDecoder struct {
 	rb *utils.ReadBuffer
 }
 
-func NewKnxNetIpValueDecoder(rb *utils.ReadBuffer) KnxNetIpValueDecoder {
-	return KnxNetIpValueDecoder{
+func NewValueDecoder(rb *utils.ReadBuffer) ValueDecoder {
+	return ValueDecoder{
 		rb: rb,
 	}
 }
 
-func (m KnxNetIpValueDecoder) Decode(typeName string) api.PlcValue {
+func (m ValueDecoder) Decode(typeName string) api.PlcValue {
 	datatype := driverModel.KnxDatapointTypeByName(typeName)
 	plcValue, err := driverModel.KnxDatapointParse(m.rb, datatype)
 	if err != nil {
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpValueHandler.go b/plc4go/internal/plc4go/knxnetip/ValueHandler.go
similarity index 81%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpValueHandler.go
rename to plc4go/internal/plc4go/knxnetip/ValueHandler.go
index a32b73e..84602bb 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpValueHandler.go
+++ b/plc4go/internal/plc4go/knxnetip/ValueHandler.go
@@ -23,13 +23,13 @@ import (
 	"github.com/apache/plc4x/plc4go/pkg/plc4go/values"
 )
 
-type KnxNetIpValueHandler struct {
+type ValueHandler struct {
 }
 
-func NewValueHandler() KnxNetIpValueHandler {
-	return KnxNetIpValueHandler{}
+func NewValueHandler() ValueHandler {
+	return ValueHandler{}
 }
 
-func (m KnxNetIpValueHandler) NewPlcValue(field model.PlcField, value interface{}) (values.PlcValue, error) {
+func (m ValueHandler) NewPlcValue(field model.PlcField, value interface{}) (values.PlcValue, error) {
 	return nil, nil
 }
diff --git a/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go b/plc4go/internal/plc4go/knxnetip/Writer.go
similarity index 77%
rename from plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go
rename to plc4go/internal/plc4go/knxnetip/Writer.go
index 138c145..8ef7b31 100644
--- a/plc4go/internal/plc4go/knxnetip/KnxNetIpWriter.go
+++ b/plc4go/internal/plc4go/knxnetip/Writer.go
@@ -20,23 +20,23 @@ package knxnetip
 
 import (
 	"errors"
-	knxnetipModel "github.com/apache/plc4x/plc4go/internal/plc4go/knxnetip/readwrite/model"
+	readWriteModel "github.com/apache/plc4x/plc4go/internal/plc4go/knxnetip/readwrite/model"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
 	"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
 )
 
-type KnxNetIpWriter struct {
+type Writer struct {
 	messageCodec spi.MessageCodec
 }
 
-func NewKnxNetIpWriter(messageCodec spi.MessageCodec) KnxNetIpWriter {
-	return KnxNetIpWriter{
+func NewWriter(messageCodec spi.MessageCodec) Writer {
+	return Writer{
 		messageCodec: messageCodec,
 	}
 }
 
-func (m KnxNetIpWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWriteRequestResult {
+func (m Writer) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWriteRequestResult {
 	result := make(chan model.PlcWriteRequestResult)
 	// If we are requesting only one field, use a
 	if len(writeRequest.GetFieldNames()) == 1 {
@@ -44,7 +44,7 @@ func (m KnxNetIpWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.P
 
 		// Get the KnxNetIp field instance from the request
 		field := writeRequest.GetField(fieldName)
-		knxNetIpField, err := CastToKnxNetIpFieldFromPlcField(field)
+		knxNetIpField, err := CastToFieldFromPlcField(field)
 		if err != nil {
 			result <- model.PlcWriteRequestResult{
 				Request:  writeRequest,
@@ -57,8 +57,8 @@ func (m KnxNetIpWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.P
 		// Get the value from the request and serialize it to a byte array
 		value := writeRequest.GetValue(fieldName)
 		io := utils.NewWriteBuffer()
-		fieldType := knxnetipModel.KnxDatapointTypeByName(knxNetIpField.GetTypeName())
-		if err := knxnetipModel.KnxDatapointSerialize(io, value, fieldType); err != nil {
+		fieldType := readWriteModel.KnxDatapointTypeByName(knxNetIpField.GetTypeName())
+		if err := readWriteModel.KnxDatapointSerialize(io, value, fieldType); err != nil {
 			result <- model.PlcWriteRequestResult{
 				Request:  writeRequest,
 				Response: nil,
diff --git a/plc4go/internal/plc4go/modbus/ModbusConnection.go b/plc4go/internal/plc4go/modbus/Connection.go
similarity index 70%
rename from plc4go/internal/plc4go/modbus/ModbusConnection.go
rename to plc4go/internal/plc4go/modbus/Connection.go
index f244320..468dd7a 100644
--- a/plc4go/internal/plc4go/modbus/ModbusConnection.go
+++ b/plc4go/internal/plc4go/modbus/Connection.go
@@ -21,7 +21,7 @@ package modbus
 import (
 	"errors"
 	"fmt"
-	driverModel "github.com/apache/plc4x/plc4go/internal/plc4go/modbus/readwrite/model"
+	readWriteModel "github.com/apache/plc4x/plc4go/internal/plc4go/modbus/readwrite/model"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/interceptors"
 	internalModel "github.com/apache/plc4x/plc4go/internal/plc4go/spi/model"
@@ -54,7 +54,7 @@ func (m ConnectionMetadata) CanBrowse() bool {
 	return false
 }
 
-type ModbusConnection struct {
+type Connection struct {
 	unitIdentifier     uint8
 	messageCodec       spi.MessageCodec
 	options            map[string][]string
@@ -64,8 +64,8 @@ type ModbusConnection struct {
 	plc4go.PlcConnection
 }
 
-func NewModbusConnection(unitIdentifier uint8, messageCodec spi.MessageCodec, options map[string][]string, fieldHandler spi.PlcFieldHandler) ModbusConnection {
-	return ModbusConnection{
+func NewConnection(unitIdentifier uint8, messageCodec spi.MessageCodec, options map[string][]string, fieldHandler spi.PlcFieldHandler) Connection {
+	return Connection{
 		unitIdentifier:     unitIdentifier,
 		messageCodec:       messageCodec,
 		options:            options,
@@ -75,7 +75,7 @@ func NewModbusConnection(unitIdentifier uint8, messageCodec spi.MessageCodec, op
 	}
 }
 
-func (m ModbusConnection) Connect() <-chan plc4go.PlcConnectionConnectResult {
+func (m Connection) Connect() <-chan plc4go.PlcConnectionConnectResult {
 	ch := make(chan plc4go.PlcConnectionConnectResult)
 	go func() {
 		err := m.messageCodec.Connect()
@@ -84,7 +84,7 @@ func (m ModbusConnection) Connect() <-chan plc4go.PlcConnectionConnectResult {
 	return ch
 }
 
-func (m ModbusConnection) BlockingClose() {
+func (m Connection) BlockingClose() {
 	closeResults := m.Close()
 	select {
 	case <-closeResults:
@@ -94,7 +94,7 @@ func (m ModbusConnection) BlockingClose() {
 	}
 }
 
-func (m ModbusConnection) Close() <-chan plc4go.PlcConnectionCloseResult {
+func (m Connection) Close() <-chan plc4go.PlcConnectionCloseResult {
 	// TODO: Implement ...
 	ch := make(chan plc4go.PlcConnectionCloseResult)
 	go func() {
@@ -103,19 +103,19 @@ func (m ModbusConnection) Close() <-chan plc4go.PlcConnectionCloseResult {
 	return ch
 }
 
-func (m ModbusConnection) IsConnected() bool {
+func (m Connection) IsConnected() bool {
 	panic("implement me")
 }
 
-func (m ModbusConnection) Ping() <-chan plc4go.PlcConnectionPingResult {
+func (m Connection) Ping() <-chan plc4go.PlcConnectionPingResult {
 	result := make(chan plc4go.PlcConnectionPingResult)
-	diagnosticRequestPdu := driverModel.NewModbusPDUDiagnosticRequest(0, 0x42)
+	diagnosticRequestPdu := readWriteModel.NewModbusPDUDiagnosticRequest(0, 0x42)
 	go func() {
-		pingRequest := driverModel.NewModbusTcpADU(1, m.unitIdentifier, diagnosticRequestPdu)
+		pingRequest := readWriteModel.NewModbusTcpADU(1, m.unitIdentifier, diagnosticRequestPdu)
 		err := m.messageCodec.SendRequest(
 			pingRequest,
 			func(message interface{}) bool {
-				responseAdu := driverModel.CastModbusTcpADU(message)
+				responseAdu := readWriteModel.CastModbusTcpADU(message)
 				return responseAdu.TransactionIdentifier == 1 &&
 					responseAdu.UnitIdentifier == m.unitIdentifier
 			},
@@ -142,39 +142,39 @@ func (m ModbusConnection) Ping() <-chan plc4go.PlcConnectionPingResult {
 	return result
 }
 
-func (m ModbusConnection) GetMetadata() apiModel.PlcConnectionMetadata {
+func (m Connection) GetMetadata() apiModel.PlcConnectionMetadata {
 	return ConnectionMetadata{}
 }
 
-func (m ModbusConnection) ReadRequestBuilder() apiModel.PlcReadRequestBuilder {
+func (m Connection) ReadRequestBuilder() apiModel.PlcReadRequestBuilder {
 	return internalModel.NewDefaultPlcReadRequestBuilderWithInterceptor(m.fieldHandler,
-		NewModbusReader(m.unitIdentifier, m.messageCodec), m.requestInterceptor)
+		NewReader(m.unitIdentifier, m.messageCodec), m.requestInterceptor)
 }
 
-func (m ModbusConnection) WriteRequestBuilder() apiModel.PlcWriteRequestBuilder {
+func (m Connection) WriteRequestBuilder() apiModel.PlcWriteRequestBuilder {
 	return internalModel.NewDefaultPlcWriteRequestBuilder(
-		m.fieldHandler, m.valueHandler, NewModbusWriter(m.unitIdentifier, m.messageCodec))
+		m.fieldHandler, m.valueHandler, NewWriter(m.unitIdentifier, m.messageCodec))
 }
 
-func (m ModbusConnection) SubscriptionRequestBuilder() apiModel.PlcSubscriptionRequestBuilder {
+func (m Connection) SubscriptionRequestBuilder() apiModel.PlcSubscriptionRequestBuilder {
 	panic("implement me")
 }
 
-func (m ModbusConnection) UnsubscriptionRequestBuilder() apiModel.PlcUnsubscriptionRequestBuilder {
+func (m Connection) UnsubscriptionRequestBuilder() apiModel.PlcUnsubscriptionRequestBuilder {
 	panic("implement me")
 }
 
-func (m ModbusConnection) GetTransportInstance() transports.TransportInstance {
+func (m Connection) GetTransportInstance() transports.TransportInstance {
 	if mc, ok := m.messageCodec.(spi.TransportInstanceExposer); ok {
 		return mc.GetTransportInstance()
 	}
 	return nil
 }
 
-func (m ModbusConnection) GetPlcFieldHandler() spi.PlcFieldHandler {
+func (m Connection) GetPlcFieldHandler() spi.PlcFieldHandler {
 	return m.fieldHandler
 }
 
-func (m ModbusConnection) GetPlcValueHandler() spi.PlcValueHandler {
+func (m Connection) GetPlcValueHandler() spi.PlcValueHandler {
 	return m.valueHandler
 }
diff --git a/plc4go/internal/plc4go/modbus/ModbusDriver.go b/plc4go/internal/plc4go/modbus/Driver.go
similarity index 80%
rename from plc4go/internal/plc4go/modbus/ModbusDriver.go
rename to plc4go/internal/plc4go/modbus/Driver.go
index 7f9dec0..9f8abda 100644
--- a/plc4go/internal/plc4go/modbus/ModbusDriver.go
+++ b/plc4go/internal/plc4go/modbus/Driver.go
@@ -31,34 +31,34 @@ import (
 	"strconv"
 )
 
-type ModbusDriver struct {
+type Driver struct {
 	fieldHandler spi.PlcFieldHandler
 }
 
-func NewModbusDriver() *ModbusDriver {
-	return &ModbusDriver{
+func NewDriver() *Driver {
+	return &Driver{
 		fieldHandler: NewFieldHandler(),
 	}
 }
 
-func (m ModbusDriver) GetProtocolCode() string {
+func (m Driver) GetProtocolCode() string {
 	return "modbus"
 }
 
-func (m ModbusDriver) GetProtocolName() string {
+func (m Driver) GetProtocolName() string {
 	return "Modbus"
 }
 
-func (m ModbusDriver) GetDefaultTransport() string {
+func (m Driver) GetDefaultTransport() string {
 	return "tcp"
 }
 
-func (m ModbusDriver) CheckQuery(query string) error {
+func (m Driver) CheckQuery(query string) error {
 	_, err := m.fieldHandler.ParseQuery(query)
 	return err
 }
 
-func (m ModbusDriver) GetConnection(transportUrl url.URL, transports map[string]transports.Transport, options map[string][]string) <-chan plc4go.PlcConnectionConnectResult {
+func (m Driver) GetConnection(transportUrl url.URL, transports map[string]transports.Transport, options map[string][]string) <-chan plc4go.PlcConnectionConnectResult {
 	// Get an the transport specified in the url
 	transport, ok := transports[transportUrl.Scheme]
 	if !ok {
@@ -90,7 +90,7 @@ func (m ModbusDriver) GetConnection(transportUrl url.URL, transports map[string]
 			}
 		}
 	}()
-	codec := NewModbusMessageCodec(transportInstance, nil)
+	codec := NewMessageCodec(transportInstance, nil)
 
 	// If a unit-identifier was provided in the connection string use this, otherwise use the default of 1
 	unitIdentifier := uint8(1)
@@ -103,14 +103,14 @@ func (m ModbusDriver) GetConnection(transportUrl url.URL, transports map[string]
 	}
 
 	// Create the new connection
-	connection := NewModbusConnection(unitIdentifier, codec, options, m.fieldHandler)
+	connection := NewConnection(unitIdentifier, codec, options, m.fieldHandler)
 	return connection.Connect()
 }
 
-func (m ModbusDriver) SupportsDiscovery() bool {
+func (m Driver) SupportsDiscovery() bool {
 	return false
 }
 
-func (m ModbusDriver) Discover(callback func(event apiModel.PlcDiscoveryEvent)) error {
+func (m Driver) Discover(callback func(event apiModel.PlcDiscoveryEvent)) error {
 	panic("implement me")
 }
diff --git a/plc4go/internal/plc4go/modbus/ModbusField.go b/plc4go/internal/plc4go/modbus/Field.go
similarity index 70%
rename from plc4go/internal/plc4go/modbus/ModbusField.go
rename to plc4go/internal/plc4go/modbus/Field.go
index 15e4840..375fb12 100644
--- a/plc4go/internal/plc4go/modbus/ModbusField.go
+++ b/plc4go/internal/plc4go/modbus/Field.go
@@ -31,15 +31,15 @@ const (
 	MODBUS_PROTOCOL_ADDRESS_OFFSET = 1
 )
 
-type ModbusPlcField struct {
-	FieldType ModbusFieldType
+type PlcField struct {
+	FieldType FieldType
 	Address   uint16
 	Quantity  uint16
 	Datatype  model2.ModbusDataType
 }
 
-func NewModbusPlcField(fieldType ModbusFieldType, address uint16, quantity uint16, datatype model2.ModbusDataType) ModbusPlcField {
-	return ModbusPlcField{
+func NewField(fieldType FieldType, address uint16, quantity uint16, datatype model2.ModbusDataType) PlcField {
+	return PlcField{
 		FieldType: fieldType,
 		Address:   address - MODBUS_PROTOCOL_ADDRESS_OFFSET,
 		Quantity:  quantity,
@@ -47,7 +47,7 @@ func NewModbusPlcField(fieldType ModbusFieldType, address uint16, quantity uint1
 	}
 }
 
-func NewModbusPlcFieldFromStrings(fieldType ModbusFieldType, addressString string, quantityString string, datatype model2.ModbusDataType) (model.PlcField, error) {
+func NewModbusPlcFieldFromStrings(fieldType FieldType, addressString string, quantityString string, datatype model2.ModbusDataType) (model.PlcField, error) {
 	address, err := strconv.Atoi(addressString)
 	if err != nil {
 		return nil, errors.New("Couldn't parse address string '" + addressString + "' into an int")
@@ -56,45 +56,45 @@ func NewModbusPlcFieldFromStrings(fieldType ModbusFieldType, addressString strin
 	if err != nil {
 		quantity = 1
 	}
-	return NewModbusPlcField(fieldType, uint16(address), uint16(quantity), datatype), nil
+	return NewField(fieldType, uint16(address), uint16(quantity), datatype), nil
 }
 
-func (m ModbusPlcField) GetAddressString() string {
+func (m PlcField) GetAddressString() string {
 	switch m.FieldType {
-	case MODBUS_FIELD_COIL:
+	case Coil:
 		return fmt.Sprintf("0x%05d:%s[%d]", m.Address, m.Datatype.String(), m.Quantity)
-	case MODBUS_FIELD_DISCRETE_INPUT:
+	case DiscreteInput:
 		return fmt.Sprintf("1x%05d:%s[%d]", m.Address, m.Datatype.String(), m.Quantity)
-	case MODBUS_FIELD_INPUT_REGISTER:
+	case InputRegister:
 		return fmt.Sprintf("3x%05d:%s[%d]", m.Address, m.Datatype.String(), m.Quantity)
-	case MODBUS_FIELD_HOLDING_REGISTER:
+	case HoldingRegister:
 		return fmt.Sprintf("4x%05d:%s[%d]", m.Address, m.Datatype.String(), m.Quantity)
-	case MODBUS_FIELD_EXTENDED_REGISTER:
+	case ExtendedRegister:
 		return fmt.Sprintf("6x%05d:%s[%d]", m.Address, m.Datatype.String(), m.Quantity)
 	}
 	return ""
 }
 
-func (m ModbusPlcField) GetTypeName() string {
+func (m PlcField) GetTypeName() string {
 	return m.Datatype.String()
 }
 
-func (m ModbusPlcField) GetDataType() model2.ModbusDataType {
+func (m PlcField) GetDataType() model2.ModbusDataType {
 	return m.Datatype
 }
 
-func (m ModbusPlcField) GetQuantity() uint16 {
+func (m PlcField) GetQuantity() uint16 {
 	return m.Quantity
 }
 
-func CastToModbusFieldFromPlcField(plcField model.PlcField) (ModbusPlcField, error) {
-	if modbusField, ok := plcField.(ModbusPlcField); ok {
+func CastToModbusFieldFromPlcField(plcField model.PlcField) (PlcField, error) {
+	if modbusField, ok := plcField.(PlcField); ok {
 		return modbusField, nil
 	}
-	return ModbusPlcField{}, errors.New("couldn't cast to ModbusPlcField")
+	return PlcField{}, errors.New("couldn't cast to ModbusPlcField")
 }
 
-func (m ModbusPlcField) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
+func (m PlcField) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
 	if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local: m.FieldType.GetName()}}); err != nil {
 		return err
 	}
diff --git a/plc4go/internal/plc4go/modbus/ModbusFieldHandler.go b/plc4go/internal/plc4go/modbus/FieldHandler.go
similarity index 67%
rename from plc4go/internal/plc4go/modbus/ModbusFieldHandler.go
rename to plc4go/internal/plc4go/modbus/FieldHandler.go
index 88c443b..c1b88d6 100644
--- a/plc4go/internal/plc4go/modbus/ModbusFieldHandler.go
+++ b/plc4go/internal/plc4go/modbus/FieldHandler.go
@@ -27,27 +27,27 @@ import (
 	"regexp"
 )
 
-type ModbusFieldType uint8
+type FieldType uint8
 
 const (
-	MODBUS_FIELD_COIL              ModbusFieldType = 0x00
-	MODBUS_FIELD_DISCRETE_INPUT    ModbusFieldType = 0x01
-	MODBUS_FIELD_INPUT_REGISTER    ModbusFieldType = 0x03
-	MODBUS_FIELD_HOLDING_REGISTER  ModbusFieldType = 0x04
-	MODBUS_FIELD_EXTENDED_REGISTER ModbusFieldType = 0x06
+	Coil             FieldType = 0x00
+	DiscreteInput    FieldType = 0x01
+	InputRegister    FieldType = 0x03
+	HoldingRegister  FieldType = 0x04
+	ExtendedRegister FieldType = 0x06
 )
 
-func (m ModbusFieldType) GetName() string {
+func (m FieldType) GetName() string {
 	switch m {
-	case MODBUS_FIELD_COIL:
+	case Coil:
 		return "ModbusFieldHoldingRegister"
-	case MODBUS_FIELD_DISCRETE_INPUT:
+	case DiscreteInput:
 		return "ModbusFieldDiscreteInput"
-	case MODBUS_FIELD_INPUT_REGISTER:
+	case InputRegister:
 		return "ModbusFieldInputRegister"
-	case MODBUS_FIELD_HOLDING_REGISTER:
+	case HoldingRegister:
 		return "ModbusFieldHoldingRegister"
-	case MODBUS_FIELD_EXTENDED_REGISTER:
+	case ExtendedRegister:
 		return "ModbusFieldExtendedRegister"
 	}
 	return ""
@@ -86,25 +86,25 @@ func NewFieldHandler() FieldHandler {
 
 func (m FieldHandler) ParseQuery(query string) (model.PlcField, error) {
 	if match := utils.GetSubgroupMatches(m.plc4xCoilPattern, query); match != nil {
-		return NewModbusPlcFieldFromStrings(MODBUS_FIELD_COIL, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
+		return NewModbusPlcFieldFromStrings(Coil, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
 	} else if match := utils.GetSubgroupMatches(m.numericCoilPattern, query); match != nil {
-		return NewModbusPlcFieldFromStrings(MODBUS_FIELD_COIL, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
+		return NewModbusPlcFieldFromStrings(Coil, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
 	} else if match := utils.GetSubgroupMatches(m.plc4xDiscreteInputPattern, query); match != nil {
-		return NewModbusPlcFieldFromStrings(MODBUS_FIELD_DISCRETE_INPUT, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
+		return NewModbusPlcFieldFromStrings(DiscreteInput, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
 	} else if match := utils.GetSubgroupMatches(m.numericDiscreteInputPattern, query); match != nil {
-		return NewModbusPlcFieldFromStrings(MODBUS_FIELD_DISCRETE_INPUT, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
+		return NewModbusPlcFieldFromStrings(DiscreteInput, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
 	} else if match := utils.GetSubgroupMatches(m.plc4xInputRegisterPattern, query); match != nil {
-		return NewModbusPlcFieldFromStrings(MODBUS_FIELD_INPUT_REGISTER, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
+		return NewModbusPlcFieldFromStrings(InputRegister, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
 	} else if match := utils.GetSubgroupMatches(m.numericInputRegisterPattern, query); match != nil {
-		return NewModbusPlcFieldFromStrings(MODBUS_FIELD_INPUT_REGISTER, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
+		return NewModbusPlcFieldFromStrings(InputRegister, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
 	} else if match := utils.GetSubgroupMatches(m.plc4xHoldingRegisterPattern, query); match != nil {
-		return NewModbusPlcFieldFromStrings(MODBUS_FIELD_HOLDING_REGISTER, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
+		return NewModbusPlcFieldFromStrings(HoldingRegister, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
 	} else if match := utils.GetSubgroupMatches(m.numericHoldingRegisterPattern, query); match != nil {
-		return NewModbusPlcFieldFromStrings(MODBUS_FIELD_HOLDING_REGISTER, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
+		return NewModbusPlcFieldFromStrings(HoldingRegister, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
 	} else if match := utils.GetSubgroupMatches(m.plc4xExtendedRegisterPattern, query); match != nil {
-		return NewModbusPlcFieldFromStrings(MODBUS_FIELD_EXTENDED_REGISTER, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
+		return NewModbusPlcFieldFromStrings(ExtendedRegister, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
 	} else if match := utils.GetSubgroupMatches(m.numericExtendedRegisterPattern, query); match != nil {
-		return NewModbusPlcFieldFromStrings(MODBUS_FIELD_EXTENDED_REGISTER, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
+		return NewModbusPlcFieldFromStrings(ExtendedRegister, match["address"], match["quantity"], model2.ModbusDataTypeByName(match["datatype"]))
 	}
 	return nil, errors.New("Invalid address format for address '" + query + "'")
 }
diff --git a/plc4go/internal/plc4go/modbus/ModbusMessageCodec.go b/plc4go/internal/plc4go/modbus/MessageCodec.go
similarity index 80%
rename from plc4go/internal/plc4go/modbus/ModbusMessageCodec.go
rename to plc4go/internal/plc4go/modbus/MessageCodec.go
index 5733ebb..49f62f5 100644
--- a/plc4go/internal/plc4go/modbus/ModbusMessageCodec.go
+++ b/plc4go/internal/plc4go/modbus/MessageCodec.go
@@ -28,41 +28,41 @@ import (
 	"time"
 )
 
-type ModbusExpectation struct {
+type Expectation struct {
 	expiration     time.Time
 	acceptsMessage spi.AcceptsMessage
 	handleMessage  spi.HandleMessage
 	handleError    spi.HandleError
 }
 
-type ModbusMessageCodec struct {
+type MessageCodec struct {
 	expectationCounter            int32
 	transportInstance             transports.TransportInstance
 	defaultIncomingMessageChannel chan interface{}
-	expectations                  []ModbusExpectation
+	expectations                  []Expectation
 }
 
-func NewModbusMessageCodec(transportInstance transports.TransportInstance, defaultIncomingMessageChannel chan interface{}) *ModbusMessageCodec {
-	codec := &ModbusMessageCodec{
+func NewMessageCodec(transportInstance transports.TransportInstance, defaultIncomingMessageChannel chan interface{}) *MessageCodec {
+	codec := &MessageCodec{
 		expectationCounter:            1,
 		transportInstance:             transportInstance,
 		defaultIncomingMessageChannel: defaultIncomingMessageChannel,
-		expectations:                  []ModbusExpectation{},
+		expectations:                  []Expectation{},
 	}
 	// Start a worker that handles processing of responses
 	go work(codec)
 	return codec
 }
 
-func (m *ModbusMessageCodec) Connect() error {
+func (m *MessageCodec) Connect() error {
 	return m.transportInstance.Connect()
 }
 
-func (m *ModbusMessageCodec) Disconnect() error {
+func (m *MessageCodec) Disconnect() error {
 	return m.transportInstance.Close()
 }
 
-func (m *ModbusMessageCodec) Send(message interface{}) error {
+func (m *MessageCodec) Send(message interface{}) error {
 	// Cast the message to the correct type of struct
 	adu := model.CastModbusTcpADU(message)
 	// Serialize the request
@@ -80,8 +80,8 @@ func (m *ModbusMessageCodec) Send(message interface{}) error {
 	return nil
 }
 
-func (m *ModbusMessageCodec) Expect(acceptsMessage spi.AcceptsMessage, handleMessage spi.HandleMessage, handleError spi.HandleError, ttl time.Duration) error {
-	expectation := ModbusExpectation{
+func (m *MessageCodec) Expect(acceptsMessage spi.AcceptsMessage, handleMessage spi.HandleMessage, handleError spi.HandleError, ttl time.Duration) error {
+	expectation := Expectation{
 		expiration:     time.Now().Add(ttl),
 		acceptsMessage: acceptsMessage,
 		handleMessage:  handleMessage,
@@ -91,7 +91,7 @@ func (m *ModbusMessageCodec) Expect(acceptsMessage spi.AcceptsMessage, handleMes
 	return nil
 }
 
-func (m *ModbusMessageCodec) SendRequest(message interface{}, acceptsMessage spi.AcceptsMessage, handleMessage spi.HandleMessage, handleError spi.HandleError, ttl time.Duration) error {
+func (m *MessageCodec) SendRequest(message interface{}, acceptsMessage spi.AcceptsMessage, handleMessage spi.HandleMessage, handleError spi.HandleError, ttl time.Duration) error {
 	// Send the actual message
 	err := m.Send(message)
 	if err != nil {
@@ -100,11 +100,11 @@ func (m *ModbusMessageCodec) SendRequest(message interface{}, acceptsMessage spi
 	return m.Expect(acceptsMessage, handleMessage, handleError, ttl)
 }
 
-func (m *ModbusMessageCodec) GetDefaultIncomingMessageChannel() chan interface{} {
+func (m *MessageCodec) GetDefaultIncomingMessageChannel() chan interface{} {
 	return m.defaultIncomingMessageChannel
 }
 
-func (m *ModbusMessageCodec) receive() (interface{}, error) {
+func (m *MessageCodec) receive() (interface{}, error) {
 	// We need at least 6 bytes in order to know how big the packet is in total
 	if num, err := m.transportInstance.GetNumReadableBytes(); (err == nil) && (num >= 6) {
 		data, err := m.transportInstance.PeekReadableBytes(6)
@@ -132,7 +132,7 @@ func (m *ModbusMessageCodec) receive() (interface{}, error) {
 	return nil, nil
 }
 
-func work(m *ModbusMessageCodec) {
+func work(m *MessageCodec) {
 	// Start an endless loop
 	// TODO: Provide some means to terminate this ...
 	for {
@@ -183,6 +183,6 @@ func work(m *ModbusMessageCodec) {
 	}
 }
 
-func (m ModbusMessageCodec) GetTransportInstance() transports.TransportInstance {
+func (m MessageCodec) GetTransportInstance() transports.TransportInstance {
 	return m.transportInstance
 }
diff --git a/plc4go/internal/plc4go/modbus/ModbusReader.go b/plc4go/internal/plc4go/modbus/Reader.go
similarity index 73%
rename from plc4go/internal/plc4go/modbus/ModbusReader.go
rename to plc4go/internal/plc4go/modbus/Reader.go
index 67eace6..5c8fd2e 100644
--- a/plc4go/internal/plc4go/modbus/ModbusReader.go
+++ b/plc4go/internal/plc4go/modbus/Reader.go
@@ -20,7 +20,7 @@ package modbus
 
 import (
 	"errors"
-	modbusModel "github.com/apache/plc4x/plc4go/internal/plc4go/modbus/readwrite/model"
+	readWriteModel "github.com/apache/plc4x/plc4go/internal/plc4go/modbus/readwrite/model"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi"
 	plc4goModel "github.com/apache/plc4x/plc4go/internal/plc4go/spi/model"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
@@ -31,21 +31,21 @@ import (
 	"time"
 )
 
-type ModbusReader struct {
+type Reader struct {
 	transactionIdentifier int32
 	unitIdentifier        uint8
 	messageCodec          spi.MessageCodec
 }
 
-func NewModbusReader(unitIdentifier uint8, messageCodec spi.MessageCodec) *ModbusReader {
-	return &ModbusReader{
+func NewReader(unitIdentifier uint8, messageCodec spi.MessageCodec) *Reader {
+	return &Reader{
 		transactionIdentifier: 0,
 		unitIdentifier:        unitIdentifier,
 		messageCodec:          messageCodec,
 	}
 }
 
-func (m *ModbusReader) Read(readRequest model.PlcReadRequest) <-chan model.PlcReadRequestResult {
+func (m *Reader) Read(readRequest model.PlcReadRequest) <-chan model.PlcReadRequestResult {
 	result := make(chan model.PlcReadRequestResult)
 	// If we are requesting only one field, use a
 	if len(readRequest.GetFieldNames()) == 1 {
@@ -61,17 +61,17 @@ func (m *ModbusReader) Read(readRequest model.PlcReadRequest) <-chan model.PlcRe
 			return result
 		}
 		numWords := uint16(math.Ceil(float64(modbusField.Quantity*uint16(modbusField.Datatype.DataTypeSize())) / float64(2)))
-		var pdu *modbusModel.ModbusPDU = nil
+		var pdu *readWriteModel.ModbusPDU = nil
 		switch modbusField.FieldType {
-		case MODBUS_FIELD_COIL:
-			pdu = modbusModel.NewModbusPDUReadCoilsRequest(modbusField.Address, modbusField.Quantity)
-		case MODBUS_FIELD_DISCRETE_INPUT:
-			pdu = modbusModel.NewModbusPDUReadDiscreteInputsRequest(modbusField.Address, modbusField.Quantity)
-		case MODBUS_FIELD_INPUT_REGISTER:
-			pdu = modbusModel.NewModbusPDUReadInputRegistersRequest(modbusField.Address, numWords)
-		case MODBUS_FIELD_HOLDING_REGISTER:
-			pdu = modbusModel.NewModbusPDUReadHoldingRegistersRequest(modbusField.Address, numWords)
-		case MODBUS_FIELD_EXTENDED_REGISTER:
+		case Coil:
+			pdu = readWriteModel.NewModbusPDUReadCoilsRequest(modbusField.Address, modbusField.Quantity)
+		case DiscreteInput:
+			pdu = readWriteModel.NewModbusPDUReadDiscreteInputsRequest(modbusField.Address, modbusField.Quantity)
+		case InputRegister:
+			pdu = readWriteModel.NewModbusPDUReadInputRegistersRequest(modbusField.Address, numWords)
+		case HoldingRegister:
+			pdu = readWriteModel.NewModbusPDUReadHoldingRegistersRequest(modbusField.Address, numWords)
+		case ExtendedRegister:
 			result <- model.PlcReadRequestResult{
 				Request:  readRequest,
 				Response: nil,
@@ -95,7 +95,7 @@ func (m *ModbusReader) Read(readRequest model.PlcReadRequest) <-chan model.PlcRe
 		}
 
 		// Assemble the finished ADU
-		requestAdu := modbusModel.ModbusTcpADU{
+		requestAdu := readWriteModel.ModbusTcpADU{
 			TransactionIdentifier: uint16(transactionIdentifier),
 			UnitIdentifier:        m.unitIdentifier,
 			Pdu:                   pdu,
@@ -105,13 +105,13 @@ func (m *ModbusReader) Read(readRequest model.PlcReadRequest) <-chan model.PlcRe
 		err = m.messageCodec.SendRequest(
 			requestAdu,
 			func(message interface{}) bool {
-				responseAdu := modbusModel.CastModbusTcpADU(message)
+				responseAdu := readWriteModel.CastModbusTcpADU(message)
 				return responseAdu.TransactionIdentifier == uint16(transactionIdentifier) &&
 					responseAdu.UnitIdentifier == requestAdu.UnitIdentifier
 			},
 			func(message interface{}) error {
 				// Convert the response into an ADU
-				responseAdu := modbusModel.CastModbusTcpADU(message)
+				responseAdu := readWriteModel.CastModbusTcpADU(message)
 				// Convert the modbus response into a PLC4X response
 				readResponse, err := m.ToPlc4xReadResponse(*responseAdu, readRequest)
 
@@ -153,25 +153,25 @@ func (m *ModbusReader) Read(readRequest model.PlcReadRequest) <-chan model.PlcRe
 	return result
 }
 
-func (m *ModbusReader) ToPlc4xReadResponse(responseAdu modbusModel.ModbusTcpADU, readRequest model.PlcReadRequest) (model.PlcReadResponse, error) {
+func (m *Reader) ToPlc4xReadResponse(responseAdu readWriteModel.ModbusTcpADU, readRequest model.PlcReadRequest) (model.PlcReadResponse, error) {
 	var data []uint8
 	switch responseAdu.Pdu.Child.(type) {
-	case *modbusModel.ModbusPDUReadDiscreteInputsResponse:
-		pdu := modbusModel.CastModbusPDUReadDiscreteInputsResponse(responseAdu.Pdu)
+	case *readWriteModel.ModbusPDUReadDiscreteInputsResponse:
+		pdu := readWriteModel.CastModbusPDUReadDiscreteInputsResponse(responseAdu.Pdu)
 		data = utils.Int8ArrayToUint8Array(pdu.Value)
 		// Pure Boolean ...
-	case *modbusModel.ModbusPDUReadCoilsResponse:
-		pdu := modbusModel.CastModbusPDUReadCoilsResponse(&responseAdu.Pdu)
+	case *readWriteModel.ModbusPDUReadCoilsResponse:
+		pdu := readWriteModel.CastModbusPDUReadCoilsResponse(&responseAdu.Pdu)
 		data = utils.Int8ArrayToUint8Array(pdu.Value)
 		// Pure Boolean ...
-	case *modbusModel.ModbusPDUReadInputRegistersResponse:
-		pdu := modbusModel.CastModbusPDUReadInputRegistersResponse(responseAdu.Pdu)
+	case *readWriteModel.ModbusPDUReadInputRegistersResponse:
+		pdu := readWriteModel.CastModbusPDUReadInputRegistersResponse(responseAdu.Pdu)
 		data = utils.Int8ArrayToUint8Array(pdu.Value)
 		// DataIo ...
-	case *modbusModel.ModbusPDUReadHoldingRegistersResponse:
-		pdu := modbusModel.CastModbusPDUReadHoldingRegistersResponse(responseAdu.Pdu)
+	case *readWriteModel.ModbusPDUReadHoldingRegistersResponse:
+		pdu := readWriteModel.CastModbusPDUReadHoldingRegistersResponse(responseAdu.Pdu)
 		data = utils.Int8ArrayToUint8Array(pdu.Value)
-	case *modbusModel.ModbusPDUError:
+	case *readWriteModel.ModbusPDUError:
 		return nil, errors.New("got an error from remote")
 	default:
 		return nil, errors.New("unsupported response type")
@@ -186,7 +186,7 @@ func (m *ModbusReader) ToPlc4xReadResponse(responseAdu modbusModel.ModbusTcpADU,
 
 	// Decode the data according to the information from the request
 	rb := utils.NewReadBuffer(data)
-	value, err := modbusModel.DataItemParse(rb, field.Datatype, field.Quantity)
+	value, err := readWriteModel.DataItemParse(rb, field.Datatype, field.Quantity)
 	if err != nil {
 		return nil, err
 	}
diff --git a/plc4go/internal/plc4go/modbus/ModbusValueHandler.go b/plc4go/internal/plc4go/modbus/ValueHandler.go
similarity index 100%
rename from plc4go/internal/plc4go/modbus/ModbusValueHandler.go
rename to plc4go/internal/plc4go/modbus/ValueHandler.go
diff --git a/plc4go/internal/plc4go/modbus/ModbusWriter.go b/plc4go/internal/plc4go/modbus/Writer.go
similarity index 73%
rename from plc4go/internal/plc4go/modbus/ModbusWriter.go
rename to plc4go/internal/plc4go/modbus/Writer.go
index f6db927..d7df184 100644
--- a/plc4go/internal/plc4go/modbus/ModbusWriter.go
+++ b/plc4go/internal/plc4go/modbus/Writer.go
@@ -21,7 +21,7 @@ package modbus
 import (
 	"errors"
 	"fmt"
-	modbusModel "github.com/apache/plc4x/plc4go/internal/plc4go/modbus/readwrite/model"
+	readWriteModel "github.com/apache/plc4x/plc4go/internal/plc4go/modbus/readwrite/model"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi"
 	plc4goModel "github.com/apache/plc4x/plc4go/internal/plc4go/spi/model"
 	"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
@@ -31,21 +31,21 @@ import (
 	"time"
 )
 
-type ModbusWriter struct {
+type Writer struct {
 	transactionIdentifier int32
 	unitIdentifier        uint8
 	messageCodec          spi.MessageCodec
 }
 
-func NewModbusWriter(unitIdentifier uint8, messageCodec spi.MessageCodec) ModbusWriter {
-	return ModbusWriter{
+func NewWriter(unitIdentifier uint8, messageCodec spi.MessageCodec) Writer {
+	return Writer{
 		transactionIdentifier: 0,
 		unitIdentifier:        unitIdentifier,
 		messageCodec:          messageCodec,
 	}
 }
 
-func (m ModbusWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWriteRequestResult {
+func (m Writer) Write(writeRequest model.PlcWriteRequest) <-chan model.PlcWriteRequestResult {
 	result := make(chan model.PlcWriteRequestResult)
 	// If we are requesting only one field, use a
 	if len(writeRequest.GetFieldNames()) == 1 {
@@ -66,7 +66,7 @@ func (m ModbusWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.Plc
 		// Get the value from the request and serialize it to a byte array
 		value := writeRequest.GetValue(fieldName)
 		io := utils.NewWriteBuffer()
-		if err := modbusModel.DataItemSerialize(io, value, modbusField.Datatype, modbusField.Quantity); err != nil {
+		if err := readWriteModel.DataItemSerialize(io, value, modbusField.Datatype, modbusField.Quantity); err != nil {
 			result <- model.PlcWriteRequestResult{
 				Request:  writeRequest,
 				Response: nil,
@@ -79,19 +79,19 @@ func (m ModbusWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.Plc
 		// Calculate the number of words needed to send the data
 		numWords := uint16(math.Ceil(float64(len(data)) / 2))
 
-		var pdu *modbusModel.ModbusPDU
+		var pdu *readWriteModel.ModbusPDU
 		switch modbusField.FieldType {
-		case MODBUS_FIELD_COIL:
-			pdu = modbusModel.NewModbusPDUWriteMultipleCoilsRequest(
+		case Coil:
+			pdu = readWriteModel.NewModbusPDUWriteMultipleCoilsRequest(
 				modbusField.Address,
 				modbusField.Quantity,
 				data)
-		case MODBUS_FIELD_HOLDING_REGISTER:
-			pdu = modbusModel.NewModbusPDUWriteMultipleHoldingRegistersRequest(
+		case HoldingRegister:
+			pdu = readWriteModel.NewModbusPDUWriteMultipleHoldingRegistersRequest(
 				modbusField.Address,
 				numWords,
 				data)
-		case MODBUS_FIELD_EXTENDED_REGISTER:
+		case ExtendedRegister:
 			result <- model.PlcWriteRequestResult{
 				Request:  writeRequest,
 				Response: nil,
@@ -115,7 +115,7 @@ func (m ModbusWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.Plc
 		}
 
 		// Assemble the finished ADU
-		requestAdu := modbusModel.ModbusTcpADU{
+		requestAdu := readWriteModel.ModbusTcpADU{
 			TransactionIdentifier: uint16(transactionIdentifier),
 			UnitIdentifier:        m.unitIdentifier,
 			Pdu:                   pdu,
@@ -125,13 +125,13 @@ func (m ModbusWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.Plc
 		err = m.messageCodec.SendRequest(
 			requestAdu,
 			func(message interface{}) bool {
-				responseAdu := modbusModel.CastModbusTcpADU(message)
+				responseAdu := readWriteModel.CastModbusTcpADU(message)
 				return responseAdu.TransactionIdentifier == uint16(transactionIdentifier) &&
 					responseAdu.UnitIdentifier == requestAdu.UnitIdentifier
 			},
 			func(message interface{}) error {
 				// Convert the response into an ADU
-				responseAdu := modbusModel.CastModbusTcpADU(message)
+				responseAdu := readWriteModel.CastModbusTcpADU(message)
 				// Convert the modbus response into a PLC4X response
 				readResponse, err := m.ToPlc4xWriteResponse(requestAdu, *responseAdu, writeRequest)
 
@@ -167,46 +167,46 @@ func (m ModbusWriter) Write(writeRequest model.PlcWriteRequest) <-chan model.Plc
 	return result
 }
 
-func (m ModbusWriter) ToPlc4xWriteResponse(requestAdu modbusModel.ModbusTcpADU, responseAdu modbusModel.ModbusTcpADU, writeRequest model.PlcWriteRequest) (model.PlcWriteResponse, error) {
+func (m Writer) ToPlc4xWriteResponse(requestAdu readWriteModel.ModbusTcpADU, responseAdu readWriteModel.ModbusTcpADU, writeRequest model.PlcWriteRequest) (model.PlcWriteResponse, error) {
 	responseCodes := map[string]model.PlcResponseCode{}
 	fieldName := writeRequest.GetFieldNames()[0]
 
 	responseCodes[fieldName] = model.PlcResponseCode_INTERNAL_ERROR
 	switch responseAdu.Pdu.Child.(type) {
-	case *modbusModel.ModbusPDUWriteMultipleCoilsResponse:
-		req := modbusModel.CastModbusPDUWriteMultipleCoilsRequest(requestAdu.Pdu)
-		resp := modbusModel.CastModbusPDUWriteMultipleCoilsResponse(responseAdu.Pdu)
+	case *readWriteModel.ModbusPDUWriteMultipleCoilsResponse:
+		req := readWriteModel.CastModbusPDUWriteMultipleCoilsRequest(requestAdu.Pdu)
+		resp := readWriteModel.CastModbusPDUWriteMultipleCoilsResponse(responseAdu.Pdu)
 		if req.Quantity == resp.Quantity {
 			responseCodes[fieldName] = model.PlcResponseCode_OK
 		}
-	case *modbusModel.ModbusPDUWriteMultipleHoldingRegistersResponse:
-		req := modbusModel.CastModbusPDUWriteMultipleHoldingRegistersRequest(requestAdu.Pdu)
-		resp := modbusModel.CastModbusPDUWriteMultipleHoldingRegistersResponse(responseAdu.Pdu)
+	case *readWriteModel.ModbusPDUWriteMultipleHoldingRegistersResponse:
+		req := readWriteModel.CastModbusPDUWriteMultipleHoldingRegistersRequest(requestAdu.Pdu)
+		resp := readWriteModel.CastModbusPDUWriteMultipleHoldingRegistersResponse(responseAdu.Pdu)
 		if req.Quantity == resp.Quantity {
 			responseCodes[fieldName] = model.PlcResponseCode_OK
 		}
-	case *modbusModel.ModbusPDUError:
-		resp := modbusModel.CastModbusPDUError(&responseAdu.Pdu)
+	case *readWriteModel.ModbusPDUError:
+		resp := readWriteModel.CastModbusPDUError(&responseAdu.Pdu)
 		switch resp.ExceptionCode {
-		case modbusModel.ModbusErrorCode_ILLEGAL_FUNCTION:
+		case readWriteModel.ModbusErrorCode_ILLEGAL_FUNCTION:
 			responseCodes[fieldName] = model.PlcResponseCode_UNSUPPORTED
-		case modbusModel.ModbusErrorCode_ILLEGAL_DATA_ADDRESS:
+		case readWriteModel.ModbusErrorCode_ILLEGAL_DATA_ADDRESS:
 			responseCodes[fieldName] = model.PlcResponseCode_INVALID_ADDRESS
-		case modbusModel.ModbusErrorCode_ILLEGAL_DATA_VALUE:
+		case readWriteModel.ModbusErrorCode_ILLEGAL_DATA_VALUE:
 			responseCodes[fieldName] = model.PlcResponseCode_INVALID_DATA
-		case modbusModel.ModbusErrorCode_SLAVE_DEVICE_FAILURE:
+		case readWriteModel.ModbusErrorCode_SLAVE_DEVICE_FAILURE:
 			responseCodes[fieldName] = model.PlcResponseCode_REMOTE_ERROR
-		case modbusModel.ModbusErrorCode_ACKNOWLEDGE:
+		case readWriteModel.ModbusErrorCode_ACKNOWLEDGE:
 			responseCodes[fieldName] = model.PlcResponseCode_OK
-		case modbusModel.ModbusErrorCode_SLAVE_DEVICE_BUSY:
+		case readWriteModel.ModbusErrorCode_SLAVE_DEVICE_BUSY:
 			responseCodes[fieldName] = model.PlcResponseCode_REMOTE_BUSY
-		case modbusModel.ModbusErrorCode_NEGATIVE_ACKNOWLEDGE:
+		case readWriteModel.ModbusErrorCode_NEGATIVE_ACKNOWLEDGE:
 			responseCodes[fieldName] = model.PlcResponseCode_REMOTE_ERROR
-		case modbusModel.ModbusErrorCode_MEMORY_PARITY_ERROR:
+		case readWriteModel.ModbusErrorCode_MEMORY_PARITY_ERROR:
 			responseCodes[fieldName] = model.PlcResponseCode_INTERNAL_ERROR
-		case modbusModel.ModbusErrorCode_GATEWAY_PATH_UNAVAILABLE:
+		case readWriteModel.ModbusErrorCode_GATEWAY_PATH_UNAVAILABLE:
 			responseCodes[fieldName] = model.PlcResponseCode_INTERNAL_ERROR
-		case modbusModel.ModbusErrorCode_GATEWAY_TARGET_DEVICE_FAILED_TO_RESPOND:
+		case readWriteModel.ModbusErrorCode_GATEWAY_TARGET_DEVICE_FAILED_TO_RESPOND:
 			responseCodes[fieldName] = model.PlcResponseCode_REMOTE_ERROR
 		}
 	}
diff --git a/plc4go/internal/plc4go/s7/S7Driver.go b/plc4go/internal/plc4go/s7/Driver.go
similarity index 95%
rename from plc4go/internal/plc4go/s7/S7Driver.go
rename to plc4go/internal/plc4go/s7/Driver.go
index 0cce5da..0c8487a 100644
--- a/plc4go/internal/plc4go/s7/S7Driver.go
+++ b/plc4go/internal/plc4go/s7/Driver.go
@@ -20,6 +20,6 @@ package s7
 
 import "github.com/apache/plc4x/plc4go/pkg/plc4go"
 
-func NewS7Driver() plc4go.PlcDriver {
+func NewDriver() plc4go.PlcDriver {
 	return nil
 }
diff --git a/plc4go/pkg/plc4go/drivers/drivers.go b/plc4go/pkg/plc4go/drivers/drivers.go
index ce0d16f..d4bccb2 100644
--- a/plc4go/pkg/plc4go/drivers/drivers.go
+++ b/plc4go/pkg/plc4go/drivers/drivers.go
@@ -27,16 +27,16 @@ import (
 )
 
 func RegisterAdsDriver(driverManager plc4go.PlcDriverManager) {
-	driverManager.RegisterDriver(ads.NewAdsDriver())
+	driverManager.RegisterDriver(ads.NewDriver())
 	transports.RegisterTcpTransport(driverManager)
 }
 
 func RegisterKnxDriver(driverManager plc4go.PlcDriverManager) {
-	driverManager.RegisterDriver(knxnetip.NewKnxNetIpDriver())
+	driverManager.RegisterDriver(knxnetip.NewDriver())
 	transports.RegisterUdpTransport(driverManager)
 }
 
 func RegisterModbusDriver(driverManager plc4go.PlcDriverManager) {
-	driverManager.RegisterDriver(modbus.NewModbusDriver())
+	driverManager.RegisterDriver(modbus.NewDriver())
 	transports.RegisterTcpTransport(driverManager)
 }