Index: src/Actions/ValueStorage.cpp
===================================================================
--- src/Actions/ValueStorage.cpp	(revision b94634903469fbb4f8f27672f141d13d2700a169)
+++ src/Actions/ValueStorage.cpp	(revision 88267818974ad107d18379d2ec3d0d19c96351bd)
@@ -68,5 +68,9 @@
     CurrentValueMap.erase(name);
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
   _T = World::getInstance().getAtom(AtomById(atomID));
 }
@@ -80,5 +84,9 @@
     CurrentValueMap.erase(name);
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
   _T = World::getInstance().getPeriode()->FindElement(Z);
 }
@@ -92,5 +100,9 @@
     CurrentValueMap.erase(name);
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
   _T = World::getInstance().getMolecule(MoleculeById(molID));
 }
@@ -121,5 +133,9 @@
     CurrentValueMap.erase(name);
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -134,5 +150,9 @@
     }
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -147,5 +167,9 @@
     }
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -159,5 +183,9 @@
         "ValueStorage::queryCurrentValue() - RandomNumberDistribution_Parameters in value map has only no components!");
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -186,5 +214,9 @@
     }
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -212,5 +244,9 @@
     }
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -239,5 +275,9 @@
     }
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -255,5 +295,9 @@
     _T = tmp;
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -265,5 +309,9 @@
     CurrentValueMap[name] = stream.str();
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -275,5 +323,9 @@
     CurrentValueMap[name] = stream.str();
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -285,5 +337,9 @@
     CurrentValueMap[name] = stream.str();
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -301,5 +357,9 @@
     CurrentValueMap[name] = stream.str();
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -319,5 +379,9 @@
     CurrentValueMap[name] = stream.str();
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -330,5 +394,9 @@
     DoLog(0) && (Log() << Verbose(0) << "ValueStorage::setCurrentValue() for "+toString(name)+" to "+stream.str()+"." << std::endl);
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -342,5 +410,9 @@
     CurrentValueMap[name] = stream.str();
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -354,5 +426,9 @@
     CurrentValueMap[name] = stream.str();
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -366,5 +442,9 @@
     CurrentValueMap[name] = stream.str();
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
@@ -376,5 +456,9 @@
     CurrentValueMap[name] = stream.str();
   } else
-    throw IllegalTypeException(__FILE__,__LINE__);
+    throw IllegalTypeException() << ValueStorageOptionName(name)
+        << ValueStoragePairTypeName(std::make_pair(
+            typeid(_T).name(),
+            OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+            );
 }
 
Index: src/Actions/ValueStorage.hpp
===================================================================
--- src/Actions/ValueStorage.hpp	(revision b94634903469fbb4f8f27672f141d13d2700a169)
+++ src/Actions/ValueStorage.hpp	(revision 88267818974ad107d18379d2ec3d0d19c96351bd)
@@ -23,11 +23,44 @@
 #include <vector>
 #include <typeinfo>
+#include <utility>
 
 #include "Actions/OptionTrait.hpp"
 #include "Actions/OptionRegistry.hpp"
-#include "Exceptions/IllegalTypeException.hpp"
 #include "Exceptions/MissingValueException.hpp"
 #include "CodePatterns/Assert.hpp"
 #include "CodePatterns/Singleton.hpp"
+
+#include <exception>
+#include <boost/exception.hpp>
+
+class MatrixContent;
+class Vector;
+
+/** Base type for all exceptions regarding ValueStorage class.
+ *
+ */
+struct ValueStorageException : virtual std::exception, virtual boost::exception { };
+
+/** ========================== General error information ================== */
+
+/** Exception information for ValueStorageException: name of option.
+ */
+typedef boost::error_info<struct tag_ValueStorageOptionName, const char *> ValueStorageOptionName;
+
+/** Exception information for ValueStorageException: name of type.
+ */
+typedef boost::error_info<struct tag_ValueStorageTypeName, const char *> ValueStorageTypeName;
+
+/** Exception information for ValueStorageException: pair of names of two types.
+ */
+typedef boost::error_info<
+    struct tag_ValueStorageTypeName,
+    std::pair<const char *,const char *> > ValueStoragePairTypeName;
+
+/** ============================ Specific exceptions ====================== */
+
+/** Exception thrown when ValueStorage is given an illegal type for a specific option.
+ */
+struct IllegalTypeException : virtual ValueStorageException { };
 
 class MapOfActionsTest;
@@ -94,5 +127,9 @@
       CurrentValueMap.erase(name);
     } else
