Index: src/Actions/SelectionAction/Atoms/NotAtomByIdAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByIdAction.def	(revision a7aebd81a7ffd4f46af11dbf5e777b8833c831cf)
+++ src/Actions/SelectionAction/Atoms/NotAtomByIdAction.def	(revision d7cad13fbfec0974d4bd77f1cbca6c59fac0ad61)
@@ -26,5 +26,4 @@
 (STLVectorValidator< std::vector<atomId_t> >(AtomIdValidator()))
 
-
 #define statetypes (atomids_t)
 #define statereferences (undoatomids)
Index: src/Actions/SelectionAction/Molecules/MoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByIdAction.cpp	(revision a7aebd81a7ffd4f46af11dbf5e777b8833c831cf)
+++ src/Actions/SelectionAction/Molecules/MoleculeByIdAction.cpp	(revision d7cad13fbfec0974d4bd77f1cbca6c59fac0ad61)
@@ -53,18 +53,49 @@
 /** =========== define the function ====================== */
 ActionState::ptr SelectionMoleculeByIdAction::performCall() {
-  const molecule *mol = World::getInstance().getMolecule(MoleculeById(params.molindex.get()));
-  if (mol != NULL) {
-    if (!World::getInstance().isSelected(mol)) {
-      LOG(1, "Selecting molecule " << mol->name);
-      World::getInstance().selectAllMolecules(MoleculeById(params.molindex.get()));
-      LOG(0, World::getInstance().countSelectedMolecules() << " molecules selected.");
-      return ActionState::ptr(new SelectionMoleculeByIdState(params));
+
+  enum Sucess {
+    NoStatus,
+    AllMoleculesUnselected,
+    MoleculesSelected,
+    MoleculeMissing
+  } status = NoStatus;
+
+  const molids_t molids = params.molids.get();
+  molids_t undomolids;
+  undomolids.reserve(molids.size());
+  for (molids_t::const_iterator iter = molids.begin(); iter != molids.end(); ++iter) {
+    const molecule *Walker = World::getInstance().getMolecule(MoleculeById(*iter));
+    if (Walker != NULL) {
+      if (!World::getInstance().isSelected(Walker)) {
+        LOG(1, "Selecting mol " << Walker->getName());
+        World::getInstance().selectMolecule(Walker);
+        undomolids.push_back(*iter);
+        if (status < MoleculeMissing)
+          status = MoleculesSelected;
+      } else {
+        if (status == NoStatus)
+          status = AllMoleculesUnselected;
+      }
     } else {
-      return Action::success;
+      status = MoleculeMissing;
     }
-  } else {
-    STATUS("Cannot find molecule by given index "+toString(params.molindex.get())+".");
-    return Action::failure;
   }
+  LOG(0, World::getInstance().countSelectedMolecules() << " mols selected.");
+
+  switch (status) {
+    case MoleculeMissing:
+      STATUS("Cannot find all mols with given ids.");
+      return Action::failure;
+      break;
+    case AllMoleculesUnselected:
+    case MoleculesSelected:
+      return ActionState::ptr(new SelectionMoleculeByIdState(undomolids, params));
+      break;
+    default:
+      STATUS("No mols have been selected.");
+      return Action::failure;
+      break;
+  }
+  return Action::failure;
 }
 
@@ -72,5 +103,9 @@
   SelectionMoleculeByIdState *state = assert_cast<SelectionMoleculeByIdState*>(_state.get());
 
-  World::getInstance().unselectAllMolecules(MoleculeById(state->params.molindex.get()));
+  for (molids_t::const_iterator iter = state->undomolids.begin();
+      iter != state->undomolids.end(); ++iter) {
+    const molecule *Walker = World::getInstance().getMolecule(MoleculeById(*iter));
+    World::getInstance().unselectMolecule(Walker);
+  }
 
   return ActionState::ptr(_state);
@@ -80,5 +115,9 @@
   SelectionMoleculeByIdState *state = assert_cast<SelectionMoleculeByIdState*>(_state.get());
 
-  World::getInstance().selectAllMolecules(MoleculeById(state->params.molindex.get()));
+  for (molids_t::const_iterator iter = state->undomolids.begin();
+      iter != state->undomolids.end(); ++iter) {
+    const molecule *Walker = World::getInstance().getMolecule(MoleculeById(*iter));
+    World::getInstance().selectMolecule(Walker);
+  }
 
   return ActionState::ptr(_state);
Index: src/Actions/SelectionAction/Molecules/MoleculeByIdAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByIdAction.def	(revision a7aebd81a7ffd4f46af11dbf5e777b8833c831cf)
+++ src/Actions/SelectionAction/Molecules/MoleculeByIdAction.def	(revision d7cad13fbfec0974d4bd77f1cbca6c59fac0ad61)
@@ -7,6 +7,10 @@
 
 // all includes and forward declarations necessary for non-integral types below
+#include <vector>
 #include "types.hpp"
 
+typedef std::vector<moleculeId_t> molids_t;
+
+#include "Parameters/Validators/STLVectorValidator.hpp"
 #include "Parameters/Validators/Specific/MoleculeIdValidator.hpp"
 
@@ -14,14 +18,14 @@
 // 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 (moleculeId_t)
+#define paramtypes (molids_t)
 #define paramtokens ("select-molecule-by-id")
-#define paramdescriptions ("molecule index")
+#define paramdescriptions ("molecule indices to select")
 #undef paramdefaults
-#define paramreferences (molindex)
+#define paramreferences (molids)
 #define paramvalids \
-(MoleculeIdValidator())
+(STLVectorValidator< std::vector<moleculeId_t> >(MoleculeIdValidator()))
 
-#undef statetypes
-#undef statereferences
+#define statetypes (molids_t)
+#define statereferences (undomolids)
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.cpp	(revision a7aebd81a7ffd4f46af11dbf5e777b8833c831cf)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.cpp	(revision d7cad13fbfec0974d4bd77f1cbca6c59fac0ad61)
@@ -53,18 +53,48 @@
 /** =========== define the function ====================== */
 ActionState::ptr SelectionNotMoleculeByIdAction::performCall() {
-  const molecule *mol = World::getInstance().getMolecule(MoleculeById(params.molindex.get()));
-  if (mol != NULL) {
-    if (World::getInstance().isSelected(mol)) {
-      LOG(1, "Unselecting molecule " << mol->name);
-      World::getInstance().unselectAllMolecules(MoleculeById(params.molindex.get()));
-      LOG(0, World::getInstance().countSelectedMolecules() << " molecules remain selected.");
-      return ActionState::ptr(new SelectionNotMoleculeByIdState(params));
+  enum Sucess {
+    NoStatus,
+    AllMoleculesSelected,
+    MoleculesUnselected,
+    MoleculeMissing
+  } status = NoStatus;
+
+  const molids_t molids = params.molids.get();
+  molids_t undomolids;
+  undomolids.reserve(molids.size());
+  for (molids_t::const_iterator iter = molids.begin(); iter != molids.end(); ++iter) {
+    const molecule *Walker = World::getInstance().getMolecule(MoleculeById(*iter));
+    if (Walker != NULL) {
+      if (World::getInstance().isSelected(Walker)) {
+        LOG(1, "Unselecting mol " << Walker->getName());
+        World::getInstance().unselectMolecule(Walker);
+        undomolids.push_back(*iter);
+        if (status < MoleculeMissing)
+          status = MoleculesUnselected;
+      } else {
+        if (status == NoStatus)
+          status = AllMoleculesSelected;
+      }
     } else {
-      return Action::success;
+      status = MoleculeMissing;
     }
-  } else {
-    STATUS("Cannot find molecule by given index "+toString(params.molindex.get())+".");
-    return Action::failure;
   }
+  LOG(0, World::getInstance().countSelectedMolecules() << " mols remain selected.");
+
+  switch (status) {
+    case MoleculeMissing:
+      STATUS("Cannot find all mols by given ids.");
+      return Action::failure;
+      break;
+    case AllMoleculesSelected:
+    case MoleculesUnselected:
+      return ActionState::ptr(new SelectionNotMoleculeByIdState(undomolids, params));
+      break;
+    default:
+      STATUS("No mols have been selected.");
+      return Action::failure;
+      break;
+  }
+  return Action::failure;
 }
 
@@ -72,5 +102,9 @@
   SelectionNotMoleculeByIdState *state = assert_cast<SelectionNotMoleculeByIdState*>(_state.get());
 
-  World::getInstance().selectAllMolecules(MoleculeById(state->params.molindex.get()));
+  for (molids_t::const_iterator iter = state->undomolids.begin();
+      iter != state->undomolids.end(); ++iter) {
+    const molecule *Walker = World::getInstance().getMolecule(MoleculeById(*iter));
+    World::getInstance().selectMolecule(Walker);
+  }
 
   return ActionState::ptr(_state);
@@ -80,5 +114,9 @@
   SelectionNotMoleculeByIdState *state = assert_cast<SelectionNotMoleculeByIdState*>(_state.get());
 
-  World::getInstance().unselectAllMolecules(MoleculeById(state->params.molindex.get()));
+  for (molids_t::const_iterator iter = state->undomolids.begin();
+      iter != state->undomolids.end(); ++iter) {
+    const molecule *Walker = World::getInstance().getMolecule(MoleculeById(*iter));
+    World::getInstance().unselectMolecule(Walker);
+  }
 
   return ActionState::ptr(_state);
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.def	(revision a7aebd81a7ffd4f46af11dbf5e777b8833c831cf)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.def	(revision d7cad13fbfec0974d4bd77f1cbca6c59fac0ad61)
@@ -7,6 +7,10 @@
 
 // all includes and forward declarations necessary for non-integral types below
+#include <vector>
 #include "types.hpp"
 
+typedef std::vector<moleculeId_t> molids_t;
+
+#include "Parameters/Validators/STLVectorValidator.hpp"
 #include "Parameters/Validators/Specific/MoleculeIdValidator.hpp"
 
@@ -14,14 +18,14 @@
 // 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 (moleculeId_t)
+#define paramtypes (molids_t)
 #define paramtokens ("unselect-molecule-by-id")
-#define paramdescriptions ("molecule index")
+#define paramdescriptions ("molecule indices to unselect")
 #undef paramdefaults
-#define paramreferences (molindex)
+#define paramreferences (molids)
 #define paramvalids \
-(MoleculeIdValidator())
+(STLVectorValidator< std::vector<moleculeId_t> >(MoleculeIdValidator()))
 
-#undef statetypes
-#undef statereferences
+#define statetypes (molids_t)
+#define statereferences (undomolids)
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
