Index: scribus/ui/scrapbookpalette.cpp
===================================================================
--- scribus/ui/scrapbookpalette.cpp	(Revision 25096)
+++ scribus/ui/scrapbookpalette.cpp	(Arbeitskopie)
@@ -1907,8 +1907,8 @@
 
 void Biblio::objFromMainMenu(QString text, int scrapID)
 {
-	QString nam;
-	QString tmp;
+	QString nam; // A String to store the name of the new object
+	QString tmp; // A String to store temporary information
 	int scID = scrapID;
 	if (scID > 0)
 		scID++;
@@ -1916,11 +1916,38 @@
 	if (!actBView->canWrite)
 		return;
 	nam = getObjectName(text);
-	if (nam.isEmpty())
-		nam = tr("Object") + tmp.setNum(actBView->objectMap.count());
-	if (actBView->objectMap.contains(nam))
-		nam += "("+ tmp.setNum(m_tempCount) + ")";
-	Query dia(this, "tt", 1, tr("&Name:"), tr("New Entry"));
+	if (nam.isEmpty()) // If there is no name to the object...
+		nam = tr("Object") + tmp.setNum(actBView->objectMap.count()); // ...name it `object` + number
+
+    // Check whether the chosen name is already in use... 
+	while (actBView->objectMap.contains(nam)){ 
+
+        // If the name already exists and ends with a number in parentheses,
+        // we replace that number by its successor.
+        // Otherwise, append a 'new' number in parentheses. 
+
+        QRegularExpression counterRegEx("(\\()(\\d+)(\\))$"); // Setup RegEx with 'matching groups'
+        QRegularExpressionMatch counterMatch; 
+        if(nam.contains(counterRegEx, &counterMatch)){ // Check if name ends with number in parentheses
+            bool ok{ false };
+            int currentCounter = counterMatch.captured(2).toInt(&ok); // Group #2 should contain the number 
+            if(ok){ // Make sure conversion from `int` to `QString` succeeded
+                ++currentCounter; // Increase counter
+                QString counterStr = "("+QString::number(currentCounter)+")"; // Create new string to append to name.
+                nam = nam.replace(counterRegEx, counterStr); // Replace the part we matched earlier.
+                continue; // We're done; Restart loop and check if we have a unique name now.
+            }
+        }
+
+        // We should only reach this part, if there was no match to the regex, 
+        // or if something went wrong with integer to string conversion.
+        // In this case, we just append a 'new' number.
+		nam += "("+ tmp.setNum(m_tempCount) + ")"; // Append number at the end, e.g. `name (0)`
+        ++m_tempCount; // Increase counter and repeat until unique name is found.
+        
+    } // end while
+
+	Query dia(this, "tt", 1, tr("&Name:"), tr("New Entry")); // Query to validate string
 	dia.setValidator(QRegExp("[\\w()]+"));
 	dia.setEditText(nam, true);
 	dia.setTestList(activeBView->objectMap.keys());
Index: scribus/ui/scrapbookpalette.h
===================================================================
--- scribus/ui/scrapbookpalette.h	(Revision 25096)
+++ scribus/ui/scrapbookpalette.h	(Arbeitskopie)
@@ -34,6 +34,17 @@
 	BibView( QWidget* parent);
 	~BibView() {};
 
+    /**
+    * Add an object to the scrapbook.
+    * Creates a `struct Elem` from the parameters and 
+    * adds it to the srapbook.
+    * @param name The name of the new object.
+    * @param daten The data associated with the object.
+    * @param Bild Preview image
+    * @param isDir Whether the object is a directory
+    * @param isRaster Whether the object is a raster image.
+    * @param isVector Whether the object is a vector.
+    */
 	void addObject(const QString& name, const QString& daten, const QPixmap& Bild, bool isDir = false, bool isRaster = false, bool isVector = false);
 	void checkForImg(const QDomElement& elem, bool &hasImage);
 	void checkAndChange(const QString& text, const QString& nam, const QString& dir);