-      throw IllegalTypeException(__FILE__,__LINE__);
+      throw IllegalTypeException() << ValueStorageOptionName(name)
+          << ValueStoragePairTypeName(std::make_pair(
+              typeid(_T).name(),
+              OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+              );
   }
   template<typename T> void queryCurrentValue(const char * name, std::vector<T> &_T)
@@ -111,5 +148,9 @@
       }
     } else
-      throw IllegalTypeException(__FILE__,__LINE__);
+      throw IllegalTypeException() << ValueStorageOptionName(name)
+          << ValueStoragePairTypeName(std::make_pair(
+              typeid(_T).name(),
+              OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+              );
   }
 
@@ -136,6 +177,10 @@
       CurrentValueMap[name] = stream.str();
     } else
-      throw IllegalTypeException(__FILE__,__LINE__);
-  }
+      throw IllegalTypeException() << ValueStorageOptionName(name)
+          << ValueStoragePairTypeName(std::make_pair(
+              typeid(_T).name(),
+              OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+              );
+}
   /** Sets a value in the storage.
    * \param name key of value
@@ -152,5 +197,9 @@
       CurrentValueMap[name] = stream.str();
     } else
-      throw IllegalTypeException(__FILE__,__LINE__);
+      throw IllegalTypeException() << ValueStorageOptionName(name)
+          << ValueStoragePairTypeName(std::make_pair(
+              typeid(_T).name(),
+              OptionRegistry_instance.getOptionByName(name)->getTypeName().c_str())
+              );
   }
 
Index: c/Exceptions/IllegalTypeException.cpp
===================================================================
--- src/Exceptions/IllegalTypeException.cpp	(revision b94634903469fbb4f8f27672f141d13d2700a169)
+++ 	(revision )
@@ -1,35 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * IllegalTypeException.cpp
- *
- *  Created on: Jun 25, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "CodePatterns/MemDebug.hpp"
-
-#include "IllegalTypeException.hpp"
-
-using namespace std;
-
-IllegalTypeException::IllegalTypeException(string _file, int _line) :
-  CustomException(_file,_line)
-{}
-
-IllegalTypeException::~IllegalTypeException() throw ()
-{}
-
-const char* IllegalTypeException::what() const throw(){
-  return "Illegal type in cast";
-}
Index: c/Exceptions/IllegalTypeException.hpp
===================================================================
--- src/Exceptions/IllegalTypeException.hpp	(revision b94634903469fbb4f8f27672f141d13d2700a169)
+++ 	(revision )
@@ -1,28 +1,0 @@
-/*
- * IllegalTypeException.hpp
- *
- *  Created on: Jun 25, 2010
- *      Author: crueger
- */
-
-#ifndef ILLEGALTYPEEXCEPTION_HPP_
-#define ILLEGALTYPEEXCEPTION_HPP_
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-
-#include "Exceptions/CustomException.hpp"
-
-class IllegalTypeException : public CustomException
-{
-public:
-  IllegalTypeException(std::string _file, int _line);
-  virtual ~IllegalTypeException() throw ();
-
-  virtual const char* what() const throw();
-};
-
-#endif /* ILLEGALTYPEEXCEPTION_HPP_ */
Index: src/Exceptions/Makefile.am
===================================================================
--- src/Exceptions/Makefile.am	(revision b94634903469fbb4f8f27672f141d13d2700a169)
+++ src/Exceptions/Makefile.am	(revision 88267818974ad107d18379d2ec3d0d19c96351bd)
@@ -9,5 +9,4 @@
 EXCEPTIONSOURCE = \
   CustomException.cpp \
-  IllegalTypeException.cpp \
   MissingValueException.cpp
 	
@@ -15,5 +14,4 @@
 EXCEPTIONHEADER = \
   CustomException.hpp \
-  IllegalTypeException.hpp \
   MissingValueException.hpp
 
Index: src/LinearAlgebra/Exceptions.hpp
===================================================================
--- src/LinearAlgebra/Exceptions.hpp	(revision b94634903469fbb4f8f27672f141d13d2700a169)
+++ src/LinearAlgebra/Exceptions.hpp	(revision 88267818974ad107d18379d2ec3d0d19c96351bd)
@@ -20,4 +20,7 @@
 class Vector;
 
+/** Base type for all exceptions regarding linear algebra.
+ *
+ */
 struct LinearAlgebraException : virtual std::exception, virtual boost::exception { };
 
