Index: gnome-panel/panel-profile.c
===================================================================
--- gnome-panel/panel-profile.c	(revision 10713)
+++ gnome-panel/panel-profile.c	(working copy)
@@ -551,6 +551,19 @@
 		gconf_client_unset (client, key, NULL);
 }
 
+void 
+panel_profile_set_toplevel_disable_movement (PanelToplevel *toplevel,
+					     gboolean disable_movement)
+{
+	GConfClient *client;
+	const char *key;
+	
+	client = panel_gconf_get_client ();
+	key = panel_profile_get_toplevel_key (toplevel, "disable_movement");
+	
+	gconf_client_set_bool (client, key, disable_movement, NULL);
+}
+
 char *
 panel_profile_get_toplevel_name (PanelToplevel *toplevel)
 {
@@ -568,6 +581,20 @@
 
 TOPLEVEL_IS_WRITABLE_FUNC ("name", toplevel, name)
 
+gboolean 
+panel_profile_get_toplevel_disable_movement (PanelToplevel *toplevel)
+{
+
+	GConfClient *client;
+	const char *key;
+	gboolean disable_movement;
+	client = panel_gconf_get_client ();
+       
+	key = panel_profile_get_toplevel_key (toplevel, "disable_movement");
+	disable_movement = gconf_client_get_bool (client, key, NULL);
+	return disable_movement;	
+}
+
 void
 panel_profile_set_toplevel_orientation (PanelToplevel    *toplevel,
 					PanelOrientation  orientation)
Index: gnome-panel/panel-profile.h
===================================================================
--- gnome-panel/panel-profile.h	(revision 10713)
+++ gnome-panel/panel-profile.h	(working copy)
@@ -83,6 +83,9 @@
             panel_profile_get_toplevel_orientation    (PanelToplevel *toplevel);
 gboolean    panel_profile_is_writable_toplevel_orientation (PanelToplevel *toplevel);
 
+gboolean panel_profile_get_toplevel_disable_movement (PanelToplevel *toplevel);
+void panel_profile_set_toplevel_disable_movement (PanelToplevel *toplevel, gboolean disable_movement);
+
 void        panel_profile_set_toplevel_size           (PanelToplevel *toplevel,
 						       int            size);
 int         panel_profile_get_toplevel_size           (PanelToplevel *toplevel);
Index: gnome-panel/panel-toplevel.c
===================================================================
--- gnome-panel/panel-toplevel.c	(revision 10713)
+++ gnome-panel/panel-toplevel.c	(working copy)
@@ -435,7 +435,8 @@
 	    toplevel->priv->grab_op != PANEL_GRAB_OP_NONE)
 		return;
 
-	if (panel_lockdown_get_locked_down ())
+	if (panel_lockdown_get_locked_down () ||
+	    panel_profile_get_toplevel_disable_movement (toplevel))
 		return;
 
 	/* If any of the position/orientation are not writable,
Index: gnome-panel/panel-default-setup.entries
===================================================================
--- gnome-panel/panel-default-setup.entries	(revision 10713)
+++ gnome-panel/panel-default-setup.entries	(working copy)
@@ -81,6 +81,13 @@
       </value>
     </entry>
     <entry>
+      <key>toplevels/top_panel/disable_movement</key>
+      <schema_key>/schemas/apps/panel/toplevels/disable_movement</schema_key>
+      <value>
+        <bool>true</bool>
+      </value>
+    </entry>
+    <entry>      
       <key>toplevels/top_panel/orientation</key>
       <schema_key>/schemas/apps/panel/toplevels/orientation</schema_key>
       <value>
@@ -129,6 +136,13 @@
       </value>
     </entry>
     <entry>
+      <key>toplevels/bottom_panel/disable_movement</key>
+      <schema_key>/schemas/apps/panel/toplevels/disable_movement</schema_key>
+      <value>
+        <bool>true</bool>
+      </value>
+    </entry>
+    <entry>      
       <key>toplevels/bottom_panel/orientation</key>
       <schema_key>/schemas/apps/panel/toplevels/orientation</schema_key>
       <value>
Index: gnome-panel/panel-context-menu.c
===================================================================
--- gnome-panel/panel-context-menu.c	(revision 10713)
+++ gnome-panel/panel-context-menu.c	(working copy)
@@ -1,6 +1,6 @@
 /*
  * panel-context-menu.c: context menu for the panels
- *
+b *
  * Copyright (C) 2004 Vincent Untz
  *
  * This program is free software; you can redistribute it and/or
@@ -158,6 +158,18 @@
 }
 
 static void
+panel_context_menu_enable_disable_move (GtkWidget *menuitem,
+					PanelToplevel *toplevel)
+{
+	gboolean disable_movement;
+
+	disable_movement = panel_profile_get_toplevel_disable_movement (toplevel);
+	
+	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), !disable_movement);
+	panel_profile_set_toplevel_disable_movement (toplevel, !disable_movement);
+}
+
+static void
 panel_context_menu_delete_panel (PanelToplevel *toplevel)
 {
 	if (panel_toplevel_is_last_unattached (toplevel)) {
@@ -195,6 +207,7 @@
 panel_context_menu_build_edition (PanelWidget *panel_widget,
 				  GtkWidget   *menu)
 {
+	gboolean   disable_movement;
 	GtkWidget *menuitem;
 	GtkWidget *image;
 
@@ -234,6 +247,15 @@
 
 	add_menu_separator (menu);
 
+ 	disable_movement = panel_profile_get_toplevel_disable_movement (panel_widget->toplevel);
+	menuitem = gtk_check_menu_item_new_with_mnemonic (_("_Lock Panel Position"));
+	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menuitem), disable_movement);
+	gtk_widget_show (menuitem);
+	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
+ 	g_signal_connect (menuitem, "toggled",
+ 			  G_CALLBACK (panel_context_menu_enable_disable_move),
+ 			  panel_widget->toplevel);
+
 	menuitem = gtk_image_menu_item_new_with_mnemonic (_("_New Panel"));
 	image = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU);
 	gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
Index: gnome-panel/panel-properties-dialog.c
===================================================================
--- gnome-panel/panel-properties-dialog.c	(revision 10713)
+++ gnome-panel/panel-properties-dialog.c	(working copy)
@@ -74,6 +74,7 @@
 
 	guint          toplevel_notify;
 	guint          background_notify;
+	guint          disable_movement_notify;
 
 	/* The theme directory of the icon, see bug #119209 */
 	char          *icon_theme_dir;
