Index: src/Actions/ActionQueue.hpp
===================================================================
--- src/Actions/ActionQueue.hpp	(revision 29b52b1607551f45b84d99fb44f6e5e121221626)
+++ src/Actions/ActionQueue.hpp	(revision 8859b5e80aaacf810ed6de2750789019357f0fa0)
@@ -275,4 +275,7 @@
   ActionStatusList StatusList;
 };
+namespace Queuedetail {
+  template <>       inline  const Action* lastChanged<Action>() { return ActionQueue::_lastchangedaction; }
+}
 
 };
Index: src/UIElements/Makefile.am
===================================================================
--- src/UIElements/Makefile.am	(revision 29b52b1607551f45b84d99fb44f6e5e121221626)
+++ src/UIElements/Makefile.am	(revision 8859b5e80aaacf810ed6de2750789019357f0fa0)
@@ -179,4 +179,5 @@
   UIElements/Views/Qt4/QtTimeLine.cpp \
   UIElements/Views/Qt4/QtToolBar.cpp \
+  UIElements/Views/Qt4/QtToolBar_QtFavoriteActions.cpp \
   UIElements/Views/Qt4/Qt3D/GLWorldView.cpp \
   UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp \
Index: src/UIElements/Qt4/QtMainWindow.cpp
===================================================================
--- src/UIElements/Qt4/QtMainWindow.cpp	(revision 29b52b1607551f45b84d99fb44f6e5e121221626)
+++ src/UIElements/Qt4/QtMainWindow.cpp	(revision 8859b5e80aaacf810ed6de2750789019357f0fa0)
@@ -116,4 +116,5 @@
   toolbar = new QtToolBar(this);
   glWorldView->addToolBarActions(toolbar);
+  toolbar->addFavoriteActionItems(20);
   addToolBar(toolbar);
 
Index: src/UIElements/Views/Qt4/QtToolBar.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtToolBar.cpp	(revision 29b52b1607551f45b84d99fb44f6e5e121221626)
+++ src/UIElements/Views/Qt4/QtToolBar.cpp	(revision 8859b5e80aaacf810ed6de2750789019357f0fa0)
@@ -57,8 +57,17 @@
 {
   QAction *action = addAction(QString(description.c_str()));
-  action->setIcon(QIcon::fromTheme(QString(icon_name.c_str())));
+  action->setIcon(FavActions.getIcon(token, icon_name));
   action->setToolTip(QString(description.c_str()));
   QtMenuPipe *pipe = new QtMenuPipe(token,action);
   QObject::connect(action, SIGNAL(triggered()),pipe,SLOT(called()));
   plumbing.push_back(pipe);
+  present_actions.insert( token );
 }
+
+void QtToolBar::addFavoriteActionItems(const unsigned int _max)
+{
+  // separate favorite actions
+  addSeparator();
+  FavActions.addToolBarActions(*this, _max);
+}
+
Index: src/UIElements/Views/Qt4/QtToolBar.hpp
===================================================================
--- src/UIElements/Views/Qt4/QtToolBar.hpp	(revision 29b52b1607551f45b84d99fb44f6e5e121221626)
+++ src/UIElements/Views/Qt4/QtToolBar.hpp	(revision 8859b5e80aaacf810ed6de2750789019357f0fa0)
@@ -20,4 +20,10 @@
 #include "Menu/Qt4/QtMenuPipe.hpp"
 
+#include <map>
+#include <set>
+#include <string>
+
+#include "CodePatterns/Observer/Observer.hpp"
+
 
 class QtToolBar : public QToolBar
@@ -28,9 +34,75 @@
   virtual ~QtToolBar();
 
+  /** Adds an action named \a token to the toolbar.
+   *
+   * @param token token of Action
+   * @param description description to appear as tooltip
+   * @param icon_name name of icon
+   */
+  void addActionItem(const std::string &token, const std::string &description, const std::string &icon_name);
+
+  /** Function to add a set of favorite actions.
+   *
+   * @param _max maximum number of actions to add
+   */
+  void addFavoriteActionItems(const unsigned int _max);
+
+  //!> typedef for a set of action tokens
+  typedef std::set<std::string> present_actions_t;
+
+  /** Getter for current set of present action on this toolbar.
+   *
+   * @return set of action tokens
+   */
+  const present_actions_t & getPresentActions() const
+  { return present_actions; }
+
 private:
   std::list<QtMenuPipe*> plumbing;
 
