diff --git a/plugins/python-loader/py-console.c b/plugins/python-loader/py-console.c
index 9aa03e9..fcfadd4 100644
--- a/plugins/python-loader/py-console.c
+++ b/plugins/python-loader/py-console.c
@@ -19,6 +19,7 @@
 #include <gdk/gdkkeysyms.h>
 #include <glib/gi18n-lib.h>
 
+#include <Python.h>
 #include <stdlib.h>
 #include <string.h>
 typedef enum {
@@ -42,9 +43,18 @@ typedef struct {
 static App *app = NULL;
 
 
+static int
+cb_test_signals (void)
+{
+	if (PyErr_CheckSignals() < 0)
+		gtk_main_quit ();
+	return TRUE;
+}
+
 static gint
 cb_delete_app (GtkWidget *caller, GdkEvent *event, gpointer data)
 {
+	g_idle_remove_by_data (app);
 	app = NULL;
 
 	return FALSE;
@@ -224,6 +234,7 @@ show_python_console (GnmAction const *action, WorkbookControl *wbc)
 			  G_CALLBACK (cb_delete_app), NULL);
 	g_signal_connect (G_OBJECT (app->win), "key_press_event",
 			  G_CALLBACK (cb_key_event), NULL);
+	g_idle_add((GSourceFunc) cb_test_signals, app);
 
 	gtk_widget_show_all (app->win);
 }
diff --git a/src/GNOME_Gnumeric-gtk.xml.in b/src/GNOME_Gnumeric-gtk.xml.in
index 28a7b4e..a389b6b 100644
--- a/src/GNOME_Gnumeric-gtk.xml.in
+++ b/src/GNOME_Gnumeric-gtk.xml.in
@@ -364,10 +364,8 @@
     <toolitem action="FontItalic"/>
     <toolitem action="FontUnderline"/>
     <separator/>
-    <toolitem action="AlignLeft"/>
-    <toolitem action="AlignCenter"/>
-    <toolitem action="AlignRight"/>
-    <toolitem action="CenterAcrossSelection"/>
+    <toolitem action="HAlignmentSelector"/>
+    <toolitem action="VAlignmentSelector"/>
     <toolitem action="FormatMergeCells"/>
     <toolitem action="FormatUnmergeCells"/>
     <separator/>
diff --git a/src/sheet-control-gui.c b/src/sheet-control-gui.c
index fd5aa68..d039dad 100644
--- a/src/sheet-control-gui.c
+++ b/src/sheet-control-gui.c
@@ -2860,7 +2860,17 @@ cb_collect_objects_to_commit (SheetObject *so, double *coords, CollectObjectsDat
 		coords[2] += coords[0];
 		coords[3] += coords[1];
 	}
-	scg_object_coords_to_anchor (data->scg, coords, anchor);
+	if ((so->flags & SHEET_OBJECT_MOVE_WITH_CELLS) == 0) {
+		unsigned i;
+		for (i = 0; i < 4; i++)
+			anchor->offset[i] = coords[i];
+			anchor->cell_bound.start.row = anchor->cell_bound.start.col =
+					anchor->cell_bound.end.row = anchor->cell_bound.end.col = 0;
+	} else {
+		scg_object_coords_to_anchor (data->scg, coords, anchor);
+		if ((so->flags & SHEET_OBJECT_SIZE_WITH_CELLS) == 0) {
+		}
+	}
 	data->objects = g_slist_prepend (data->objects, so);
 	data->anchors = g_slist_prepend (data->anchors, anchor);
 
diff --git a/src/sheet-object-component.c b/src/sheet-object-component.c
index 5d408ee..da32923 100644
--- a/src/sheet-object-component.c
+++ b/src/sheet-object-component.c
@@ -504,7 +504,7 @@ sheet_object_component_set_component (SheetObject *so, GOComponent *component)
 		if (go_component_is_resizable (component))
 			so->flags |= SHEET_OBJECT_CAN_RESIZE;
 		else
-			so->flags &= ~SHEET_OBJECT_CAN_RESIZE;
+			so->flags &= ~(SHEET_OBJECT_CAN_RESIZE | SHEET_OBJECT_SIZE_WITH_CELLS);
 		if (go_component_is_editable (component))
 			so->flags |= SHEET_OBJECT_CAN_EDIT;
 		else
diff --git a/src/xml-sax-read.c b/src/xml-sax-read.c
index ab8eacc..126ebf7 100644
--- a/src/xml-sax-read.c
+++ b/src/xml-sax-read.c
@@ -2377,7 +2377,20 @@ xml_sax_read_obj (GsfXMLIn *xin, gboolean needs_cleanup,
 	for (i = 0; attrs != NULL && attrs[i] && attrs[i + 1] ; i += 2) {
 		if (attr_eq (attrs[i], "Name"))
 			sheet_object_set_name (so, CXML2C (attrs[i + 1]));
-		else if (attr_eq (attrs[i], "ObjectBound"))
+		else if (gnm_xml_attr_int (attrs+i, "Anchors", &tmp_int)) {
+				switch (tmp_int) {
+				case 0:
+						so->flags &= ~(SHEET_OBJECT_MOVE_WITH_CELLS | SHEET_OBJECT_SIZE_WITH_CELLS);
+						break;
+				case 1:
+						so->flags &= ~(SHEET_OBJECT_SIZE_WITH_CELLS);
+						so->flags |= SHEET_OBJECT_MOVE_WITH_CELLS;
+						break;
+				default:
+						so->flags |= SHEET_OBJECT_MOVE_WITH_CELLS | SHEET_OBJECT_SIZE_WITH_CELLS;
+						break;
+				}
+		} else if (attr_eq (attrs[i], "ObjectBound"))
 			range_parse (&anchor_r, CXML2C (attrs[i + 1]), gnm_sheet_get_size (state->sheet));
 		else if (attr_eq (attrs[i], "ObjectOffset") &&
 			4 == sscanf (CXML2C (attrs[i + 1]), "%lg %lg %lg %lg",
diff --git a/src/xml-sax-write.c b/src/xml-sax-write.c
index c361ef7..bb1dfb9 100644
--- a/src/xml-sax-write.c
+++ b/src/xml-sax-write.c
@@ -1257,6 +1257,9 @@ xml_write_objects (GnmOutputXML *state, GSList *objects)
 		if (so->name)
 			gsf_xml_out_add_cstr (state->output, "Name", so->name);
 		gsf_xml_out_add_cstr (state->output, "ObjectBound", range_as_string (&so->anchor.cell_bound));
+		gsf_xml_out_add_int (state->output, "Anchors",
+		                     ((so->flags & SHEET_OBJECT_MOVE_WITH_CELLS)? 1:0) *
+		                     ((so->flags & SHEET_OBJECT_SIZE_WITH_CELLS)? 2:1));
 		snprintf (buffer, sizeof (buffer), "%.3g %.3g %.3g %.3g",
 			  so->anchor.offset [0], so->anchor.offset [1],
 			  so->anchor.offset [2], so->anchor.offset [3]);
