diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
index 9cb8e8c..06b7281 100644
--- a/src/xen/xen_hypervisor.c
+++ b/src/xen/xen_hypervisor.c
@@ -1943,7 +1943,7 @@ xenHypervisorInit(void)
         char error[100];
         regerror (errcode, &flags_hvm_rec, error, sizeof error);
         regfree (&flags_hvm_rec);
-        virXenError(VIR_ERR_INTERNAL_ERROR, "%s", error);
+        VIR_ERROR0(error);
         in_init = 0;
         return -1;
     }
@@ -1953,7 +1953,7 @@ xenHypervisorInit(void)
         regerror (errcode, &flags_pae_rec, error, sizeof error);
         regfree (&flags_pae_rec);
         regfree (&flags_hvm_rec);
-        virXenError(VIR_ERR_INTERNAL_ERROR, "%s", error);
+        VIR_ERROR0(error);
         in_init = 0;
         return -1;
     }
@@ -1964,7 +1964,7 @@ xenHypervisorInit(void)
         regfree (&xen_cap_rec);
         regfree (&flags_pae_rec);
         regfree (&flags_hvm_rec);
-        virXenError(VIR_ERR_INTERNAL_ERROR, "%s", error);
+        VIR_ERROR0(error);
         in_init = 0;
         return -1;
     }
@@ -1972,8 +1972,11 @@ xenHypervisorInit(void)
     /* Xen hypervisor version detection begins. */
     ret = open(XEN_HYPERVISOR_SOCKET, O_RDWR);
     if (ret < 0) {
+        virReportSystemError(errno,
+                             _("cannot open file %s"),
+                             XEN_HYPERVISOR_SOCKET);
         hypervisor_version = -1;
-        return(-1);
+        goto failed1;
     }
     fd = ret;
 
@@ -2018,11 +2021,9 @@ xenHypervisorInit(void)
      */
 
     hypervisor_version = -1;
-    virXenError(VIR_ERR_XEN_CALL, " ioctl %lu",
+	VIR_ERROR(" ioctl %lu",
                 (unsigned long) IOCTL_PRIVCMD_HYPERCALL);
-    VIR_FORCE_CLOSE(fd);
-    in_init = 0;
-    return(-1);
+    goto failed2;
 
  detect_v2:
     /*
@@ -2034,7 +2035,7 @@ xenHypervisorInit(void)
 
     if (VIR_ALLOC(ipt) < 0) {
         virReportOOMError();
-        return(-1);
+        goto failed2;
     }
     /* Currently consider RHEL5.0 Fedora7, xen-3.1, and xen-unstable */
     sys_interface_version = 2; /* XEN_SYSCTL_INTERFACE_VERSION */
@@ -2104,17 +2105,19 @@ xenHypervisorInit(void)
 
     VIR_DEBUG0("Failed to find any Xen hypervisor method");
     hypervisor_version = -1;
-    virXenError(VIR_ERR_XEN_CALL, " ioctl %lu",
+	VIR_ERROR(" ioctl %lu",
                 (unsigned long)IOCTL_PRIVCMD_HYPERCALL);
+    VIR_FREE(ipt);
+ failed2:
     VIR_FORCE_CLOSE(fd);
+ failed1:
     in_init = 0;
-    VIR_FREE(ipt);
     return(-1);
 
  done:
     VIR_FORCE_CLOSE(fd);
-    in_init = 0;
     VIR_FREE(ipt);
+    in_init = 0;
     return(0);
 }
 
