Index: src/UIElements/Menu/Menu.cpp
===================================================================
--- src/UIElements/Menu/Menu.cpp	(revision d5240d74405d4ff10e28079491467650d6a36d25)
+++ src/UIElements/Menu/Menu.cpp	(revision c82d0c82d4b642535ea65dae019a045eb40cf376)
@@ -41,5 +41,7 @@
  */
 Menu::~Menu()
-{}
+{
+  DuplicatesList.clear();
+}
 
 /** Initialiser for class Menu.
@@ -65,6 +67,6 @@
     CompleteFlag = true;
     PossibleMissingFlag = false;
-    for(MenuDescription::const_iterator iter = menudescriptions.getBeginIter();
-        iter != menudescriptions.getEndIter();
+    for(MenuDescription::const_iterator iter = MenuDescription::getInstance().getBeginIter();
+        iter != MenuDescription::getInstance().getEndIter();
         ++iter) {
       // skip when already present
@@ -137,5 +139,5 @@
   ASSERT (!isPresent(MenuName),
       "Menu::addSubmenu() - trying to add menu "+MenuName+" with already present token!");
-  addSubmenuItem(MenuName, menudescriptions.getDescription(MenuName));
+  addSubmenuItem(MenuName, MenuDescription::getInstance().getDescription(MenuName));
   DuplicatesList.insert(MenuName);
   LastItem = MenuItem;
Index: src/UIElements/Menu/Menu.hpp
===================================================================
--- src/UIElements/Menu/Menu.hpp	(revision d5240d74405d4ff10e28079491467650d6a36d25)
+++ src/UIElements/Menu/Menu.hpp	(revision c82d0c82d4b642535ea65dae019a045eb40cf376)
@@ -72,5 +72,4 @@
 
   int TopPosition;  // current position to add
-  MenuDescription menudescriptions; // contains the menu tree and description to each item
   enum ItemType LastItem;  // check whether separator followed separator
   std::set <std::string> DuplicatesList;  // is used to check for duplicates
Index: src/UIElements/Menu/MenuDescription.cpp
===================================================================
--- src/UIElements/Menu/MenuDescription.cpp	(revision d5240d74405d4ff10e28079491467650d6a36d25)
+++ src/UIElements/Menu/MenuDescription.cpp	(revision c82d0c82d4b642535ea65dae019a045eb40cf376)
@@ -24,6 +24,13 @@
 #include <string>
 
-#include "Actions/ActionRegistry.hpp"
+//#include "Actions/ActionRegistry.hpp"
 #include "Menu/MenuDescription.hpp"
+
+#include "Patterns/Singleton_impl.hpp"
+
+MenuDescription::TextMap *MenuDescription::MenuDescriptionsMap = NULL;
+MenuDescription::IterableMap *MenuDescription::MenuPositionMap = NULL;
+MenuDescription::TextMap *MenuDescription::MenuNameMap = NULL;
+
 
 /** Constructor of class MenuDescription.
@@ -32,42 +39,47 @@
 MenuDescription::MenuDescription()
 {
+  // allocate maps
+  MenuDescriptionsMap = new TextMap();
+  MenuPositionMap = new IterableMap();
+  MenuNameMap = new TextMap();
+
   // put each menu into its place, "" means top level
-  MenuPositionMap["analysis"] = TopPosition("tools",1);
-  MenuPositionMap["atom"] = TopPosition("edit",1);
-  MenuPositionMap["command"] = TopPosition("",3);
-  MenuPositionMap["edit"] = TopPosition("",2);
-  MenuPositionMap["fragmentation"] = TopPosition("tools",3);
-  MenuPositionMap["molecule"] = TopPosition("edit",2);
-  MenuPositionMap["parser"] = TopPosition("edit",3);
-  MenuPositionMap["selection"] = TopPosition("edit",4);
-  MenuPositionMap["tesselation"] = TopPosition("tools",2);
-  MenuPositionMap["tools"] = TopPosition("",4);
-  MenuPositionMap["world"] = TopPosition("",1);
+  MenuPositionMap->insert(std::make_pair("analysis",TopPosition("tools",1)));
+  MenuPositionMap->insert(std::make_pair("atom",TopPosition("edit",1)));
+  MenuPositionMap->insert(std::make_pair("command",TopPosition("",3)));
+  MenuPositionMap->insert(std::make_pair("edit",TopPosition("",2)));
+  MenuPositionMap->insert(std::make_pair("fragmentation",TopPosition("tools",3)));
+  MenuPositionMap->insert(std::make_pair("molecule",TopPosition("edit",2)));
+  MenuPositionMap->insert(std::make_pair("parser",TopPosition("edit",3)));
+  MenuPositionMap->insert(std::make_pair("selection",TopPosition("edit",4)));
+  MenuPositionMap->insert(std::make_pair("tesselation",TopPosition("tools",2)));
+  MenuPositionMap->insert(std::make_pair("tools",TopPosition("",4)));
+  MenuPositionMap->insert(std::make_pair("world",TopPosition("",1)));
 
   // put menu description into each menu category
-  MenuDescriptionsMap["analysis"] = "Analysis (pair correlation, volume)";
-  MenuDescriptionsMap["atom"] = "Edit atoms";
-  MenuDescriptionsMap["command"] = "Configuration";
-  MenuDescriptionsMap["edit"] = "Edit";
-  MenuDescriptionsMap["fragmentation"] = "Fragmentation";
-  MenuDescriptionsMap["molecule"] = "Parse files into system";
-  MenuDescriptionsMap["parser"] = "Edit molecules (load, parse, save)";
-  MenuDescriptionsMap["selection"] = "Select atoms/molecules";
-  MenuDescriptionsMap["tesselation"] = "Tesselate molecules";
-  MenuDescriptionsMap["tools"] = "Various tools";
-  MenuDescriptionsMap["world"] = "Edit world";
+  MenuDescriptionsMap->insert(std::make_pair("analysis","Analysis (pair correlation, volume)"));
+  MenuDescriptionsMap->insert(std::make_pair("atom","Edit atoms"));
+  MenuDescriptionsMap->insert(std::make_pair("command","Configuration"));
+  MenuDescriptionsMap->insert(std::make_pair("edit","Edit"));
+  MenuDescriptionsMap->insert(std::make_pair("fragmentation","Fragmentation"));
+  MenuDescriptionsMap->insert(std::make_pair("molecule","Parse files into system"));
+  MenuDescriptionsMap->insert(std::make_pair("parser","Edit molecules (load, parse, save)"));
+  MenuDescriptionsMap->insert(std::make_pair("selection","Select atoms/molecules"));
+  MenuDescriptionsMap->insert(std::make_pair("tesselation","Tesselate molecules"));
+  MenuDescriptionsMap->insert(std::make_pair("tools","Various tools"));
+  MenuDescriptionsMap->insert(std::make_pair("world","Edit world"));
 
   // put menu name into each menu category
-  MenuNameMap["analysis"] = "Analysis";
-  MenuNameMap["atom"] = "Atoms";
-  MenuNameMap["command"] = "Configuration";
-  MenuNameMap["edit"] = "Edit";
-  MenuNameMap["fragmentation"] = "Fragmentation";
-  MenuNameMap["molecule"] = "Molecules";
-  MenuNameMap["parser"] = "Input/Output";
-  MenuNameMap["selection"] = "Selection";
-  MenuNameMap["tesselation"] = "Tesselation";
-  MenuNameMap["tools"] = "Tools";
-  MenuNameMap["world"] = "Globals";
+  MenuNameMap->insert(std::make_pair("analysis","Analysis"));
+  MenuNameMap->insert(std::make_pair("atom","Atoms"));
+  MenuNameMap->insert(std::make_pair("command","Configuration"));
+  MenuNameMap->insert(std::make_pair("edit","Edit"));
+  MenuNameMap->insert(std::make_pair("fragmentation","Fragmentation"));
+  MenuNameMap->insert(std::make_pair("molecule","Molecules"));
+  MenuNameMap->insert(std::make_pair("parser","Input/Output"));
+  MenuNameMap->insert(std::make_pair("selection","Selection"));
+  MenuNameMap->insert(std::make_pair("tesselation","Tesselation"));
+  MenuNameMap->insert(std::make_pair("tools","Tools"));
+  MenuNameMap->insert(std::make_pair("world","Globals"));
 }
 
@@ -76,5 +88,12 @@
  */
 MenuDescription::~MenuDescription()
