Index: src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.cpp
===================================================================
--- src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.cpp	(revision c9bc2b7e55bf61ed1abfd0a5314ce53adea45fa9)
+++ src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.cpp	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
@@ -25,5 +25,6 @@
 #include "World.hpp"
 
-#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
+#include "RandomNumbers/RandomNumberEngine.hpp"
+#include "RandomNumbers/RandomNumberEngineFactory.hpp"
 
 #include <iostream>
@@ -43,12 +44,23 @@
   getParametersfromValueStorage();
 
+  // create a new state for undo
   CommandSetRandomNumbersEngineState *state =
       new CommandSetRandomNumbersEngineState(
-          RandomNumberGeneratorFactory::getInstance().getEngineName(),
+          RandomNumberEngineFactory::getInstance().getCurrentTypeName(),
+          RandomNumberEngineFactory::getInstance().getPrototype().getseed(),
           params);
-  RandomNumberGeneratorFactory::getInstance().setEngine(params.engine_type);
+  // set new default
+  RandomNumberEngineFactory::getInstance().setCurrentType(params.engine_type);
+  // set new seed if given, have to use ugly const_cast as prototype is not manipulable
+  if (params.seed != -1) {
+    RandomNumberEngine &engine =
+        const_cast<RandomNumberEngine &>(
+            RandomNumberEngineFactory::getInstance().getPrototype(params.engine_type)
+            );
+    engine.seed(params.seed);
+  }
 
-  DoLog(0) && (Log() << Verbose(0) << "Engine of random number generator is now: "
-      << RandomNumberGeneratorFactory::getInstance().getEngineName() << std::endl);
+  DoLog(0) && (Log() << Verbose(0) << "Default random number engine is now: "
+      << RandomNumberEngineFactory::getInstance().getCurrentTypeName() << std::endl);
 
   return Action::state_ptr(state);
@@ -56,14 +68,25 @@
 
 Action::state_ptr CommandSetRandomNumbersEngineAction::performUndo(Action::state_ptr _state) {
-  CommandSetRandomNumbersEngineState *state = assert_cast<CommandSetRandomNumbersEngineState*>(_state.get());
+  CommandSetRandomNumbersEngineState *state =
+      assert_cast<CommandSetRandomNumbersEngineState*>(_state.get());
 
+  // create a new state for redo
   CommandSetRandomNumbersEngineState *newstate =
       new CommandSetRandomNumbersEngineState(
-          RandomNumberGeneratorFactory::getInstance().getEngineName(),
+          RandomNumberEngineFactory::getInstance().getCurrentTypeName(),
+          RandomNumberEngineFactory::getInstance().getPrototype().getseed(),
           state->params);
-  RandomNumberGeneratorFactory::getInstance().setEngine(state->old_engine_type);
+  // set new default
+  RandomNumberEngineFactory::getInstance().setCurrentType(state->old_engine_type);
+  RandomNumberEngine &engine = const_cast<RandomNumberEngine &>(
+      RandomNumberEngineFactory::getInstance().getPrototype(state->params.engine_type)
+    );
+  // set new seed if given, have to use ugly const_cast as prototype is not manipulable
+  if (state->params.seed != -1) {
+    engine.seed(state->params.seed);
+  }
 
-  DoLog(0) && (Log() << Verbose(0) << "Engine of random number generator is undone to: "
-      << RandomNumberGeneratorFactory::getInstance().getEngineName() << std::endl);
+  DoLog(0) && (Log() << Verbose(0) << "Default random number engine is undone to: "
+      << RandomNumberEngineFactory::getInstance().getCurrentTypeName() << std::endl);
 
   return Action::state_ptr(newstate);
Index: src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.def
===================================================================
--- src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.def	(revision c9bc2b7e55bf61ed1abfd0a5314ce53adea45fa9)
+++ src/Actions/RandomNumbersAction/SetRandomNumbersEngineAction.def	(revision 1ee3b8d85bc3b82115508a188e0b73f52d7404db)
@@ -12,12 +12,12 @@
 // ValueStorage by the token "Z" -> first column: int, Z, "Z"
 // "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (std::string)
-#define paramtokens ("set-random-number-engine")
-#define paramdescriptions ("name of the pseudo-random engine from boost::random")
-#undef paramdefaults
-#define paramreferences (engine_type)
+#define paramtypes (std::string)(int)
+#define paramtokens ("set-random-number-engine")("random-number-seed")
+#define paramdescriptions ("name of the pseudo-random engine from boost::random")("seed of the pseudo-random number sequence")
+#define paramdefaults (NODEFAULT)("-1")
+#define paramreferences (engine_type)(seed)
 
-#define statetypes (std::string)
-#define statereferences (old_engine_type)
+#define statetypes (std::string)(int)
+#define statereferences (old_engine_type)(old_seed)
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
