diff --git a/artiq/dashboard/waveform.py b/artiq/dashboard/waveform.py
index ded240f8f..ab7f548e5 100644
--- a/artiq/dashboard/waveform.py
+++ b/artiq/dashboard/waveform.py
@@ -34,11 +34,21 @@ class Model(DictSyncTreeSepModel):
     def __init__(self, init):
         DictSyncTreeSepModel.__init__(self, "/", ["Channels"], init)
 
+    def clear(self):
+        for k in self.backing_store:
+            self._del_item(self, k.split(self.separator))
+        self.backing_store.clear()
+
+    def update_from_dict(self, d):
+        self.clear()
+        for k, v in d.items():
+            self[k] = v
+
 
 class _AddChannelDialog(QtWidgets.QDialog):
     accepted = QtCore.pyqtSignal(list)
 
-    def __init__(self, parent, channels_mgr):
+    def __init__(self, parent, channel_model):
         QtWidgets.QDialog.__init__(self, parent=parent)
         self.setContextMenuPolicy(Qt.ActionsContextMenu)
         self.setWindowTitle("Add channels")
@@ -46,14 +56,14 @@ class _AddChannelDialog(QtWidgets.QDialog):
         grid = QtWidgets.QGridLayout()
         self.setLayout(grid)
 
-        self._channels_mgr = channels_mgr
+        self._channel_model = channel_model
         self._channels_widget = QtWidgets.QTreeView()
         self._channels_widget.setHeaderHidden(True)
         self._channels_widget.setSelectionBehavior(
             QtWidgets.QAbstractItemView.SelectItems)
         self._channels_widget.setSelectionMode(
             QtWidgets.QAbstractItemView.ExtendedSelection)
-        self._channels_widget.setModel(self._channels_mgr)
+        self._channels_widget.setModel(self._channel_model)
         grid.addWidget(self._channels_widget, 0, 0, 1, 2)
         cancel_btn = QtWidgets.QPushButton("Cancel")
         cancel_btn.clicked.connect(self.close)
@@ -72,9 +82,9 @@ class _AddChannelDialog(QtWidgets.QDialog):
         selection = self._channels_widget.selectedIndexes()
         channels = []
         for select in selection:
-            key = self._channels_mgr.index_to_key(select)
+            key = self._channel_model.index_to_key(select)
             if key is not None:
-                width = self._channels_mgr[key].ref
+                width = self._channel_model[key].ref
                 channels.append((key, width))
         self.accepted.emit(channels)
         self.close()
@@ -388,10 +398,10 @@ class AnalogWaveform(Waveform):
 class WaveformArea(QtWidgets.QWidget):
     cursorMoved = QtCore.pyqtSignal(float)
 
-    def __init__(self, parent, state, channels_mgr):
+    def __init__(self, parent, state, channel_model):
         QtWidgets.QWidget.__init__(self, parent=parent)
         self._state = state
-        self._channels_mgr = channels_mgr
+        self._channel_model = channel_model
 
         self._cursor_visible = True
         self._cursor_x_pos = 0
@@ -458,7 +468,7 @@ class WaveformArea(QtWidgets.QWidget):
         cw.update_x_max()
 
     async def _add_waveform_task(self):
-        dialog = _AddChannelDialog(self, self._channels_mgr)
+        dialog = _AddChannelDialog(self, self._channel_model)
         fut = asyncio.Future()
 
         def on_accept(s):
@@ -663,7 +673,7 @@ class WaveformDock(QtWidgets.QDockWidget):
         self.setFeatures(
             QtWidgets.QDockWidget.DockWidgetMovable | QtWidgets.QDockWidget.DockWidgetFloatable)
 
-        self._channels_mgr = Model({})
+        self._channel_model = Model({})
 
         self._devices = None
         self._dump = None
@@ -704,7 +714,7 @@ class WaveformDock(QtWidgets.QDockWidget):
             lambda: asyncio.ensure_future(self.proxy_client.trigger_proxy_task()))
 
         self._waveform_area = WaveformArea(self, self._state,
-                                           self._channels_mgr)
+                                           self._channel_model)
         self.traceDataChanged.connect(self._waveform_area.on_trace_update)
         self.traceDataChanged.connect(self._update_log_channels)
         grid.addWidget(self._waveform_area, 2, 0, colspan=12)
@@ -739,7 +749,7 @@ class WaveformDock(QtWidgets.QDockWidget):
 
     def _update_log_channels(self):
         for log in self._state['logs']:
-            self._channels_mgr[log] = (0, "log")
+            self._channel_model[log] = (0, "log")
 
     def on_dump_receive(self, data):
         decoded_dump = comm_analyzer.decode_dump(data)
@@ -840,8 +850,8 @@ class WaveformDock(QtWidgets.QDockWidget):
 
     def _process_ddb(self):
         addr = None
-        #for k, v in comm_analyzer.get_channel_list(self._ddb).items():
-        #    self._channel_model[k] = v
+        channel_list = comm_analyzer.get_channel_list(self._ddb)
+        self._channel_model.update_from_dict(channel_list)
         for name, desc in self._ddb.items():
             if name == "core_analyzer":
                 logger.info("coreanalyzer exists")