Index: Scribus/scribus/plugins/scriptplugin/cmdobj.cpp
===================================================================
--- Scribus/scribus/plugins/scriptplugin/cmdobj.cpp	(revision 22048)
+++ Scribus/scribus/plugins/scriptplugin/cmdobj.cpp	(working copy)
@@ -707,10 +707,10 @@
 		return NULL;
 	// do the duplicate
 	ScCore->primaryMainWindow()->slotEditCopy();
-	ScCore->primaryMainWindow()->slotEditPaste();
-//	Py_INCREF(Py_None);
-//	return Py_None;
-	Py_RETURN_NONE;
+	QList<PageItem*> newitems = ScCore->primaryMainWindow()->pasteObjects();
+	PageItem* newitem = newitems.at(0);
+	PyObject *rv = PyString_FromString(newitem->itemName().toUtf8());
+	return rv;
 }
 
 PyObject *scribus_copyobject(PyObject * /* self */, PyObject *args)
Index: Scribus/scribus/scribus.cpp
===================================================================
--- Scribus/scribus/scribus.cpp	(revision 22048)
+++ Scribus/scribus/scribus.cpp	(working copy)
@@ -4921,7 +4921,7 @@
 	}
 	else
 	{
-		if (ScMimeData::clipboardHasScribusElem() || ScMimeData::clipboardHasScribusFragment() || internalCopy)
+		/**if (ScMimeData::clipboardHasScribusElem() || ScMimeData::clipboardHasScribusFragment() || internalCopy)
 		{
 			view->Deselect(true);
 			uint docItemCount = doc->Items->count();
@@ -4981,7 +4981,8 @@
 				retObj->setXYPos(x, y, true);
 			}
 		}
-		view->DrawNew();
+		view->DrawNew();*/
+		pasteObjectsInternal();
 	}
 	if (activeTransaction)
 		activeTransaction.commit();
@@ -4990,6 +4991,100 @@
 	slotDocCh(false);
 }
 
+QList<PageItem*> ScribusMainWindow::pasteObjects(){
+
+	QList<PageItem*> rlist = QList<PageItem*>();
+	if (!HaveDoc)
+		return rlist;
+	if (doc->appMode == modeEditClip)
+		view->requestMode(submodeEndNodeEdit);
+	UndoTransaction activeTransaction;
+	if (!ScMimeData::clipboardHasScribusData() && (!internalCopy))
+		return rlist;
+	if (UndoManager::undoEnabled())
+		activeTransaction = m_undoManager->beginTransaction(doc->currentPage()->getUName(), 0, Um::Paste, "", Um::IPaste);
+
+	rlist = pasteObjectsInternal();
+
+	if (activeTransaction)
+		activeTransaction.commit();
+	if (doc->notesChanged())
+		doc->notesFramesUpdate();
+	slotDocCh(false);
+	return rlist;
+}
+
+QList<PageItem*> ScribusMainWindow::pasteObjectsInternal(){
+
+	QList<PageItem*> rlist = QList<PageItem*>();
+	if (ScMimeData::clipboardHasScribusElem() || ScMimeData::clipboardHasScribusFragment() || internalCopy)
+	{
+		view->Deselect(true);
+		uint docItemCount = doc->Items->count();
+		bool savedAlignGrid = doc->SnapGrid;
+		bool savedAlignGuides = doc->SnapGuides;
+		bool savedAlignElement = doc->SnapElement;
+		doc->SnapGrid = false;
+		doc->SnapGuides = false;
+		doc->SnapElement = false;
+		if (internalCopy)
+			slotElemRead(internalCopyBuffer, doc->currentPage()->xOffset(), doc->currentPage()->yOffset(), false, true, doc, view);
+		else
+		{
+			QString buffer  = ScMimeData::clipboardScribusElem();
+			slotElemRead(buffer, doc->currentPage()->xOffset(), doc->currentPage()->yOffset(), false, true, doc, view);
+		}
+		// update style lists:
+		m_styleManager->setDoc(doc);
+		propertiesPalette->unsetDoc();
+		propertiesPalette->setDoc(doc);
+		textPalette->unsetDoc();
+		textPalette->setDoc(doc);
+		marksManager->setDoc(doc);
+		nsEditor->setDoc(doc);
+		symbolPalette->unsetDoc();
+		symbolPalette->setDoc(doc);
+		inlinePalette->unsetDoc();
+		inlinePalette->setDoc(doc);
+
+		doc->SnapGrid = savedAlignGrid;
+		doc->SnapGuides = savedAlignGuides;
+		doc->SnapElement = savedAlignElement;
+		doc->m_Selection->delaySignalsOn();
+		for (int as = docItemCount; as < doc->Items->count(); ++as)
+		{
+			PageItem* currItem = doc->Items->at(as);
+			if (currItem->isBookmark)
+				AddBookMark(currItem);
+			doc->m_Selection->addItem(currItem);
+			rlist.append(currItem);
+		}
+		doc->m_Selection->delaySignalsOff();
+		if (doc->m_Selection->count() > 1)
+			doc->m_Selection->setGroupRect();
+		}
+	else if (ScMimeData::clipboardHasKnownData())
+	{
+		QString ext = ScMimeData::clipboardKnownDataExt();
+		QByteArray bitsBits = ScMimeData::clipboardKnownDataData();
+		double x0 = (view->contentsX() / view->scale()) + ((view->visibleWidth() / 2.0) / view->scale());
+		double y0 = (view->contentsY() / view->scale()) + ((view->visibleHeight() / 2.0) / view->scale());
+		PageItem *retObj = getVectorFileFromData(doc, bitsBits, ext, x0, y0);
+		if (retObj != NULL)
+		{
+			double x = (view->contentsX() / view->scale()) + ((view->visibleWidth() / 2.0) / view->scale()) - (retObj->width() / 2.0);
+			double y = (view->contentsY() / view->scale()) + ((view->visibleHeight() / 2.0) / view->scale()) - (retObj->height() / 2.0);
+			retObj->setTextFlowMode(PageItem::TextFlowUsesBoundingBox);
+			retObj->setXYPos(x, y, true);
+			rlist.append(retObj);
+		}
+	}
+	view->DrawNew();
+	return rlist;
+}
+
+
+
 //CB-->Doc ?????
 void ScribusMainWindow::SelectAllOnLayer()
 {
Index: Scribus/scribus/scribus.h
===================================================================
--- Scribus/scribus/scribus.h	(revision 22048)
+++ Scribus/scribus/scribus.h	(working copy)
@@ -159,6 +159,7 @@
 	void applyNewMaster(QString name);
 	void updateRecent(QString fn);
 	void doPasteRecent(QString data);
+	QList<PageItem*> pasteObjects();
 	bool getPDFDriver(const QString & filename, const QString & name, int components, const std::vector<int> & pageNumbers, const QMap<int,QPixmap> & thumbs, QString& error, bool* cancelled = NULL);
 	bool DoSaveAsEps(QString fn, QString& error);
 	QString CFileDialog(QString workingDirectory = ".", QString dialogCaption = "", QString fileFilter = "", QString defNa = "",
@@ -590,6 +591,8 @@
 	bool eventFilter( QObject *o, QEvent *e );
 	virtual void dragEnterEvent( QDragEnterEvent* e);
 	virtual void dropEvent( QDropEvent* e);
+	/** called by slotEditPaste() and pasteObjects()*/
+	QList<PageItem*> pasteObjectsInternal();
 
 private:
     /** init methods */
