Index: src/Actions/MapOfActions.cpp
===================================================================
--- src/Actions/MapOfActions.cpp	(revision 9d2a9276f94fe257f7259e9ad59fcd484a8722c2)
+++ src/Actions/MapOfActions.cpp	(revision e2b47c937167a3e72fb72e019f375a4bbd32d280)
@@ -189,5 +189,5 @@
   TypeMap["principal-axis-system"] = Molecule;
   TypeMap["remove-atom"] = Atom;
-  TypeMap["remove-sphere"] = Atom;
+  TypeMap["remove-sphere"] = Double;
   TypeMap["repeat-box"] = Vector;
   TypeMap["rotate-to-pas"] = Molecule;
@@ -258,5 +258,5 @@
 //  generic.insert("principal-axis-system");
   generic.insert("remove-atom");
-//  generic.insert("remove-sphere");
+  generic.insert("remove-sphere");
   generic.insert("repeat-box");
   generic.insert("rotate-to-pas");
Index: src/Actions/WorldAction/RemoveSphereOfAtomsAction.cpp
===================================================================
--- src/Actions/WorldAction/RemoveSphereOfAtomsAction.cpp	(revision 9d2a9276f94fe257f7259e9ad59fcd484a8722c2)
+++ src/Actions/WorldAction/RemoveSphereOfAtomsAction.cpp	(revision e2b47c937167a3e72fb72e019f375a4bbd32d280)
@@ -10,4 +10,5 @@
 #include "Descriptors/AtomDescriptor.hpp"
 #include "log.hpp"
+#include "molecule.hpp"
 #include "vector.hpp"
 #include "verbose.hpp"
@@ -35,21 +36,22 @@
   Dialog *dialog = UIFactory::getInstance().makeDialog();
   double radius = 0.;
-  atom *first = NULL;
+  Vector point;
 
   dialog->queryDouble(NAME, &radius, MapOfActions::getInstance().getDescription(NAME));
-  dialog->queryAtom("atom-by-id", &first, MapOfActions::getInstance().getDescription("atom-by-id"));
+  dialog->queryVector("position", &point, World::getInstance().getDomain(), false, MapOfActions::getInstance().getDescription("position"));
 
   if(dialog->display()) {
     delete dialog;
-    DoLog(1) && (Log() << Verbose(1) << "Removing atoms around " << first->nr << " with radius " << radius << "." << endl);
+    DoLog(1) && (Log() << Verbose(1) << "Removing atoms around " << point << " with radius " << radius << "." << endl);
     vector<atom*> AllAtoms = World::getInstance().getAllAtoms();
-    vector<atom*>::iterator AtomAdvancer = AllAtoms.begin();
-    for (vector<atom*>::iterator AtomRunner = AtomAdvancer; AtomRunner != AllAtoms.end(); ) {
-      ++AtomAdvancer;
-      if (first != *AtomRunner) // dont't destroy reference ...
-        if (first->x.DistanceSquared((*AtomRunner)->x) > radius*radius) // distance to first above radius ...
-          World::getInstance().destroyAtom(*AtomRunner);
+    vector<molecule *> molecules = World::getInstance().getAllMolecules();
+    for (vector<atom*>::iterator AtomRunner = AllAtoms.begin(); AtomRunner != AllAtoms.end(); ++AtomRunner) {
+      if (point.DistanceSquared((*AtomRunner)->x) > radius*radius) { // distance to first above radius ...
+        // TODO: This is not necessary anymore when atoms are completely handled by World (create/destroy and load/save)
+        for (vector<molecule *>::iterator iter = molecules.begin();iter != molecules.end();++iter)
+          (*iter)->erase(*AtomRunner);
+        World::getInstance().destroyAtom(*AtomRunner);
+      }
     }
-    World::getInstance().destroyAtom(first);
     return Action::success;
   } else {
Index: src/builder.cpp
===================================================================
--- src/builder.cpp	(revision 9d2a9276f94fe257f7259e9ad59fcd484a8722c2)
+++ src/builder.cpp	(revision e2b47c937167a3e72fb72e019f375a4bbd32d280)
@@ -2000,25 +2000,16 @@
             case 'R':
               if (ExitFlag == 0) ExitFlag = 1;
-              if ((argptr+3 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])))  {
+              if ((argptr+4 >= argc) || (argv[argptr][0] == '-'))  {
                 ExitFlag = 255;
-                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for removing atoms: -R <x> <y> <z> <distance>" << endl);
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for removing atoms: -R <distance> --position <x> <y> <z>" << endl);
                 performCriticalExit();
               } else {
-                SaveFlag = true;
-                const double radius = atof(argv[argptr+3]);
-                Vector point(atof(argv[argptr]),atof(argv[argptr+1]),atof(argv[argptr+2]));
-                DoLog(1) && (Log() << Verbose(1) << "Removing atoms around " << point << " with radius " << radius << "." << endl);
-                atom *Walker = NULL;
-                molecule::iterator advancer = mol->begin();
-                for(molecule::iterator iter = advancer; advancer != mol->end();) {
-                  iter = advancer++;
-                  if ((*iter)->x.DistanceSquared(point) > radius*radius){ // distance to first above radius ...
-                    Walker = (*iter);
-                    DoLog(1) && (Log() << Verbose(1) << "Removing atom " << *Walker << "." << endl);
-                    mol->RemoveAtom(*(iter));
-                    World::getInstance().destroyAtom(Walker);
-                  }
-                }
-                argptr+=4;
+                ArgcList.insert(argptr-1);
+                ArgcList.insert(argptr);
+                ArgcList.insert(argptr+1);
+                ArgcList.insert(argptr+2);
+                ArgcList.insert(argptr+3);
+                ArgcList.insert(argptr+4);
+                argptr+=5;
               }
               break;
Index: tests/regression/testsuite-simple_configuration.at
===================================================================
--- tests/regression/testsuite-simple_configuration.at	(revision 9d2a9276f94fe257f7259e9ad59fcd484a8722c2)
+++ tests/regression/testsuite-simple_configuration.at	(revision e2b47c937167a3e72fb72e019f375a4bbd32d280)
@@ -87,5 +87,5 @@
 AT_KEYWORDS([configuration])
 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/pre/test.* .], 0)
-AT_CHECK([../../molecuilder test.conf -e ${abs_top_srcdir}/src/ -R 7.283585982 3.275186040 3.535886037 7.], 0, [stdout], [stderr])
+AT_CHECK([../../molecuilder test.conf -e ${abs_top_srcdir}/src/ -R 7. --position 7.283585982 3.275186040 3.535886037], 0, [stdout], [stderr])
 AT_CHECK([sort -n test.conf.xyz | grep -v "Created by" >test.conf.xyz-sorted], 0, [ignore], [ignore])
 AT_CHECK([sort -n ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/test.conf.xyz  | grep -v "Created by" >${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/8/post/test.conf.xyz-sorted], 0, [ignore], [ignore])
