Index: src/Actions/Action.hpp
===================================================================
--- src/Actions/Action.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/Action.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -174,4 +174,11 @@
   virtual void outputAsCLI(std::ostream &ost) const=0;
 
+  /** Prints what would be necessary to add the Action from a Python script
+   *
+   * \param ost output stream to print to
+   * \param prefix package prefix to be used
+   */
+  virtual void outputAsPython(std::ostream &ost, const std::string &prefix) const=0;
+
   /**
    * Traits resemble all necessary information that "surrounds" an action, such as
Index: src/Actions/ActionQueue.cpp
===================================================================
--- src/Actions/ActionQueue.cpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/ActionQueue.cpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -106,4 +106,19 @@
 }
 
+void ActionQueue::outputAsPython(std::ostream &output) const
+{
+  const std::string prefix("pyMoleCuilder");
+  output << "import " << prefix << std::endl;
+  output << "% ========================== Stored Session BEGIN ==========================" << std::endl;
+  for (ActionQueue_t::const_iterator iter = queue.begin();
+      iter != queue.end();
+      ++iter) {
+    // skip store-session in printed list
+    if ((*iter)->getName() != std::string("store-session"))
+      (*iter)->outputAsPython(output, prefix);
+  }
+  output << "% =========================== Stored Session END ===========================" << std::endl;
+}
+
 const ActionTrait& ActionQueue::getActionsTrait(const std::string &name) const
 {
Index: src/Actions/ActionQueue.hpp
===================================================================
--- src/Actions/ActionQueue.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/ActionQueue.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -96,4 +96,12 @@
   void outputAsCLI(std::ostream &output) const;
 
+  /** Print the current contents of the queue as Python instantiated list of Actions.
+   *
+   * This is useful for storing the current session.
+   *
+   * \param output output stream to print to
+   */
+  void outputAsPython(std::ostream &output) const;
+
   /** Undoes last called Action.
    *
Index: src/Actions/ActionSequence.cpp
===================================================================
--- src/Actions/ActionSequence.cpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/ActionSequence.cpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -166,2 +166,8 @@
   }
 }
+
+void ActionSequence::outputAsPython(std::ostream &ost, const std::string &prefix) const
+{
+  for(std::deque<Action*>::const_iterator it=actions.begin();it!=actions.end();++it)
+    (*it)->outputAsPython(ost, prefix);
+}
Index: src/Actions/ActionSequence.hpp
===================================================================
--- src/Actions/ActionSequence.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/ActionSequence.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -45,4 +45,5 @@
 
   void outputAsCLI(std::ostream &ost) const;
+  void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
 protected:
Index: src/Actions/Action_impl_header.hpp
===================================================================
--- src/Actions/Action_impl_header.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/Action_impl_header.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -213,4 +213,5 @@
 
   void outputAsCLI(std::ostream &ost) const;
+  void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
   struct PARAMS : ActionParameters {
Index: src/Actions/Action_impl_pre.hpp
===================================================================
--- src/Actions/Action_impl_pre.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/Action_impl_pre.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -148,6 +148,6 @@
 #define outputAsCLI_print(z,n,output) \
     output << \
-    BOOST_PP_IF(n, BOOST_PP_STRINGIZE( ) , BOOST_PP_STRINGIZE() ) \
-      << "--" << \
+    BOOST_PP_IF(n, " --", "--") \
+    << \
     BOOST_PP_SEQ_ELEM(n, paramtokens) \
     << " \"" << toCLIString(params. \
@@ -162,4 +162,13 @@
         == getName()) \
         booltoken = false;
+
+// prints command line call for this Action for paramtypes with tokens
+#define outputAsPython_print(z,n,output) \
+    output << \
+    BOOST_PP_IF(n, ", ", "") \
+    << "\"" << toCLIString(params. \
+        BOOST_PP_SEQ_ELEM(n, paramreferences) \
+        .get()) \
+    << "\"";
 
 // print an initialiser list, i.e. "var( token, valid (,default) )(,)"
@@ -315,4 +324,17 @@
 }
 
+// =========== output as PYTHON ===========
+void ACTION::outputAsPython(std::ostream &ost, const std::string &prefix) const {
+  // print prefix and action command
+  ost << prefix << "." << BOOST_PP_STRINGIZE( COMMAND ) << "(";
+  // then print option along with each argument if set
+#if defined paramtypes && defined paramreferences && BOOST_PP_NOT_EQUAL(MAXPARAMTYPES,0)
+#define BOOST_PP_LOCAL_MACRO(n) outputAsPython_print(~, n, ost)
+#define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
+#include BOOST_PP_LOCAL_ITERATE()
+#endif
+  ost << ")" << std::endl;
+}
+
 // =========== time the action ===========
 // we need this here to have the correct function name
Index: src/Actions/Calculation.hpp
===================================================================
--- src/Actions/Calculation.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/Calculation.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -43,4 +43,5 @@
 
   virtual void outputAsCLI(std::ostream &ost) const;
+  virtual void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
   /**
Index: src/Actions/Calculation_impl.hpp
===================================================================
--- src/Actions/Calculation_impl.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/Calculation_impl.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -72,4 +72,8 @@
 }
 
+template<typename T>
+void Calculation<T>::outputAsPython(std::ostream &ost, const std::string &prefix) const
+{}
+
 // methods for calculation infrastructure
 
Index: src/Actions/ErrorAction.cpp
===================================================================
--- src/Actions/ErrorAction.cpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/ErrorAction.cpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -82,2 +82,5 @@
 void ErrorAction::outputAsCLI(std::ostream &ost) const
 {}
+
+void ErrorAction::outputAsPython(std::ostream &ost, const std::string &prefix) const
+{}
Index: src/Actions/ErrorAction.hpp
===================================================================
--- src/Actions/ErrorAction.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/ErrorAction.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -30,4 +30,5 @@
 
   void outputAsCLI(std::ostream &ost) const;
+  void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
 private:
Index: src/Actions/MakroAction.cpp
===================================================================
--- src/Actions/MakroAction.cpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/MakroAction.cpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -132,2 +132,7 @@
   actions.outputAsCLI(ost);
 }
+
+void MakroAction::outputAsPython(std::ostream &ost, const std::string &prefix) const
+{
+  actions.outputAsCLI(ost);
+}
Index: src/Actions/MakroAction.hpp
===================================================================
--- src/Actions/MakroAction.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/MakroAction.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -38,4 +38,5 @@
 
   virtual void outputAsCLI(std::ostream &ost) const;
+  virtual void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
   // must be called after all primitive actions are present
Index: src/Actions/MakroAction_impl_header.hpp
===================================================================
--- src/Actions/MakroAction_impl_header.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/MakroAction_impl_header.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -219,4 +219,5 @@
 
   void outputAsCLI(std::ostream &ost) const;
+  void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
   struct PARAMS : ActionParameters {
Index: src/Actions/MakroAction_impl_pre.hpp
===================================================================
--- src/Actions/MakroAction_impl_pre.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/MakroAction_impl_pre.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -146,6 +146,6 @@
 #define outputAsCLI_print(z,n,output) \
     output << \
-    BOOST_PP_IF(n, BOOST_PP_STRINGIZE( ) , BOOST_PP_STRINGIZE() ) \
-      << "--" << \
+    BOOST_PP_IF(n, " --", "--") \
+    << \
     BOOST_PP_SEQ_ELEM(n, paramtokens) \
     << " \"" << toCLIString(params. \
@@ -160,4 +160,13 @@
         == getName()) \
         booltoken = false;
+
+// prints command line call for this Action for paramtypes with tokens
+#define outputAsPython_print(z,n,output) \
+    output << \
+    BOOST_PP_IF(n, ", ", "") \
+    << "\"" << toCLIString(params. \
+        BOOST_PP_SEQ_ELEM(n, paramreferences) \
+        .get()) \
+    << "\"";
 
 // print an initialiser list, i.e. "var( token, valid (,default) )(,)"
@@ -314,4 +323,17 @@
 }
 
+// =========== output as PYTHTON ===========
+void ACTION::outputAsPython(std::ostream &ost, const std::string &prefix) const {
+  // print prefix and action command
+  ost << prefix << "." << BOOST_PP_STRINGIZE( COMMAND ) << "(";
+  // then print option along with each argument if set
+#if defined paramtypes && defined paramreferences && BOOST_PP_NOT_EQUAL(MAXPARAMTYPES,0)
+#define BOOST_PP_LOCAL_MACRO(n) outputAsCLI_print(~, n, ost)
+#define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
+#include BOOST_PP_LOCAL_ITERATE()
+#endif
+  ost << ")" << std::endl;
+}
+
 // =========== time the action ===========
 // we need this here to have the correct function name
Index: src/Actions/ManipulateAtomsProcess.cpp
===================================================================
--- src/Actions/ManipulateAtomsProcess.cpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/ManipulateAtomsProcess.cpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -87,4 +87,7 @@
 {}
 
+void ManipulateAtomsProcess::outputAsPython(std::ostream &ost, const std::string &prefix) const
+{}
+
 void ManipulateAtomsProcess::doManipulate(World *world){
   setMaxSteps(world->numAtoms());
Index: src/Actions/ManipulateAtomsProcess.hpp
===================================================================
--- src/Actions/ManipulateAtomsProcess.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/ManipulateAtomsProcess.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -39,4 +39,5 @@
 
   void outputAsCLI(std::ostream &ost) const;
+  void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
   virtual void doManipulate(World *);
Index: src/Actions/MethodAction.cpp
===================================================================
--- src/Actions/MethodAction.cpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/MethodAction.cpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -79,8 +79,11 @@
 }
 
+bool MethodAction::shouldUndo(){
+  return true;
+}
+
 void MethodAction::outputAsCLI(std::ostream &ost) const
 {}
 
-bool MethodAction::shouldUndo(){
-  return true;
-}
+void MethodAction::outputAsPython(std::ostream &ost, const std::string &prefix) const
+{}
Index: src/Actions/MethodAction.hpp
===================================================================
--- src/Actions/MethodAction.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/MethodAction.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -35,4 +35,5 @@
 
   void outputAsCLI(std::ostream &ost) const;
+  void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
 protected:
Index: src/Actions/Reaction.hpp
===================================================================
--- src/Actions/Reaction.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/Reaction.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -43,4 +43,5 @@
 
   virtual void outputAsCLI(std::ostream &ost) const;
+  virtual void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
   /**
Index: src/Actions/Reaction_impl.hpp
===================================================================
--- src/Actions/Reaction_impl.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/Reaction_impl.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -69,4 +69,8 @@
 {}
 
+template<typename T>
+void Reaction<T>::outputAsPython(std::ostream &ost, const std::string &prefix) const
+{}
+
 // methods for calculation infrastructure
 
Index: src/Actions/Reaction_impl_header.hpp
===================================================================
--- src/Actions/Reaction_impl_header.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/Reaction_impl_header.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -207,4 +207,5 @@
 
   void outputAsCLI(std::ostream &ost) const;
+  void outputAsPython(std::ostream &ost, const std::string &prefix) const;
 
   virtual RETURNTYPE * doCalc();
Index: src/Actions/Reaction_impl_pre.hpp
===================================================================
--- src/Actions/Reaction_impl_pre.hpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/Reaction_impl_pre.hpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -130,6 +130,6 @@
 #define outputAsCLI_print(z,n,output) \
     output << \
-    BOOST_PP_IF(n, BOOST_PP_STRINGIZE( ) , BOOST_PP_STRINGIZE() ) \
-      << "--" << \
+    BOOST_PP_IF(n, " --", "--") \
+    << \
     BOOST_PP_SEQ_ELEM(n, paramtokens) \
     << " \"" << toCLIString(params. \
@@ -144,4 +144,13 @@
         == getName()) \
         booltoken = false;
+
+// prints command line call for this Action for paramtypes with tokens
+#define outputAsPython_print(z,n,output) \
+    output << \
+    BOOST_PP_IF(n, ", ", "") \
+    << "\"" << toCLIString(params. \
+        BOOST_PP_SEQ_ELEM(n, paramreferences) \
+        .get()) \
+    << "\"";
 
 // prints set/queryCurrentValue (command) for paramreferences and paramtokens
@@ -221,4 +230,17 @@
 #include BOOST_PP_LOCAL_ITERATE()
 #endif
+}
+
+// =========== output as PYTHTON ===========
+void REACTION::outputAsPython(std::ostream &ost, const std::string &prefix) const {
+  // print prefix and action command
+  ost << prefix << "." << BOOST_PP_STRINGIZE( COMMAND ) << "(";
+  // then print option along with each argument if set
+#if defined paramtypes && defined paramreferences && BOOST_PP_NOT_EQUAL(MAXPARAMTYPES,0)
+#define BOOST_PP_LOCAL_MACRO(n) outputAsCLI_print(~, n, ost)
+#define BOOST_PP_LOCAL_LIMITS  (0, MAXPARAMTYPES-1)
+#include BOOST_PP_LOCAL_ITERATE()
+#endif
+  ost << ")" << std::endl;
 }
 
Index: src/Actions/unittests/ActionSequenceUnitTest.cpp
===================================================================
--- src/Actions/unittests/ActionSequenceUnitTest.cpp	(revision 9b56f345faf73985829573ec6c7426dd30fb194c)
+++ src/Actions/unittests/ActionSequenceUnitTest.cpp	(revision 477012eeadb741f0b02108f075e80b73e227d16a)
@@ -87,4 +87,6 @@
   void outputAsCLI(std::ostream &ost) const
   {}
+  void outputAsPython(std::ostream &ost, const std::string &prefix) const
+  {}
 };
 
@@ -118,4 +120,6 @@
   void outputAsCLI(std::ostream &ost) const
   {}
+  void outputAsPython(std::ostream &ost, const std::string &prefix) const
+  {}
 };
 
@@ -151,4 +155,6 @@
   }
   void outputAsCLI(std::ostream &ost) const
+  {}
+  void outputAsPython(std::ostream &ost, const std::string &prefix) const
   {}
   bool wasCalled(){
