diff --git a/tools/cvdump/cvcrunch.c b/tools/cvdump/cvcrunch.c
index fdc65ca..939321c 100644
--- a/tools/cvdump/cvcrunch.c
+++ b/tools/cvdump/cvcrunch.c
@@ -25,7 +25,7 @@
  * other structs.
  *
  * The contents of this section look like this (the first two fields are
- * already extracted and passed in as parameters):
+ * extracted and passed back out):
  *
  * unsigned short cFile
  * unsigned short cSeg
diff --git a/tools/cvdump/cvdump.c b/tools/cvdump/cvdump.c
index d30018a..0035dde 100644
--- a/tools/cvdump/cvdump.c
+++ b/tools/cvdump/cvdump.c
@@ -49,7 +49,7 @@
     /* Assumes all RVA's in the section headers are sorted in increasing
      * order (which should be the case).
      */
-    for (i = g_dbg_dircount - 1; i >= 0; i--)
+    for (i = g_numsects - 1; i >= 0; i--)
     {
 	sectbegin = g_secthdrs[i].VirtualAddress;
 #ifdef VERBOSE
@@ -330,8 +330,8 @@
 
     PrintFilePos (debugfile);
 
-    printf ("Found %d CodeView subsection%c...\n", g_dbg_dircount,
-	    (g_dbg_dircount == 1) ? '.' : 's');
+    printf ("Found %d Debug director%s...\n", g_dbg_dircount,
+	    (g_dbg_dircount == 1) ? "y" : "ies");
 
     if (g_dbg_dircount == 0)
 	return FALSE;
@@ -347,20 +347,11 @@
 	fseek (debugfile, filepos, SEEK_SET);
 	PrintFilePos (debugfile);
     }
-#if 0
     else
     {
-	int i;
-
-	/* Find the .rdata section.
-	 */
-	for (i = 0; i < g_numsects; i++)
-	    if (strcmp (g_secthdrs[i].Name, ".rdata") == 0)
-		break;
-
-	filepos = g_secthdrs[i].PointerToRawData;
+        fseek( debugfile, g_dbghdr.ExportedNamesSize, SEEK_CUR);
+        PrintFilePos (debugfile);
     }
-#endif
 
     if (!ReadDebugDir (debugfile, g_dbg_dircount, &g_debugdirs))
 	return FALSE;
@@ -387,6 +378,22 @@
 	printf ("  SizeOfData       = [0x%8lx]\n", g_debugdirs[i].SizeOfData);
 	printf ("  AddressOfRawData = [0x%8lx]\n", g_debugdirs[i].AddressOfRawData);
 	printf ("  PointerToRawData = [0x%8lx]\n", g_debugdirs[i].PointerToRawData);
+
+	if (g_debugdirs[i].Type == IMAGE_DEBUG_TYPE_MISC)
+	{
+            IMAGE_DEBUG_DIRECTORY_MISC misc;
+            int lastpos = ftell (debugfile);
+            size_t bytes_read;
+
+            /* FIXME: Not sure exactly what the contents are supposed to be. */
+            fseek (debugfile, g_debugdirs[i].PointerToRawData, SEEK_SET);
+            bytes_read = fread (&misc, 1, sizeof (IMAGE_DEBUG_DIRECTORY_MISC), debugfile);
+            printf ("\n    [0x%8lx]\n    [0x%8lx]\n    [0x%4x]\n    [0x%4x]\n    '%s'\n",
+                    misc.unknown1, misc.SizeOfData, misc.unknown2,
+                    misc.unknown3, misc.Name);
+
+            fseek (debugfile, lastpos, SEEK_SET);
+	}
     }
 
     free (g_debugdirs);
@@ -782,8 +789,8 @@
     }
 
     /* Read in the entire sstSrcModule from the .DBG file.  We'll process it
-     * bit by bit, but passing memory pointers into the various functions in
-     * cvprint.c.
+     * bit by bit, by passing memory pointers into the various functions in
+     * cvcrunch.c.
      */
     if (!ReadChunk (debugfile, (void*)rawdata, g_cvEntries[index].cb, fileoffset))
 	return FALSE;
@@ -831,7 +838,7 @@
 
 /*
  * Print out the info of all related modules (e.g. sstAlignSym, sstSrcModule)
- * for the desired sub-section (i.e. sstModule).
+ * for the given sub-section index (i.e. sstModule).
  */
 int DumpRelatedSections (int index, FILE *debugfile)
 {
@@ -925,9 +932,15 @@
 {
     int i;
 
-    if (g_cvHeader.cDir == 0 || g_cvEntries == NULL)
+    if (g_cvHeader.cDir == 0)
     {
-	printf ("ERROR: Bailing out of Module Data Dump\n");
+        printf ("\nStrange...found CodeView header, but no module entries\n\n");
+	return TRUE;
+    }
+
+    if (g_cvEntries == NULL)
+    {
+	printf ("ERROR: Invalid entry table, bailing out of Module Data Dump\n");
 	printf ("%ld %p\n", g_cvHeader.cDir, g_cvEntries);
 	return FALSE;
     }
diff --git a/tools/cvdump/cvinclude.h b/tools/cvdump/cvinclude.h
index 2fd5112..f55c474 100644
--- a/tools/cvdump/cvinclude.h
+++ b/tools/cvdump/cvinclude.h
@@ -24,6 +24,16 @@
 
 #include "pshpack1.h"
 
+/* FIXME: no idea if this is correct */
+typedef struct
+{
+    DWORD unknown1;
+    DWORD SizeOfData;
+    WORD  unknown2;
+    WORD  unknown3;
+    char  Name[MAX_PATH];
+} IMAGE_DEBUG_DIRECTORY_MISC;
+
 /*
  * CodeView headers
  */
diff --git a/tools/cvdump/cvload.c b/tools/cvdump/cvload.c
index e8df089..912b0a2 100644
--- a/tools/cvdump/cvload.c
+++ b/tools/cvdump/cvload.c
@@ -318,7 +318,7 @@
 
 /*
  * Load in the data contents of all CodeView sstModule sub-sections in the file (likely a
- * large array, as there is one sub-section for every module... > 100 modules is normal).
+ * large array, as there is one sub-section for every code module... > 100 modules is normal).
  * 'entrynum' should hold the total number of CV sub-sections, not the number of sstModule
  * subsections.  The function will ignore anything that isn't a sstModule.
  *
@@ -408,7 +408,7 @@
 	if (pad)
 	    namelen += (4 - pad);
 
-	module->Name = calloc (namelen, sizeof (char) + 1);
+	module->Name = calloc (namelen + 1, sizeof (char));
 	bytes_read = fread (module->Name, sizeof (char), namelen, debugfile);
 	if (bytes_read < namelen)
 	{
