diff --git a/oslo_messaging/_drivers/impl_amqp1.py b/oslo_messaging/_drivers/impl_amqp1.py
index 44b99ff14..8c17a9827 100644
--- a/oslo_messaging/_drivers/impl_amqp1.py
+++ b/oslo_messaging/_drivers/impl_amqp1.py
@@ -200,6 +200,7 @@ class ProtonDriver(base.BaseDriver):
                                  title='AMQP 1.0 driver options')
         conf.register_group(opt_group)
         conf.register_opts(opts.amqp1_opts, group=opt_group)
+        conf = common.ConfigOptsProxy(conf, url)
 
         self._hosts = url.hosts
         self._conf = conf
diff --git a/oslo_messaging/_drivers/impl_kafka.py b/oslo_messaging/_drivers/impl_kafka.py
index 15eca79aa..3412bdf89 100644
--- a/oslo_messaging/_drivers/impl_kafka.py
+++ b/oslo_messaging/_drivers/impl_kafka.py
@@ -309,10 +309,10 @@ class KafkaDriver(base.BaseDriver):
 
     def __init__(self, conf, url, default_exchange=None,
                  allowed_remote_exmods=None):
+        conf = kafka_options.register_opts(conf, url)
         super(KafkaDriver, self).__init__(
             conf, url, default_exchange, allowed_remote_exmods)
 
-        kafka_options.register_opts(conf)
         # the pool configuration properties
         max_size = self.conf.oslo_messaging_kafka.pool_size
         min_size = self.conf.oslo_messaging_kafka.conn_pool_min_size
diff --git a/oslo_messaging/_drivers/impl_pika.py b/oslo_messaging/_drivers/impl_pika.py
index 69828a048..2fe1b870a 100644
--- a/oslo_messaging/_drivers/impl_pika.py
+++ b/oslo_messaging/_drivers/impl_pika.py
@@ -19,6 +19,7 @@ import pika_pool
 import tenacity
 
 from oslo_messaging._drivers import base
+from oslo_messaging._drivers import common
 from oslo_messaging._drivers.pika_driver import (pika_connection_factory as
                                                  pika_drv_conn_factory)
 from oslo_messaging._drivers.pika_driver import pika_commons as pika_drv_cmns
@@ -143,6 +144,7 @@ class PikaDriver(base.BaseDriver):
         conf.register_opts(message_opts, group=opt_group)
         conf.register_opts(rpc_opts, group=opt_group)
         conf.register_opts(notification_opts, group=opt_group)