-  void addActionItem(const std::string &token, const std::string &description, const std::string &icon_name);
+  /** This class knows about all Actions being called and stores their frequency.
+   *
+   * This is used to know about the topmost used Actions and creating placeholder
+   * toolbar icons for these on program launch.
+   *
+   */
+  class QtFavoriteActions : public Observer
+  {
+  public:
+    QtFavoriteActions();
+    ~QtFavoriteActions();
 
+    void addToolBarActions(
+        QtToolBar &_toolbar,
+        const unsigned int _max) const;
+
+    void update(Observable *publisher);
+    void subjectKilled(Observable *publisher);
+    void recieveNotification(Observable *publisher, Notification_ptr notification);
+
+    QIcon getIcon(
+        const std::string &_token,
+        const std::string &_icon_name
+        ) const;
+
+  private:
+    QIcon createIconPlaceholder(
+        const std::string &_token
+        ) const;
+
+  private:
+    //!> typedef for the action counts
+    typedef std::map<std::string, unsigned int> ActionCounts_t;
+    //!> map counts how often each action has been called
+    ActionCounts_t ActionCounts;
+    //!> sign in to ActionQueue?
+    bool ActionQueue_observing;
+  };
+
+  //!> instance dealing with favorite action icons
+  QtFavoriteActions FavActions;
+
+  //!> set of already present action icons
+  present_actions_t present_actions;
 };
 
