Index: /code/trunk/data/levels/includes/pickups_invisible.oxi
===================================================================
--- /code/trunk/data/levels/includes/pickups_invisible.oxi	(revision 6710)
+++ /code/trunk/data/levels/includes/pickups_invisible.oxi	(revision 6710)
@@ -0,0 +1,29 @@
+<PickupRepresentation
+    name = "small Invisibility"
+    description = "Makes you invisible for 5 seconds."
+    spawnerTemplate = "smallinvisiblepickupRepresentation"
+>
+    <pickup>
+        <InvisiblePickup template=smallinvisiblepickup />
+    </pickup>
+</PickupRepresentation>
+
+<PickupRepresentation
+    name = "medium Invisibility"
+    description = "Makes you invisible for 10 seconds."
+    spawnerTemplate = "mediuminvisiblepickupRepresentation"
+>
+    <pickup>
+        <InvisiblePickup template=mediuminvisiblepickup />
+    </pickup>
+</PickupRepresentation>
+
+<PickupRepresentation
+    name = "hunge Invisibility"
+    description = "Makes you invisible for 20 seconds."
+    spawnerTemplate = "hugeinvisiblepickupRepresentation"
+>
+    <pickup>
+        <InvisiblePickup template=hugeinvisiblepickup />
+    </pickup>
+</PickupRepresentation>
Index: /code/trunk/data/levels/pickup_pps_invi.oxw
===================================================================
--- /code/trunk/data/levels/pickup_pps_invi.oxw	(revision 6710)
+++ /code/trunk/data/levels/pickup_pps_invi.oxw	(revision 6710)
@@ -0,0 +1,46 @@
+<?lua
+  include("stats.oxo")
+  include("hudtemplates3.oxo")
+?>
+
+<?lua
+  include("templates/spaceship_assff.oxt")
+  include("templates/spaceship_pirate.oxt")
+  include("templates/pickup_representation_templates_invisible.oxt")
+?>
+
+<Level
+ name         = "Sample"
+ description  = "Just a few tests"
+>
+  <Scene
+    ambientlight = "0.8, 0.8, 0.8"
+    skybox       = "Orxonox/Starbox"
+  >
+
+<?lua
+  include("includes/pickups_invisible.oxi")
+?>
+
+    <PickupSpawner position="-75,0,-100" triggerDistance="10" respawnTime="5" maxSpawnedItems="10">
+        <pickup>
+            <InvisiblePickup template=smallinvisiblepickup />
+        </pickup>
+    </PickupSpawner>
+
+    <PickupSpawner position="-50,0,-100" triggerDistance="10" respawnTime="5" maxSpawnedItems="10">
+        <pickup>
+            <InvisiblePickup template=mediuminvisiblepickup />
+        </pickup>
+    </PickupSpawner>
+
+    <PickupSpawner position="-25,0,-100" triggerDistance="10" respawnTime="5" maxSpawnedItems="10">
+        <pickup>
+            <InvisiblePickup template=hugeinvisiblepickup />
+        </pickup>
+    </PickupSpawner>
+
+    <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0" />
+    <SpawnPoint position="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+  </Scene>
+</Level>
Index: /code/trunk/data/levels/templates/pickup_representation_templates_invisible.oxt
===================================================================
--- /code/trunk/data/levels/templates/pickup_representation_templates_invisible.oxt	(revision 6710)
+++ /code/trunk/data/levels/templates/pickup_representation_templates_invisible.oxt	(revision 6710)
@@ -0,0 +1,72 @@
+<Template name=smallinvisiblepickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.22,0.32,0.86" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.06,0.14,0.63" material="Eye" scale=0.5 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=smallinvisiblepickup>
+  <InvisiblePickup 
+    duration = 5.0
+    activaionType = "immediate"
+    durationType = "once"
+  />
+</Template>
+
+<Template name=mediuminvisiblepickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.22,0.32,0.86" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.06,0.14,0.63" material="Eye" scale=0.7 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=mediuminvisiblepickup>
+  <InvisiblePickup 
+    duration = 10.0
+    activaionType = "immediate"
+    durationType = "once"
+  />
+</Template>
+
+<Template name=hugeinvisiblepickupRepresentation>
+    <PickupRepresentation>
+        <spawner-representation>
+            <StaticEntity>
+                <attached>
+                    <Billboard position="0,0,0" colour="0.22,0.32,0.86" material="Sphere2" scale=0.1>
+                        <attached>
+                            <Billboard position="0,0,0" colour="0.06,0.14,0.63" material="Eye" scale=0.9 />
+                        </attached>
+                    </Billboard>
+                </attached>
+            </StaticEntity>
+        </spawner-representation>
+    </PickupRepresentation>
+</Template>
+
+<Template name=hugeinvisiblepickup>
+  <InvisiblePickup 
+    duration = 20.0
+    activaionType = "immediate"
+    durationType = "once"
+  />
+</Template>
+
Index: /code/trunk/src/modules/pickup/PickupPrereqs.h
===================================================================
--- /code/trunk/src/modules/pickup/PickupPrereqs.h	(revision 6709)
+++ /code/trunk/src/modules/pickup/PickupPrereqs.h	(revision 6710)
@@ -76,4 +76,5 @@
     //items
     class HealthPickup;
