Index: src/Actions/SelectionAction/Atoms/AtomByOrderAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByOrderAction.cpp	(revision d5c1c8fb196f99fe97e2fd5623052a9bd6d1186a)
+++ src/Actions/SelectionAction/Atoms/AtomByOrderAction.cpp	(revision c5bd60c0d5a9aa043dea26d5d5b270648f27d64a)
@@ -54,18 +54,31 @@
 /** =========== define the function ====================== */
 ActionState::ptr SelectionAtomByOrderAction::performCall() {
-  const atom *Walker = const_cast<const World &>(World::getInstance()).
-      getAtom(AtomByOrder(params.order.get()));
-  if (Walker != NULL) {
-    if (!World::getInstance().isSelected(Walker)) {
-      LOG(1, "Selecting atom " << *Walker);
-      World::getInstance().selectAtom(Walker);
-      LOG(0, World::getInstance().countSelectedAtoms() << " atoms selected.");
-      return ActionState::ptr(new SelectionAtomByOrderState(Walker->getId(), params));
+  size_t no_selected = 0;
+  const std::vector<int> &indices = params.orders.get();
+  std::vector<atomId_t> atomids;
+  const World &const_world = World::getConstInstance();
+  World &world = World::getInstance();
+  for( std::vector<int>::const_iterator iter = indices.begin();
+      iter != indices.end(); ++iter) {
+    const atom * const walker = const_world.getAtom(AtomByOrder(*iter));
+
+    if (walker != NULL) {
+      if (!const_world.isSelected(walker)) {
+        //LOG(1, "Selecting atom " << *walker);
+        world.selectAtom(walker);
+        atomids.push_back(walker->getId());
+        ++no_selected;
+      }
     } else {
-      return Action::success;
+      STATUS("Cannot find atom by given index "+toString(*iter)+".");
+      return Action::failure;
     }
+  }
+
+  LOG(0, no_selected << " atoms additionally selected.");
+  if (no_selected != 0) {
+    return ActionState::ptr(new SelectionAtomByOrderState(atomids, params));
   } else {
-    STATUS("Cannot find atom by given order of "+toString(params.order.get())+".");
-    return Action::failure;
+    return Action::success;
   }
 }
@@ -74,5 +87,8 @@
   SelectionAtomByOrderState *state = assert_cast<SelectionAtomByOrderState*>(_state.get());
 
-  World::getInstance().unselectAllAtoms(AtomById(state->WalkerId));
+  World &world = World::getInstance();
+  for (std::vector<atomId_t>::const_iterator iter = state->WalkerIds.begin();
+      iter != state->WalkerIds.end(); ++iter)
+    world.unselectAllAtoms(AtomById(*iter));
 
   return ActionState::ptr(_state);
@@ -82,5 +98,8 @@
   SelectionAtomByOrderState *state = assert_cast<SelectionAtomByOrderState*>(_state.get());
 
-  World::getInstance().selectAllAtoms(AtomById(state->WalkerId));
+  World &world = World::getInstance();
+  for (std::vector<atomId_t>::const_iterator iter = state->WalkerIds.begin();
+      iter != state->WalkerIds.end(); ++iter)
+    world.selectAllAtoms(AtomById(*iter));
 
   return ActionState::ptr(_state);
Index: src/Actions/SelectionAction/Atoms/AtomByOrderAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByOrderAction.def	(revision d5c1c8fb196f99fe97e2fd5623052a9bd6d1186a)
+++ src/Actions/SelectionAction/Atoms/AtomByOrderAction.def	(revision c5bd60c0d5a9aa043dea26d5d5b270648f27d64a)
@@ -9,19 +9,19 @@
 class atom;
 
-#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/STLVectorValidator.hpp"
 
 // i.e. there is an integer with variable name Z that can be found in
 // ValueStorage by the token "Z" -> first column: int, Z, "Z"
 // "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
-#define paramtypes (int)
+#define paramtypes (std::vector<int>)
 #define paramtokens ("select-atom-by-order")
-#define paramdescriptions ("order index")
+#define paramdescriptions ("order order indices, starting at 1 or -1")
 #undef paramdefaults
-#define paramreferences (order)
+#define paramreferences (orders)
 #define paramvalids \
-(DummyValidator< int >())
+(STLVectorValidator< std::vector< int > >(1, 99))
 
-#define statetypes (atomId_t)
-#define statereferences (WalkerId)
+#define statetypes (std::vector<atomId_t>)
+#define statereferences (WalkerIds)
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.cpp	(revision d5c1c8fb196f99fe97e2fd5623052a9bd6d1186a)
+++ src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.cpp	(revision c5bd60c0d5a9aa043dea26d5d5b270648f27d64a)
@@ -54,18 +54,31 @@
 /** =========== define the function ====================== */
 ActionState::ptr SelectionNotAtomByOrderAction::performCall() {
-  const atom * Walker = const_cast<const World &>(World::getInstance()).
-      getAtom(AtomByOrder(params.order.get()));
-  if (Walker != NULL) {
-    if (World::getInstance().isSelected(Walker)) {
-      LOG(1, "Unselecting atom " << *Walker);
-      World::getInstance().unselectAtom(Walker);
-      LOG(0, World::getInstance().countSelectedAtoms() << " atoms remain selected.");
-      return ActionState::ptr(new SelectionNotAtomByOrderState(Walker->getId(), params));
+  size_t no_unselected = 0;
+  const std::vector<int> &indices = params.orders.get();
+  std::vector<atomId_t> atomids;
+  const World &const_world = World::getConstInstance();
+  World &world = World::getInstance();
+  for( std::vector<int>::const_iterator iter = indices.begin();
+      iter != indices.end(); ++iter) {
+    const atom * const walker = const_world.getAtom(AtomByOrder(*iter));
+
+    if (walker != NULL) {
+      if (const_world.isSelected(walker)) {
+        //LOG(1, "Unselecting atom " << *walker);
+        world.unselectAtom(walker);
+        atomids.push_back(walker->getId());
+        ++no_unselected;
+      }
     } else {
-      return Action::success;
+      STATUS("Cannot find atom by given index "+toString(*iter)+".");
+      return Action::failure;
     }
+  }
+
+  LOG(0, no_unselected << " atoms additionally unselected.");
+  if (no_unselected != 0) {
+    return ActionState::ptr(new SelectionNotAtomByOrderState(atomids, params));
   } else {
-    STATUS("Cannot find atom by given order of "+toString(params.order.get())+".");
-    return Action::failure;
+    return Action::success;
   }
 }
@@ -74,5 +87,8 @@
   SelectionNotAtomByOrderState *state = assert_cast<SelectionNotAtomByOrderState*>(_state.get());
 
-  World::getInstance().selectAllAtoms(AtomById(state->WalkerId));
+  World &world = World::getInstance();
+  for (std::vector<atomId_t>::const_iterator iter = state->WalkerIds.begin();
+      iter != state->WalkerIds.end(); ++iter)
+    world.selectAllAtoms(AtomById(*iter));
 
   return ActionState::ptr(_state);
@@ -82,5 +98,8 @@
   SelectionNotAtomByOrderState *state = assert_cast<SelectionNotAtomByOrderState*>(_state.get());
 
-  World::getInstance().unselectAllAtoms(AtomById(state->WalkerId));
+  World &world = World::getInstance();
+  for (std::vector<atomId_t>::const_iterator iter = state->WalkerIds.begin();
+      iter != state->WalkerIds.end(); ++iter)
+    world.unselectAllAtoms(AtomById(*iter));
 
   return ActionState::ptr(_state);
Index: src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.def	(revision d5c1c8fb196f99fe97e2fd5623052a9bd6d1186a)
+++ src/Actions/SelectionAction/Atoms/NotAtomByOrderAction.def	(revision c5bd60c0d5a9aa043dea26d5d5b270648f27d64a)
@@ -9,19 +9,19 @@
 class atom;
 
-#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/STLVectorValidator.hpp"
 
 // i.e. there is an integer with variable name Z that can be found in
 // ValueStorage by the token "Z" -> first column: int, Z, "Z"
 // "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
-#define paramtypes (int)
+#define paramtypes (std::vector<int>)
 #define paramtokens ("unselect-atom-by-order")
-#define paramdescriptions ("order index")
+#define paramdescriptions ("order order indices, starting at 1 or -1")
 #undef paramdefaults
-#define paramreferences (order)
+#define paramreferences (orders)
 #define paramvalids \
-(DummyValidator< int >())
+(STLVectorValidator< std::vector< int > >(1, 99))
 
-#define statetypes (atomId_t)
-#define statereferences (WalkerId)
+#define statetypes (std::vector<atomId_t>)
+#define statereferences (WalkerIds)
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.cpp	(revision d5c1c8fb196f99fe97e2fd5623052a9bd6d1186a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.cpp	(revision c5bd60c0d5a9aa043dea26d5d5b270648f27d64a)
@@ -57,14 +57,16 @@
   const std::vector<int> &indices = params.molindices.get();
   std::vector<const molecule *> mols;
+  const World &const_world = World::getConstInstance();
+  World &world = World::getInstance();
   for( std::vector<int>::const_iterator iter = indices.begin(); 
       iter != indices.end(); ++iter) {
-    const molecule *mol = const_cast<const World &>(World::getInstance()).
-        getMolecule(MoleculeByOrder(*iter));
+    const molecule *mol = const_world.getMolecule(MoleculeByOrder(*iter));
 
     if (mol != NULL) {
-      if (!World::getInstance().isSelected(mol)) {
+      if (!const_world.isSelected(mol)) {
         //LOG(1, "Selecting molecule " << mol->name);
-        World::getInstance().selectMolecule(mol);
+        world.selectMolecule(mol);
         mols.push_back(mol);
+        ++no_selected;
       }
     } else {
@@ -85,7 +87,9 @@
   SelectionMoleculeByOrderState *state = assert_cast<SelectionMoleculeByOrderState*>(_state.get());
 
+  World &world = World::getInstance();
   for (std::vector<const molecule *>::const_iterator iter = state->mols.begin();
       iter != state->mols.end(); ++iter)
-    World::getInstance().unselectMolecule(*iter);
+    world.unselectMolecule(*iter);
+
   return ActionState::ptr(_state);
 }
@@ -94,7 +98,8 @@
   SelectionMoleculeByOrderState *state = assert_cast<SelectionMoleculeByOrderState*>(_state.get());
 
+  World &world = World::getInstance();
   for (std::vector<const molecule *>::const_iterator iter = state->mols.begin();
       iter != state->mols.end(); ++iter)
-    World::getInstance().selectMolecule(*iter);
+    world.selectMolecule(*iter);
   return ActionState::ptr(_state);
 }
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.cpp	(revision d5c1c8fb196f99fe97e2fd5623052a9bd6d1186a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.cpp	(revision c5bd60c0d5a9aa043dea26d5d5b270648f27d64a)
@@ -54,19 +54,30 @@
 
 ActionState::ptr SelectionNotMoleculeByOrderAction::performCall() {
-  const molecule *mol = const_cast<const World &>(World::getInstance()).
-      getMolecule(MoleculeByOrder(params.molindex.get()));
+  size_t no_unselected = 0;
+  const std::vector<int> &indices = params.molindices.get();
+  std::vector<const molecule *> mols;
+  for( std::vector<int>::const_iterator iter = indices.begin();
+      iter != indices.end(); ++iter) {
+    const molecule *mol = const_cast<const World &>(World::getInstance()).
+        getMolecule(MoleculeByOrder(*iter));
 
-  if (mol != NULL) {
-    if (World::getInstance().isSelected(mol)) {
-      LOG(1, "Unselecting molecule " << mol->name);
-      World::getInstance().unselectMolecule(mol);
-      LOG(0, World::getInstance().countSelectedMolecules() << " molecules remain selected.");
-      return ActionState::ptr(new SelectionNotMoleculeByOrderState(mol, params));
+    if (mol != NULL) {
+      if (World::getInstance().isSelected(mol)) {
+        //LOG(1, "Unselecting molecule " << mol->name);
+        World::getInstance().unselectMolecule(mol);
+        mols.push_back(mol);
+        ++no_unselected;
+      }
     } else {
-      return Action::success;
+      STATUS("Cannot find molecule by given index "+toString(*iter)+".");
+      return Action::failure;
     }
+  }
+
+  LOG(0, no_unselected << " molecules additionally unselected.");
+  if (no_unselected != 0) {
+    return ActionState::ptr(new SelectionNotMoleculeByOrderState(mols, params));
   } else {
-    STATUS("Cannot find molecule by given index "+toString(params.molindex.get())+".");
-    return Action::failure;
+    return Action::success;
   }
 }
@@ -75,5 +86,9 @@
   SelectionNotMoleculeByOrderState *state = assert_cast<SelectionNotMoleculeByOrderState*>(_state.get());
 
-  World::getInstance().selectMolecule(state->mol);
+  World &world = World::getInstance();
+  for (std::vector<const molecule *>::const_iterator iter = state->mols.begin();
+      iter != state->mols.end(); ++iter)
+    world.selectMolecule(*iter);
+
   return ActionState::ptr(_state);
 }
@@ -82,5 +97,9 @@
   SelectionNotMoleculeByOrderState *state = assert_cast<SelectionNotMoleculeByOrderState*>(_state.get());
 
-  World::getInstance().unselectMolecule(state->mol);
+  World &world = World::getInstance();
+  for (std::vector<const molecule *>::const_iterator iter = state->mols.begin();
+      iter != state->mols.end(); ++iter)
+    world.unselectMolecule(*iter);
+
   return ActionState::ptr(_state);
 }
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.def	(revision d5c1c8fb196f99fe97e2fd5623052a9bd6d1186a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.def	(revision c5bd60c0d5a9aa043dea26d5d5b270648f27d64a)
@@ -9,19 +9,19 @@
 class molecule;
 
-#include "Parameters/Validators/DummyValidator.hpp"
+#include "Parameters/Validators/STLVectorValidator.hpp"
 
 // i.e. there is an integer with variable name Z that can be found in
 // ValueStorage by the token "Z" -> first column: int, Z, "Z"
 // "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
-#define paramtypes (int)
+#define paramtypes (std::vector<int>)
 #define paramtokens ("unselect-molecule-by-order")
-#define paramdescriptions ("molecule order index, start at 1 or -1")
+#define paramdescriptions ("molecule order indices, starting at 1 or -1")
 #undef paramdefaults
-#define paramreferences (molindex)
+#define paramreferences (molindices)
 #define paramvalids \
-(DummyValidator< int >())
+(STLVectorValidator< std::vector< int > >(1, 99))
 
-#define statetypes (const molecule *)
-#define statereferences (mol)
+#define statetypes (std::vector<const molecule *>)
+#define statereferences (mols)
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