@@ -99,6 +100,10 @@
 		gconf_client_notify_remove (client, dialog->background_notify);
 	dialog->background_notify = 0;
 
+	if (dialog->disable_movement_notify)
+		gconf_client_notify_remove (client, dialog->disable_movement_notify);
+	dialog->disable_movement_notify = 0;
+
 	if (dialog->properties_dialog)
 		gtk_widget_destroy (dialog->properties_dialog);
 	dialog->properties_dialog = NULL;
@@ -150,6 +155,24 @@
 }
 
 static void
+panel_properties_dialog_disable_movement_notify (GConfClient           *client,
+					      guint                 cnxn_id,
+					      GConfEntry            *entry,
+					      PanelPropertiesDialog *dialog)
+{
+	gboolean panel_locked = panel_profile_get_toplevel_disable_movement (dialog->toplevel);
+        
+	gtk_widget_set_sensitive (dialog->orientation_combo, !panel_locked);
+	gtk_widget_set_sensitive (dialog->orientation_label, !panel_locked);
+        
+	if (panel_locked)
+		gtk_widget_show (dialog->writability_warn_general);
+	else
+		gtk_widget_hide (dialog->writability_warn_general);
+		
+}
+
+static void
 panel_properties_dialog_setup_orientation_combo (PanelPropertiesDialog *dialog,
 						 GladeXML              *gui)
 {
@@ -194,7 +217,8 @@
 				  G_CALLBACK (panel_properties_dialog_orientation_changed),
 				  dialog);
 
-	if (! panel_profile_is_writable_toplevel_orientation (dialog->toplevel)) {
+	if (! panel_profile_is_writable_toplevel_orientation (dialog->toplevel) || 
+	      panel_profile_get_toplevel_disable_movement (dialog->toplevel)) {
 		gtk_widget_set_sensitive (dialog->orientation_combo, FALSE);
 		gtk_widget_set_sensitive (dialog->orientation_label, FALSE);
 		gtk_widget_show (dialog->writability_warn_general);
@@ -988,6 +1012,13 @@
 	panel_properties_dialog_setup_hidebuttons_toggle (dialog, gui);
 	panel_properties_dialog_setup_arrows_toggle      (dialog, gui);
 
+	dialog->disable_movement_notify =
+		panel_profile_toplevel_notify_add (
+			dialog->toplevel,
+			"disable_movement",
+			(GConfClientNotifyFunc) panel_properties_dialog_disable_movement_notify,
+			dialog);
+
 	panel_properties_update_arrows_toggle_visible (
 		dialog, GTK_TOGGLE_BUTTON (dialog->hidebuttons_toggle));
 	g_signal_connect_swapped (dialog->hidebuttons_toggle, "toggled",
Index: gnome-panel/panel-global.schemas.in
===================================================================
--- gnome-panel/panel-global.schemas.in	(revision 10713)
+++ gnome-panel/panel-global.schemas.in	(working copy)
@@ -33,6 +33,18 @@
       </schema>
 
       <schema>
+        <key>/schemas/apps/panel/global/disable_movement</key>
+        <applyto>/apps/panel/global/disable_movement</applyto>
+        <owner>panel</owner>
+        <type>bool</type>
+        <default>true</default>
+        <locale name="C">
+          <short>Lock Panel Position</short>
+          <long>Disable support for moving a panel with a mouse drag.  It has been known to cause problems
+	  for users that accidentally move or resize their panels.</long>
+        </locale>
+	</schema>
+      <schema>      
         <key>/schemas/apps/panel/global/enable_animations</key>
         <applyto>/apps/panel/global/enable_animations</applyto>
         <owner>panel</owner>
Index: gnome-panel/panel-toplevel.schemas.in
===================================================================
--- gnome-panel/panel-toplevel.schemas.in	(revision 10713)
+++ gnome-panel/panel-toplevel.schemas.in	(working copy)
@@ -47,6 +47,19 @@
         </long>
       </locale>
     </schema>
+
+    <schema> 
+      <key>/schemas/apps/panel/toplevels/disable_movement</key>
+      <owner>panel</owner>
+      <type>bool</type>
+      <default>true</default>
+      <locale name="C">
+        <short>Lock the panel position</short>
+	<long>Disable support for moving a panel with a mouse drag.  It has
+	been known to cause problems for users that accidentally move or resize
+	their panels.</long>
+      </locale>
+    </schema>
  
     <schema>
       <key>/schemas/apps/panel/toplevels/expand</key>