+    class InvisiblePickup;
     class MetaPickup;
     class SpeedPickup;
Index: /code/trunk/src/modules/pickup/items/CMakeLists.txt
===================================================================
--- /code/trunk/src/modules/pickup/items/CMakeLists.txt	(revision 6709)
+++ /code/trunk/src/modules/pickup/items/CMakeLists.txt	(revision 6710)
@@ -1,8 +1,6 @@
 ADD_SOURCE_FILES(PICKUP_SRC_FILES
-
   HealthPickup.cc
-
+  InvisiblePickup.cc
+  MetaPickup.cc
   SpeedPickup.cc
-  MetaPickup.cc
-
 )
Index: /code/trunk/src/modules/pickup/items/InvisiblePickup.cc
===================================================================
--- /code/trunk/src/modules/pickup/items/InvisiblePickup.cc	(revision 6710)
+++ /code/trunk/src/modules/pickup/items/InvisiblePickup.cc	(revision 6710)
@@ -0,0 +1,202 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   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
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program 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 this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Benedict Simlinger
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file InvisiblePickup.cc
+    @brief Implementation of the InvisiblePickup class.
+*/
+
+#include "InvisiblePickup.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "util/StringUtils.h"
+
+#include "worldentities/pawns/Pawn.h"
+#include "pickup/PickupIdentifier.h"
+
+#include <sstream>
+
+namespace orxonox
+{
+
+    CreateFactory(InvisiblePickup);
+    
+    /**
+    @brief
+        Constructor. Registers the object and initializes the member variables.
+    */
+    InvisiblePickup::InvisiblePickup(BaseObject* creator) : Pickup(creator)
+    {
+        RegisterObject(InvisiblePickup);
+        //! Defines who is allowed to pick up the pickup.
+        this->initialize(); 
+    }
+    
+    /**
+    @brief
+        Destructor.
+    */
+    InvisiblePickup::~InvisiblePickup()
+    {        
+    }
+    
+    
+    void InvisiblePickup::initializeIdentifier(void)
+    {
+        std::stringstream stream;
+        stream << this->getDuration();
+        std::string type1 = "duration";
+        std::string val1 = stream.str();
+        this->pickupIdentifier_->addParameter(type1, val1);
+    }
+    
+    /**
+    @brief
+    Initializes the member variables.
+    */
+    void InvisiblePickup::initialize(void)
+    {
+        this->duration_ = 0.0f;
+        this->addTarget(ClassIdentifier<Pawn>::getIdentifier());
+    }
+
+    /**
+    @brief
+        Method for creating a HealthPickup object through XML.
+    */
+    void InvisiblePickup::XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode)
+    {
+        SUPER(InvisiblePickup, XMLPort, xmlelement, mode);    
+        XMLPortParam(InvisiblePickup, "duration", setDuration, getDuration, xmlelement, mode);
+        
+        this->initializeIdentifier();
+    }
+    
+    /**
+    @brief
+        Is called when the pickup has transited from used to unused or the other way around.
+    */
+    void InvisiblePickup::changedUsed(void)
+    {
+        SUPER(InvisiblePickup, changedUsed);
+        
+        //! If the pickup is not picked up nothing must be done.
+        if(!this->isPickedUp())
+            return;
+        
+        if (this->isUsed())
+        {
+            this->startPickupTimer(this->getDuration());
+            this->setInvisible(true);
+        }
+        else
+        {
+            this->setInvisible(false);
+            this->destroy();
+        }
+        
+    }
+    
+    /**
+    @brief
+        Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
+    @return
+        A pointer to the Pawn, or NULL if the conversion failed.
+    */
+    Pawn* InvisiblePickup::carrierToPawnHelper(void)
+    {
+        PickupCarrier* carrier = this->getCarrier();
+        Pawn* pawn = dynamic_cast<Pawn*>(carrier);
+        
+        if(pawn == NULL)
+        {
+            COUT(1) << "Invalid PickupCarrier in InvisiblePickup." << std::endl;
+        }
+        return pawn;
+    }
+    
+    /**
+    @brief
+        Creates a duplicate of the input OrxonoxClass.
+    @param item
+        A pointer to the Orxonox class.
+    */
+    void InvisiblePickup::clone(OrxonoxClass*& item)
+    {
+        if(item == NULL)
+            item = new InvisiblePickup(this);
+        
+        SUPER(InvisiblePickup, clone, item);
+        
+        InvisiblePickup* pickup = dynamic_cast<InvisiblePickup*>(item);
+        pickup->setDuration(this->getDuration());
+        pickup->initializeIdentifier();
+    }
+    
+    /**
+    @brief
+        Sets the invisibility.
+    @param invisibility
+        The invisibility.
+    */
+    bool InvisiblePickup::setInvisible(bool invisibility)
+    {
+        Pawn* pawn = this->carrierToPawnHelper();
+        if(pawn == NULL)
+            return false;
+        
+        pawn->setVisible(!invisibility);
+        return true;
+    }
+    
+    /**
+    @brief
+        Sets the duration.
+    @param duration
+        The duration
+    */
+    void InvisiblePickup::setDuration(float duration)
+    {
+        if(duration >= 0.0f)
+        {
+            this->duration_ = duration;
+        }
+        else
+        {
+            COUT(1) << "Invalid duration in InvisiblePickup." << std::endl;
+            this->duration_ = 0.0f;
+        }
+    }
+    
+    void InvisiblePickup::pickupTimerCallback(void)
+    {
+        this->setUsed(false);
+    }
+
+}
Index: /code/trunk/src/modules/pickup/items/InvisiblePickup.h
===================================================================
--- /code/trunk/src/modules/pickup/items/InvisiblePickup.h	(revision 6710)
+++ /code/trunk/src/modules/pickup/items/InvisiblePickup.h	(revision 6710)
@@ -0,0 +1,89 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   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
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program 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 this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Benedict Simlinger
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file InvisiblePickup.h
+    @brief Declaration of the InvisiblePickup class.
+*/
+
+#ifndef _InvisiblePickup_H__
+#define _InvisiblePickup_H__
+
+#include "pickup/PickupPrereqs.h"
+
+#include <string>
+#include <worldentities/pawns/Pawn.h>
+#include "worldentities/StaticEntity.h"
+
+#include "pickup/Pickup.h"
+
+namespace orxonox {
+        
+    /**
+    @brief
+        A pickup that makes the Pawn invisible.
+        There are 2 parameters that can be chosen:
+        1) The activation type: It can be chosen to be either 'immediate' or 'onUse'. The activation type essentially (as indicated by the name) defines when the Pawn will be invisible, either immediately after being picked up or only after the player uses it.
+        2) The duration type: It can be chosen how long the Pawn will be invisibel.
+    @author
+        Benedict Simlinger
+    */
+    class _PickupExport InvisiblePickup : public Pickup
+    {
+        public:
+        
+            InvisiblePickup(BaseObject* creator); //!< Constructor.
+            virtual ~InvisiblePickup(); //!< Destructor.
+            virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode); //!< Method for creating a HealthPickup object through XML.
+            virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around.
+            virtual void clone(OrxonoxClass*& item); //!< Creates a duplicate of the input OrxonoxClass.
+            
+            /**
+            @brief Checks whether the Pawn is invisible.
+            @return Returns if the Pawn is invisible.
+            */
+            inline bool getInvisibility(bool)
+                { return this->invisible_; }
+            inline float getDuration()
+                { return this->duration_; }
+ 
+        protected:
+            bool setInvisible(bool invisibility); //!< Set the Pawn to be invisible or visible again.
+            void setDuration(float duration);
+            void initializeIdentifier(void);
+            virtual void pickupTimerCallback(void); //!< Function that gets called when the timer ends.
+        
+        private:
+            void initialize(void); //!< Initializes the member variables.
+            Pawn* carrierToPawnHelper(void); //!< Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
+            bool invisible_; //!< Helper to remember wether the Pawn is invisible.
+            float duration_; //! Duration of invisibility.
+    };
+}
+
+#endif // _InvisiblePickup_H__
Index: /code/trunk/src/orxonox/interfaces/PickupCarrier.h
===================================================================
--- /code/trunk/src/orxonox/interfaces/PickupCarrier.h	(revision 6709)
+++ /code/trunk/src/orxonox/interfaces/PickupCarrier.h	(revision 6710)
@@ -47,7 +47,9 @@
 namespace orxonox
 {
-    class Pickupable;
+
+    //! Forward-declarations.
     class Pickup;
     class HealthPickup;
+    class InvisiblePickup;
     class MetaPickup;
     class SpeedPickup;
@@ -66,4 +68,5 @@
         friend class Pickup;
         friend class HealthPickup;
+        friend class InvisiblePickup;
         friend class MetaPickup;
         friend class SpeedPickup;
