Index: src/Actions/GlobalListOfActions.hpp
===================================================================
--- src/Actions/GlobalListOfActions.hpp	(revision d66cb7b6eecf9fdb226257ff28ed46a6eeec9270)
+++ src/Actions/GlobalListOfActions.hpp	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
@@ -72,4 +72,5 @@
 	(WorldCenterOnEdge) \
 	(WorldSetWorldTime) \
+	(WorldSetBoundaryConditions) \
 	(WorldOutput) \
 	(WorldSetDefaultName) \
Index: src/Actions/Makefile.am
===================================================================
--- src/Actions/Makefile.am	(revision d66cb7b6eecf9fdb226257ff28ed46a6eeec9270)
+++ src/Actions/Makefile.am	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
@@ -389,4 +389,5 @@
   Actions/WorldAction/RepeatBoxAction.cpp \
   Actions/WorldAction/ScaleBoxAction.cpp \
+  Actions/WorldAction/SetBoundaryConditionsAction.cpp \
   Actions/WorldAction/SetDefaultNameAction.cpp \
   Actions/WorldAction/SetWorldTimeAction.cpp
@@ -401,4 +402,5 @@
   Actions/WorldAction/RepeatBoxAction.hpp \
   Actions/WorldAction/ScaleBoxAction.hpp \
+  Actions/WorldAction/SetBoundaryConditionsAction.hpp \
   Actions/WorldAction/SetDefaultNameAction.hpp \
   Actions/WorldAction/SetWorldTimeAction.hpp
@@ -413,4 +415,5 @@
   Actions/WorldAction/RepeatBoxAction.def \
   Actions/WorldAction/ScaleBoxAction.def \
+  Actions/WorldAction/SetBoundaryConditionsAction.def \
   Actions/WorldAction/SetDefaultNameAction.def \
   Actions/WorldAction/SetWorldTimeAction.def
@@ -484,5 +487,5 @@
 #	echo "#include \"Actions/Action_impl_undef.hpp\"" >>$@;
 
-AllActionHeaders.hpp: $(ACTIONPROTOTYPESHEADER)
+AllActionHeaders.hpp: $(ACTIONPROTOTYPESHEADER) Actions/GlobalListOfActions.hpp
 	echo "#ifndef ALLACTIONHEADERS_HPP_" >$@; \
 	echo "#define ALLACTIONHEADERS_HPP_" >>$@; \
@@ -496,5 +499,5 @@
 
 if CONDPYTHON
-AllActionPython.hpp: $(ACTIONPROTOTYPESHEADER)
+AllActionPython.hpp: $(ACTIONPROTOTYPESHEADER) Actions/GlobalListOfActions.hpp
 	echo "#ifndef ALLACTIONPYTHON_HPP_" >$@; \
 	echo "#define ALLACTIONPYTHON_HPP_" >>$@; \
