Index: src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp
===================================================================
--- src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp	(revision 4a06d6f6edff640f888191895deb3c368a27121b)
+++ src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.cpp	(revision 31db5bec2df65d790b2347935eb2728b268a6a52)
@@ -34,9 +34,11 @@
 class MoleculeRotateAroundSelfByAngleState : public ActionState {
 public:
-    MoleculeRotateAroundSelfByAngleState(molecule * const _mol, const double _alpha) :
+    MoleculeRotateAroundSelfByAngleState(molecule * const _mol, const Vector &_Axis, const double _alpha) :
       mol(_mol),
+      Axis(_Axis),
       alpha(_alpha)
     {}
     molecule* const mol;
+    Vector Axis;
     double alpha;
 };
@@ -51,6 +53,7 @@
 {}
 
-void MoleculeRotateAroundSelfByAngle(double angle) {
+void MoleculeRotateAroundSelfByAngle(const Vector &Axis, const double angle) {
   ValueStorage::getInstance().setCurrentValue(MoleculeRotateAroundSelfByAngleAction::NAME, angle);
+  ValueStorage::getInstance().setCurrentValue("position", Axis);
   ActionRegistry::getInstance().getActionByName(MoleculeRotateAroundSelfByAngleAction::NAME)->call(Action::NonInteractive);
 };
@@ -60,4 +63,5 @@
 
   dialog->queryDouble(NAME, MapOfActions::getInstance().getDescription(NAME));
+  dialog->queryVector("position", false, MapOfActions::getInstance().getDescription(NAME));
 
   return dialog;
@@ -67,19 +71,27 @@
   molecule *mol = NULL;
   double alpha = 0.;
+  Vector Axis;
 
-  // obtain angle around which rotate
+  // obtain angle and axis around which rotate
   ValueStorage::getInstance().queryCurrentValue(NAME, alpha);
+  ValueStorage::getInstance().queryCurrentValue("position", Axis);
 
   // check whether a single atom and molecule is selected
-  if ((World::getInstance().getSelectedAtoms().size() != 1) || (World::getInstance().getSelectedMolecules().size() != 1))
+  if (World::getInstance().getSelectedMolecules().size() != 1)
+    return Action::failure;
+  mol = World::getInstance().beginMoleculeSelection()->second;
+
+  // check whether Axis is valid
+  if (Axis.IsZero())
     return Action::failure;
 
-  DoLog(0) && (Log() << Verbose(0) << "Rotate around self by " << alpha << "." << endl);
-  mol = World::getInstance().beginMoleculeSelection()->second;
+  // convert from degrees to radian
+  alpha *= M_PI/180.;
 
   // Creation Line that is the rotation axis
   Vector *CenterOfGravity = mol->DetermineCenterOfGravity();
-  Line RotationAxis(*CenterOfGravity, (World::getInstance().beginAtomSelection()->second)->x);
+  Line RotationAxis(*CenterOfGravity, Axis);
   delete(CenterOfGravity);
+  DoLog(0) && (Log() << Verbose(0) << "Rotate around self by " << alpha << " along " << RotationAxis << "." << endl);
 
   for (molecule::iterator iter = mol->begin(); iter != mol->end(); ++iter) {
@@ -88,5 +100,5 @@
   DoLog(0) && (Log() << Verbose(0) << "done." << endl);
 
-  return Action::state_ptr(new MoleculeRotateAroundSelfByAngleState(mol, alpha));
+  return Action::state_ptr(new MoleculeRotateAroundSelfByAngleState(mol, Axis, alpha));
 }
 
@@ -95,5 +107,5 @@
 
   Vector *CenterOfGravity = state->mol->DetermineCenterOfGravity();
-  Line RotationAxis(*CenterOfGravity, (World::getInstance().beginAtomSelection()->second)->x);
+  Line RotationAxis(*CenterOfGravity, state->Axis);
   delete(CenterOfGravity);
 
@@ -109,5 +121,5 @@
 
   Vector *CenterOfGravity = state->mol->DetermineCenterOfGravity();
-  Line RotationAxis(*CenterOfGravity, (World::getInstance().beginAtomSelection()->second)->x);
+  Line RotationAxis(*CenterOfGravity, state->Axis);
   delete(CenterOfGravity);
 
Index: src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.hpp
===================================================================
--- src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.hpp	(revision 4a06d6f6edff640f888191895deb3c368a27121b)
+++ src/Actions/MoleculeAction/RotateAroundSelfByAngleAction.hpp	(revision 31db5bec2df65d790b2347935eb2728b268a6a52)
@@ -17,5 +17,5 @@
 
 class MoleculeRotateAroundSelfByAngleAction : public Action {
-  friend void MoleculeRotateAroundSelfByAngle(double angle);
+  friend void MoleculeRotateAroundSelfByAngle(const Vector &Axis, const double angle);
 
 public:
