Index: branches/network/src/lib/graphics/importer/material.cc
===================================================================
--- branches/network/src/lib/graphics/importer/material.cc	(revision 6690)
+++ branches/network/src/lib/graphics/importer/material.cc	(revision 6693)
@@ -81,5 +81,5 @@
     ResourceManager::getInstance()->unload(this->diffuseTexture);
   if (m.diffuseTexture != NULL)
-    this->diffuseTexture = m.diffuseTexture; /// HACK shoudl be:(Texture*)ResourceManager::getInstance()->load();
+    this->diffuseTexture = (Texture*)ResourceManager::getInstance()->copy(m.diffuseTexture);
   this->ambientTexture = NULL; /// FIXME
   this->specularTexture = NULL; /// FIXME
@@ -303,5 +303,5 @@
   //! @todo Textures from .mtl-file need special care.
   if (dMap != NULL)
-    this->diffuseTexture = (Texture*)ResourceManager::getInstance()->load(dMap, IMAGE, RP_GAME, (void*)&target);
+    this->diffuseTexture = (Texture*)ResourceManager::getInstance()->load(dMap, IMAGE, RP_GAME, (int)target);
   else
     this->diffuseTexture = NULL;
Index: branches/network/src/lib/graphics/importer/md2Model.cc
===================================================================
--- branches/network/src/lib/graphics/importer/md2Model.cc	(revision 6690)
+++ branches/network/src/lib/graphics/importer/md2Model.cc	(revision 6693)
@@ -78,5 +78,5 @@
 {
   /* this creates the data container via ressource manager */
-  this->data = (MD2Data*)ResourceManager::getInstance()->load(modelFileName, MD2, RP_GAME, (void*)skinFileName);
+  this->data = (MD2Data*)ResourceManager::getInstance()->load(modelFileName, MD2, RP_GAME, skinFileName);
   if( unlikely(this->data == NULL))
     PRINTF(0)("The model was not found, MD2Model Loader finished abnormaly. Update the data-repos\n");
Index: branches/network/src/lib/graphics/shader.cc
===================================================================
--- branches/network/src/lib/graphics/shader.cc	(revision 6690)
+++ branches/network/src/lib/graphics/shader.cc	(revision 6693)
@@ -106,5 +106,5 @@
 Shader* Shader::getShader(const char* vertexShaderFile, const char* fragmentShaderFile)
 {
-  return (Shader*)ResourceManager::getInstance()->load(vertexShaderFile, SHADER,  RP_LEVEL, (void*)fragmentShaderFile);
+  return (Shader*)ResourceManager::getInstance()->load(vertexShaderFile, SHADER,  RP_LEVEL, fragmentShaderFile);
 }
 
Index: branches/network/src/lib/graphics/text_engine/text.cc
===================================================================
--- branches/network/src/lib/graphics/text_engine/text.cc	(revision 6690)
+++ branches/network/src/lib/graphics/text_engine/text.cc	(revision 6693)
@@ -92,5 +92,5 @@
   if (fontFile != NULL)
   {
-    tmpFont = (Font*)ResourceManager::getInstance()->load(fontFile, TTF, RP_GAME, &fontSize);
+    tmpFont = (Font*)ResourceManager::getInstance()->load(fontFile, TTF, RP_GAME, (int)fontSize);
     if (tmpFont != NULL)
       this->font = tmpFont;
Index: branches/network/src/lib/lang/base_object.cc
===================================================================
--- branches/network/src/lib/lang/base_object.cc	(revision 6690)
+++ branches/network/src/lib/lang/base_object.cc	(revision 6693)
@@ -13,5 +13,5 @@
    ### File Specific:
    main-programmer: Patrick Boenzli
-   co-programmer: ...
+   co-programmer: Benjamin Grauer
 */
 #define DEBUG_SPECIAL_MODULE DEBUG_MODULE_BASE
Index: branches/network/src/lib/particles/Makefile.am
===================================================================
--- branches/network/src/lib/particles/Makefile.am	(revision 6690)
+++ branches/network/src/lib/particles/Makefile.am	(revision 6693)
@@ -11,4 +11,5 @@
 			spark_particles.cc \
 			model_particles.cc \
+			dot_particles.cc \
 			\
 			quick_animation.cc
@@ -22,4 +23,5 @@
 			spark_particles.h \
 			model_particles.h \
+			dot_particles.h \
 			\
 			quick_animation.h
Index: branches/network/src/lib/particles/dot_particles.cc
===================================================================
--- branches/network/src/lib/particles/dot_particles.cc	(revision 6693)
+++ branches/network/src/lib/particles/dot_particles.cc	(revision 6693)
@@ -0,0 +1,119 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program 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, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_GRAPHICS
+
+#include "dot_particles.h"
+
+#include "load_param.h"
+#include "factory.h"
+#include "material.h"
+#include "state.h"
+#include "shell_command.h"
+
+#include "parser/tinyxml/tinyxml.h"
+#include <algorithm>
+
+
+CREATE_FACTORY(DotParticles, CL_DOT_PARTICLES);
+
+SHELL_COMMAND(texture, DotParticles, setMaterialTexture)
+    ->defaultValues(1, "maps/evil-flower.png");
+
+using namespace std;
+
+/**
+ *  standard constructor
+ * @param maxCount the Count of particles in the System
+ * @param type The Type of the DotParticles
+*/
+DotParticles::DotParticles (unsigned int maxCount)
+  : ParticleSystem(maxCount)
+{
+  this->init();
+}
+
+/**
+ * @brief creates a Particle System out of a XML-element
+ * @param root: the XML-element to load from
+ */
+DotParticles::DotParticles(const TiXmlElement* root)
+{
+  this->init();
+  if (root != NULL)
+    this->loadParams(root);
+}
+
+/**
+ *  standard deconstructor
+*/
+DotParticles::~DotParticles()
+{ }
+
+/**
+ * @brief initializes the DotParticles with default values
+*/
+void DotParticles::init()
+{
+  this->setClassID(CL_DOT_PARTICLES, "DotParticles");
+
+  this->material.setDiffuseMap("maps/radial-trans-noise.png");
+}
+
+
+/**
+ * loads Parameters from a TiXmlElement
+ * @param root the XML-element to load from.
+ */
+void DotParticles::loadParams(const TiXmlElement* root)
+{
+  ParticleSystem::loadParams(root);
+
+  LoadParam(root, "texture", this, DotParticles, setMaterialTexture);
+}
+
+/**
+ * @brief draws all the Particles of this System
+ *
+ * The Cases in this Function all do the same:
+ * Drawing all the particles with the appropriate Type.
+ * This is just the fastest Way to do this, but will most likely be changed in the future.
+ */
+void DotParticles::draw() const
+{
+  glPushAttrib(GL_ENABLE_BIT);
+
+  GLboolean checkLight = false;
+  glGetBooleanv(GL_LIGHTING, &checkLight);
+  if (checkLight == GL_TRUE)
+    glDisable(GL_LIGHTING);
+
+  glMatrixMode(GL_MODELVIEW);
+  glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA);
+
+  Particle* drawPart = particles;
+  //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+
+  glBegin(GL_POINTS);
+  while (likely(drawPart != NULL))
+  {
+    glColor4fv(drawPart->color);
+    glVertex3f(drawPart->position.x, drawPart->position.y, drawPart->position.z);
+
+    drawPart = drawPart->next;
+  }
+  glEnd();
+  glPopAttrib();
+}
Index: branches/network/src/lib/particles/dot_particles.h
===================================================================
--- branches/network/src/lib/particles/dot_particles.h	(revision 6693)
+++ branches/network/src/lib/particles/dot_particles.h	(revision 6693)
@@ -0,0 +1,37 @@
+/*!
+ * @file dot_particles.h
+
+*/
+
+#ifndef _DOT_PARTICLE_SYSTEM_H
+#define _DOT_PARTICLE_SYSTEM_H
+
+#include "particle_system.h"
+#include "material.h"
+
+//! A class to handle ParticleSystems
+class DotParticles : public ParticleSystem
+{
+
+public:
+  DotParticles(unsigned int maxCount = PARTICLE_DEFAULT_MAX_COUNT);
+  DotParticles(const TiXmlElement* root);
+  virtual ~DotParticles();
+
+  virtual void loadParams(const TiXmlElement* root);
+
+  void setMaterialTexture(const char* textureFile);
+
+  /** @returns the Material that lies on this particles */
+  inline const Material* getMaterial() const { return &this->material; };
+
+  virtual void draw() const;
+
+private:
+  void init();
+
+private:
+  Material          material;            //!< A Material for all the Particles.
+};
+
+#endif /* _DOT_PARTICLE_SYSTEM_H */
Index: branches/network/src/lib/particles/model_particles.cc
===================================================================
--- branches/network/src/lib/particles/model_particles.cc	(revision 6690)
+++ branches/network/src/lib/particles/model_particles.cc	(revision 6693)
@@ -61,21 +61,5 @@
 */
 ModelParticles::~ModelParticles()
-{
-  // deleting all the living Particles
-  while (this->particles)
-  {
-    Particle* tmpDelPart = this->particles;
-    this->particles = this->particles->next;
-    delete tmpDelPart;
-  }
-
-  // deleting all the dead particles
-  while (this->deadList)
-  {
-    Particle* tmpDelPart = this->deadList;
-    this->deadList = this->deadList->next;
-    delete tmpDelPart;
-  }
-}
+{ }
 
 /**
Index: branches/network/src/lib/particles/spark_particles.cc
===================================================================
--- branches/network/src/lib/particles/spark_particles.cc	(revision 6690)
+++ branches/network/src/lib/particles/spark_particles.cc	(revision 6693)
@@ -60,21 +60,5 @@
 */
 SparkParticles::~SparkParticles()
-{
-  // deleting all the living Particles
-  while (this->particles)
-  {
-    Particle* tmpDelPart = this->particles;
-    this->particles = this->particles->next;
-    delete tmpDelPart;
-  }
-
-  // deleting all the dead particles
-  while (this->deadList)
-  {
-    Particle* tmpDelPart = this->deadList;
-    this->deadList = this->deadList->next;
-    delete tmpDelPart;
-  }
-}
+{ }
 
 /**
Index: branches/network/src/lib/particles/sprite_particles.cc
===================================================================
--- branches/network/src/lib/particles/sprite_particles.cc	(revision 6690)
+++ branches/network/src/lib/particles/sprite_particles.cc	(revision 6693)
@@ -61,21 +61,5 @@
 */
 SpriteParticles::~SpriteParticles()
-{
-  // deleting all the living Particles
-  while (this->particles)
-  {
-    Particle* tmpDelPart = this->particles;
-    this->particles = this->particles->next;
-    delete tmpDelPart;
-  }
-
-  // deleting all the dead particles
-  while (this->deadList)
-  {
-    Particle* tmpDelPart = this->deadList;
-    this->deadList = this->deadList->next;
-    delete tmpDelPart;
-  }
-}
+{ }
 
 /**
@@ -125,6 +109,6 @@
   GLboolean checkLight = false;
   glGetBooleanv(GL_LIGHTING, &checkLight);
-  if (checkLight == GL_TRUE)
-    glDisable(GL_LIGHTING);
+//  if (checkLight == GL_TRUE)
+//    glDisable(GL_LIGHTING);
   glMatrixMode(GL_MODELVIEW);
   glDepthMask(GL_FALSE);
Index: branches/network/src/lib/util/count_pointer.h
===================================================================
--- branches/network/src/lib/util/count_pointer.h	(revision 6693)
+++ branches/network/src/lib/util/count_pointer.h	(revision 6693)
@@ -0,0 +1,56 @@
+/*!
+ * @file count_pointer.h Contains the Counted Pointer Class, that points to Member-Objects.
+ */
+
+#ifndef _COUNT_POINTER_H
+#define _COUNT_POINTER_H
+
+template <typename X> class CountPointer
+{
+public:
+    explicit CountPointer(X* p = 0) // allocate a new counter
+        : itsCounter(0) { if (p) itsCounter = new counter(p); }
+    ~CountPointer() { release(); }
+    CountPointer(const CountPointer& r) { acquire(r.itsCounter); }
+    CountPointer& operator=(const CountPointer& r)
+    {
+        if (this != &r) {
+            release();
+            acquire(r.itsCounter);
+        }
+        return *this;
+    }
+    X& operator*()  const { return *itsCounter->ptr; }
+    X* operator->() const { return itsCounter->ptr; }
+    X* get()        const { return itsCounter ? itsCounter->ptr : 0; }
+    bool unique()   const { return (itsCounter ? itsCounter->count == 1 : true); }
+    virtual unsigned int count() const { return (this->itsCounter ? itsCounter->count : 0); }
+private:
+
+    struct counter {
+        counter(X* p = 0, unsigned c = 1) : ptr(p), count(c) {}
+        X*          ptr;
+        unsigned    count;
+    }* itsCounter;
+
+    void acquire(counter* c)
+    {
+      // increment the count
+        itsCounter = c;
+        if (c) ++c->count;
+    }
+
+    void release()
+    {
+      // decrement the count, delete if it is 0
+        if (itsCounter) {
+            if (--itsCounter->count == 0) {
+                delete itsCounter->ptr;
+                delete itsCounter;
+            }
+            itsCounter = 0;
+        }
+    }
+};
+
+#endif /* _COUNT_POINTER_H */
Index: branches/network/src/lib/util/executor/executor.cc
===================================================================
--- branches/network/src/lib/util/executor/executor.cc	(revision 6690)
+++ branches/network/src/lib/util/executor/executor.cc	(revision 6693)
@@ -60,5 +60,5 @@
   {
     int type = va_arg(parameterList, int);
-    this->defaultValue[i].setType(type);
+    this->defaultValue[i].setType((MT_Type)type);
   }
 }
