Index: src/Actions/ShapeAction/CombineShapesAction.cpp
===================================================================
--- src/Actions/ShapeAction/CombineShapesAction.cpp	(revision d5521ec47036e20ef0dfe57aec18003d342c314b)
+++ src/Actions/ShapeAction/CombineShapesAction.cpp	(revision 87ec81f6e60598c7e8637c2750404253a7eca9cc)
@@ -36,4 +36,5 @@
 
 #include "Shapes/BaseShapes.hpp"
+#include "Shapes/ShapeFactory.hpp"
 #include "Shapes/ShapeRegistry.hpp"
 #include "CodePatterns/Log.hpp"
@@ -82,6 +83,11 @@
   if (params.shape_name.get() != "")
     s.setName(params.shape_name.get());
-  else
-    s.setName(ShapeRegistry::getInstance().getDefaultNameForShape(s));
+  else {
+    const std::string baseName = 
+        ShapeFactory::getInstance().getShapeName(s.getType());
+    s.setName(
+        ShapeRegistry::getInstance().getDefaultNameForShape(baseName)
+    );
+  }
   std::string old_name = s.getName();
   std::cout << s.getName() << "\n";
Index: src/Actions/ShapeAction/CreateShapeAction.cpp
===================================================================
--- src/Actions/ShapeAction/CreateShapeAction.cpp	(revision d5521ec47036e20ef0dfe57aec18003d342c314b)
+++ src/Actions/ShapeAction/CreateShapeAction.cpp	(revision 87ec81f6e60598c7e8637c2750404253a7eca9cc)
@@ -59,6 +59,9 @@
   if (params.shape_name.get() != "")
     s.setName(params.shape_name.get());
-  else
-    s.setName(ShapeRegistry::getInstance().getDefaultNameForShape(s));
+  else {
+    const std::string baseName = 
+        ShapeFactory::getInstance().getShapeName(s.getType());
+    s.setName(ShapeRegistry::getInstance().getDefaultNameForShape(baseName));
+  }
   std::string old_name = s.getName();
   std::cout << s.getName() << "\n";
@@ -87,6 +90,9 @@
   if (state->params.shape_name.get() != "")
     s.setName(state->params.shape_name.get());
-  else
-    s.setName(ShapeRegistry::getInstance().getDefaultNameForShape(s));
+  else {
+    const std::string baseName = 
+        ShapeFactory::getInstance().getShapeName(s.getType());
+    s.setName(ShapeRegistry::getInstance().getDefaultNameForShape(baseName));
+  }
   std::string old_name = s.getName();
   std::cout << s.getName() << "\n";
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision d5521ec47036e20ef0dfe57aec18003d342c314b)
+++ src/Makefile.am	(revision 87ec81f6e60598c7e8637c2750404253a7eca9cc)
@@ -184,4 +184,5 @@
   ${THERMOSTATSOURCE} \
   ${TESSELATIONSOURCE} \
+  Shapes/ShapeFactory.cpp \
   AtomIdSet.cpp \
   Box.cpp \
@@ -206,4 +207,5 @@
   ${THERMOSTATHEADER} \
   ${TESSELATIONHEADER} \
+  Shapes/ShapeFactory.hpp \
   AtomIdSet.hpp \
   Box.hpp \
Index: src/Shapes/Makefile.am
===================================================================
--- src/Shapes/Makefile.am	(revision d5521ec47036e20ef0dfe57aec18003d342c314b)
+++ src/Shapes/Makefile.am	(revision 87ec81f6e60598c7e8637c2750404253a7eca9cc)
@@ -5,5 +5,4 @@
   Shapes/BaseShapes.cpp \
   Shapes/Shape.cpp \
-  Shapes/ShapeFactory.cpp \
   Shapes/ShapeOps.cpp \
   Shapes/ShapeRegistry.cpp
@@ -14,5 +13,4 @@
   Shapes/Shape_impl.hpp \
   Shapes/ShapeExceptions.hpp \
-  Shapes/ShapeFactory.hpp \
   Shapes/ShapeOps.hpp \
   Shapes/ShapeOps_impl.hpp \
Index: src/Shapes/ShapeRegistry.cpp
===================================================================
--- src/Shapes/ShapeRegistry.cpp	(revision d5521ec47036e20ef0dfe57aec18003d342c314b)
+++ src/Shapes/ShapeRegistry.cpp	(revision 87ec81f6e60598c7e8637c2750404253a7eca9cc)
@@ -147,7 +147,6 @@
 }
 