-{}
+{
+  std::cout << "MenuDescription: clearing maps ... " << std::endl;
+  for (IterableMap::iterator iter = MenuPositionMap->begin(); !MenuPositionMap->empty(); iter = MenuPositionMap->begin())
+    MenuPositionMap->erase(iter);
+  delete MenuNameMap;
+  delete MenuDescriptionsMap;
+  delete MenuPositionMap;
+}
 
 /** Getter for MenuDescriptionsMap.
@@ -84,11 +103,11 @@
 const std::string MenuDescription::getDescription(const std::string &token) const
 {
-  if (MenuDescriptionsMap.find(token) != MenuDescriptionsMap.end())
-    return MenuDescriptionsMap.find(token)->second;
+  if (MenuDescriptionsMap->find(token) != MenuDescriptionsMap->end())
+    return MenuDescriptionsMap->find(token)->second;
   else
     return std::string();
 }
 
-/** Getter for MenuNameMap.
+/** Getter for MenuNameMap->
  * \param token name of menu
  * \return description string of the menu or empty
@@ -96,25 +115,25 @@
 const std::string MenuDescription::getName(const std::string &token) const
 {
-  if (MenuNameMap.find(token) != MenuNameMap.end())
-    return MenuNameMap.find(token)->second;
+  if (MenuNameMap->find(token) != MenuNameMap->end())
+    return MenuNameMap->find(token)->second;
   else
     return std::string();
 }
 
-/** Constructs a multimap of all menus running over all actions belonging to it.
- * \return multimap with which actions belongs to which menu.
- */
-std::multimap <std::string, std::string> MenuDescription::getMenuItemsMap() const
-{
-  std::multimap <std::string, std::string> result;
-
-  ActionRegistry &AR = ActionRegistry::getInstance();
-  for (ActionRegistry::const_iterator iter = AR.getBeginIter();iter != AR.getEndIter();++iter) {
-    std::cout << "Inserting " << (iter->second)->getName() << " into menu " << (iter->second)->Traits.getMenuName() << std::endl;
-    result.insert( std::pair<std::string, std::string> ((iter->second)->Traits.getMenuName(), (iter->second)->getName()));
-  }
-  // TODO: MenuPosition is not yet realized.
-  return result;
-}
+///** Constructs a multimap of all menus running over all actions belonging to it.
+// * \return multimap with which actions belongs to which menu.
+// */
+//std::multimap <std::string, std::string> MenuDescription::getMenuItemsMap() const
+//{
+//  std::multimap <std::string, std::string> result;
+//
+//  ActionRegistry &AR = ActionRegistry::getInstance();
+//  for (ActionRegistry::const_iterator iter = AR.getBeginIter();iter != AR.getEndIter();++iter) {
+//    std::cout << "Inserting " << (iter->second)->getName() << " into menu " << (iter->second)->Traits.getMenuName() << std::endl;
+//    result.insert( std::pair<std::string, std::string> ((iter->second)->Traits.getMenuName(), (iter->second)->getName()));
+//  }
+//  // TODO: MenuPosition is not yet realized.
+//  return result;
+//}
 
 /** Forward iterator from beginning of list of descriptions.
@@ -123,5 +142,5 @@
 MenuDescription::iterator MenuDescription::getBeginIter()
 {
-  return MenuPositionMap.begin();
+  return MenuPositionMap->begin();
 }
 
@@ -131,5 +150,5 @@
 MenuDescription::iterator MenuDescription::getEndIter()
 {
-  return MenuPositionMap.end();
+  return MenuPositionMap->end();
 }
 
@@ -139,5 +158,5 @@
 MenuDescription::const_iterator MenuDescription::getBeginIter() const
 {
-  return MenuPositionMap.begin();
+  return MenuPositionMap->begin();
 }
 
@@ -147,6 +166,6 @@
 MenuDescription::const_iterator MenuDescription::getEndIter() const
 {
-  return MenuPositionMap.end();
+  return MenuPositionMap->end();
 }
 
-
+CONSTRUCT_SINGLETON(MenuDescription)
Index: src/UIElements/Menu/MenuDescription.hpp
===================================================================
--- src/UIElements/Menu/MenuDescription.hpp	(revision d5240d74405d4ff10e28079491467650d6a36d25)
+++ src/UIElements/Menu/MenuDescription.hpp	(revision c82d0c82d4b642535ea65dae019a045eb40cf376)
@@ -13,4 +13,6 @@
 #include <string>
 
+#include "Patterns/Singleton.hpp"
+
 class MenuDescriptionTest;
 
@@ -18,16 +20,15 @@
  *
  */
