Index: panel-widget.c
===================================================================
--- panel-widget.c	(revision 10151)
+++ panel-widget.c	(working copy)
@@ -1326,6 +1326,7 @@
 	GList *list;
 	int i;
 	int old_size;
+        gboolean ltr = gtk_widget_get_direction(widget) == GTK_TEXT_DIR_LTR;
 
 	g_return_if_fail(PANEL_IS_WIDGET(widget));
 	g_return_if_fail(allocation!=NULL);
@@ -1503,7 +1504,8 @@
 				if (ad->expand_minor) {
 					challoc.height = allocation->height;
 				}
-				challoc.x = ad->constrained;
+                                challoc.x = ltr ? ad->constrained : panel->size - ad->constrained 
+                                            - challoc.width;
 				challoc.y = allocation->height / 2 - challoc.height / 2;
 			} else {
 				challoc.height = ad->cells;
@@ -1867,17 +1869,19 @@
 	gdk_flush ();
 }
 
-/*get pos of the cursor location*/
+/*get pos of the cursor location in panel coordinates*/
 int
 panel_widget_get_cursorloc (PanelWidget *panel)
 {
 	int x, y;
+        gboolean rtl = gtk_widget_get_direction (GTK_WIDGET (panel)) == GTK_TEXT_DIR_RTL;
 
+
 	g_return_val_if_fail (PANEL_IS_WIDGET (panel), -1);
 
 	gtk_widget_get_pointer (GTK_WIDGET (panel), &x, &y);
-
-	return panel->orient == GTK_ORIENTATION_HORIZONTAL ? x : y;
+	
+        return panel->orient == GTK_ORIENTATION_HORIZONTAL ? (rtl ? panel->size - x : x) : y;
 }
 
 /*calculates the value to move the applet by*/
Index: panel-widget.h
===================================================================
--- panel-widget.h	(revision 10151)
+++ panel-widget.h	(working copy)
@@ -176,7 +176,7 @@
 /*tells us if an applet is "stuck" on the right side*/
 int		panel_widget_is_applet_stuck	(PanelWidget *panel,
 						 GtkWidget *applet);
-/*get pos of the cursor location*/
+/*get pos of the cursor location in panel coordinaes*/
 int		panel_widget_get_cursorloc	(PanelWidget *panel);
 
 /*needed for other panel types*/
