Index: src/Actions/Makefile.am
===================================================================
--- src/Actions/Makefile.am	(revision 2218d94da90f7417d65be48472c11c4a30562458)
+++ src/Actions/Makefile.am	(revision 770287d80fd62a4701803c0bc5a84438f8d5043b)
@@ -118,4 +118,5 @@
 SELECTIONACTIONSOURCE = \
 	SelectionAction/AllAtomsAction.cpp \
+	SelectionAction/AllAtomsOfMoleculeAction.cpp \
 	SelectionAction/AllMoleculesAction.cpp \
 	SelectionAction/AtomByIdAction.cpp \
@@ -129,4 +130,5 @@
 SELECTIONACTIONHEADER = \
 	SelectionAction/AllAtomsAction.hpp \
+	SelectionAction/AllAtomsOfMoleculeAction.hpp \
 	SelectionAction/AllMoleculesAction.hpp \
 	SelectionAction/AtomByIdAction.hpp \
Index: src/Actions/MapOfActions.cpp
===================================================================
--- src/Actions/MapOfActions.cpp	(revision 2218d94da90f7417d65be48472c11c4a30562458)
+++ src/Actions/MapOfActions.cpp	(revision 770287d80fd62a4701803c0bc5a84438f8d5043b)
@@ -67,4 +67,5 @@
 #include "Actions/ParserAction/SaveXyzAction.hpp"
 #include "Actions/SelectionAction/AllAtomsAction.hpp"
+#include "Actions/SelectionAction/AllAtomsOfMoleculeAction.hpp"
 #include "Actions/SelectionAction/AllMoleculesAction.hpp"
 #include "Actions/SelectionAction/AtomByIdAction.hpp"
@@ -221,4 +222,5 @@
   DescriptionMap["select-atom-by-id"] = "select an atom by index";
   DescriptionMap["select-molecule-by-id"] = "select a molecule by index";
+  DescriptionMap["select-molecules-atoms"] = "select all atoms of a molecule";
   DescriptionMap["set-basis"] = "set the name of the gaussian basis set for MPQC";
   DescriptionMap["set-output"] = "specify output formats";
@@ -336,4 +338,9 @@
   TypeMap["save-temperature"] = &typeid(std::string);
   TypeMap["scale-box"] = &typeid(VectorValue);
+  TypeMap["select-all-atoms"] = &typeid(void);
+  TypeMap["select-all-molecules"] = &typeid(void);
+  TypeMap["select-atom-by-id"] = &typeid(atom);
+  TypeMap["select-molecule-by-id"] = &typeid(molecule);
+  TypeMap["select-molecules-atoms"] = &typeid(molecule);
   TypeMap["set-basis"] = &typeid(std::string);
   TypeMap["set-output"] = &typeid(std::vector<std::string>);
@@ -342,4 +349,8 @@
   TypeMap["suspend-in-water"] = &typeid(double);
   TypeMap["translate-mol"] = &typeid(VectorValue);
+  TypeMap["unselect-all-atoms"] = &typeid(void);
+  TypeMap["unselect-all-molecules"] = &typeid(void);
+  TypeMap["unselect-atom-by-id"] = &typeid(atom);
+  TypeMap["unselect-molecule-by-id"] = &typeid(molecule);
   TypeMap["verlet-integrate"] = &typeid(std::string);
   TypeMap["verbose"] = &typeid(int);
@@ -367,13 +378,5 @@
   TypeMap["periodic"] = &typeid(bool);
   TypeMap["position"] = &typeid(VectorValue);
-  TypeMap["select-all-atoms"] = &typeid(void);
-  TypeMap["select-all-molecules"] = &typeid(void);
-  TypeMap["select-atom-by-id"] = &typeid(atom);
-  TypeMap["select-molecule-by-id"] = &typeid(molecule);
   TypeMap["start-step"] = &typeid(int);
-  TypeMap["unselect-all-atoms"] = &typeid(void);
-  TypeMap["unselect-all-molecules"] = &typeid(void);
-  TypeMap["unselect-atom-by-id"] = &typeid(atom);
-  TypeMap["unselect-molecule-by-id"] = &typeid(molecule);
 
   TypeEnumMap[&typeid(void)] = None;
@@ -454,4 +457,5 @@
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-atom-by-id") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-molecule-by-id") );
+  MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "select-molecules-atoms") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-all-atoms") );
   MenuContainsActionMap.insert( pair<std::string, std::string> ("selection", "unselect-all-molecules") );
@@ -520,4 +524,5 @@
   generic.insert("select-atom-by-id");
   generic.insert("select-molecule-by-id");
+  generic.insert("select-molecules-atoms");
   generic.insert("set-basis");
   generic.insert("set-output");
@@ -847,4 +852,5 @@
   new SelectionClearAllMoleculesAction();
   new SelectionAllAtomsAction();
+  new SelectionAllAtomsOfMoleculeAction();
   new SelectionAllMoleculesAction();
   new SelectionAtomByIdAction();
