diff --git a/panels/sound/gvc-mixer-dialog.c b/panels/sound/gvc-mixer-dialog.c
index 554d91e..92edfee 100644
--- a/panels/sound/gvc-mixer-dialog.c
+++ b/panels/sound/gvc-mixer-dialog.c
@@ -833,6 +833,8 @@ active_input_update (GvcMixerDialog *dialog,
         model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->input_treeview));
 
         if (gtk_tree_model_get_iter_first (model, &iter) == FALSE) {
+                /* When there are no device we need disable the input bar and set the original name */
+                gtk_widget_set_sensitive (dialog->priv->input_bar, FALSE);
                 g_warning ("No devices in the tree, so cannot set the active output");
                 return;
         }
@@ -890,6 +892,8 @@ active_output_update (GvcMixerDialog   *dialog,
         model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->output_treeview));
 
         if (gtk_tree_model_get_iter_first (model, &iter) == FALSE){
+                /* When there are no device we need disable the output bar and set the original name */
+                gtk_widget_set_sensitive (dialog->priv->output_bar, FALSE);
                 g_warning ("No devices in the tree, so cannot set the active output");
                 return;
         }
@@ -1271,14 +1275,24 @@ on_control_input_added (GvcMixerControl *control,
                         guint            id,
                         GvcMixerDialog  *dialog)
 {
+        gboolean          is_first_device;
+        GtkTreeModel     *model;
+        GtkTreeIter       iter;
         GvcMixerUIDevice* in = NULL;
+
         in = gvc_mixer_control_lookup_input_id (control, id);
 
         if (in == NULL) {
                 g_warning ("on_control_input_added - tried to fetch an input of id %u but got nothing", id);
                 return;
         }
+        model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->input_treeview));
+        is_first_device = !gtk_tree_model_get_iter_first (model, &iter);
+
         add_input_ui_entry (dialog, in);
+
+        if (is_first_device)
+                active_input_update (dialog, in);
 }
 
 static void
@@ -1287,6 +1301,7 @@ on_control_input_removed (GvcMixerControl *control,
                           GvcMixerDialog  *dialog)
 {
         gboolean          found;
+        gboolean          is_last_device;
         GtkTreeIter       iter;
         GtkTreeModel     *model;
         gint              stream_id;
@@ -1308,6 +1323,11 @@ on_control_input_removed (GvcMixerControl *control,
         if (found) {
                 gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
         }
+
+        /* Disable output bar when all output devices removed */
+        is_last_device = !gtk_tree_model_get_iter_first (model, &iter);
+        if (is_last_device)
+                active_input_update (dialog, in);
 }
 
 static void
@@ -1315,6 +1335,9 @@ on_control_output_added (GvcMixerControl *control,
                          guint            id,
                          GvcMixerDialog  *dialog)
 {
+        gboolean          is_first_device;
+        GtkTreeModel     *model;
+        GtkTreeIter       iter;
         GvcMixerUIDevice* out = NULL;
         out = gvc_mixer_control_lookup_output_id (control, id);
 
@@ -1322,8 +1345,13 @@ on_control_output_added (GvcMixerControl *control,
                 g_warning ("on_control_output_added - tried to fetch an output of id %u but got nothing", id);
                 return;
         }
+        model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->priv->output_treeview));
+        is_first_device = !gtk_tree_model_get_iter_first (model, &iter);
 
         add_output_ui_entry (dialog, out);
+
+        if (is_first_device)
+                active_output_update (dialog, out);
 }
 
 static void
@@ -1332,6 +1360,7 @@ on_control_output_removed (GvcMixerControl *control,
                            GvcMixerDialog  *dialog)
 {
         gboolean      found;
+        gboolean      is_last_device;
         GtkTreeIter   iter;
         GtkTreeModel *model;
         gint          sink_stream_id;
@@ -1353,6 +1382,11 @@ on_control_output_removed (GvcMixerControl *control,
         if (found) {
                 gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
         }
+
+        /* Disable output bar when all output devices removed */
+        is_last_device = !gtk_tree_model_get_iter_first (model, &iter);
+        if (is_last_device)
+                active_output_update (dialog, out);
 }
 
 static void
