Index: src/Potentials/Makefile.am
===================================================================
--- src/Potentials/Makefile.am	(revision fdfc52b16383c4991112c870557e68e27a460258)
+++ src/Potentials/Makefile.am	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
@@ -4,13 +4,4 @@
 POTENTIALSSOURCE = \
   Potentials/CompoundPotential.cpp \
-  Potentials/PartialNucleiChargeFitter.cpp \
-  Potentials/ParticleTypeCheckers.cpp \
-  Potentials/Particles/Particle.cpp \
-  Potentials/Particles/ParticleRegistry.cpp \
-  Potentials/PotentialDeserializer.cpp \
-  Potentials/PotentialFactory.cpp \
-  Potentials/PotentialRegistry.cpp \
-  Potentials/PotentialSerializer.cpp \
-  Potentials/SerializablePotential.cpp \
   Potentials/InternalCoordinates/CoordinatorFactory.cpp \
   Potentials/InternalCoordinates/FourBody_ImproperAngle.cpp \
@@ -19,4 +10,15 @@
   Potentials/InternalCoordinates/ThreeBody_Angle.cpp \
   Potentials/InternalCoordinates/TwoBody_Length.cpp \
+  Potentials/PartialNucleiChargeFitter.cpp \
+  Potentials/ParticleTypeCheckers.cpp \
+  Potentials/Particles/Particle.cpp \
+  Potentials/Particles/ParticleFactory.cpp \
+  Potentials/Particles/ParticleRegistry.cpp \
+  Potentials/PotentialDeserializer.cpp \
+  Potentials/Particles/StreamFactory_Particle.cpp \
+  Potentials/PotentialFactory.cpp \
+  Potentials/PotentialRegistry.cpp \
+  Potentials/PotentialSerializer.cpp \
+  Potentials/SerializablePotential.cpp \
   Potentials/Specifics/ConstantPotential.cpp \
   Potentials/Specifics/FourBodyPotential_Improper.cpp \
@@ -44,5 +46,7 @@
   Potentials/ParticleTypeCheckers.hpp \
   Potentials/Particles/Particle.hpp \
+  Potentials/Particles/ParticleFactory.hpp \
   Potentials/Particles/ParticleRegistry.hpp \
+  Potentials/Particles/StreamFactory_Particle.hpp \
   Potentials/PotentialDeserializer.hpp \
   Potentials/PotentialFactory.hpp \
@@ -52,5 +56,6 @@
   Potentials/Specifics/PotentialTypes.hpp \
   Potentials/Specifics/PotentialTypes.def \
-  Potentials/Specifics/PotentialTypes.undef
+  Potentials/Specifics/PotentialTypes.undef \
+  Potentials/StreamFactory.hpp
 
 if CONDLEVMAR
Index: src/Potentials/Particles/Particle.cpp
===================================================================
--- src/Potentials/Particles/Particle.cpp	(revision fdfc52b16383c4991112c870557e68e27a460258)
+++ src/Potentials/Particles/Particle.cpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
@@ -115,4 +115,18 @@
 }
 
