diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c
index b995f20a64..c91e531a9a 100644
--- a/src/libxl/libxl_domain.c
+++ b/src/libxl/libxl_domain.c
@@ -60,7 +60,7 @@ libxlDomainObjInitJob(libxlDomainObjPrivate *priv)
     if (virCondInit(&priv->job.cond) < 0)
         return -1;
 
-    priv->job.current = g_new0(virDomainJobInfo, 1);
+    priv->job.current = virDomainJobDataInit(NULL);
 
     return 0;
 }
@@ -78,7 +78,7 @@ static void
 libxlDomainObjFreeJob(libxlDomainObjPrivate *priv)
 {
     ignore_value(virCondDestroy(&priv->job.cond));
-    VIR_FREE(priv->job.current);
+    virDomainJobDataFree(priv->job.current);
 }
 
 /* Give up waiting for mutex after 30 seconds */
@@ -119,7 +119,7 @@ libxlDomainObjBeginJob(libxlDriverPrivate *driver G_GNUC_UNUSED,
     priv->job.active = job;
     priv->job.owner = virThreadSelfID();
     priv->job.started = now;
-    priv->job.current->type = VIR_DOMAIN_JOB_UNBOUNDED;
+    priv->job.current->jobType = VIR_DOMAIN_JOB_UNBOUNDED;
 
     return 0;
 
@@ -168,7 +168,7 @@ libxlDomainObjEndJob(libxlDriverPrivate *driver G_GNUC_UNUSED,
 int
 libxlDomainJobUpdateTime(struct libxlDomainJobObj *job)
 {
-    virDomainJobInfoPtr jobInfo = job->current;
+    virDomainJobData *jobData = job->current;
     unsigned long long now;
 
     if (!job->started)
@@ -182,7 +182,7 @@ libxlDomainJobUpdateTime(struct libxlDomainJobObj *job)
         return 0;
     }
 
-    jobInfo->timeElapsed = now - job->started;
+    jobData->timeElapsed = now - job->started;
     return 0;
 }
 
diff --git a/src/libxl/libxl_domain.h b/src/libxl/libxl_domain.h
index 981bfc2bca..475e4a6933 100644
--- a/src/libxl/libxl_domain.h
+++ b/src/libxl/libxl_domain.h
@@ -26,6 +26,7 @@
 #include "libxl_conf.h"
 #include "virchrdev.h"
 #include "virenum.h"
+#include "domain_job.h"
 
 /* Only 1 job is allowed at any time
  * A job includes *all* libxl.so api, even those just querying
@@ -46,7 +47,7 @@ struct libxlDomainJobObj {
     enum libxlDomainJob active;         /* Currently running job */
     int owner;                          /* Thread which set current job */
     unsigned long long started;         /* When the job started */
-    virDomainJobInfoPtr current;        /* Statistics for the current job */
+    virDomainJobData *current;        /* Statistics for the current job */
 };
 
 typedef struct _libxlDomainObjPrivate libxlDomainObjPrivate;
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 97965aaf1d..4c61d330ed 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -5235,7 +5235,11 @@ libxlDomainGetJobInfo(virDomainPtr dom,
     if (libxlDomainJobUpdateTime(&priv->job) < 0)
         goto cleanup;
 
-    memcpy(info, priv->job.current, sizeof(virDomainJobInfo));
+    /* setting only these two attributes is enough because libxl never sets
+     * anything else */
+    memset(info, 0, sizeof(*info));
+    info->type = priv->job.current->jobType;
+    info->timeElapsed = priv->job.current->timeElapsed;
     ret = 0;
 
  cleanup:
@@ -5252,7 +5256,7 @@ libxlDomainGetJobStats(virDomainPtr dom,
 {
     libxlDomainObjPrivate *priv;
     virDomainObj *vm;
-    virDomainJobInfoPtr jobInfo;
+    virDomainJobData *jobData;
     int ret = -1;
     int maxparams = 0;
 
@@ -5266,7 +5270,7 @@ libxlDomainGetJobStats(virDomainPtr dom,
         goto cleanup;
 
     priv = vm->privateData;
-    jobInfo = priv->job.current;
+    jobData = priv->job.current;
     if (!priv->job.active) {
         *type = VIR_DOMAIN_JOB_NONE;
         *params = NULL;
@@ -5283,10 +5287,10 @@ libxlDomainGetJobStats(virDomainPtr dom,
 
     if (virTypedParamsAddULLong(params, nparams, &maxparams,
                                 VIR_DOMAIN_JOB_TIME_ELAPSED,
-                                jobInfo->timeElapsed) < 0)
+                                jobData->timeElapsed) < 0)
         goto cleanup;
 
-    *type = jobInfo->type;
+    *type = jobData->jobType;
     ret = 0;
 
  cleanup: