if (h->bitmap == NULL)
     goto error;
 
-#if 0                           /* Doesn't work. */
   /* Header checksum. */
-  uint32_t *daddr = h->addr;
+  uint32_t *daddr = (uint32_t *) h->addr;
   size_t i;
   uint32_t sum = 0;
   for (i = 0; i < 0x1fc / 4; ++i) {
-    sum += le32toh (*daddr);
+    sum ^= le32toh (*daddr);
     daddr++;
   }
+
+#if 0                           /* Doesn't work. */
   if (sum != le32toh (h->hdr->csum)) {
     fprintf (stderr, "hivex: %s: bad checksum in hive header\n", filename);
     errno = EINVAL;