Index: src/Actions/SelectionAction/AllAtomsOfMoleculeAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsOfMoleculeAction.cpp	(revision 770287d80fd62a4701803c0bc5a84438f8d5043b)
+++ src/Actions/SelectionAction/AllAtomsOfMoleculeAction.cpp	(revision 770287d80fd62a4701803c0bc5a84438f8d5043b)
@@ -0,0 +1,101 @@
+/*
+ * AllAtomsOfMoleculeAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Actions/SelectionAction/AllAtomsOfMoleculeAction.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Descriptors/AtomDescriptor.hpp"
+#include "atom.hpp"
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/ValueStorage.hpp"
+
+
+// memento to remember the state when undoing
+
+class SelectionAllAtomsOfMoleculeState : public ActionState {
+public:
+  SelectionAllAtomsOfMoleculeState(std::vector<atom*> _selectedAtoms, molecule *_mol) :
+    selectedAtoms(_selectedAtoms),
+    mol(_mol)
+  {}
+  std::vector<atom*> selectedAtoms;
+  molecule *mol;
+};
+
+const char SelectionAllAtomsOfMoleculeAction::NAME[] = "select-molecules-atoms";
+
+SelectionAllAtomsOfMoleculeAction::SelectionAllAtomsOfMoleculeAction() :
+  Action(NAME)
+{}
+
+SelectionAllAtomsOfMoleculeAction::~SelectionAllAtomsOfMoleculeAction()
+{}
+
+void SelectionAllAtomsOfMolecule() {
+  ActionRegistry::getInstance().getActionByName(SelectionAllAtomsOfMoleculeAction::NAME)->call(Action::NonInteractive);
+};
+
+Dialog* SelectionAllAtomsOfMoleculeAction::fillDialog(Dialog *dialog) {
+  ASSERT(dialog,"No Dialog given when filling action dialog");
+
+  dialog->queryMolecule(NAME, ValueStorage::getInstance().getDescription(NAME));
+
+  return dialog;
+}
+
+Action::state_ptr SelectionAllAtomsOfMoleculeAction::performCall() {
+  molecule *mol = NULL;
+  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
+
+  ValueStorage::getInstance().queryCurrentValue(NAME, mol);
+
+  DoLog(1) && (Log() << Verbose(1) << "Selecting all atoms of molecule " << mol->getName() << "." << endl);
+  World::getInstance().selectAtomsOfMolecule(mol);
+  return Action::state_ptr(new SelectionAllAtomsOfMoleculeState(selectedAtoms, mol));
+}
+
+Action::state_ptr SelectionAllAtomsOfMoleculeAction::performUndo(Action::state_ptr _state) {
+  SelectionAllAtomsOfMoleculeState *state = assert_cast<SelectionAllAtomsOfMoleculeState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
+    World::getInstance().selectAtom(*iter);
+
+  return Action::state_ptr(new SelectionAllAtomsOfMoleculeState(state->selectedAtoms, state->mol));
+}
+
+Action::state_ptr SelectionAllAtomsOfMoleculeAction::performRedo(Action::state_ptr _state){
+  SelectionAllAtomsOfMoleculeState *state = assert_cast<SelectionAllAtomsOfMoleculeState*>(_state.get());
+
+  World::getInstance().selectAtomsOfMolecule(state->mol);
+
+  return Action::state_ptr(new SelectionAllAtomsOfMoleculeState(state->selectedAtoms, state->mol));
+}
+
+bool SelectionAllAtomsOfMoleculeAction::canUndo() {
+  return true;
+}
+
+bool SelectionAllAtomsOfMoleculeAction::shouldUndo() {
+  return true;
+}
+
+const string SelectionAllAtomsOfMoleculeAction::getName() {
+  return NAME;
+}
Index: src/Actions/SelectionAction/AllAtomsOfMoleculeAction.hpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsOfMoleculeAction.hpp	(revision 770287d80fd62a4701803c0bc5a84438f8d5043b)
+++ src/Actions/SelectionAction/AllAtomsOfMoleculeAction.hpp	(revision 770287d80fd62a4701803c0bc5a84438f8d5043b)
@@ -0,0 +1,36 @@
+/*
+ * AllAtomsOfMoleculeAction.hpp
+ *
+ *  Created on: Aug 09, 2010
+ *      Author: heber
+ */
+
+#ifndef ALLATOMSOFMOLECULEACTION_HPP_
+#define ALLATOMSOFMOLECULEACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+void SelectionAllAtomsOfMolecule();
+
+class SelectionAllAtomsOfMoleculeAction : public Action {
+  friend void SelectionAllAtomsOfMolecule();
+
+public:
+  SelectionAllAtomsOfMoleculeAction();
+  virtual ~SelectionAllAtomsOfMoleculeAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+protected:
+  virtual Dialog * fillDialog(Dialog *dialog);
+private:
+  virtual Action::state_ptr performCall();
+  virtual Action::state_ptr performUndo(Action::state_ptr);
+  virtual Action::state_ptr performRedo(Action::state_ptr);
+
+  static const char NAME[];
+};
+
+#endif /* ALLATOMSOFMOLECULEACTION_HPP_ */