+        conf = common.ConfigOptsProxy(conf, url)
 
         self._pika_engine = pika_drv_engine.PikaEngine(
             conf, url, default_exchange, allowed_remote_exmods
diff --git a/oslo_messaging/_drivers/impl_rabbit.py b/oslo_messaging/_drivers/impl_rabbit.py
index 352fb534e..6f7afd529 100644
--- a/oslo_messaging/_drivers/impl_rabbit.py
+++ b/oslo_messaging/_drivers/impl_rabbit.py
@@ -1335,6 +1335,7 @@ class RabbitDriver(amqpdriver.AMQPDriverBase):
         conf.register_opts(rabbit_opts, group=opt_group)
         conf.register_opts(rpc_amqp.amqp_opts, group=opt_group)
         conf.register_opts(base.base_opts, group=opt_group)
+        conf = rpc_common.ConfigOptsProxy(conf, url)
 
         self.missing_destination_retry_timeout = (
             conf.oslo_messaging_rabbit.kombu_missing_consumer_retry_timeout)
diff --git a/oslo_messaging/_drivers/impl_zmq.py b/oslo_messaging/_drivers/impl_zmq.py
index db8153dc6..728f7bc27 100644
--- a/oslo_messaging/_drivers/impl_zmq.py
+++ b/oslo_messaging/_drivers/impl_zmq.py
@@ -94,7 +94,7 @@ class ZmqDriver(base.BaseDriver):
         if zmq is None:
             raise ImportError(_LE("ZeroMQ is not available!"))
 
-        zmq_options.register_opts(conf)
+        conf = zmq_options.register_opts(conf, url)
         self.conf = conf
         self.allowed_remote_exmods = allowed_remote_exmods
 
diff --git a/oslo_messaging/_drivers/kafka_options.py b/oslo_messaging/_drivers/kafka_options.py
index 47f90743a..fa3b06aef 100644
--- a/oslo_messaging/_drivers/kafka_options.py
+++ b/oslo_messaging/_drivers/kafka_options.py
@@ -13,6 +13,8 @@
 
 from oslo_config import cfg
 
+from oslo_messaging._drivers import common
+
 KAFKA_OPTS = [
     cfg.StrOpt('kafka_default_host', default='localhost',
                deprecated_for_removal=True,
@@ -52,8 +54,9 @@ KAFKA_OPTS = [
 ]
 
 
-def register_opts(conf):
+def register_opts(conf, url):
     opt_group = cfg.OptGroup(name='oslo_messaging_kafka',
                              title='Kafka driver options')
     conf.register_group(opt_group)
     conf.register_opts(KAFKA_OPTS, group=opt_group)
+    return common.ConfigOptsProxy(conf, url)
diff --git a/oslo_messaging/_drivers/pika_driver/pika_engine.py b/oslo_messaging/_drivers/pika_driver/pika_engine.py
index b31751f4c..157c49900 100644
--- a/oslo_messaging/_drivers/pika_driver/pika_engine.py
+++ b/oslo_messaging/_drivers/pika_driver/pika_engine.py
@@ -20,7 +20,6 @@ from oslo_utils import eventletutils
 import pika_pool
 from stevedore import driver
 
-from oslo_messaging._drivers import common as drv_cmn
 from oslo_messaging._drivers.pika_driver import pika_commons as pika_drv_cmns
 from oslo_messaging._drivers.pika_driver import pika_exceptions as pika_drv_exc
 
@@ -48,7 +47,6 @@ class PikaEngine(object):
 
     def __init__(self, conf, url, default_exchange=None,
                  allowed_remote_exmods=None):
-        conf = drv_cmn.ConfigOptsProxy(conf, url)
         self.conf = conf
         self.url = url
 
diff --git a/oslo_messaging/_drivers/zmq_driver/zmq_options.py b/oslo_messaging/_drivers/zmq_driver/zmq_options.py
index 6ced79a62..529ec94d4 100644
--- a/oslo_messaging/_drivers/zmq_driver/zmq_options.py
+++ b/oslo_messaging/_drivers/zmq_driver/zmq_options.py
@@ -17,6 +17,7 @@ import socket
 from oslo_config import cfg
 
 from oslo_messaging._drivers import base
+from oslo_messaging._drivers import common
 from oslo_messaging import server
 
 
@@ -203,9 +204,10 @@ zmq_opts = [
 ]
 
 
-def register_opts(conf):
+def register_opts(conf, url):
     opt_group = cfg.OptGroup(name='oslo_messaging_zmq',
                              title='ZeroMQ driver options')
     conf.register_opts(zmq_opts, group=opt_group)
     conf.register_opts(server._pool_opts)
     conf.register_opts(base.base_opts)
+    return common.ConfigOptsProxy(conf, url)
diff --git a/oslo_messaging/tests/drivers/zmq/test_zmq_ack_manager.py b/oslo_messaging/tests/drivers/zmq/test_zmq_ack_manager.py
index 918de2792..a0264cf01 100644
--- a/oslo_messaging/tests/drivers/zmq/test_zmq_ack_manager.py
+++ b/oslo_messaging/tests/drivers/zmq/test_zmq_ack_manager.py
@@ -38,7 +38,7 @@ class TestZmqAckManager(test_utils.BaseTestCase):
 
         # register and set necessary config opts
         self.messaging_conf.transport_driver = 'zmq'
-        zmq_options.register_opts(self.conf)
+        zmq_options.register_opts(self.conf, mock.MagicMock())
         kwargs = {'rpc_zmq_matchmaker': 'dummy',
                   'use_pub_sub': False,
                   'use_router_proxy': True,
diff --git a/oslo_messaging/tests/drivers/zmq/zmq_common.py b/oslo_messaging/tests/drivers/zmq/zmq_common.py
index 86d15d195..2e3699933 100644
--- a/oslo_messaging/tests/drivers/zmq/zmq_common.py
+++ b/oslo_messaging/tests/drivers/zmq/zmq_common.py
@@ -16,6 +16,7 @@ import logging
 import threading
 
 import fixtures
+from six.moves import mock
 import testtools
 
 import oslo_messaging
@@ -72,7 +73,7 @@ class ZmqBaseTestCase(test_utils.BaseTestCase):
     def setUp(self):
         super(ZmqBaseTestCase, self).setUp()
         self.messaging_conf.transport_driver = 'zmq'
-        zmq_options.register_opts(self.conf)
+        zmq_options.register_opts(self.conf, mock.MagicMock())
 
         # Set config values
         self.internal_ipc_dir = self.useFixture(fixtures.TempDir()).path
diff --git a/oslo_messaging/tests/functional/utils.py b/oslo_messaging/tests/functional/utils.py
index b47ac5fc2..491637a16 100644
--- a/oslo_messaging/tests/functional/utils.py
+++ b/oslo_messaging/tests/functional/utils.py
@@ -294,7 +294,9 @@ class SkipIfNoTransportURL(test_utils.BaseTestCase):
         if not self.url:
             self.skipTest("No transport url configured")
 
-        zmq_options.register_opts(conf)
+        transport_url = oslo_messaging.TransportURL.parse(conf, self.url)
+
+        zmq_options.register_opts(conf, transport_url)
 
         zmq_matchmaker = os.environ.get('ZMQ_MATCHMAKER')
         if zmq_matchmaker:
@@ -322,7 +324,7 @@ class SkipIfNoTransportURL(test_utils.BaseTestCase):
         self.config(use_dynamic_connections=zmq_use_dynamic_connections,
                     group='oslo_messaging_zmq')
 
-        kafka_options.register_opts(conf)
+        kafka_options.register_opts(conf, transport_url)
 
         self.config(producer_batch_size=0,
                     group='oslo_messaging_kafka')