-std::string ShapeRegistry::getDefaultNameForShape(Shape s) const
+std::string ShapeRegistry::getDefaultNameForShape(const std::string &baseName) const
 {
-  std::string baseName = ShapeFactory::getInstance().getShapeName(s.getType());
   int n = 1;
   while(true){
Index: src/Shapes/ShapeRegistry.hpp
===================================================================
--- src/Shapes/ShapeRegistry.hpp	(revision d5521ec47036e20ef0dfe57aec18003d342c314b)
+++ src/Shapes/ShapeRegistry.hpp	(revision 87ec81f6e60598c7e8637c2750404253a7eca9cc)
@@ -30,7 +30,5 @@
   void addShape(Shape s);
   void removeShape(const std::string &name);
-  //Shape* getShapeByName(const std::string name);
-  //bool isShapePresentByName(const std::string name) const;
-  std::string getDefaultNameForShape(Shape s) const;
+  std::string getDefaultNameForShape(const std::string &baseName) const;
 
   enum NotificationType {
Index: src/Shapes/unittests/Makefile.am
===================================================================
--- src/Shapes/unittests/Makefile.am	(revision d5521ec47036e20ef0dfe57aec18003d342c314b)
+++ src/Shapes/unittests/Makefile.am	(revision 87ec81f6e60598c7e8637c2750404253a7eca9cc)
@@ -48,9 +48,15 @@
 	../Shapes/unittests/ShapeFactoryUnitTest.hpp \
 	../Shapes/unittests/stubs/ApproximateShapeAreaStub.cpp \
-	../Shapes/unittests/stubs/ApproximateShapeVolumeStub.cpp
+	../Shapes/unittests/stubs/ApproximateShapeVolumeStub.cpp \
+	../Shapes/unittests/stubs/moleculeStub.cpp \
+	../Shapes/unittests/stubs/WorldSelectedMoleculesStub.cpp
 nodist_ShapeFactoryUnitTest_SOURCES = \
 	../Helpers/defs.hpp \
-	../Helpers/defs.cpp
-ShapeFactoryUnitTest_LDADD = $(SHAPELIBS)
+	../Helpers/defs.cpp \
+        ../Shapes/ShapeFactory.cpp \
+        ../Shapes/ShapeFactory.hpp
+ShapeFactoryUnitTest_LDADD = \
+	../libMolecuilderElement.la \
+	$(SHAPELIBS)
 
 ShapeOpsUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
Index: src/Shapes/unittests/stubs/WorldSelectedMoleculesStub.cpp
===================================================================
--- src/Shapes/unittests/stubs/WorldSelectedMoleculesStub.cpp	(revision 87ec81f6e60598c7e8637c2750404253a7eca9cc)
+++ src/Shapes/unittests/stubs/WorldSelectedMoleculesStub.cpp	(revision 87ec81f6e60598c7e8637c2750404253a7eca9cc)
@@ -0,0 +1,87 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * Copyright (C)  2013 Frederik Heber. All rights reserved.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * WorldStub.cpp
+ *
+ *  Created on: Dec 22, 2011
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "World.hpp"
+
+#include "CodePatterns/Observer/Channels.hpp"
+#include "CodePatterns/Observer/Notification.hpp"
+#include "CodePatterns/Observer/ObservedContainer_impl.hpp"
+#include "CodePatterns/Singleton_impl.hpp"
+#include "Descriptors/AtomDescriptor.hpp"
+#include "Descriptors/AtomIdDescriptor_impl.hpp"
+
+#include "IdPool_impl.hpp"
+
+atom* World::_lastchangedatom = NULL;
+
+AtomDescriptor::AtomDescriptor(impl_ptr ptr)
+{}
+
+AtomDescriptor::~AtomDescriptor()
+{}
+
+atom * AtomById(unsigned int i)
+{
+  return NULL;
+}
+
+World::World() :
+    Observable("World"),
+    atoms(this),
+    selectedAtoms(this),
+    atomIdPool(0, 20, 100),
+    molecules(this),
+    selectedMolecules(this),
+    moleculeIdPool(0, 20,100)
+{
+  // observable stuff
+  Channels *OurChannel = new Channels;
+  NotificationChannels.insert( std::make_pair(static_cast<Observable *>(this), OurChannel) );
+  // add instance for each notification type
+  OurChannel->addChannel(World::AtomInserted);
+  OurChannel->addChannel(World::AtomRemoved);
+}
+
+World::~World()
+{}
+
+const std::vector<molecule *> World::getSelectedMolecules() const
+{
+  return std::vector<molecule *>();
+}
+
+CONSTRUCT_SINGLETON(World);
Index: src/Shapes/unittests/stubs/moleculeStub.cpp
===================================================================
--- src/Shapes/unittests/stubs/moleculeStub.cpp	(revision 87ec81f6e60598c7e8637c2750404253a7eca9cc)
+++ src/Shapes/unittests/stubs/moleculeStub.cpp	(revision 87ec81f6e60598c7e8637c2750404253a7eca9cc)
@@ -0,0 +1,60 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2013 Frederik Heber. All rights reserved.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/** \file moleculeStub.cpp
+ *
+ * Stub of class molecule.
+ *
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include <boost/bind.hpp>
+#include <string>
+
+#include "molecule.hpp"
+
+#include "Element/element.hpp"
+#include "Shapes/BaseShapes.hpp"
+
+
+/************************************* Functions for class molecule *********************************/
+
+/** Constructor of class molecule.
+ * Initialises molecule list with correctly referenced start and end, and sets molecule::last_atom to zero.
+ */
+
+const std::string molecule::getName() const{
+  return std::string(name);
+}
+
+Shape molecule::getBoundingShape(const double scale) const
+{
+  // create Sphere around every atom
+  return Sphere();
+}
+
