diff --git a/src/lxc/lxc_domain.c b/src/lxc/lxc_domain.c
index 17f1d0c51d..bd80d9fe9a 100644
--- a/src/lxc/lxc_domain.c
+++ b/src/lxc/lxc_domain.c
@@ -24,6 +24,10 @@
 #include "lxc_domain.h"
 
 #include "memory.h"
+#include "logging.h"
+#include "virterror_internal.h"
+
+#define VIR_FROM_THIS VIR_FROM_LXC
 
 static void *virLXCDomainObjPrivateAlloc(void)
 {
@@ -43,8 +47,36 @@ static void virLXCDomainObjPrivateFree(void *data)
 }
 
 
+static int virLXCDomainObjPrivateXMLFormat(virBufferPtr buf, void *data)
+{
+    virLXCDomainObjPrivatePtr priv = data;
+
+    virBufferAsprintf(buf, "  <init pid='%llu'/>\n",
+                      (unsigned long long)priv->initpid);
+
+    return 0;
+}
+
+static int virLXCDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt, void *data)
+{
+    virLXCDomainObjPrivatePtr priv = data;
+    unsigned long long thepid;
+
+    if (virXPathULongLong("string(./init[1]/@pid)", ctxt, &thepid) < 0) {
+        virErrorPtr err = virGetLastError();
+        VIR_WARN("Failed to load init pid from state %s", err ? err->message : "null");
+        priv->initpid = 0;
+    } else {
+        priv->initpid = thepid;
+    }
+
+    return 0;
+}
+
 void virLXCDomainSetPrivateDataHooks(virCapsPtr caps)
 {
     caps->privateDataAllocFunc = virLXCDomainObjPrivateAlloc;
     caps->privateDataFreeFunc = virLXCDomainObjPrivateFree;
+    caps->privateDataXMLFormat = virLXCDomainObjPrivateXMLFormat;
+    caps->privateDataXMLParse = virLXCDomainObjPrivateXMLParse;
 }
diff --git a/src/lxc/lxc_domain.h b/src/lxc/lxc_domain.h
index b1dd5d9ead..882f34ad9b 100644
--- a/src/lxc/lxc_domain.h
+++ b/src/lxc/lxc_domain.h
@@ -34,6 +34,8 @@ struct _virLXCDomainObjPrivate {
     bool doneStopEvent;
     int stopReason;
     bool wantReboot;
+
+    pid_t initpid;
 };
 
 void virLXCDomainSetPrivateDataHooks(virCapsPtr caps);
diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c
index 1bf46975e0..d489c04857 100644
--- a/src/lxc/lxc_process.c
+++ b/src/lxc/lxc_process.c
@@ -637,11 +637,18 @@ static void virLXCProcessMonitorExitNotify(virLXCMonitorPtr mon ATTRIBUTE_UNUSED
               priv->stopReason, status);
 }
 
+/* XXX a little evil */
+extern virLXCDriverPtr lxc_driver;
 static void virLXCProcessMonitorInitNotify(virLXCMonitorPtr mon ATTRIBUTE_UNUSED,
                                            pid_t initpid,
                                            virDomainObjPtr vm)
 {
+    virLXCDomainObjPrivatePtr priv = vm->privateData;
+    priv->initpid = initpid;
     virDomainAuditInit(vm, initpid);
+
+    if (virDomainSaveStatus(lxc_driver->caps, lxc_driver->stateDir, vm) < 0)
+        VIR_WARN("Cannot update XML with PID for LXC %s", vm->def->name);
 }
 
 static virLXCMonitorCallbacks monitorCallbacks = {