Index: Scribus/scribus/plugins/scriptplugin/cmdpage.cpp
===================================================================
--- Scribus/scribus/plugins/scriptplugin/cmdpage.cpp	(revision 22048)
+++ Scribus/scribus/plugins/scriptplugin/cmdpage.cpp	(working copy)
@@ -501,7 +501,80 @@
 	Py_RETURN_NONE;
 }
 
+PyObject *scribus_getobjectpagenumber(PyObject* /* self */, PyObject* args){
 
+	char *name = const_cast<char*>("");
+	if (!PyArg_ParseTuple(args, "|es", "utf-8", &name))
+		return NULL;
+	if(!checkHaveDocument())
+		return NULL;
+	PageItem *i = GetUniqueItem(QString::fromUtf8(name));
+	if (i == NULL)
+		return NULL;
+	PyObject* rv = PyInt_FromLong(ScCore->primaryMainWindow()->doc->OnPage(i));
+	return rv;
+}
+
+PyObject *scribus_setobjectpagenumber(PyObject* /* self */, PyObject* args){
+
+	char *name = const_cast<char*>("");
+	int newpage;
+	if (!PyArg_ParseTuple(args, "i|es", &newpage, "utf-8", &name))
+		return NULL;
+	if(!checkHaveDocument())
+		return NULL;
+	PageItem *i = GetUniqueItem(QString::fromUtf8(name));
+	if (i == NULL)
+		return NULL;
+
+	if (newpage < 0)
+	{
+		PyErr_SetString(PyExc_RuntimeError, QObject::tr("Can't use a negative page number.","python error").toLocal8Bit().constData());
+		return NULL;
+	}
+
+	ScribusDoc* doc = ScCore->primaryMainWindow()->doc;
+	int numpages = doc->Pages->count();
+	if (newpage >= numpages)
+	{
+		QByteArray qba = QString("pagenumber must be less than the number of pages: ").append(QString::number(numpages)).toUtf8();
+		const char *message = qba.data();
+		PyErr_SetString(PyExc_RuntimeError, 
+				QObject::tr(message,"python error").toLocal8Bit().constData());
+		return NULL;
+	}
+
+	int oldpage = doc->OnPage(i);
+	if(oldpage == newpage) Py_RETURN_NONE;
+	else if(oldpage < 0){
+		PyErr_SetString(PyExc_RuntimeError, QObject::tr("Can't change an object's page that isn't on an identifiable page.","python error").toLocal8Bit().constData());
+		return NULL;
+	}
+
+	MarginStruct newPageBleeds;
+	doc->getBleeds(newpage, newPageBleeds);
+	double newy = doc->Pages->at(newpage)->yOffset() - newPageBleeds.top();
+
+	MarginStruct oldPageBleeds;
+	doc->getBleeds(oldpage, oldPageBleeds);
+	double oldy = doc->Pages->at(oldpage)->yOffset() - oldPageBleeds.top();
+
+	double ytarget;
+	if(newpage > oldpage){
+		
+		ytarget = newy - oldy;
+	}
+	else{
+
+		ytarget = -(oldy - newy);
+	}
+	
+	doc->moveItem(0, ytarget, i);
+
+	Py_RETURN_NONE;
+}
+
+
 /*! HACK: this removes "warning: 'blah' defined but not used" compiler warnings
 with header files structure untouched (docstrings are kept near declarations)
 PV */
@@ -516,5 +589,7 @@
 	  << scribus_getVguides__doc__     << scribus_setVguides__doc__
 	  << scribus_pagedimension__doc__  << scribus_getpageitems__doc__
 	  << scribus_getpagemargins__doc__ << scribus_importpage__doc__
-	  << scribus_pagensize__doc__      << scribus_pagenmargins__doc__;
+	  << scribus_pagensize__doc__      << scribus_pagenmargins__doc__
+	  << scribus_getobjectpagenumber__doc__
+	  << scribus_setobjectpagenumber__doc__;
 }
Index: Scribus/scribus/plugins/scriptplugin/cmdpage.h
===================================================================
--- Scribus/scribus/plugins/scriptplugin/cmdpage.h	(revision 22048)
+++ Scribus/scribus/plugins/scriptplugin/cmdpage.h	(working copy)
@@ -224,5 +224,27 @@
 "));
 PyObject *scribus_importpage(PyObject */*self*/, PyObject* args);
 
+/*! docstring */
+PyDoc_STRVAR(scribus_getobjectpagenumber__doc__,
+QT_TR_NOOP("getObjectPageNumber([\"name\"]) -> an integer\n\
+\n\
+Returns an integer that is the page number of the page item \"name\"\n\
+Page numbers start at 0 so the number returned will be 0 to (total pages)-1.\n\
+Will return -1 if the object is not on any page.\n\
+If \"name\" is not given the currently selected item is used.\n\
+"));
+PyObject *scribus_getobjectpagenumber(PyObject* /* self */, PyObject* args);
+
+/*! docstring */
+PyDoc_STRVAR(scribus_setobjectpagenumber__doc__,
+QT_TR_NOOP("setObjectPageNumber(pagenumber,[\"name\"]) -> None\n\
+\n\
+Moves the page item with the name \"name\" to the page \"pagenumber\".\n\
+Page numbers start at 0 so the number used must be 0 to (total pages)-1.\n\
+Objects that are not on any page cannot be moved to a different page.\n\
+If \"name\" is not given the currently selected item is used.\n\
+"));
+PyObject *scribus_setobjectpagenumber(PyObject* /* self */, PyObject* args);
+
 #endif
 
Index: Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp
===================================================================
--- Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp	(revision 22048)
+++ Scribus/scribus/plugins/scriptplugin/scriptplugin.cpp	(working copy)
@@ -572,6 +572,8 @@
 	// Internal methods - Not for public use
 	{const_cast<char*>("retval"), (PyCFunction)scribus_retval, METH_VARARGS, const_cast<char*>("Scribus internal.")},
 	{const_cast<char*>("getval"), (PyCFunction)scribus_getval, METH_NOARGS, const_cast<char*>("Scribus internal.")},
+	{const_cast<char*>("getObjectPageNumber"), (PyCFunction)scribus_getobjectpagenumber, METH_VARARGS, tr(scribus_getobjectpagenumber__doc__)},
+	{const_cast<char*>("setObjectPageNumber"), (PyCFunction)scribus_setobjectpagenumber, METH_VARARGS, tr(scribus_setobjectpagenumber__doc__)},
 	{NULL, (PyCFunction)(0), 0, NULL} /* sentinel */
 };
 
