Index: gui/graph_view.c
===================================================================
--- gui/graph_view.c (revision fbc1bb5aa1c5c5843d8d30554c781d2163ca933f)
+++ gui/graph_view.c (revision e74f5abccbef74c6b76383e022750bfc7ea3e488)
@@ -252,4 +252,9 @@
 }
 
+const char * get_view_opath(graph_view_handle view)
+{
+  return graph_proxy_get_object(view_ptr->graph);
+}
+
 bool set_view_name(graph_view_handle view, const char * cname)
 {
Index: gui/graph_view.h
===================================================================
--- gui/graph_view.h (revision 764873efd5652a9a93df86a909a8b2834ef9eb2c)
+++ gui/graph_view.h (revision e74f5abccbef74c6b76383e022750bfc7ea3e488)
@@ -3,5 +3,5 @@
  * LADI Session Handler (ladish)
  *
- * Copyright (C) 2009 Nedko Arnaudov <nedko@arnaudov.name>
+ * Copyright (C) 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name>
  *
  **************************************************************************
@@ -48,4 +48,5 @@
 void activate_view(graph_view_handle view);
 const char * get_view_name(graph_view_handle view);
+const char * get_view_opath(graph_view_handle view);
 bool set_view_name(graph_view_handle view, const char * name);
 canvas_handle get_current_canvas();
Index: gui/main.c
===================================================================
--- gui/main.c (revision 4193da48b604a99c42739d7df0c3a50c90773374)
+++ gui/main.c (revision e74f5abccbef74c6b76383e022750bfc7ea3e488)
@@ -1068,10 +1068,28 @@
 static void room_appeared(const char * opath, const char * name, const char * template)
 {
+  graph_view_handle graph_view;
+
   log_info("room \"%s\" appeared (%s). template is \"%s\"", name, opath, template);
+
+  if (!create_view(name, SERVICE_NAME, opath, true, false, false, &graph_view))
+  {
+    log_error("create_view() failed for room \"%s\"", name);
+  }
 }
 
 static void room_disappeared(const char * opath, const char * name, const char * template)
 {
+  graph_view_handle graph_view;
+
   log_info("room \"%s\" disappeared (%s). template is \"%s\"", name, opath, template);
+
+  graph_view = world_tree_find_by_opath(opath);
+  if (graph_view == NULL)
+  {
+    log_error("Unknown room disappeared");
+    return;
+  }
+
+  destroy_view(graph_view);
 }
 
Index: gui/world_tree.c
===================================================================
--- gui/world_tree.c (revision 48bf40ae4193ed2d9b333e92b19216ee7ea9e021)
+++ gui/world_tree.c (revision e74f5abccbef74c6b76383e022750bfc7ea3e488)
@@ -466,4 +466,29 @@
 }
 
+graph_view_handle world_tree_find_by_opath(const char * opath)
+{
+  gint type;
+  graph_view_handle view;
+  GtkTreeIter iter;
+
+  if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(g_treestore), &iter))
+  {
+    do
+    {
+      gtk_tree_model_get(GTK_TREE_MODEL(g_treestore), &iter, COL_TYPE, &type, COL_VIEW, &view, -1);
+      if (type == entry_type_view)
+      {
+        if (strcmp(get_view_opath(view), opath) == 0)
+        {
+          return view;
+        }
+      }
+    }
+    while (gtk_tree_model_iter_next(GTK_TREE_MODEL(g_treestore), &iter));
+  }
+
+  return NULL;
+}
+
 static bool find_view(graph_view_handle view, GtkTreeIter * iter_ptr)
 {
Index: gui/world_tree.h
===================================================================
--- gui/world_tree.h (revision e9be94a8d64c525095e7d5083dfa3d6ca4c4211b)
+++ gui/world_tree.h (revision e74f5abccbef74c6b76383e022750bfc7ea3e488)
@@ -3,5 +3,5 @@
  * LADI Session Handler (ladish)
  *
- * Copyright (C) 2008, 2009 Nedko Arnaudov <nedko@arnaudov.name>
+ * Copyright (C) 2008, 2009, 2010 Nedko Arnaudov <nedko@arnaudov.name>
  *
  **************************************************************************
@@ -34,4 +34,5 @@
 void world_tree_add(graph_view_handle view, bool force_activate);
 void world_tree_remove(graph_view_handle view);
+graph_view_handle world_tree_find_by_opath(const char * opath);
 void world_tree_activate(graph_view_handle view);
 void world_tree_name_changed(graph_view_handle view);
