Index: src/inkscape-private.h
===================================================================
--- src/inkscape-private.h	(revision 15752)
+++ src/inkscape-private.h	(working copy)
@@ -29,6 +29,9 @@
 void inkscape_ref (void);
 void inkscape_unref (void);
 
+guint inkscape_mapalt();
+void inkscape_mapalt(guint);
+
 /*
  * These are meant solely for desktop, document etc. implementations
  */
Index: src/inkscape.cpp
===================================================================
--- src/inkscape.cpp	(revision 15752)
+++ src/inkscape.cpp	(working copy)
@@ -117,6 +117,7 @@
     gboolean dialogs_toggle;
     gboolean use_gui;         // may want to consider a virtual function
                               // for overriding things like the warning dlg's
+    guint mapalt;
 };
 
 struct Inkscape::ApplicationClass {
@@ -302,9 +303,10 @@
     inkscape->desktops = NULL;
 
     inkscape->dialogs_toggle = TRUE;
+
+    inkscape->mapalt=GDK_MOD1_MASK;    
 }
 
-
 static void
 inkscape_dispose (GObject *object)
 {
@@ -342,13 +344,28 @@
 
 
 void
-inkscape_unref (void)
-{
+inkscape_unref (void) {
     if (inkscape)
         g_object_unref (G_OBJECT (inkscape));
 }
 
+/* returns the mask of the keyboard modifier to map to Alt, zero if no mapping */
+/* Needs to be a guint because gdktypes.h does not define a 'no-modifier' value */
+guint
+inkscape_mapalt() {
+    return inkscape->mapalt;
+}
 
+/* Sets the keyboard modifer to map to Alt. Zero switches off mapping, as does '1', which is the default */
+void inkscape_mapalt(guint maskvalue)
+{
+    if(maskvalue<2 || maskvalue> 5 ){  /* MOD5 is the highest defined in gdktypes.h */
+        inkscape->mapalt=0;
+    }else{
+        inkscape->mapalt=(GDK_MOD1_MASK << (maskvalue-1));
+    }
+}
+
 static void
 inkscape_activate_desktop_private (Inkscape::Application *inkscape, SPDesktop *desktop)
 {
@@ -594,6 +611,12 @@
 		Inkscape::UI::Dialogs::DebugDialog::getInstance()->captureLogMessages();
     }
 
+    /* Check for global remapping of Alt key */
+    if(use_gui)
+    {
+        inkscape_mapalt(guint(prefs_get_int_attribute("options.mapalt","value",0)));
+    }
+
     /* Initialize the extensions */
     Inkscape::Extension::init();
 
Index: src/preferences-skeleton.h
===================================================================
--- src/preferences-skeleton.h	(revision 15752)
+++ src/preferences-skeleton.h	(working copy)
@@ -175,6 +175,7 @@
 "  </group>\n"
 "\n"
 "  <group id=\"options\">\n"
+"    <group id=\"mapalt\" value=\"1\" />"
 "    <group id=\"useextinput\" value=\"1\" />"
 "    <group id=\"nudgedistance\" value=\"2\"/>\n"
 "    <group id=\"rotationsnapsperpi\" value=\"12\"/>\n"
Index: src/main.cpp
===================================================================
--- src/main.cpp	(revision 15752)
+++ src/main.cpp	(working copy)
@@ -620,6 +620,38 @@
     return 0;
 }
 
+static void
+snooper(GdkEvent *event, gpointer data) { 
+    if(inkscape_mapalt())  /* returns the map of the keyboard modifier to map to Alt, zero if no mapping */
+    {
+        GdkModifierType mapping=(GdkModifierType)inkscape_mapalt();
+        switch (event->type) {
+            case GDK_MOTION_NOTIFY:
+                if(event->motion.state & mapping) {
+                    event->motion.state|=GDK_MOD1_MASK;
+                }
+                break;       
+            case GDK_BUTTON_PRESS:
+                if(event->button.state & mapping) {
+                    event->button.state|=GDK_MOD1_MASK;
+                }
+                break;       
+             case GDK_KEY_PRESS:
+                 if(event->key.state & mapping) {
+                     event->key.state|=GDK_MOD1_MASK;
+                 }
+                 break;                
+        default:
+            break;
+        }
+    }
+    gtk_main_do_event (event);
+}
+
+void snoopunroll(gpointer data)
+{
+}
+
 int
 sp_main_gui(int argc, char const **argv)
 {
@@ -631,6 +663,8 @@
 
     inkscape_gtk_stock_init();
 
+    gdk_event_handler_set ((GdkEventFunc)snooper, 0,&snoopunroll);
+
     Inkscape::Debug::log_display_config();
 
     /* Set default icon */
