Index: src/Geometry/GeometryObject.cpp
===================================================================
--- src/Geometry/GeometryObject.cpp	(revision 1e6fb74f42aa34d772057634b8b2e4a427fbb507)
+++ src/Geometry/GeometryObject.cpp	(revision 1e6fb74f42aa34d772057634b8b2e4a427fbb507)
@@ -0,0 +1,47 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2017 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/>.
+ */
+
+/*
+ * GeometryObject.cpp
+ *
+ *  Created on: Mar 28, 2017
+ *      Author: heber
+ */
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+//#include "CodePatterns/MemDebug.hpp"
+
+#include <iostream>
+
+#include "Geometry/GeometryObject.hpp"
+
+std::ostream& operator<<(std::ostream &out, const GeometryObject &_vec)
+{
+  out << "object '" << _vec.getName() << "' at " << _vec.getVector();
+  return out;
+}
+
Index: src/Geometry/GeometryObject.hpp
===================================================================
--- src/Geometry/GeometryObject.hpp	(revision 1e6fb74f42aa34d772057634b8b2e4a427fbb507)
+++ src/Geometry/GeometryObject.hpp	(revision 1e6fb74f42aa34d772057634b8b2e4a427fbb507)
@@ -0,0 +1,71 @@
+/*
+ * GeometryObject.hpp
+ *
+ *  Created on: Mar 25, 2017
+ *      Author: heber
+ */
+
+
+#ifndef GEOMETRY_GEOMETRYOBJECT_HPP_
+#define GEOMETRY_GEOMETRYOBJECT_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <iosfwd>
+#include <string>
+
+#include "LinearAlgebra/Vector.hpp"
+
+/** This class encapsulates the Vector for use in the storage.
+ *
+ * We need to add a name to the Vector, hence we store it directly
+ * more generally as a GeometryObject (if later other objects such
+ * as lines, planes need to be added).
+ */
+class GeometryObject
+{
+public:
+  /** Cstor for the GeometryObject.
+   *
+   * \param _v vector to use
+   * \param _name name to set
+   */
+  GeometryObject(const Vector &_v, const std::string &_name) :
+    name(_name),
+    v(_v)
+  {}
+
+  /** Getter for the object.
+   *
+   * \return vector v
+   */
+  Vector getVector() const
+  { return v; }
+
+  /** Setter for the name of the object.
+   *
+   * \param _name
+   */
+  void setName(const std::string &_name)
+  { name = _name; }
+
+  /** Getter for the name of the object.
+   *
+   * \return name
+   */
+  const std::string& getName() const
+  { return name; }
+
+private:
+  //!> name of object
+  std::string name;
+  //!> contained geometry, namely a vector
+  Vector v;
+};
+
+std::ostream& operator<<(std::ostream &, const GeometryObject &_vec);
+
+#endif /* GEOMETRY_GEOMETRYOBJECT_HPP_ */
Index: src/Geometry/GeometryRegistry.cpp
===================================================================
--- src/Geometry/GeometryRegistry.cpp	(revision 1e6fb74f42aa34d772057634b8b2e4a427fbb507)
+++ src/Geometry/GeometryRegistry.cpp	(revision 1e6fb74f42aa34d772057634b8b2e4a427fbb507)
@@ -0,0 +1,96 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2017 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/>.
+ */
+
+/*
+ * GeometryRegistry.cpp
+ *
+ *  Created on: Mar 25, 2017
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+//#include "CodePatterns/MemDebug.hpp"
+
+#include "GeometryRegistry.hpp"
+
+#include "CodePatterns/Singleton_impl.hpp"
+#include "CodePatterns/Registry_impl.hpp"
+#include "CodePatterns/Observer/Channels.hpp"
+
+GeometryRegistry::GeometryRegistry() :
+  Observable::Observable("GeometryRegistry")
+{
+  Channels *OurChannel = new Channels;
+  Observable::insertNotificationChannel( std::make_pair(static_cast<Observable *>(this), OurChannel) );
+  // add instance for each notification type
+  for (size_t type = 0; type < NotificationType_MAX; ++type)
+    OurChannel->addChannel(type);
+
+  _lastchanged = NULL;
+
+  fillRegistry();
+}
+
+GeometryRegistry::~GeometryRegistry()
+{
+  cleanup();
+}
+
+void GeometryRegistry::fillRegistry()
+{
+  const GeometryObject zeroVector(zeroVec, std::string("zeroVector"));
+  addGeometry(zeroVector);
+  const GeometryObject unitVectorX(unitVec[0], std::string("unitVectorX"));
+  addGeometry(unitVectorX);
+  const GeometryObject unitVectorY(unitVec[1], std::string("unitVectorY"));
+  addGeometry(unitVectorY);
+  const GeometryObject unitVectorZ(unitVec[2], std::string("unitVectorZ"));
+  addGeometry(unitVectorZ);
+}
+
+void GeometryRegistry::addGeometry(const GeometryObject &_v)
+{
+  OBSERVE;
+  GeometryObject *instance = new GeometryObject(_v);
+  registerInstance(instance);
+  _lastchanged = instance;
+  NOTIFY(GeometryInserted);
+}
+
+void GeometryRegistry::removeGeometry(const std::string &name)
+{
+  GeometryObject *instance = getByName(name);
+  {
+    OBSERVE;
+    _lastchanged = instance;
+    NOTIFY(GeometryRemoved);
+  }
+  unregisterInstance(instance);
+  delete(instance);
+}
+
+CONSTRUCT_SINGLETON(GeometryRegistry)
+CONSTRUCT_REGISTRY(GeometryObject)
Index: src/Geometry/GeometryRegistry.hpp
===================================================================
--- src/Geometry/GeometryRegistry.hpp	(revision 1e6fb74f42aa34d772057634b8b2e4a427fbb507)
+++ src/Geometry/GeometryRegistry.hpp	(revision 1e6fb74f42aa34d772057634b8b2e4a427fbb507)
@@ -0,0 +1,58 @@
+/*
+ * GeometryRegistry.hpp
+ *
+ *  Created on: Mar 25, 2017
+ *      Author: heber
+ */
+
+#ifndef GEOMETRY_GEOMETRYREGISTRY_HPP_
+#define GEOMETRY_GEOMETRYREGISTRY_HPP_
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <map>
+
+#include "CodePatterns/Observer/Observable.hpp"
+#include "CodePatterns/Registry.hpp"
+#include "CodePatterns/Singleton.hpp"
+
+#include "Geometry/GeometryObject.hpp"
+
+
+/** The class GeometryRegistry stores all known GeometryObject's for
+ * retrieval.
+ */
+class GeometryRegistry :
+    public Singleton<GeometryRegistry>,
+    public Registry<GeometryObject>,
+    public Observable
+{
+  friend class Singleton<GeometryRegistry>;
+
+public:
+  void addGeometry(const GeometryObject &_v);
+  void removeGeometry(const std::string &_name);
+
+  enum NotificationType {
+    GeometryInserted,
+    GeometryRemoved,
+    NotificationType_MAX
+  };
+
+  GeometryObject *lastChanged() const { return _lastchanged;  }
+
+private:
+  void fillRegistry();
+
+  // private constructor and destructor due to singleton
+  GeometryRegistry();
+  virtual ~GeometryRegistry();
+
+  GeometryObject *_lastchanged;
+};
+
+#endif /* GEOMETRY_GEOMETRYREGISTRY_HPP_ */
Index: src/Geometry/Makefile.am
===================================================================
--- src/Geometry/Makefile.am	(revision 1e6fb74f42aa34d772057634b8b2e4a427fbb507)
+++ src/Geometry/Makefile.am	(revision 1e6fb74f42aa34d772057634b8b2e4a427fbb507)
@@ -0,0 +1,46 @@
+# PLEASE adhere to the alphabetical ordering in this Makefile!
+# Also indentation by a single tab
+
+GEOMETRYSOURCE = \
+  Geometry/GeometryObject.cpp \
+  Geometry/GeometryRegistry.cpp
+GEOMETRYHEADER = \
+  Geometry/GeometryObject.hpp \
+  Geometry/GeometryRegistry.hpp
+
+
+lib_LTLIBRARIES += libMolecuilderGeometry.la
+libMolecuilderGeometry_la_includedir = $(includedir)/MoleCuilder/
+libMolecuilderGeometry_la_LIBADD = \
+	$(top_builddir)/ThirdParty/LinearAlgebra/src/LinearAlgebra/libLinearAlgebra.la \
+	${CodePatterns_LIBS}
+nobase_libMolecuilderGeometry_la_include_HEADERS = ${GEOMETRYHEADER}
+
+## Define the source file list for the "libexample-@MOLECUILDER_API_VERSION@.la"
+## target.  Note that @MOLECUILDER_API_VERSION@ is not interpreted by Automake and
+## will therefore be treated as if it were literally part of the target name,
+## and the variable name derived from that.
+## The file extension .cc is recognized by Automake, and makes it produce
+## rules which invoke the C++ compiler to produce a libtool object file (.lo)
+## from each source file.  Note that it is not necessary to list header files
+## which are already listed elsewhere in a _HEADERS variable assignment.
+libMolecuilderGeometry_la_SOURCES = ${GEOMETRYSOURCE}
+
+## Instruct libtool to include ABI version information in the generated shared
+## library file (.so).  The library ABI version is defined in configure.ac, so
+## that all version information is kept in one place.
+libMolecuilderGeometry_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(MOLECUILDER_SO_VERSION)
+
+## The generated configuration header is installed in its own subdirectory of
+## $(libdir).  The reason for this is that the configuration information put
+## into this header file describes the target platform the installed library
+## has been built for.  Thus the file must not be installed into a location
+## intended for architecture-independent files, as defined by the Filesystem
+## Hierarchy Standard (FHS).
+## The nodist_ prefix instructs Automake to not generate rules for including
+## the listed files in the distribution on 'make dist'.  Files that are listed
+## in _HEADERS variables are normally included in the distribution, but the
+## configuration header file is generated at configure time and should not be
+## shipped with the source tarball.
+libMolecuilderGeometry_libincludedir = $(libdir)/MoleCuilder/include
+#nodist_libMolecuilderGeometry_libinclude_HEADERS = $(top_builddir)/libmolecuilder_config.h
