Index: src/Actions/AtomAction/AddAction.cpp
===================================================================
--- src/Actions/AtomAction/AddAction.cpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
+++ src/Actions/AtomAction/AddAction.cpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
@@ -0,0 +1,88 @@
+/*
+ * AddAction.cpp
+ *
+ *  Created on: May 9, 2010
+ *      Author: heber
+ */
+
+#include "Actions/AtomAction/AddAction.hpp"
+#include "CommandLineParser.hpp"
+#include "atom.hpp"
+#include "element.hpp"
+#include "log.hpp"
+#include "periodentafel.hpp"
+#include "vector.hpp"
+#include "verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/MapOfActions.hpp"
+
+const char AtomAddAction::NAME[] = "add-atom";
+
+AtomAddAction::AtomAddAction() :
+  Action(NAME)
+{}
+
+AtomAddAction::~AtomAddAction()
+{}
+
+Action::state_ptr AtomAddAction::performCall() {
+  Dialog *dialog = UIFactory::getInstance().makeDialog();
+  int Z = -1;
+  Vector position;
+
+  dialog->queryInt(NAME, &Z, MapOfActions::getInstance().getDescription(NAME));
+  dialog->queryVector("position", &position, World::getInstance().getDomain(), true, MapOfActions::getInstance().getDescription("position"));
+
+  if(dialog->display()) {
+    delete dialog;
+    atom * first = World::getInstance().createAtom();
+    first->type = World::getInstance().getPeriode()->FindElement(Z);
+    first->x = position;
+    if (first->type != NULL) {
+      DoLog(1) && (Log() << Verbose(1) << "Adding new atom with element " << first->type->name << " at " << (first->x) << "." << endl);
+      return Action::success;
+    } else {
+      DoeLog(1) && (eLog()<< Verbose(1) << "Could not find the specified element." << endl);
+      World::getInstance().destroyAtom(first);
+      return Action::failure;
+    }
+  } else {
+    delete dialog;
+    return Action::failure;
+  }
+
+}
+
+Action::state_ptr AtomAddAction::performUndo(Action::state_ptr _state) {
+//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
+
+  return Action::failure;
+//  string newName = state->mol->getName();
+//  state->mol->setName(state->lastName);
+//
+//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+}
+
+Action::state_ptr AtomAddAction::performRedo(Action::state_ptr _state){
+  return Action::failure;
+}
+
+bool AtomAddAction::canUndo() {
+  return false;
+}
+
+bool AtomAddAction::shouldUndo() {
+  return false;
+}
+
+const string AtomAddAction::getName() {
+  return NAME;
+}
Index: src/Actions/AtomAction/AddAction.hpp
===================================================================
--- src/Actions/AtomAction/AddAction.hpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
+++ src/Actions/AtomAction/AddAction.hpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
@@ -0,0 +1,30 @@
+/*
+ * AddAction.hpp
+ *
+ *  Created on: May 9, 2010
+ *      Author: heber
+ */
+
+#ifndef ADDACTION_HPP_
+#define ADDACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class AtomAddAction : public Action {
+public:
+  AtomAddAction();
+  virtual ~AtomAddAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+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 /* ADDACTION_HPP_ */
Index: src/Actions/AtomAction/ChangeElementAction.cpp
===================================================================
--- src/Actions/AtomAction/ChangeElementAction.cpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
+++ src/Actions/AtomAction/ChangeElementAction.cpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
@@ -0,0 +1,82 @@
+/*
+ * ChangeElementAction.cpp
+ *
+ *  Created on: May 9, 2010
+ *      Author: heber
+ */
+
+#include "Actions/AtomAction/ChangeElementAction.hpp"
+#include "CommandLineParser.hpp"
+#include "atom.hpp"
+#include "log.hpp"
+#include "vector.hpp"
+#include "verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/MapOfActions.hpp"
+
+const char AtomChangeElementAction::NAME[] = "change-element";
+
+AtomChangeElementAction::AtomChangeElementAction() :
+  Action(NAME)
+{}
+
+AtomChangeElementAction::~AtomChangeElementAction()
+{}
+
+Action::state_ptr AtomChangeElementAction::performCall() {
+  Dialog *dialog = UIFactory::getInstance().makeDialog();
+  int Z = -1;
+  atom *first = NULL;
+  element *elemental = NULL;
+
+  dialog->queryElement(NAME, (const element **) &elemental, MapOfActions::getInstance().getDescription(NAME));
+  dialog->queryAtom("atom-by-id", &first, MapOfActions::getInstance().getDescription("atom-by-id"));
+
+  if(dialog->display()) {
+    delete dialog;
+    DoLog(1) && (Log() << Verbose(1) << "Changing atom " << *first << " to element " << elemental << "." << endl);
+    if (elemental != NULL) {
+      first->type = elemental;
+      return Action::success;
+    } else
+      return Action::failure;
+  } else {
+    delete dialog;
+    return Action::failure;
+  }
+
+}
+
+Action::state_ptr AtomChangeElementAction::performUndo(Action::state_ptr _state) {
+//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
+
+  return Action::failure;
+//  string newName = state->mol->getName();
+//  state->mol->setName(state->lastName);
+//
+//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+}
+
+Action::state_ptr AtomChangeElementAction::performRedo(Action::state_ptr _state){
+  return Action::failure;
+}
+
+bool AtomChangeElementAction::canUndo() {
+  return false;
+}
+
+bool AtomChangeElementAction::shouldUndo() {
+  return false;
+}
+
+const string AtomChangeElementAction::getName() {
+  return NAME;
+}
Index: src/Actions/AtomAction/ChangeElementAction.hpp
===================================================================
--- src/Actions/AtomAction/ChangeElementAction.hpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
+++ src/Actions/AtomAction/ChangeElementAction.hpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
@@ -0,0 +1,30 @@
+/*
+ * ChangeElementAction.hpp
+ *
+ *  Created on: May 9, 2010
+ *      Author: heber
+ */
+
+#ifndef CHANGELEMENTACTION_HPP_
+#define CHANGELEMENTACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class AtomChangeElementAction : public Action {
+public:
+  AtomChangeElementAction();
+  virtual ~AtomChangeElementAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+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 /* CHANGELEMENTACTION_HPP_ */
Index: src/Actions/AtomAction/RemoveAction.cpp
===================================================================
--- src/Actions/AtomAction/RemoveAction.cpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
+++ src/Actions/AtomAction/RemoveAction.cpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
@@ -0,0 +1,76 @@
+/*
+ * RemoveAction.cpp
+ *
+ *  Created on: May 9, 2010
+ *      Author: heber
+ */
+
+#include "Actions/AtomAction/RemoveAction.hpp"
+#include "CommandLineParser.hpp"
+#include "atom.hpp"
+#include "Descriptors/AtomDescriptor.hpp"
+#include "log.hpp"
+#include "verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Dialog.hpp"
+#include "Actions/MapOfActions.hpp"
+
+const char AtomRemoveAction::NAME[] = "remove-atom";
+
+AtomRemoveAction::AtomRemoveAction() :
+  Action(NAME)
+{}
+
+AtomRemoveAction::~AtomRemoveAction()
+{}
+
+Action::state_ptr AtomRemoveAction::performCall() {
+  Dialog *dialog = UIFactory::getInstance().makeDialog();
+  atom *first = NULL;
+
+  dialog->queryAtom(NAME, &first, MapOfActions::getInstance().getDescription(NAME));
+
+  if(dialog->display()) {
+    delete dialog;
+    DoLog(1) && (Log() << Verbose(1) << "Removing atom " << first->getId() << "." << endl);
+    World::getInstance().destroyAtom(first);
+    return Action::success;
+  } else {
+    delete dialog;
+    return Action::failure;
+  }
+
+}
+
+Action::state_ptr AtomRemoveAction::performUndo(Action::state_ptr _state) {
+//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
+
+  return Action::failure;
+//  string newName = state->mol->getName();
+//  state->mol->setName(state->lastName);
+//
+//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+}
+
+Action::state_ptr AtomRemoveAction::performRedo(Action::state_ptr _state){
+  return Action::failure;
+}
+
+bool AtomRemoveAction::canUndo() {
+  return false;
+}
+
+bool AtomRemoveAction::shouldUndo() {
+  return false;
+}
+
+const string AtomRemoveAction::getName() {
+  return NAME;
+}
Index: src/Actions/AtomAction/RemoveAction.hpp
===================================================================
--- src/Actions/AtomAction/RemoveAction.hpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
+++ src/Actions/AtomAction/RemoveAction.hpp	(revision 97ebf8b2670d891c06f34ede7594c6708e07d886)
@@ -0,0 +1,30 @@
+/*
+ * RemoveAction.hpp
+ *
+ *  Created on: May 9, 2010
+ *      Author: heber
+ */
+
+#ifndef REMOVEACTION_HPP_
+#define REMOVEACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+class AtomRemoveAction : public Action {
+public:
+  AtomRemoveAction();
+  virtual ~AtomRemoveAction();
+
+  bool canUndo();
+  bool shouldUndo();
+
+  virtual const std::string getName();
+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 /* REMOVEACTION_HPP_ */
