diff --git a/ChangeLog b/ChangeLog
index 25b0f1a16281dec8aebfed85c1990855da0c3850..aa1a8c95487c6734d15b5b196bcc30aa96503301 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-11-29	Nick Schermer <nick@xfce.org>
+
+	* thunar/thunar-tree-view.c: Implement menu providers in the
+	  tree side pane too.
+
 2008-11-29	Nick Schermer <nick@xfce.org>
 
 	* thunar/thunar-shortcuts-view.c: Implement menu providers in
diff --git a/thunar/thunar-tree-view.c b/thunar/thunar-tree-view.c
index c2a9d0e9d02d78d9e5338aba68b3ab29ddc038b2..64c630567c926ce90693001142b59d94fd75d4b9 100644
--- a/thunar/thunar-tree-view.c
+++ b/thunar/thunar-tree-view.c
@@ -184,6 +184,8 @@ struct _ThunarTreeView
   GtkCellRenderer        *icon_renderer;
   ThunarFile             *current_directory;
   ThunarTreeModel        *model;
+  
+  ThunarxProviderFactory *provider_factory;
 
   /* whether to display hidden/backup files */
   guint                   show_hidden : 1;
@@ -371,6 +373,9 @@ thunar_tree_view_init (ThunarTreeView *view)
   view->drag_scroll_timer_id = -1;
   view->expand_timer_id = -1;
 
+  /* grab a reference on the provider factory */
+  view->provider_factory = thunarx_provider_factory_get_default ();
+
   /* grab a reference on the preferences; be sure to redraw the view
    * whenever the "tree-icon-emblems" preference changes.
    */
@@ -443,6 +448,9 @@ thunar_tree_view_finalize (GObject *object)
   /* release drop path list (if drag_leave wasn't called) */
   thunar_vfs_path_list_free (view->drop_path_list);
 
+  /* release the provider factory */
+  g_object_unref (G_OBJECT (view->provider_factory));
+
   /* disconnect the queue resize signal handler */
 #if GTK_CHECK_VERSION(2,8,0)
   g_signal_handler_disconnect (G_OBJECT (view->preferences), view->queue_resize_signal_id);
@@ -1033,6 +1041,9 @@ thunar_tree_view_context_menu (ThunarTreeView *view,
   GtkWidget       *image;
   GtkWidget       *menu;
   GtkWidget       *item;
+  GtkWidget       *window;
+  GList           *providers, *lp;
+  GList           *actions = NULL, *tmp;
 
   /* verify that we're connected to the clipboard manager */
   if (G_UNLIKELY (view->clipboard == NULL))
@@ -1211,6 +1222,50 @@ thunar_tree_view_context_menu (ThunarTreeView *view,
       item = gtk_separator_menu_item_new ();
       gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
       gtk_widget_show (item);
+      
+      /* add the providers menu for non-trashed items */
+      if (G_LIKELY (!thunar_file_is_trashed (file)))
+        {
+          /* load the menu providers from the provider factory */
+          providers = thunarx_provider_factory_list_providers (view->provider_factory, THUNARX_TYPE_MENU_PROVIDER);
+          if (G_LIKELY (providers != NULL))
+            {
+              /* determine the toplevel window we belong to */
+              window = gtk_widget_get_toplevel (GTK_WIDGET (view));
+
+              /* load the actions offered by the menu providers */
+              for (lp = providers; lp != NULL; lp = lp->next)
+                {
+                  tmp = thunarx_menu_provider_get_folder_actions (lp->data, window, THUNARX_FILE_INFO (file));
+                  actions = g_list_concat (actions, tmp);
+                  g_object_unref (G_OBJECT (lp->data));
+                }
+              g_list_free (providers);
+
+              /* add the actions to the menu */
+              for (lp = actions; lp != NULL; lp = lp->next)
+                {
+                  item = gtk_action_create_menu_item (GTK_ACTION (lp->data));
+                  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+                  gtk_widget_show (item);
+
+                  /* release the reference on the action */
+                  g_object_unref (G_OBJECT (lp->data));
+                }
+
+              /* add a separator to the end of the menu */
+              if (G_LIKELY (lp != actions))
+                {
+                  /* append a menu separator */
+                  item = gtk_separator_menu_item_new ();
+                  gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+                  gtk_widget_show (item);
+                }
+
+              /* cleanup */
+              g_list_free (actions);
+            }
+        }
     }
 
   /* append the "Properties" menu action */