Index: src/Actions/WorldAction/SetBoundaryConditionsAction.cpp
===================================================================
--- src/Actions/WorldAction/SetBoundaryConditionsAction.cpp	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
+++ src/Actions/WorldAction/SetBoundaryConditionsAction.cpp	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
@@ -0,0 +1,90 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * SetBoundaryConditionsAction.cpp
+ *
+ *  Created on: Jan 2, 2012
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include <sstream>
+#include <vector>
+
+#include "CodePatterns/Log.hpp"
+#include "CodePatterns/Verbose.hpp"
+#include "Box.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+#include "Actions/WorldAction/SetBoundaryConditionsAction.hpp"
+
+using namespace MoleCuilder;
+
+// and construct the stuff
+#include "SetBoundaryConditionsAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr WorldSetBoundaryConditionsAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  // gather undo information
+  std::stringstream undostream;
+  undostream << World::getInstance().getDomain().getConditionNames();
+
+  // create undo state
+  WorldSetBoundaryConditionsState *UndoState =
+      new WorldSetBoundaryConditionsState(
+          undostream.str(),
+          params
+          );
+
+  // set conditions
+  World::getInstance().getDomain().setConditions(params.newconditions);
+
+  LOG(0, "STATUS: Boundary conditions are now " << World::getInstance().getDomain().getConditionNames() << ".");
+  return Action::state_ptr(UndoState);
+}
+
+Action::state_ptr WorldSetBoundaryConditionsAction::performUndo(Action::state_ptr _state) {
+  WorldSetBoundaryConditionsState *state = assert_cast<WorldSetBoundaryConditionsState*>(_state.get());
+
+  // set old conditions
+  World::getInstance().getDomain().setConditions(state->undostate);
+
+  LOG(0, "STATUS: Boundary conditions are set back to " << World::getInstance().getDomain().getConditionNames() << ".");
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr WorldSetBoundaryConditionsAction::performRedo(Action::state_ptr _state){
+  WorldSetBoundaryConditionsState *state = assert_cast<WorldSetBoundaryConditionsState*>(_state.get());
+
+  // set again conditions
+  World::getInstance().getDomain().setConditions(state->params.newconditions);
+
+  LOG(0, "STATUS: Boundary conditions are again " << World::getInstance().getDomain().getConditionNames() << ".");
+  return Action::state_ptr(_state);
+}
+
+bool WorldSetBoundaryConditionsAction::canUndo() {
+  return true;
+}
+
+bool WorldSetBoundaryConditionsAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/WorldAction/SetBoundaryConditionsAction.def
===================================================================
--- src/Actions/WorldAction/SetBoundaryConditionsAction.def	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
+++ src/Actions/WorldAction/SetBoundaryConditionsAction.def	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
@@ -0,0 +1,34 @@
+/*
+ * SetBoundaryConditionsAction.def
+ *
+ *  Created on: Jan 2, 2012
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+#include <vector>
+#include <string>
+
+// 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 (NODEFAULT) for each (undefined) default value
+#define paramtypes (std::string)
+#define paramtokens ("set-boundary-conditions")
+#define paramdescriptions ("new boundary conditions as list of three strings, e.g. 'wrap wrap ignore'")
+#undef paramdefaults
+#define paramreferences (newconditions)
+
+#define statetypes (std::string)
+#define statereferences (undostate)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY World
+#define MENUNAME "world"
+#define MENUPOSITION 10
+#define ACTIONNAME SetBoundaryConditions
+#define TOKEN "set-boundary-conditions"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "set the boundary conditions of the simulation domain"
+#undef SHORTFORM
Index: src/Actions/WorldAction/SetBoundaryConditionsAction.hpp
===================================================================
--- src/Actions/WorldAction/SetBoundaryConditionsAction.hpp	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
+++ src/Actions/WorldAction/SetBoundaryConditionsAction.hpp	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
@@ -0,0 +1,22 @@
+/*
+ * SetBoundaryConditionsAction.hpp
+ *
+ *  Created on: Jan 2, 2012
+ *      Author: heber
+ */
+
+#ifndef SETBOUNDARYCONDITIONSACTION_HPP_
+#define SETBOUNDARYCONDITIONSACTION_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include "Actions/Action.hpp"
+
+#include "SetBoundaryConditionsAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* SETBOUNDARYCONDITIONSACTION_HPP_ */
Index: src/Box.cpp
===================================================================
--- src/Box.cpp	(revision d66cb7b6eecf9fdb226257ff28ed46a6eeec9270)
+++ src/Box.cpp	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
@@ -23,6 +23,7 @@
 
 #include <cmath>
+#include <cstdlib>
 #include <iostream>
-#include <cstdlib>
+#include <sstream>
 
 #include "CodePatterns/Assert.hpp"
@@ -304,14 +305,41 @@
 }
 
-const BoundaryConditions::Conditions_t Box::getConditions() const
+const std::string Box::getConditionNames() const
+{
+  std::stringstream outputstream;
+  outputstream << conditions;
+  return outputstream.str();
+}
+
+const BoundaryConditions::Conditions_t & Box::getConditions() const
 {
   return conditions.get();
 }
 
