diff --git a/scribus/plugins/scriptplugin/cmdgetprop.cpp b/scribus/plugins/scriptplugin/cmdgetprop.cpp
index cf8ce5ce4..bc0a186a3 100644
--- a/scribus/plugins/scriptplugin/cmdgetprop.cpp
+++ b/scribus/plugins/scriptplugin/cmdgetprop.cpp
@@ -9,6 +9,8 @@ for which a new license (GPL+exception) is in place.
 #include "scribuscore.h"
 #include "scribusdoc.h"
 
+#include <algorithm>
+
 /* getObjectType(name) */
 PyObject *scribus_getobjecttype(PyObject* /* self */, PyObject* args)
 {
@@ -308,69 +310,67 @@ PyObject *scribus_getrotation(PyObject* /* self */, PyObject* args)
 	return PyFloat_FromDouble(static_cast<double>(item->rotation() * -1));
 }
 
-PyObject *scribus_getallobjects(PyObject* /* self */, PyObject* args, PyObject *keywds)
+PyObject *scribus_getallobjects(PyObject* /* self */, PyObject* args, PyObject *kwargs)
 {
-	int type = -1;
-	uint counter = 0;
-	uint counter2 = 0;
+	int itemType = -1;
+	int layerId = -1;
+
+	if (!checkHaveDocument())
+		return nullptr;
 
 	ScribusDoc* currentDoc = ScCore->primaryMainWindow()->doc;
-	int pageNr = currentDoc->currentPageNumber();
-	char *kwlist[] = { const_cast<char*>("type"), const_cast<char*>("page"), const_cast<char*>("layer"), nullptr};
-	char* szLayerName = const_cast<char*>("");
 
-	if (!PyArg_ParseTupleAndKeywords(args, keywds, "|iies", kwlist, &type, &pageNr, "utf-8", &szLayerName))
-		return nullptr;
+	int page = currentDoc->currentPageNumber();
+	const int numPages = currentDoc->Pages->count();
 
-	if (!checkHaveDocument())
+	char *kwlist[] = { const_cast<char*>("itemType"), const_cast<char*>("page"), const_cast<char*>("layer"), nullptr};
+	char* szLayerName = const_cast<char*>("");
+
+	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "|iies", kwlist, &itemType, &page, "utf-8", &szLayerName))
 		return nullptr;
 
-	int numPages = currentDoc->Pages->count();
-	if (pageNr < 0 || pageNr >= numPages)
+	if (page < 0 || page >= numPages)
 	{
 		PyErr_SetString(PyExc_ValueError, QObject::tr("page number is invalid.", "python error").toLocal8Bit().constData());
 		return nullptr;
 	}
 
-	const ScLayer *layer = nullptr;
 	QString layerName = QString::fromUtf8(szLayerName);
 	if (!layerName.isEmpty())
 	{
-		layer = currentDoc->Layers.layerByName(layerName);
+		const auto layer = currentDoc->Layers.layerByName(layerName);
 		if (!layer)
 		{
 			PyErr_SetString(PyExc_ValueError, QObject::tr("layer name is invalid.", "python error").toLocal8Bit().constData());
 			return nullptr;
 		}
+
+		layerId = layer->ID;
 	}
 
-	// have doc already
-	for (int i = 0; i < currentDoc->Items->count(); ++i)
+	auto compare = [page, layerId, itemType](PageItem* i)
 	{
-		PageItem* item = currentDoc->Items->at(i);
-		if  (pageNr != item->OwnPage)
-			continue;
-		if ((type != -1) && (item->itemType() != type))
-			continue;
-		if (layer && (layer->ID != item->m_layerID))
-			continue;
-		counter++;
-	}
+		return i->OwnPage == page &&
+			(layerId == -1 || i->m_layerID == layerId) &&
+			(itemType == -1 || i->itemType() == itemType);
+	};
+
+	const int n = std::count_if(currentDoc->DocItems.begin(), currentDoc->DocItems.end(), compare);
 
-	PyObject* pyList = PyList_New(counter);
-	for (int i = 0; i < currentDoc->Items->count(); ++i)
+	auto itemsList = PyList_New(n);
 	{
-		PageItem* item = currentDoc->Items->at(i);
-		if  (pageNr != item->OwnPage)
-			continue;
-		if ((type != -1) && (item->itemType() == type))
-			continue;
-		if (layer && (layer->ID != item->m_layerID))
-			continue;
-		PyList_SetItem(pyList, counter2, PyUnicode_FromString(item->itemName().toUtf8()));
-		counter2++;
+		int i = 0;
+		for (const auto& pageItem: currentDoc->DocItems)
+		{
+			if (compare(pageItem))
+			{
+				PyList_SetItem(itemsList, i, PyUnicode_FromString(pageItem->itemName().toUtf8()));
+				i++;
+			}
+		}
 	}
-	return pyList;
+
+	return itemsList;
 }
 
 PyObject *scribus_getobjectattributes(PyObject* /* self */, PyObject* args)