Index: branches/network/src/lib/util/multi_type.cc
===================================================================
--- branches/network/src/lib/util/multi_type.cc	(revision 6690)
+++ branches/network/src/lib/util/multi_type.cc	(revision 6693)
@@ -122,4 +122,55 @@
 
 /**
+ * @brief checks if the two Multitypes match
+ * @param mt MultiType to check against this one
+ * @returns true on match. false otherwise
+ *
+ * Two MultiType match if and only if
+ *  1. the internal Type is the same
+ *  2. the stored values match
+ */
+bool MultiType::operator==(const MultiType& mt) const
+{
+  if (this->type != mt.type)
+    return false;
+
+  switch (this->type)
+  {
+    case MT_NULL:
+      return true;
+    case MT_BOOL:
+      return (this->value.Bool == mt.value.Bool);
+    case MT_INT:
+      return (this->value.Int == mt.value.Int);
+    case MT_CHAR:
+      return (this->value.Char == mt.value.Char);
+    case MT_FLOAT:
+      return (this->value.Float == mt.value.Float);
+    case MT_STRING:
+      if (this->value.String != NULL && mt.value.String != NULL)
+        return (!strcmp(this->value.String, mt.value.String));
+      else
+        return (this->value.String == NULL && mt.value.String == NULL);
+  }
+}
+
+/**
+ * @brief checks if the internal value matches the boolean value.
+ * @param value to check against this one
+ * @returns true on match. false otherwise
+ *
+ * Two MultiType match if and only if
+ *  1. the stored values match the given Value
+ */
+bool MultiType::operator==(const char* value) const
+{
+  if (this->value.String != NULL && value != NULL)
+    return (!strcmp(this->value.String, value));
+  else
+    return (this->value.String == NULL && value == NULL);
+}
+
+
+/**
  * initializes the MultiType
  */
