diff --git a/modules/python/mod-python.cpp b/modules/python/mod-python.cpp
index 24e0b3b..f4d2feb 100644
--- a/modules/python/mod-python.cpp
+++ b/modules/python/mod-python.cpp
@@ -46,7 +46,7 @@
     const value operator()(const list<value>& params) const {
         const value func = car(params);
         if (func == "pythonRuntime")
-            return (gc_ptr<value>)(value*)(void*)&py;
+            return (gc_ptr<value>)(value*)&py;
         return lambda<value(const list<value>&)>();
     }
 };
@@ -67,7 +67,7 @@
 const failable<lambda<value(const list<value>&)> > evalImplementation(const string& path, const value& impl, const list<value>& px, const lambda<value(const list<value>&)>& lifecycle) {
     const string itype(elementName(impl));
     if (contains(itype, ".python")) {
-        const void* p = (gc_ptr<value>)lifecycle(mklist<value>("pythonRuntime"));
+        const value* p = (gc_ptr<value>)lifecycle(mklist<value>("pythonRuntime"));
         return modpython::evalImplementation(path, impl, px, *(python::PythonRuntime*)p);
     }
     if (contains(itype, ".cpp"))
diff --git a/modules/server/mod-eval.hpp b/modules/server/mod-eval.hpp
index 34cdfdb..00f59b9 100644
--- a/modules/server/mod-eval.hpp
+++ b/modules/server/mod-eval.hpp
@@ -724,6 +724,7 @@
 class VirtualHostConf {
 public:
     VirtualHostConf(const gc_pool& p, const ServerConf& sc) : sc(sc), vsc(pool(p), sc.server) {
+        vsc.lifecycle = sc.lifecycle;
         vsc.virtualHostContributionPath = sc.virtualHostContributionPath;
         vsc.virtualHostCompositeName = sc.virtualHostCompositeName;
         vsc.ca = sc.ca;
@@ -878,6 +879,7 @@
     if (sc.wiringServerName == "")
         sc.wiringServerName = mainsc.wiringServerName != ""? mainsc.wiringServerName : httpd::serverName(s);
     debug(sc.wiringServerName, "modeval::postConfigMerge::wiringServerName");
+    sc.lifecycle = mainsc.lifecycle;
     sc.contributionPath = mainsc.contributionPath;
     sc.compositeName = mainsc.compositeName;
     sc.virtualHostContributionPath = mainsc.virtualHostContributionPath;
@@ -922,6 +924,7 @@
         const failable<value> r = failableResult(applyLifecycle(mklist<value>("start")));
         if (!hasContent(r))
             return -1;
+        debug("modeval::postConfig::setlifecycle");
         sc.lifecycle = content(r);
     }
     if (count > 1) {
@@ -929,6 +932,7 @@
         const failable<value> r = failableResult(applyLifecycle(mklist<value>("restart")));
         if (!hasContent(r))
             return -1;
+        debug("modeval::postConfig::setlifecycle");
         sc.lifecycle = content(r);
     }
 
