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:09 UTC

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

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)
 }