@@ -136,8 +187,8 @@
  * @param type the new Type
  */
-void MultiType::setType(int type)
+void MultiType::setType(MT_Type type)
 {
   if (this->type != type)
-    this->type = (MT_Type)type;
+    this->type = type;
 }
 
Index: branches/network/src/lib/util/multi_type.h
===================================================================
--- branches/network/src/lib/util/multi_type.h	(revision 6690)
+++ branches/network/src/lib/util/multi_type.h	(revision 6693)
@@ -31,5 +31,4 @@
  */
 class MultiType {
-
   public:
     MultiType();
@@ -42,7 +41,21 @@
     virtual ~MultiType();
 
-    MultiType& operator= (const MultiType& mt);
+    MultiType& operator=(const MultiType& mt);
+    MultiType& operator=(bool value) { this->setBool(value); return *this; };
+    MultiType& operator=(int value) { this->setInt(value); return *this; };
+    MultiType& operator=(float value) { this->setFloat(value); return *this; };
+    MultiType& operator=(char value) { this->setChar(value); return *this; };
+    MultiType& operator=(const char* value) { this->setString(value); return *this; };
 
-    void setType(int type);
+    bool operator==(const MultiType& mt) const;
+    bool operator==(bool value) const { return (this->getBool() == value); };
+    bool operator==(int value) const { return (this->getInt() == value); };
+    bool operator==(float value) const { return (this->getFloat() ==  value); };
+    bool operator==(char value) const { return (this->getChar() == value); };
+    bool operator==(const char* value) const;
+    bool operator==(MT_Type type) const { return (this->type == type); }
+    bool operator!=(MT_Type type) const { return (this->type != type); }
+
+    void setType(MT_Type type);
 
     void setBool(bool value);
@@ -52,4 +65,5 @@
     void setString(const char* value);
 
+    // for your convenience.
     inline void setValue(bool value) { this->setBool(value); };
     inline void setValue(int value) { this->setInt(value); };
@@ -81,5 +95,4 @@
 
   private:
-
     union MultiTypeValue
     {
Index: branches/network/src/lib/util/substring.h
===================================================================
--- branches/network/src/lib/util/substring.h	(revision 6690)
+++ branches/network/src/lib/util/substring.h	(revision 6693)
@@ -16,4 +16,6 @@
   ~SubString();
 
+  const char* operator[](unsigned int i) { return this->getString(i); };
+
   inline unsigned int getCount() { return this->splittersCount; };
   const char* getString(unsigned int i);