+Particle::Particle(const periodentafel &_periode) :
+    periode(_periode),
+    charge(0.),
+    mass(0.),
+    dof(3),
+    atomic_number(-1),
+    sigma(0.),
+    epsilon(0.),
+    sigma_14(0.),
+    epsilon_14(0.)
+{
+  // not registered as it does not have a name yet
+}
+
 void Particle::stream_to(std::ostream &ost) const
 {
Index: src/Potentials/Particles/Particle.hpp
===================================================================
--- src/Potentials/Particles/Particle.hpp	(revision fdfc52b16383c4991112c870557e68e27a460258)
+++ src/Potentials/Particles/Particle.hpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
@@ -82,4 +82,7 @@
 
 private:
+  //!> grant factory access to default cstor.
+  friend class ParticleFactory;
+
   /** Default constructor for class Particle.
    *
@@ -87,6 +90,7 @@
    * unique name.
    *
+   * \param _periode reference to periodentafel for looking up element nr
    */
-  Particle();
+  Particle(const periodentafel &_periode);
 
   /** Helper function to find index to a parameter name.
Index: src/Potentials/Particles/ParticleFactory.cpp
===================================================================
--- src/Potentials/Particles/ParticleFactory.cpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
+++ src/Potentials/Particles/ParticleFactory.cpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
@@ -0,0 +1,71 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2016 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/>.
+ */
+
+/*
+ * ParticleFactory.cpp
+ *
+ *  Created on: Feb 27, 2016
+ *      Author: heber
+ */
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "ParticleFactory.hpp"
+
+#include "CodePatterns/Singleton_impl.hpp"
+
+#include "Potentials/Particles/Particle.hpp"
+#include "Element/periodentafel.hpp"
+#include "World.hpp"
+
+#include "Potentials/Particles/ParticleRegistry.hpp"
+
+Particle* ParticleFactory::getDefaultParticle() const
+{
+  periodentafel * const periode = World::getInstance().getPeriode();
+  Particle * const particle = new Particle(*periode);
+  return particle;
+}
+
+Particle *
+ParticleFactory::createInstance(
+    const std::string &_name,
+    const atomicNumber_t _element,
+    const double _charge) const
+{
+  periodentafel * const periode = World::getInstance().getPeriode();
+  Particle * const particle = new Particle(*periode, _name, _element);
+  particle->charge =_charge;
+
+  // particle is already registered
+//  ParticleRegistry::getInstance().registerInstance(particle);
+
+  return particle;
+}
+
+CONSTRUCT_SINGLETON(ParticleFactory)
Index: src/Potentials/Particles/ParticleFactory.hpp
===================================================================
--- src/Potentials/Particles/ParticleFactory.hpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
+++ src/Potentials/Particles/ParticleFactory.hpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
@@ -0,0 +1,68 @@
+/*
+ * ParticleFactory.hpp
+ *
+ *  Created on: Feb 27, 2016
+ *      Author: heber
+ */
+
+
+#ifndef PARTICLEFACTORY_HPP_
+#define PARTICLEFACTORY_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string>
+
+#include "CodePatterns/Singleton.hpp"
+
+#include "Potentials/Particles/Particle.hpp"
+#include "Potentials/Particles/StreamFactory_Particle.hpp"
+#include "types.hpp"
+
+class ParticleFactory :
+    public Singleton<ParticleFactory>,
+    public StreamFactory<Particle>
+{
+  //!> make Singleton template friend
+  friend class Singleton<ParticleFactory>;
+
+protected:
+
+  /** Implementing function for constructing default particle, required for
+   * StreamFactory specialization.
+   *
+   * \return default constructed particle
+   */
+  virtual Particle* getDefaultParticle() const;
+
+public:
+
+  /** Static function to create a single particle instance.
+   *
+   * \param _type this is not needed for particles
+   * \param _input stream from which to take parameters to instantiate
+   */
+  Particle * createInstance(
+      const std::string &,
+      std::istream &_input) const;
+
+  /** Static function to create a single particle instance.
+   *
+   * \param _name name of particle
+   * \param _element represented element
+   * \param _charge (partial) charge of this particle
+   */
+  Particle * createInstance(
+      const std::string &_name,
+      const atomicNumber_t _element,
+      const double _charge) const;
+
+private:
+  ParticleFactory () {}
+  virtual ~ParticleFactory () {}
+};
+
+#endif /* PARTICLEFACTORY_HPP_ */
Index: src/Potentials/Particles/StreamFactory_Particle.cpp
===================================================================
--- src/Potentials/Particles/StreamFactory_Particle.cpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
+++ src/Potentials/Particles/StreamFactory_Particle.cpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
@@ -0,0 +1,64 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2016 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/>.
+ */
+
+/*
+ * StreamFactory_Particle_impl.hpp
+ *
+ *  Created on: Feb 28, 2016
+ *      Author: heber
+ */
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "CodePatterns/Log.hpp"
+
+#include "Potentials/Exceptions.hpp"
+#include "Potentials/Particles/Particle.hpp"
+#include "Potentials/Particles/StreamFactory_Particle.hpp"
+
+StreamFactory<Particle>::~StreamFactory<Particle>()
+{}
+
+Particle *
+StreamFactory<Particle>::createInstance(
+    const std::string &,
+    std::istream &_input) const
+{
+  Particle * const particle = getDefaultParticle();
+  try {
+    particle->stream_from(_input);
+  } catch (SerializerMissingValueException &e) {
+    ELOG(1, "Missing value for particle in line " << e.what());
+  }
+  // when stream is empty (e.g. empty new line), atomic_number is not reset
+  if (particle->atomic_number != (atomicNumber_t)-1)
+    return particle;
+  else
+    return NULL;
+}
+
Index: src/Potentials/Particles/StreamFactory_Particle.hpp
===================================================================
--- src/Potentials/Particles/StreamFactory_Particle.hpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
+++ src/Potentials/Particles/StreamFactory_Particle.hpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
@@ -0,0 +1,44 @@
+/*
+ * StreamFactory_Particle.hpp
+ *
+ *  Created on: Feb 28, 2016
+ *      Author: heber
+ */
+
+
+#ifndef STREAMFACTORY_PARTICLE_HPP_
+#define STREAMFACTORY_PARTICLE_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Potentials/StreamFactory.hpp"
+
+template <>
+struct StreamFactory<Particle>
+{
+  virtual ~StreamFactory<Particle>();
+
+  /** Creates an instance of the requested particle.
+   *
+   * \param serialized stream to parser SerializablePotential from
+   */
+  Particle *createInstance(
+      const std::string &,
+      std::istream &serialized) const;
+
+private:
+
+  /** Helper function to get a default constructed particle.
+   *
+   * This has to be implemented by inheriting factory class.
+   *
+   * \return default constructed particle instance
+   */
+  virtual Particle* getDefaultParticle() const=0;
+
+};
+
+#endif /* STREAMFACTORY_PARTICLE_HPP_ */
Index: src/Potentials/StreamFactory.hpp
===================================================================
--- src/Potentials/StreamFactory.hpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
+++ src/Potentials/StreamFactory.hpp	(revision 086e307a911bc23c417e17f2a429cb55a17d6b5e)
@@ -0,0 +1,38 @@
+/*
+ * streamFactory.hpp
+ *
+ *  Created on: Feb 27, 2016
+ *      Author: heber
+ */
+
+
+#ifndef STREAMFACTORY_HPP_
+#define STREAMFACTORY_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <iosfwd>
+#include <string>
+
+/** Defines template interface for a factory class.
+ *
+ */
+template <class T>
+struct StreamFactory
+{
+  /** Static creator function for a single instance.
+   *
+   * \param _type specific type name
+   * \param _input input stream that contains all information required to
+   *        create the instance
+   */
+  T* createInstance(
+      const std::string &_type,
+      std::istream &_input) const;
+};
+
+
+#endif /* STREAMFACTORY_HPP_ */