-class MenuDescription
+class MenuDescription : public Singleton<MenuDescription>
 {
   friend class MenuDescriptionTest;
+  friend class Singleton<MenuDescription>;
 public:
-  MenuDescription();
-  ~MenuDescription();
 
-  typedef std::pair<std::string, int> TopPosition;
-  typedef std::map<std::string, TopPosition> IterableMap;
+  typedef std::pair<std::string const, int const> TopPosition;
+  typedef std::map<std::string const, TopPosition const> IterableMap;
   typedef IterableMap::iterator iterator;
   typedef IterableMap::const_iterator const_iterator ;
-  typedef std::map<std::string, std::string> TextMap;
+  typedef std::map<std::string const, std::string const> TextMap;
 
   // getter for description
@@ -35,5 +36,5 @@
   const std::string getName(const std::string &token) const;
 
-  std::multimap <std::string, std::string> getMenuItemsMap() const;
+  //std::multimap <std::string, std::string> getMenuItemsMap() const;
 
   // iterators
@@ -44,8 +45,10 @@
 
 private:
-  TextMap MenuDescriptionsMap;
-  IterableMap MenuPositionMap;
-  TextMap MenuNameMap;
-  std::multimap <std::string, std::string> MenuItemMap;
+  MenuDescription();
+  ~MenuDescription();
+
+  static TextMap *MenuDescriptionsMap;
+  static IterableMap *MenuPositionMap;
+  static TextMap *MenuNameMap;
 };
 
