diff --git a/main.go b/main.go
index fd439af0dba31b60aeece3fed634c970cae8f098..8f9ea9b0498ebd46b688f68101fbe4706151b9d0 100644
--- a/main.go
+++ b/main.go
@@ -15,7 +15,7 @@ func main() {
 	// spew.Dump(cfg)
 
 	xaal.SetupLogger()
-	client := mqttSetup(cfg.brokerHost, cfg.brokerPort)
+	client := mqttSetup(cfg.brokerHost, cfg.brokerPort, cfg.topic)
 
 	eng := xaal.NewEngine()
 	gw := NewGW(client, cfg)
diff --git a/mqtt.go b/mqtt.go
index f29b9228dfc5cc44f14425776591e52188c12dfe..399ee2d7f233551841a97d824f0f488d7cb82a0f 100644
--- a/mqtt.go
+++ b/mqtt.go
@@ -11,7 +11,7 @@ import (
 )
 
 // mqttSetup creates a new MQTT client
-func mqttSetup(mqttBroker string, port int) MQTT.Client {
+func mqttSetup(mqttBroker string, port int, topic string) MQTT.Client {
 	// This JS style of creating a client is awfully verbose
 	opts := MQTT.NewClientOptions().
 		AddBroker(fmt.Sprintf("tcp://%s:%d", mqttBroker, port)).
@@ -23,7 +23,7 @@ func mqttSetup(mqttBroker string, port int) MQTT.Client {
 		panic(token.Error())
 	}
 	slog.Debug("Connected to", "Broker", mqttBroker, "Port", port, "Client", mqttClientID)
-	if token := client.Subscribe(mqttTopic+"/#", 0, nil); token.Wait() && token.Error() != nil {
+	if token := client.Subscribe(topic+"/#", 0, nil); token.Wait() && token.Error() != nil {
 		panic(token.Error())
 	}
 	return client
diff --git a/xaal.go b/xaal.go
index 1cd4615952d440803042ec0e425662abbeb682ab..150d79ef2f02aff42bb85f9f09407afa926e2ddb 100644
--- a/xaal.go
+++ b/xaal.go
@@ -420,7 +420,7 @@ func (dev *Lamp) setMode(body xaal.MessageBody) *xaal.MessageBody {
 func NewButtonRemote(addr uuid.UUID, zDev *Z2MDevice, exp *Expose) XAALDeviceInterface {
 	dev := &ButtonRemote{XAALDevice{schemas.NewButtonRemote(addr), zDev, exp}}
 	dev.setup()
-	dev.SetMethod("get_buttons", dev.GetButtons)
+	dev.SetMethod("get_buttons", dev.getButtons)
 	return dev
 }
 
@@ -434,7 +434,7 @@ func (dev *ButtonRemote) update(payload map[string]interface{}) {
 	}
 }
 
-func (dev *ButtonRemote) GetButtons(xaal.MessageBody) *xaal.MessageBody {
+func (dev *ButtonRemote) getButtons(xaal.MessageBody) *xaal.MessageBody {
 	body := make(xaal.MessageBody)
 	action := dev.Z2MDevice.GetExpose(dev.Expose.Name)
 	if action != nil {
diff --git a/z2m.go b/z2m.go
index 561936479cb11f57466b775065d61158b1119e0c..c7e19bf3019aa7807bc2c69c4ecdce21558512c8 100644
--- a/z2m.go
+++ b/z2m.go
@@ -70,7 +70,7 @@ type Feature struct {
 // =============================================================================
 
 // returns the topic for the device
-func (zDev *Z2MDevice) GetTopic() string {
+func (zDev *Z2MDevice) getTopic() string {
 	return mqttTopic + "/" + zDev.FriendlyName
 }
 
@@ -146,7 +146,7 @@ func (zDev *Z2MDevice) setupXAALDevices(gw *Gateway) {
 
 // Publish the payload to the right topic
 func (zDev *Z2MDevice) Publish(topic string, payload interface{}) {
-	topic = zDev.GetTopic() + "/" + topic
+	topic = zDev.getTopic() + "/" + topic
 	slog.Debug("Sending", "topic", topic, "payload", payload)
 	client := GetGW().client
 	if token := client.Publish(topic, 0, false, payload); token.Wait() && token.Error() != nil {