diff --git a/config.go b/config.go
index 4e2e92bf49d548fdb8044c16176ba713ecdbbc09..e8495488883af26f1488c51478d7b570b8796c3b 100644
--- a/config.go
+++ b/config.go
@@ -10,7 +10,6 @@ import (
 )
 
 var (
-	mqttTopic     = "zigbee2mqtt"
 	mqttClientID  = "z2m-" + uuid.New().String()
 	ignoredTopics = []string{
 		"bridge/groups",
diff --git a/gateway.go b/gateway.go
index 198ada61822e494b2125c83fb1f96801ef0530c3..f44ce43c48235c75df36a794fa887428f9289c0e 100644
--- a/gateway.go
+++ b/gateway.go
@@ -34,8 +34,8 @@ func (gw *Gateway) AddZDevice(zDev *Z2MDevice) {
 		slog.Debug("Adding device", "dev", dev.String())
 		gw.Engine.AddDevice(dev)
 	}
-	gw.Devices[zDev.FriendlyName] = zDev
 	zDev.Gateway = gw
+	gw.Devices[zDev.FriendlyName] = zDev
 }
 
 func (gw *Gateway) RemoveZDevice(zDev *Z2MDevice) {
diff --git a/z2m.go b/z2m.go
index c8fab244c4e259af03c54e6378c8f81757bb437b..86926fe0836e6f5cb330a814fa90b3985bc8fdfe 100644
--- a/z2m.go
+++ b/z2m.go
@@ -61,7 +61,7 @@ type Feature struct {
 
 // returns the topic for the device
 func (zDev *Z2MDevice) getTopic() string {
-	return mqttTopic + "/" + zDev.FriendlyName
+	return zDev.Gateway.Config.topic + "/" + zDev.FriendlyName
 }
 
 // return the expose with the given name
@@ -90,6 +90,8 @@ func (zDev *Z2MDevice) HandleMessage(msg mqtt.Message) {
 
 // creates new xAAL devices from a bridge device
 func (zDev *Z2MDevice) FindXAALDevices(gw *Gateway) {
+	// There is a trick here. We call FindXAALDevices w/ gw argument, but the Gateway is only set
+	// in the AddZDevice method. This is not mandatory but avoid to have Gateway at random place
 	baseAddr := gw.Config.baseAddr
 	ieeeAddr, _ := hexStringToInteger(zDev.IeeeAddress)
 	baseAddr, _ = baseAddr.Add(int64(ieeeAddr))