Index: src/Helpers/Assert.cpp
===================================================================
--- src/Helpers/Assert.cpp	(revision 229e3ccb4e9cb5051f35390f07ad9812609ea0d4)
+++ src/Helpers/Assert.cpp	(revision 229e3ccb4e9cb5051f35390f07ad9812609ea0d4)
@@ -0,0 +1,49 @@
+/*
+ * Assert.cpp
+ *
+ *  Created on: Mar 18, 2010
+ *      Author: crueger
+ */
+
+#include "Helpers/Assert.hpp"
+#include <iostream>
+
+using namespace std;
+
+bool _my_assert::always_throw = false;
+
+bool _my_assert::check(const bool res,
+                       const char* condition,
+                       const char* message,
+                       const char* filename,
+                       const int line,
+                       bool& ignore)
+{
+  if(!res){
+    cout << "Assertion " << condition << " failed in file " << filename << " at line " << line << endl;
+    cout << "Assertion Message: " << message << std::endl;
+    if(always_throw){
+      throw AssertException(filename,line);
+    }
+    while(true){
+      cout << "Please choose: (a)bbort, (t)hrow execption, (i)gnore, al(w)ays ignore" << endl;
+      char choice;
+      cin >> choice;
+      switch(choice){
+        case 'a':
+          return true;
+          break;
+        case 't':
+          throw AssertException(filename,line);
+          break;
+        case 'w':
+          ignore = true;
+          // fallthrough
+        case 'i':
+          return false;
+          break;
+      }
+    }
+  }
+  return false;
+}
Index: src/Helpers/Assert.hpp
===================================================================
--- src/Helpers/Assert.hpp	(revision 229e3ccb4e9cb5051f35390f07ad9812609ea0d4)
+++ src/Helpers/Assert.hpp	(revision 229e3ccb4e9cb5051f35390f07ad9812609ea0d4)
@@ -0,0 +1,74 @@
+/*
+ * Assert.hpp
+ *
+ *  Created on: Mar 18, 2010
+ *      Author: crueger
+ */
+
+#ifndef ASSERT_HPP_
+#define ASSERT_HPP_
+
+#include<string>
+
+class AssertException{
+public:
+  AssertException(std::string _file, int _line) :
+    file(_file),
+    line(_line)
+    {}
+  std::string getFile(){
+      return file;
+    }
+  int getLine(){
+    return line;
+  }
+private:
+  std::string file;
+  int line;
+};
+
+#ifndef NDEBUG
+  #ifndef STRINGIFY
+    #define STRINGIFY(x) #x
+  #endif
+
+  #ifdef __GNUC__
+    // on gcc we know how to exit to the Debugger
+    #define DEBUG_BREAK __builtin_trap()
+  #else
+    #define DEBUG_BREAK exit(1)
+  #endif
+
+  #define ASSERT(condition,message) \
+    do{\
+      static bool ignore = false;\
+      if(!ignore){\
+        if(_my_assert::check((condition),STRINGIFY(condition),(message),__FILE__,__LINE__,ignore))\
+          DEBUG_BREAK;\
+      } \
+    }while(0)
+
+  #define ASSERT_DO_THROW     do{_my_assert::always_throw=true;}while(0)
+  #define ASSERT_DONT_THROW   do{_my_assert::always_throw=false;}while(0)
+#else
+  // we need to do something, so this is the usual solution (e.g. assert.h)
+  #define ASSERT(condition,message) (void)(0)
+  #define ASSERT_DO_THROW           (void)(0)
+  #define ASSERT_DONT_THROW         (void)(0)
+#endif
+
+//! @cond
+class _my_assert{
+public:
+  static bool check(const bool res,
+                    const char* condition,
+                    const char* message,
+                    const char* filename,
+                    const int line,
+                    bool& ignore);
+  static bool always_throw;
+};
+//! @endcond
+
+
+#endif /* ASSERT_HPP_ */
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 6e97e5a6b0503856e9b6e879ddf32a1028016550)
+++ src/Makefile.am	(revision 229e3ccb4e9cb5051f35390f07ad9812609ea0d4)
@@ -32,16 +32,17 @@
 
 DESCRIPTORSOURCE = Descriptors/AtomDescriptor.cpp \
+				   Descriptors/AtomIdDescriptor.cpp \
+				   Descriptors/AtomTypeDescriptor.cpp \
 				   Descriptors/MoleculeDescriptor.cpp \
