Index: code/trunk/src/audio/AudioManager.cc
===================================================================
--- code/trunk/src/audio/AudioManager.cc	(revision 1085)
+++ code/trunk/src/audio/AudioManager.cc	(revision 1089)
@@ -60,7 +60,7 @@
 	{
 // 		currentBgSound = 0;
-    currentBgSound = rand() % bgSounds.size();
 		if (bgSounds.size() > 0)
 		{
+      currentBgSound = rand() % bgSounds.size();
 			if(!bgSounds[currentBgSound]->playback())
 			{
@@ -72,5 +72,4 @@
 			}
 		}
-
 	}
 
Index: code/trunk/src/core/Debug.h
===================================================================
--- code/trunk/src/core/Debug.h	(revision 1085)
+++ code/trunk/src/core/Debug.h	(revision 1089)
@@ -260,3 +260,71 @@
 #endif /* ifndef COUT */
 
+
+/////////////////////////////////////////////////////////////////////
+///  CCOUT: Prints output with std::cout and adds the classname   ///
+/////////////////////////////////////////////////////////////////////
+
+#define CCOUT_EXEC(x) \
+  orxonox::OutputHandler::getOutStream().setOutputLevel(x) \
+  << "*** " << this->getIdentifier()->getName() << ": "
+
+#ifndef CCOUT
+ #if ORX_PRINT_DEBUG_OUTPUT
+  #define CCOUT(x) \
+   CCOUT ## x
+
+  #if ORX_HARD_DEBUG_LEVEL >= ORX_ERROR
+   #define CCOUT1  \
+    if (getSoftDebugLevel() >= ORX_ERROR)  \
+     CCOUT_EXEC(1)
+  #else
+   #define CCOUT1 if (ORX_NONE)\
+    CCOUT_EXEC(1)
+  #endif
+
+  #if ORX_HARD_DEBUG_LEVEL >= ORX_WARNING
+   #define CCOUT2 \
+    if (getSoftDebugLevel() >= ORX_WARNING) \
+     CCOUT_EXEC(2)
+  #else
+   #define CCOUT2 if (ORX_NONE) \
+    CCOUT_EXEC(2)
+  #endif
+
+  #if ORX_HARD_DEBUG_LEVEL >= ORX_INFO
+   #define CCOUT3 \
+    if (getSoftDebugLevel() >= ORX_INFO) \
+     CCOUT_EXEC(3)
+  #else
+   #define CCOUT3 if (ORX_NONE) \
+    CCOUT_EXEC(3)
+  #endif
+
+  #if ORX_HARD_DEBUG_LEVEL >= ORX_DEBUG
+   #define CCOUT4 \
+    if (getSoftDebugLevel() >= ORX_DEBUG) \
+     CCOUT_EXEC(4)
+  #else
+   #define CCOUT4 if (ORX_NONE) \
+    CCOUT_EXEC(4)
+  #endif
+
+  #if ORX_HARD_DEBUG_LEVEL >= ORX_vDEBUG
+   #define CCOUT5 \
+    if (getSoftDebugLevel() >= ORX_vDEBUG) \
+     CCOUT_EXEC(5)
+  #else
+   #define CCOUT5 if (ORX_NONE) \
+    CCOUT_EXEC(5)
+  #endif
+
+ #else /* if ORX_PRINT_DEBUG_OUTPUT */
+  #define CCOUT(x) if (ORX_NONE) \
+   CCOUT_EXEC(5)
+ #endif /* if ORX_PRINT_DEBUG_OUTPUT */
+
+ #define CCOUT0 \
+  CCOUT_EXEC(0)
+#endif /* ifndef CCOUT */
+
 #endif /* _Debug_H__ */
Index: code/trunk/src/core/InputManager.cc
===================================================================
--- code/trunk/src/core/InputManager.cc	(revision 1085)
+++ code/trunk/src/core/InputManager.cc	(revision 1089)
@@ -53,4 +53,5 @@
       handlerGUI_(0), handlerBuffer_(0), handlerGame_(0)
   {
+    RegisterObject(InputManager);
   }
 
Index: code/trunk/src/orxonox/Orxonox.cc
===================================================================
--- code/trunk/src/orxonox/Orxonox.cc	(revision 1085)
+++ code/trunk/src/orxonox/Orxonox.cc	(revision 1089)
@@ -75,5 +75,4 @@
 #include "tools/Timer.h"
 #include "hud/HUD.h"