-void Box::setCondition(size_t i, const BoundaryConditions::BoundaryCondition_t condition)
+const BoundaryConditions::BoundaryCondition_t Box::getCondition(size_t i) const
+{
+  return conditions.get(i);
+}
+
+void Box::setCondition(size_t i, const BoundaryConditions::BoundaryCondition_t _condition)
 {
   OBSERVE;
   NOTIFY(BoundaryConditionsChanged);
-  conditions.set(i, condition);
+  conditions.set(i, _condition);
+}
+
+void Box::setConditions(const BoundaryConditions::Conditions_t & _conditions)
+{
+  OBSERVE;
+  NOTIFY(BoundaryConditionsChanged);
+  conditions.set(_conditions);
+}
+
+void Box::setConditions(const std::string & _conditions)
+{
+  OBSERVE;
+  NOTIFY(BoundaryConditionsChanged);
+  std::stringstream inputstream(_conditions);
+  inputstream >> conditions;
 }
 
Index: src/Box.hpp
===================================================================
--- src/Box.hpp	(revision d66cb7b6eecf9fdb226257ff28ed46a6eeec9270)
+++ src/Box.hpp	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
@@ -116,6 +116,10 @@
   Shape getShape() const;
 
-  const BoundaryConditions::Conditions_t getConditions() const;
-  void setCondition(size_t i,const BoundaryConditions::BoundaryCondition_t condition);
+  const std::string getConditionNames() const;
+  const BoundaryConditions::Conditions_t & getConditions() const;
+  const BoundaryConditions::BoundaryCondition_t getCondition(size_t i) const;
+  void setCondition(size_t i,const BoundaryConditions::BoundaryCondition_t _condition);
+  void setConditions(const BoundaryConditions::Conditions_t & _conditions);
+  void setConditions(const std::string & _conditions);
 
   const std::vector<std::pair<Plane,Plane> > getBoundingPlanes() const;
Index: src/Box_BoundaryConditions.cpp
===================================================================
--- src/Box_BoundaryConditions.cpp	(revision d66cb7b6eecf9fdb226257ff28ed46a6eeec9270)
+++ src/Box_BoundaryConditions.cpp	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
@@ -129,5 +129,5 @@
   EnumToStringMap::const_iterator iter = ConverterBiMap.find(condition);
   ASSERT(iter != ConverterBiMap.end(),
-      "BCContainer::getEnum() - enum "+toString(condition)+" is unknown for any enum name.");
+      "BCContainer::getName() - enum "+toString(condition)+" is unknown for any enum name.");
   return iter->second;
 }
Index: src/Box_BoundaryConditions.hpp
===================================================================
--- src/Box_BoundaryConditions.hpp	(revision d66cb7b6eecf9fdb226257ff28ed46a6eeec9270)
+++ src/Box_BoundaryConditions.hpp	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
@@ -61,4 +61,5 @@
     const BoundaryCondition_t &getEnum(const std::string &condition) const;
 
+
   private:
     //!> typedef for the internal enum to string map
Index: src/LinkedCell/unittests/stubs/ObserverBoxStub.cpp
===================================================================
--- src/LinkedCell/unittests/stubs/ObserverBoxStub.cpp	(revision d66cb7b6eecf9fdb226257ff28ed46a6eeec9270)
+++ src/LinkedCell/unittests/stubs/ObserverBoxStub.cpp	(revision c52e08e21874bd6974839eb406e14ffef59a6a4f)
@@ -56,7 +56,16 @@
 }
 
-const BoundaryConditions::Conditions_t Box::getConditions() const
+Vector Box::WrapPeriodically(const Vector &point) const{
+  return point;
+}
+
+const BoundaryConditions::Conditions_t & Box::getConditions() const
 {
   return conditions.get();
+}
+
+double Box::periodicDistanceSquared(const Vector &point1,const Vector &point2) const
+{
+  return point1.DistanceSquared(point2);
 }
 