-				   Descriptors/MoleculeIdDescriptor.cpp
+				   Descriptors/MoleculeIdDescriptor.cpp 
 				   
-#				   Descriptors/AtomIdDescriptor.cpp 
-#				   Descriptors/AtomTypeDescriptor.cpp 
 				   
 DESCRIPTORHEADER = Descriptors/AtomDescriptor.hpp \
+				   Descriptors/AtomIdDescriptor.hpp \
+				   Descriptors/AtomTypeDescriptor.hpp \
 				   Descriptors/MoleculeDescriptor.hpp \
 				   Descriptors/MoleculeIdDescriptor.hpp
 				   
-#				   Descriptors/AtomIdDescriptor.hpp 
-#				   Descriptors/AtomTypeDescriptor.hpp
+
 
 SOURCE = ${ANALYSISSOURCE} \
@@ -60,4 +61,5 @@
 		 graph.cpp \
 		 helpers.cpp \
+		 Helpers/Assert.cpp \
 		 info.cpp \
 		 leastsquaremin.cpp \
Index: src/builder.cpp
===================================================================
--- src/builder.cpp	(revision 6e97e5a6b0503856e9b6e879ddf32a1028016550)
+++ src/builder.cpp	(revision 229e3ccb4e9cb5051f35390f07ad9812609ea0d4)
@@ -2190,4 +2190,5 @@
     char *ConfigFileName = NULL;
     int j;
+
     setVerbosity(0);
     /* structure of ParseCommandLineOptions will be refactored later */
Index: src/unittests/AtomDescriptorTest.cpp
===================================================================
--- src/unittests/AtomDescriptorTest.cpp	(revision 6e97e5a6b0503856e9b6e879ddf32a1028016550)
+++ src/unittests/AtomDescriptorTest.cpp	(revision 229e3ccb4e9cb5051f35390f07ad9812609ea0d4)
@@ -81,5 +81,4 @@
 }
 void AtomDescriptorTest::AtomIdTest(){
-#if 0
   // test Atoms from boundaries and middle of the set
   atom* testAtom;
@@ -106,5 +105,4 @@
   testAtom = World::getInstance().getAtom(AtomById(outsideId));
   CPPUNIT_ASSERT(!testAtom);
-#endif
 }
 void AtomDescriptorTest::AtomCalcTest(){
@@ -142,5 +140,4 @@
     CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateAtoms(testAtoms));
   }
-#if 0
   // exclude and include some atoms
   {
@@ -158,4 +155,3 @@
     CPPUNIT_ASSERT_EQUAL( atomIds[ATOM_COUNT/2], testAtoms[0]->getId());
   }
-#endif
 }
Index: src/unittests/atomsCalculationTest.cpp
===================================================================
--- src/unittests/atomsCalculationTest.cpp	(revision 6e97e5a6b0503856e9b6e879ddf32a1028016550)
+++ src/unittests/atomsCalculationTest.cpp	(revision 229e3ccb4e9cb5051f35390f07ad9812609ea0d4)
@@ -83,5 +83,4 @@
 
 void atomsCalculationTest::testCalculateExcluded(){
-#if 0
   atomId_t excluded = atomIds[ATOM_COUNT/2];
   AtomsCalculation<atomId_t> *calc = World::getInstance().calcOnAtoms<atomId_t>(boost::bind(&atom::getId,_1),"FOO",AllAtoms() && !AtomById(excluded));
@@ -92,4 +91,3 @@
   CPPUNIT_ASSERT(hasNoDuplicates(allIds));
   CPPUNIT_ASSERT_EQUAL((size_t)(ATOM_COUNT-1),allIds.size());
-#endif
 }
Index: src/unittests/manipulateAtomsTest.cpp
===================================================================
--- src/unittests/manipulateAtomsTest.cpp	(revision 6e97e5a6b0503856e9b6e879ddf32a1028016550)
+++ src/unittests/manipulateAtomsTest.cpp	(revision 229e3ccb4e9cb5051f35390f07ad9812609ea0d4)
@@ -102,5 +102,5 @@
 
 void manipulateAtomsTest::testManipulateExcluded(){
-#if 0
+
   ManipulateAtomsProcess *proc = World::getInstance().manipulateAtoms(boost::bind(operation,_1),"FOO",AllAtoms() && !AtomById(ATOM_COUNT/2));
   proc->call();
@@ -116,5 +116,4 @@
       CPPUNIT_ASSERT(!atom->manipulated);
   }
-#endif
 }
 