Index: src/UIElements/Views/Qt4/QtToolBar_QtFavoriteActions.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtToolBar_QtFavoriteActions.cpp	(revision 8859b5e80aaacf810ed6de2750789019357f0fa0)
+++ src/UIElements/Views/Qt4/QtToolBar_QtFavoriteActions.cpp	(revision 8859b5e80aaacf810ed6de2750789019357f0fa0)
@@ -0,0 +1,199 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2014 Frederik Heber. All rights reserved.
+ *
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder 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.
+ *
+ *    MoleCuilder 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 MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * QtFavoriteActions.cpp
+ *
+ *  Created on: Sep 11, 2014
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <Qt/qaction.h>
+#include <Qt/qpainter.h>
+#include <Qt/qpixmap.h>
+#include <Qt/qsettings.h>
+
+#include "UIElements/Views/Qt4/QtToolBar.hpp"
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include <string>
+
+#include "CodePatterns/Assert.hpp"
+#include "CodePatterns/Log.hpp"
+#include "CodePatterns/Observer/Observer.hpp"
+
+#include "Actions/Action.hpp"
+#include "Actions/ActionQueue.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Actions/ActionTraits.hpp"
+#include "Actions/OptionTrait.hpp"
+
+using namespace MoleCuilder;
+
+QtToolBar::QtFavoriteActions::QtFavoriteActions() :
+  Observer("QtFavoriteActions"),
+  ActionQueue_observing(false)
+{
+  // initialize counts from settings
+  QSettings settings;
+  settings.beginGroup("FavoriteActions");
+  const ActionQueue::ActionTokens_t actions = ActionQueue::getInstance().getListOfActions();
+  for (ActionQueue::ActionTokens_t::const_iterator tokeniter = actions.begin();
+      tokeniter != actions.end(); ++tokeniter) {
+#ifndef NDEBUG
+    std::pair<ActionCounts_t::iterator, bool> inserter =
+#endif
+    ActionCounts.insert( std::make_pair(
+        *tokeniter,
+        settings.value(QString(tokeniter->c_str()), 0).toInt())
+    );
+    ASSERT( inserter.second,
+        "QtFavoriteActions::QtFavoriteActions() - encountered action token"
+        +*tokeniter+" twice.");
+  }
+
+//  resize(settings.value("size", QSize(400, 400)).toSize());
+  settings.endGroup();
+
+  // sign in
+  ActionQueue::getInstance().signOn(this, ActionQueue::ActionQueued);
+  ActionQueue_observing = true;
+}
+
+QtToolBar::QtFavoriteActions::~QtFavoriteActions()
+{
+  // sign off
+  if (ActionQueue_observing)
+    ActionQueue::getInstance().signOff(this, ActionQueue::ActionQueued);
+
+  // store all known counts
+  QSettings settings;
+  settings.beginGroup("FavoriteActions");
+  ActionQueue::ActionTokens_t actions = ActionQueue::getInstance().getListOfActions();
+  for (ActionQueue::ActionTokens_t::const_iterator tokeniter = actions.begin();
+      tokeniter != actions.end(); ++tokeniter) {
+    settings.setValue(QString(tokeniter->c_str()), ActionCounts[*tokeniter]);
+  }
+  settings.endGroup();
+}
+
+void QtToolBar::QtFavoriteActions::update(Observable *publisher)
+{
+  ASSERT(0, "QtFavoriteActions::update() - this should never be called, we are only subscribed to channels.");
+}
+
+void QtToolBar::QtFavoriteActions::subjectKilled(Observable *publisher)
+{
+  ActionQueue_observing = false;
+}
+
+void QtToolBar::QtFavoriteActions::recieveNotification(Observable *publisher, Notification_ptr notification)
+{
+  if (dynamic_cast<ActionQueue *>(publisher) != NULL) {
+    // increment count for this action
+    const Action *lastcalledaction =
+        dynamic_cast<ActionQueue *>(publisher)->lastChanged<Action>();
+    ++ActionCounts[lastcalledaction->getName()];
+  } else {
+    ASSERT(0, "QtFavoriteActions::update() - cannot get here, we are only subscribed to ActionQueue.");
+  }
+}
+
+void
+QtToolBar::QtFavoriteActions::addToolBarActions(
+    QtToolBar &_toolbar,
+    const unsigned int _max) const
+{
+  // invert map
+  std::multimap<unsigned int, std::string> InvertedCounts;
+  for (ActionCounts_t::const_iterator countiter = ActionCounts.begin();
+      countiter != ActionCounts.end(); ++countiter) {
+    InvertedCounts.insert( std::make_pair( countiter->second, countiter->first) );
+  }
+
+  // then use last _max entries
+  std::multimap<unsigned int, std::string>::const_reverse_iterator iter =
+      InvertedCounts.rbegin();
+  ActionQueue &AQ = ActionQueue::getInstance();
+  const present_actions_t &present_actions = _toolbar.getPresentActions();
+  for (size_t added = 0; added<_max; ++iter) {
+    const std::string &token = iter->second;
+    present_actions_t::const_iterator actioniter =
+        present_actions.find(token);
+    if (actioniter == present_actions.end()) {
+      const ActionTrait &traits = AQ.getActionsTrait(token);
+      const std::string icon_name = traits.getMenuName() + std::string("-") + token;
+      const std::string description = traits.getDescription();
+      QIcon icon = getIcon(token, icon_name);
+      _toolbar.addActionItem(
+          token,
+          description,
+          icon_name);
+      ++added;
+    }
+  }
+}
+
+QIcon
+QtToolBar::QtFavoriteActions::createIconPlaceholder(
+    const std::string &_token
+    ) const
+{
+  LOG(2, "DEBUG: Creating icon with text " << _token);
+  QPixmap pixmap(100,100);
+  pixmap.fill(QColor("white"));
+
+  QPainter painter( &pixmap  );
+  QRect rectangle( QPoint(0,0), QPoint(100,100));
+  QRect boundingbox = QRect(1,1, 98, 98 );
+  painter.drawRect( boundingbox );
+  QFont font = QFont("Arial");
+  font.setPixelSize(30);
+  painter.setFont( font );
+  QString icon_text(_token.c_str());
+  icon_text.replace(QString("-"), QString("\n"));
+  painter.drawText( rectangle, Qt::TextWordWrap, icon_text, &boundingbox );
+
+  QIcon PlaceholderIcon(pixmap);
+
+  return PlaceholderIcon;
+}
+
+QIcon
+QtToolBar::QtFavoriteActions::getIcon(
+    const std::string &_token,
+    const std::string &_icon_name
+    ) const
+{
+  LOG(2, "DEBUG: Obtaining icon with text " << _token);
+  // TODO: look up _icon_name from QIcon::fromTheme or someplace
+  if (QIcon::hasThemeIcon(QString(_icon_name.c_str())))
+    return QIcon::fromTheme(QString(_icon_name.c_str()));
+  else
+    return createIconPlaceholder(_token);
+}
