Index: /orxonox/trunk/src/lib/graphics/particles/particle_engine.h
===================================================================
--- /orxonox/trunk/src/lib/graphics/particles/particle_engine.h	(revision 4393)
+++ /orxonox/trunk/src/lib/graphics/particles/particle_engine.h	(revision 4394)
@@ -20,5 +20,10 @@
 };
 
-//! A default singleton class.
+//! The physicsEngine handles and stores Systems and Emitters.
+/**
+   It is responsible for driving on the Particles (tick)
+   It draw particles (draw)
+   and it emitts particles into the system
+*/
 class ParticleEngine : public BaseObject {
 
@@ -48,10 +53,10 @@
  private:
   ParticleEngine(void);
-  static ParticleEngine* singletonRef;
+  static ParticleEngine* singletonRef;        //!< The reference to the engine.
 
-  tList<ParticleSystem>* systemList;
-  tList<ParticleEmitter>* emitterList;
+  tList<ParticleSystem>* systemList;          //!< A list of Systems handled by the ParticleEngine.
+  tList<ParticleEmitter>* emitterList;        //!< A list of Emitters handled by the ParticleEngine.
 
-  tList<ParticleConnection>* connectionList;
+  tList<ParticleConnection>* connectionList;  //!< A list of Connections between Systems and Emitters.
 };
 
Index: /orxonox/trunk/src/lib/graphics/particles/particle_system.h
===================================================================
--- /orxonox/trunk/src/lib/graphics/particles/particle_system.h	(revision 4393)
+++ /orxonox/trunk/src/lib/graphics/particles/particle_system.h	(revision 4394)
@@ -57,7 +57,6 @@
 };
 
-//! A class to handle particle Systems
+//! A class to handle ParticleSystems
 class ParticleSystem : public PhysicsInterface {
-  friend class ParticleEmitter;
 
  public:
@@ -100,4 +99,6 @@
   virtual void applyField(Field* field, float dt);
 
+  void addParticle(const Vector& position, const Vector& velocity, unsigned int data = 0);
+
   void tick(float dt);
   void draw(void) const;
@@ -132,8 +133,5 @@
 
   GLuint* glID;              //!< A List of different gl-List-ID's
-  GLuint dialectCount;       //!< How many different types of particles are there in the Particle System
-
-  void addParticle(const Vector& position, const Vector& velocity, unsigned int data = 0);
-  
+  GLuint dialectCount;       //!< How many different types of particles are there in the Particle System  
 };
 
Index: /orxonox/trunk/src/lib/physics/fields/field.cc
===================================================================
--- /orxonox/trunk/src/lib/physics/fields/field.cc	(revision 4393)
+++ /orxonox/trunk/src/lib/physics/fields/field.cc	(revision 4394)
@@ -18,4 +18,6 @@
 #include "field.h"
 
+#include "physics_engine.h"
+
 using namespace std;
 
@@ -30,4 +32,6 @@
    this->setMagnitude(1);
    this->setAttenuation(0);
+   
+   PhysicsEngine::getInstance()->addField(this);
 }
 
@@ -39,5 +43,5 @@
 Field::~Field () 
 {
-  // delete what has to be deleted here
+   PhysicsEngine::getInstance()->removeField(this);
 }
 
Index: /orxonox/trunk/src/lib/physics/physics_connection.h
===================================================================
--- /orxonox/trunk/src/lib/physics/physics_connection.h	(revision 4393)
+++ /orxonox/trunk/src/lib/physics/physics_connection.h	(revision 4394)
@@ -21,5 +21,5 @@
 
 //! A class that Handles Physical Connection between subjects
-class PhysicsConnection : virtual public BaseObject
+class PhysicsConnection : public BaseObject
 {
 
Index: /orxonox/trunk/src/lib/physics/physics_engine.cc
===================================================================
--- /orxonox/trunk/src/lib/physics/physics_engine.cc	(revision 4393)
+++ /orxonox/trunk/src/lib/physics/physics_engine.cc	(revision 4394)
@@ -34,4 +34,5 @@
    this->connections = new tList<PhysicsConnection>;
    this->interfaces = new tList<PhysicsInterface>;
+   this->fields = new tList<Field>;
 }
 
@@ -81,4 +82,26 @@
 {
   this->interfaces->remove(physicsInterface);  
+}
+
+/**
+   \brief adds a Field to the list of handeled fields
+   \param field the field to add
+
+   this is normally done in the constructor of any Field
+*/
+void PhysicsEngine::addField(Field* field)
+{
+  this->fields->add(field);
+}
+
+/**
+   \brief removes a Field from the list of handeled fields
+   \param field the field to remove
+
+   this is normally done in the destructor of any Field
+*/
+void PhysicsEngine::removeField(Field* field)
+{
+  this->fields->remove(field);
 }
 
Index: /orxonox/trunk/src/lib/physics/physics_engine.h
===================================================================
--- /orxonox/trunk/src/lib/physics/physics_engine.h	(revision 4393)
+++ /orxonox/trunk/src/lib/physics/physics_engine.h	(revision 4394)
@@ -12,4 +12,5 @@
 #include "physics_connection.h"
 #include "physics_interface.h"
+#include "field.h"
 
 // Forward Declaration
@@ -27,4 +28,6 @@
   void removePhysicsInterface(PhysicsInterface* physicsInterface);
 
+  void addField(Field* field);
+  void removeField(Field* field);
 
   void addConnection(PhysicsConnection* connection);
@@ -40,4 +43,5 @@
 
   tList<PhysicsInterface>* interfaces;     //!< a list of physically based objects
+  tList<Field>* fields;                    //!< a list of physicsl fields.
   tList<PhysicsConnection>* connections;   //!< a list of physical connections
 };