-//#include "objects/weapon/BulletManager.h"
 
 // FIXME: is this really file scope?
@@ -140,5 +139,4 @@
     this->auMan_ = 0;
     this->inputHandler_ = 0;
-    //this->root_ = 0;
     // turn on frame smoothing by setting a value different from 0
     this->frameSmoothingTime_ = 0.0f;
@@ -153,6 +151,4 @@
   {
     // keep in mind: the order of deletion is very important!
-//    if (this->bulletMgr_)
-//      delete this->bulletMgr_;
     if (this->orxonoxHUD_)
       delete this->orxonoxHUD_;
@@ -172,9 +168,10 @@
 
   /**
-   * error kills orxonox
-   */
-  void Orxonox::abortImmediate(/* some error code */)
-  {
-    //TODO: destroy and destruct everything and print nice error msg
+    @brief Immediately deletes the orxonox object.
+    Never use if you can help it while rendering!
+  */
+  void Orxonox::abortImmediateForce()
+  {
+    COUT(1) << "*** Orxonox Error: Orxonox object was unexpectedly destroyed." << std::endl;
     delete this;
   }
@@ -185,4 +182,5 @@
   void Orxonox::abortRequest()
   {
+    COUT(3) << "*** Orxonox: Abort requested." << std::endl;
     bAbort_ = true;
   }
@@ -225,5 +223,5 @@
     ar.checkArgument("data", this->dataPath_, false);
     ar.checkArgument("ip", serverIp_, false);
-    if(ar.errorHandling()) abortImmediate();
+    if(ar.errorHandling()) abortImmediateForce();
     if(mode == std::string("client"))
     {
@@ -248,5 +246,5 @@
     ogre_->setup();
     //root_ = ogre_->getRoot();
-    if(!ogre_->load(this->dataPath_)) abortImmediate(/* unable to load */);
+    if(!ogre_->load(this->dataPath_)) abortImmediateForce(/* unable to load */);
 
     server_g = new network::Server();
@@ -263,5 +261,5 @@
     else
       client_g = new network::Client(serverIp_, NETWORK_PORT);
-    if(!ogre_->load(this->dataPath_)) abortImmediate(/* unable to load */);
+    if(!ogre_->load(this->dataPath_)) abortImmediateForce(/* unable to load */);
   }
 
@@ -272,6 +270,5 @@
     ogre_->setConfigPath(path);
     ogre_->setup();
-    //root_ = ogre_->getRoot();
-    if(!ogre_->load(this->dataPath_)) abortImmediate(/* unable to load */);
+    if(!ogre_->load(this->dataPath_)) abortImmediateForce(/* unable to load */);
   }
 
@@ -301,6 +298,4 @@
     auMan_ = new audio::AudioManager();
 
-    //bulletMgr_ = new BulletManager();
-
     Ogre::Overlay* hudOverlay = Ogre::OverlayManager::getSingleton().getByName("Orxonox/HUD1.2");
     HUD* orxonoxHud;
@@ -350,6 +345,4 @@
     auMan_ = new audio::AudioManager();
 
-    //bulletMgr_ = new BulletManager();
-
     // load this file from config
     Level* startlevel = new Level("levels/sample.oxw");
@@ -380,5 +373,5 @@
     if (!inputHandler_->initialise(ogre_->getWindowHandle(),
           ogre_->getWindowWidth(), ogre_->getWindowHeight()))
-      abortImmediate();
+      abortImmediateForce();
     inputHandler_->setInputMode(IM_INGAME);
   }
@@ -414,5 +407,5 @@
     if (Ogre::Root::getSingletonPtr() == 0)
     {
-      COUT(2) << "Error: Could not start rendering. No Ogre root object found" << std::endl;
+      COUT(2) << "*** Orxonox Error: Could not start rendering. No Ogre root object found" << std::endl;
       return;
     }
Index: code/trunk/src/orxonox/Orxonox.h
===================================================================
--- code/trunk/src/orxonox/Orxonox.h	(revision 1085)
+++ code/trunk/src/orxonox/Orxonox.h	(revision 1089)
@@ -61,6 +61,5 @@
       void init(int argc, char **argv, std::string path);
       void start();
-      // not sure if this should be private
-      void abortImmediate(/* some error code */);
+      void abortImmediateForce();
       void abortRequest();
       inline audio::AudioManager* getAudioManagerPointer() { return auMan_; };
