diff --git a/boot/freeldr/freeldr/arch/i386/pc/machpc.c b/boot/freeldr/freeldr/arch/i386/pc/machpc.c
index 43baec3b491..66d88acd706 100644
--- a/boot/freeldr/freeldr/arch/i386/pc/machpc.c
+++ b/boot/freeldr/freeldr/arch/i386/pc/machpc.c
@@ -97,6 +97,30 @@ PcGetExtendedBIOSData(PULONG ExtendedBIOSDataArea, PULONG ExtendedBIOSDataSize)
     }
 }
 
+static
+VOID
+DumpBuffer(PVOID Buffer, ULONG Length)
+{
+    PUCHAR BufPtr = (PUCHAR)Buffer;
+    ULONG Offset, Count, i;
+
+    DbgPrint("FreeLdr: Buffer at %p with length of %lu bytes:\n", Buffer, Length);
+
+    Offset = 0;
+    while (Offset < Length)
+    {
+        DbgPrint("%04x:\t", Offset);
+
+        Count = min(Length - Offset, 16);
+        for (i = 0; i < Count; i++, Offset++)
+        {
+            DbgPrint("0x%02x, ", BufPtr[Offset], (i == 7) ? '-' : ' ');
+        }
+
+        DbgPrint("\n");
+    }
+}
+
 // NOTE: Similar to machxbox.c!XboxGetHarddiskConfigurationData(),
 // but with extended geometry support.
 static
@@ -215,6 +239,7 @@ DetectDockingStation(
 
     DockingState = (PDOCKING_STATE_INFORMATION)&PartialResourceList->PartialDescriptors[1];
     DockingState->ReturnCode = Result;
+    DumpBuffer(DiskReadBuffer, 12);
     if (Result == 0)
     {
         /* FIXME: Add more device specific data */
@@ -256,19 +281,22 @@ DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
     InstData = (PCM_PNP_BIOS_INSTALLATION_CHECK)PnpBiosSupported();
     if (InstData == NULL || strncmp((CHAR*)InstData->Signature, "$PnP", 4))
     {
-        TRACE("PnP-BIOS not supported\n");
+        ERR("PnP-BIOS not supported\n");
         return;
     }
 
-    TRACE("PnP-BIOS supported\n");
-    TRACE("Signature '%c%c%c%c'\n",
+    ERR("PnP-BIOS supported\n");
+    ERR("Signature '%c%c%c%c'\n",
           InstData->Signature[0], InstData->Signature[1],
           InstData->Signature[2], InstData->Signature[3]);
 
+    DumpBuffer(InstData, sizeof(*InstData));
+
     x = PnpBiosGetDeviceNodeCount(&NodeSize, &NodeCount);
+    ERR("NodeCount %u %u\n", &NodeCount, &NodeSize);
     if (x == 0x82)
     {
-        TRACE("PnP-BIOS function 'Get Number of System Device Nodes' not supported\n");
+        ERR("PnP-BIOS function 'Get Number of System Device Nodes' not supported\n");
         return;
     }
 
@@ -280,8 +308,8 @@ DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
         ERR("PnP-BIOS failed to enumerate device nodes\n");
         return;
     }
-    TRACE("MaxNodeSize %u  NodeCount %u\n", NodeSize, NodeCount);
-    TRACE("Estimated buffer size %u\n", NodeSize * NodeCount);
+    ERR("MaxNodeSize %u  NodeCount %u\n", NodeSize, NodeCount);
+    ERR("Estimated buffer size %u\n", NodeSize * NodeCount);
 
     /* Set 'Configuration Data' value */
     PnpBufferSizeLimit = sizeof(CM_PNP_BIOS_INSTALLATION_CHECK)
@@ -323,10 +351,17 @@ DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
         {
             DeviceNode = (PCM_PNP_BIOS_DEVICE_NODE)DiskReadBuffer;
 
-            TRACE("Node: %u  Size %u (0x%x)\n",
-                  DeviceNode->Node,
-                  DeviceNode->Size,
-                  DeviceNode->Size);
+            ERR("Node: %u  Size %u (0x%x), PID: (0x%lx), T: 0x%02x:0x%02x:0x%02x ATTR: 0x%04x\n",
+                 DeviceNode->Node,
+                 DeviceNode->Size,
+                 DeviceNode->Size,
+                 DeviceNode->ProductId,
+                 DeviceNode->DeviceType[0],
+                 DeviceNode->DeviceType[1],
+                 DeviceNode->DeviceType[2],
+                 DeviceNode->DeviceAttributes);
+
+            DumpBuffer(DeviceNode, DeviceNode->Size);
 
             if (PnpBufferSize + DeviceNode->Size > PnpBufferSizeLimit)
             {
@@ -350,8 +385,8 @@ DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
         PnpBufferSize;
     Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + PnpBufferSize;
 
-    TRACE("Real buffer size: %u\n", PnpBufferSize);
-    TRACE("Resource size: %u\n", Size);
+    ERR("Real buffer size: %u\n", PnpBufferSize);
+    ERR("Resource size: %u\n", Size);
 
     /* Create component key */
     FldrCreateComponentKey(SystemKey,
diff --git a/drivers/bus/isapnp/fdo.c b/drivers/bus/isapnp/fdo.c
index 5d61c8b2dc4..47805c7ba00 100644
--- a/drivers/bus/isapnp/fdo.c
+++ b/drivers/bus/isapnp/fdo.c
@@ -9,7 +9,7 @@
 
 #include "isapnp.h"
 
-#define NDEBUG
+// #define NDEBUG
 #include <debug.h>
 
 static
diff --git a/drivers/bus/isapnp/hardware.c b/drivers/bus/isapnp/hardware.c
index 26d6b120671..79295281958 100644
--- a/drivers/bus/isapnp/hardware.c
+++ b/drivers/bus/isapnp/hardware.c
@@ -9,7 +9,7 @@
 
 #include "isapnp.h"
 
-#define NDEBUG
+// #define NDEBUG
 #include <debug.h>
 
 #ifdef _MSC_VER
@@ -450,11 +450,13 @@ ReadTags(
     _In_ PUCHAR ReadDataPort,
     _Out_writes_(ISAPNP_MAX_RESOURCEDATA) PUCHAR Buffer,
     _In_ ULONG MaxLength,
-    _Out_ PUSHORT MaxLogDev)
+    _Out_ PUSHORT MaxLogDev,
+    _Out_ PUCHAR* End)
 {
     PAGED_CODE();
 
     *MaxLogDev = 0;
+    *End = Buffer;
 
     while (TRUE)
     {
@@ -511,7 +513,10 @@ ReadTags(
             (*MaxLogDev)++;
 
         if (Tag == ISAPNP_TAG_END)
+        {
+            *End = Buffer - 1;
             break;
+        }
     }
 
     return STATUS_SUCCESS;
@@ -1124,6 +1129,7 @@ ReadCurrentResources(
     for (i = 0; i < RTL_NUMBER_OF(LogDevice->Io); i++)
     {
         LogDevice->Io[i].CurrentBase = ReadIoBase(ReadDataPort, i);
+        DPRINT("CurrBase 0x%lx\n", LogDevice->Io[i].CurrentBase);
 
         /* Skip empty descriptors */
         if (!LogDevice->Io[i].CurrentBase)
@@ -1132,15 +1138,18 @@ ReadCurrentResources(
     for (i = 0; i < RTL_NUMBER_OF(LogDevice->Irq); i++)
     {
         LogDevice->Irq[i].CurrentNo = ReadIrqNo(ReadDataPort, i);
+        DPRINT("CurrentNo 0x%lx\n", LogDevice->Irq[i].CurrentNo);
 
         if (!LogDevice->Irq[i].CurrentNo)
             break;
 
         LogDevice->Irq[i].CurrentType = ReadIrqType(ReadDataPort, i);
+        DPRINT("CurrentType 0x%lx\n", LogDevice->Irq[i].CurrentType);
     }
     for (i = 0; i < RTL_NUMBER_OF(LogDevice->Dma); i++)
     {
         LogDevice->Dma[i].CurrentChannel = ReadDmaChannel(ReadDataPort, i);
+        DPRINT("CurrentChannel 0x%lx\n", LogDevice->Dma[i].CurrentChannel);
 
         if (LogDevice->Dma[i].CurrentChannel == 4)
             break;
@@ -1148,39 +1157,47 @@ ReadCurrentResources(
     for (i = 0; i < RTL_NUMBER_OF(LogDevice->MemRange); i++)
     {
         LogDevice->MemRange[i].CurrentBase = ReadMemoryBase(ReadDataPort, i) << 8;
+        DPRINT("MEM CurrentBase 0x%lx\n", LogDevice->MemRange[i].CurrentBase);
 
         if (!LogDevice->MemRange[i].CurrentBase)
             break;
 
         LogDevice->MemRange[i].CurrentLength = ReadMemoryLimit(ReadDataPort, i) << 8;
+        DPRINT("MEM CurrentLength 0x%lx\n", LogDevice->MemRange[i].CurrentLength);
 
         if (ReadMemoryControl(ReadDataPort, i) & MEMORY_UPPER_LIMIT)
         {
             LogDevice->MemRange[i].CurrentLength -= LogDevice->MemRange[i].CurrentBase;
+            DPRINT("MEM CurrentLength U 0x%lx\n", LogDevice->MemRange[i].CurrentLength);
         }
         else
         {
             LogDevice->MemRange[i].CurrentLength =
                 RANGE_LENGTH_TO_LENGTH(LogDevice->MemRange[i].CurrentLength);
+            DPRINT("MEM CurrentLength G 0x%lx\n", LogDevice->MemRange[i].CurrentLength);
         }
     }
     for (i = 0; i < RTL_NUMBER_OF(LogDevice->MemRange32); i++)
     {
         LogDevice->MemRange32[i].CurrentBase = ReadMemoryBase32(ReadDataPort, i);
+        DPRINT("MEM32 CurrentBase 0x%lx\n", LogDevice->MemRange32[i].CurrentBase);
 
         if (!LogDevice->MemRange32[i].CurrentBase)
             break;
 
         LogDevice->MemRange32[i].CurrentLength = ReadMemoryLimit32(ReadDataPort, i);
+        DPRINT("MEM32 CurrentLength 0x%lx\n", LogDevice->MemRange32[i].CurrentLength);
 
         if (ReadMemoryControl32(ReadDataPort, i) & MEMORY_UPPER_LIMIT)
         {
             LogDevice->MemRange32[i].CurrentLength -= LogDevice->MemRange32[i].CurrentBase;
+            DPRINT("MEM32 CurrentLength U 0x%lx\n", LogDevice->MemRange32[i].CurrentLength);
         }
         else
         {
             LogDevice->MemRange32[i].CurrentLength =
                 RANGE_LENGTH_TO_LENGTH(LogDevice->MemRange32[i].CurrentLength);
+            DPRINT("MEM32 CurrentLength G 0x%lx\n", LogDevice->MemRange32[i].CurrentLength);
         }
     }
 
@@ -1457,6 +1474,30 @@ IsaHwTryReadDataPort(
     }
 }
 
+static
+VOID
+DumpBuffer(PVOID Buffer, ULONG Length)
+{
+    PUCHAR BufPtr = (PUCHAR)Buffer;
+    ULONG Offset, Count, i;
+
+    DbgPrint("ISAPNP: Buffer at %p with length of %lu bytes:\n", Buffer, Length);
+
+    Offset = 0;
+    while (Offset < Length)
+    {
+        DbgPrint("%04x:\t", Offset);
+
+        Count = min(Length - Offset, 16);
+        for (i = 0; i < Count; i++, Offset++)
+        {
+            DbgPrint("0x%02x, ", BufPtr[Offset], (i == 7) ? '-' : ' ');
+        }
+
+        DbgPrint("\n");
+    }
+}
+
 _Requires_lock_held_(FdoExt->DeviceSyncEvent)
 CODE_SEG("PAGE")
 NTSTATUS
@@ -1495,6 +1536,7 @@ IsaHwFillDeviceList(
         UCHAR TempId[3], LogDev;
         ISAPNP_IDENTIFIER Identifier;
         USHORT MaxLogDev;
+        PUCHAR End;
 
         Wake(Csn);
 
@@ -1503,13 +1545,15 @@ IsaHwFillDeviceList(
         IsaPnpExtractAscii(TempId, Identifier.VendorId);
         Identifier.ProdId = RtlUshortByteSwap(Identifier.ProdId);
 
-        Status = ReadTags(FdoExt->ReadDataPort, ResourceData, ISAPNP_MAX_RESOURCEDATA, &MaxLogDev);
+        Status = ReadTags(FdoExt->ReadDataPort, ResourceData, ISAPNP_MAX_RESOURCEDATA, &MaxLogDev, &End);
         if (!NT_SUCCESS(Status))
         {
             DPRINT1("Failed to read tags with status 0x%08lx, CSN %u\n", Status, Csn);
             continue;
         }
 
+        DumpBuffer(ResourceData, End - ResourceData);
+
         DPRINT("Detected ISA PnP device - VID: '%.3s' PID: 0x%04x SN: 0x%08lX\n",
                TempId, Identifier.ProdId, Identifier.Serial);
 
diff --git a/drivers/bus/isapnp/interface.c b/drivers/bus/isapnp/interface.c
index 057589bb35a..3ddf40d3bf3 100644
--- a/drivers/bus/isapnp/interface.c
+++ b/drivers/bus/isapnp/interface.c
@@ -9,7 +9,7 @@
 
 #include "isapnp.h"
 
-#define NDEBUG
+// #define NDEBUG
 #include <debug.h>
 
 /* FUNCTIONS ******************************************************************/
diff --git a/drivers/bus/isapnp/isapnp.c b/drivers/bus/isapnp/isapnp.c
index 0ff17876e75..e4f81f61432 100644
--- a/drivers/bus/isapnp/isapnp.c
+++ b/drivers/bus/isapnp/isapnp.c
@@ -13,7 +13,7 @@
 
 #include <search.h>
 
-#define NDEBUG
+// #define NDEBUG
 #include <debug.h>
 
 /* GLOBALS ********************************************************************/
@@ -1633,4 +1633,239 @@ DriverEntry(
     return STATUS_SUCCESS;
 }
 
+VOID
+NTAPI
+PipDumpCmResourceDescriptor(
+    _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor,
+    _In_ ULONG DebugLevel)
+{
+    PAGED_CODE();
+
+    if (Descriptor == NULL)
+    {
+        DPRINT1("Dump CmDescriptor: Descriptor == NULL\n");
+        return;
+    }
+
+    switch (Descriptor->Type)
+    {
+        case CmResourceTypePort:
+            DPRINT1("[%p:%X:%X] IO:  Start %X:%X, Len %X\n", Descriptor, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.Port.Start.HighPart, Descriptor->u.Port.Start.LowPart, Descriptor->u.Port.Length);
+            break;
+
+        case CmResourceTypeInterrupt:
+            DPRINT1("[%p:%X:%X] INT: Lev %X Vec %X Aff %IX\n", Descriptor, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.Interrupt.Level, Descriptor->u.Interrupt.Vector, Descriptor->u.Interrupt.Affinity);
+            break;
+
+        case CmResourceTypeMemory:
+            DPRINT1("[%p:%X:%X] MEM: %X:%X Len %X\n", Descriptor, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.Memory.Start.HighPart, Descriptor->u.Memory.Start.LowPart, Descriptor->u.Memory.Length);
+            break;
+
+        case CmResourceTypeDma:
+            DPRINT1("[%p:%X:%X] DMA: Channel %X Port %X\n", Descriptor, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.Dma.Channel, Descriptor->u.Dma.Port);
+            break;
+
+        case CmResourceTypeDeviceSpecific:
+            DPRINT1("[%p:%X:%X] DAT: DataSize %X\n", Descriptor, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.DeviceSpecificData.DataSize);
+            break;
+
+        case CmResourceTypeBusNumber:
+            DPRINT1("[%p:%X:%X] BUS: Start %X Len %X Reserv %X\n", Descriptor, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.BusNumber.Start, Descriptor->u.BusNumber.Length, Descriptor->u.BusNumber.Reserved);
+            break;
+
+        case CmResourceTypeDevicePrivate:
+            DPRINT1("[%p:%X:%X] PVT: D[0] %X D[1] %X D[2] %X\n", Descriptor, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.DevicePrivate.Data[0], Descriptor->u.DevicePrivate.Data[1], Descriptor->u.DevicePrivate.Data[2]);
+            break;
+
+        default:
+            DPRINT1("[%p] Unknown type %X\n", Descriptor, Descriptor->Type);
+            break;
+    }
+}
+
+PCM_PARTIAL_RESOURCE_DESCRIPTOR
+NTAPI
+PipGetNextCmPartialDescriptor(
+    _In_ PCM_PARTIAL_RESOURCE_DESCRIPTOR CmDescriptor)
+{
+    PCM_PARTIAL_RESOURCE_DESCRIPTOR NextDescriptor;
+
+    /* Assume the descriptors are the fixed size ones */
+    NextDescriptor = CmDescriptor + 1;
+
+    /* But check if this is actually a variable-sized descriptor */
+    if (CmDescriptor->Type == CmResourceTypeDeviceSpecific)
+    {
+        /* Add the size of the variable section as well */
+        NextDescriptor = (PVOID)((ULONG_PTR)NextDescriptor +
+                                 CmDescriptor->u.DeviceSpecificData.DataSize);
+    }
+
+    /* Now the correct pointer has been computed, return it */
+    return NextDescriptor;
+}
+
+VOID
+NTAPI
+PipDumpCmResourceList(
+    _In_ PCM_RESOURCE_LIST CmResource,
+    _In_ ULONG DebugLevel)
+{
+    PCM_FULL_RESOURCE_DESCRIPTOR FullList;
+    PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor;
+    ULONG ix;
+    ULONG jx;
+
+    PAGED_CODE();
+
+    if (DebugLevel != 0)
+    {
+#ifdef NDEBUG
+        return;
+#endif
+    }
+
+    DPRINT1("Dump CmList: CmResource %p\n", CmResource);
+
+    if (CmResource == NULL)
+    {
+        DPRINT1("PipDumpCmResourceList: CmResource == NULL\n");
+        return;
+    }
+
+    if (CmResource->Count == 0)
+    {
+        DPRINT1("PipDumpCmResourceList: CmResource->Count == 0\n");
+        return;
+    }
+
+    DPRINT1("FullList Count %x\n", CmResource->Count);
+
+    FullList = &CmResource->List[0];
+
+    for (ix = 0; ix < CmResource->Count; ix++)
+    {
+        DPRINT1("List #%X Iface %X Bus #%X Ver.%X Rev.%X Count %X\n",
+                ix,
+                FullList->InterfaceType,
+                FullList->BusNumber,
+                FullList->PartialResourceList.Version,
+                FullList->PartialResourceList.Revision,
+                FullList->PartialResourceList.Count);
+
+        Descriptor = FullList->PartialResourceList.PartialDescriptors;
+
+        for (jx = 0; jx < FullList->PartialResourceList.Count; jx++)
+        {
+            PipDumpCmResourceDescriptor(Descriptor, DebugLevel);
+            Descriptor = PipGetNextCmPartialDescriptor(Descriptor);
+        }
+
+        FullList = (PCM_FULL_RESOURCE_DESCRIPTOR)Descriptor;
+    }
+}
+
+VOID
+NTAPI
+PipDumpIoResourceDescriptor(
+    _In_ PIO_RESOURCE_DESCRIPTOR Descriptor,
+    _In_ ULONG DebugLevel)
+{
+    PAGED_CODE();
+
+    if (Descriptor == NULL)
+    {
+        DPRINT1("DumpResourceDescriptor: Descriptor == 0\n");
+        return;
+    }
+
+    switch (Descriptor->Type)
+    {
+        case CmResourceTypeNull:
+            DPRINT1("[%p:%X:%X:%X] O: Len %X Align %X Min %I64X, Max %I64X\n", Descriptor, Descriptor->Option, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.Generic.Length, Descriptor->u.Generic.Alignment, Descriptor->u.Generic.MinimumAddress.QuadPart, Descriptor->u.Generic.MaximumAddress.QuadPart);
+            break;
+
+        case CmResourceTypePort:
+            DPRINT1("[%p:%X:%X:%X] IO: Min %X:%X, Max %X:%X, Align %X Len %X\n", Descriptor, Descriptor->Option, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.Port.MinimumAddress.HighPart, Descriptor->u.Port.MinimumAddress.LowPart, Descriptor->u.Port.MaximumAddress.HighPart, Descriptor->u.Port.MaximumAddress.LowPart, Descriptor->u.Port.Alignment, Descriptor->u.Port.Length);
+            break;
+
+        case CmResourceTypeInterrupt:
+            DPRINT1("[%p:%X:%X:%X] INT: Min %X Max %X\n", Descriptor, Descriptor->Option, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.Interrupt.MinimumVector, Descriptor->u.Interrupt.MaximumVector);
+            break;
+
+        case CmResourceTypeMemory:
+            DPRINT1("[%p:%X:%X:%X] MEM: Min %X:%X, Max %X:%X, Align %X Len %X\n", Descriptor, Descriptor->Option, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.Memory.MinimumAddress.HighPart, Descriptor->u.Memory.MinimumAddress.LowPart, Descriptor->u.Memory.MaximumAddress.HighPart, Descriptor->u.Memory.MaximumAddress.LowPart, Descriptor->u.Memory.Alignment, Descriptor->u.Memory.Length);
+            break;
+
+        case CmResourceTypeDma:
+            DPRINT1("[%p:%X:%X:%X] DMA: Min %X Max %X\n", Descriptor, Descriptor->Option, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.Dma.MinimumChannel, Descriptor->u.Dma.MaximumChannel);
+            break;
+
+        case CmResourceTypeBusNumber:
+            DPRINT1("[%p:%X:%X:%X] BUS: Min %X Max %X Len %X\n", Descriptor, Descriptor->Option, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.BusNumber.MinBusNumber, Descriptor->u.BusNumber.MaxBusNumber, Descriptor->u.BusNumber.Length);
+            break;
+
+        case CmResourceTypeConfigData:
+            DPRINT1("[%p:%X:%X:%X] CFG: Priority %X\n", Descriptor, Descriptor->Option, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.ConfigData.Priority);
+            break;
+
+        case CmResourceTypeDevicePrivate:
+            DPRINT1("[%p:%X:%X:%X] DAT: %X %X %X\n", Descriptor, Descriptor->Option, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->u.DevicePrivate.Data[0], Descriptor->u.DevicePrivate.Data[1], Descriptor->u.DevicePrivate.Data[2]);
+            break;
+
+        default:
+            DPRINT1("[%p:%X:%X:%X]. Unknown type %X\n", Descriptor, Descriptor->Option, Descriptor->ShareDisposition, Descriptor->Flags, Descriptor->Type);
+            break;
+    }
+}
+
+VOID
+NTAPI
+PipDumpResourceRequirementsList(
+    _In_ PIO_RESOURCE_REQUIREMENTS_LIST IoResource,
+    _In_ ULONG DebugLevel)
+{
+    PIO_RESOURCE_LIST AltList;
+    PIO_RESOURCE_DESCRIPTOR Descriptor;
+    ULONG ix;
+    ULONG jx;
+
+    PAGED_CODE();
+
+    if (IoResource == NULL)
+    {
+        DPRINT1("PipDumpResourceRequirementsList: IoResource == 0\n");
+        return;
+    }
+
+    DPRINT1("Dump RequirementsList: IoResource %p\n", IoResource);
+    DPRINT1("Interface %X Bus %X Slot %X AlternativeLists %X\n",
+            IoResource->InterfaceType,
+            IoResource->BusNumber,
+            IoResource->SlotNumber,
+            IoResource->AlternativeLists);
+
+    AltList = &IoResource->List[0];
+
+    if (IoResource->AlternativeLists < 1)
+    {
+        DPRINT1("PipDumpResourceRequirementsList: AlternativeLists < 1\n");
+        return;
+    }
+
+    for (ix = 0; ix < IoResource->AlternativeLists; ix++)
+    {
+        DPRINT1("AltList %p, AltList->Count %X\n", AltList, AltList->Count);
+
+        for (jx = 0; jx < AltList->Count; jx++)
+        {
+            Descriptor = &AltList->Descriptors[jx];
+            PipDumpIoResourceDescriptor(Descriptor, DebugLevel);
+        }
+
+        AltList = (PIO_RESOURCE_LIST)(AltList->Descriptors + AltList->Count);
+        DPRINT1("End Descriptors %p\n", AltList);
+    }
+}
+
 /* EOF */
diff --git a/drivers/bus/isapnp/isapnp.h b/drivers/bus/isapnp/isapnp.h
index ad48008251f..1b827125b7f 100644
--- a/drivers/bus/isapnp/isapnp.h
+++ b/drivers/bus/isapnp/isapnp.h
@@ -402,6 +402,18 @@ _IRQL_requires_max_(DISPATCH_LEVEL)
 VOID
 IsaHwWaitForKey(VOID);
 
+VOID
+NTAPI
+PipDumpResourceRequirementsList(
+    _In_ PIO_RESOURCE_REQUIREMENTS_LIST IoResource,
+    _In_ ULONG DebugLevel);
+
+VOID
+NTAPI
+PipDumpCmResourceList(
+    _In_ PCM_RESOURCE_LIST CmResource,
+    _In_ ULONG DebugLevel);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/drivers/bus/isapnp/pdo.c b/drivers/bus/isapnp/pdo.c
index 3946ce31485..f4bd952fb12 100644
--- a/drivers/bus/isapnp/pdo.c
+++ b/drivers/bus/isapnp/pdo.c
@@ -9,7 +9,7 @@
 
 #include "isapnp.h"
 
-#define NDEBUG
+/* #define NDEBUG */
 #include <debug.h>
 
 static
@@ -494,6 +494,9 @@ IsaPdoQueryResources(
         return STATUS_NO_MEMORY;
 
     RtlCopyMemory(ResourceList, PdoExt->ResourceList, ListSize);
+
+    PipDumpCmResourceList(ResourceList, 0);
+
     Irp->IoStatus.Information = (ULONG_PTR)ResourceList;
     return STATUS_SUCCESS;
 }
@@ -522,6 +525,9 @@ IsaPdoQueryResourceRequirements(
         return STATUS_NO_MEMORY;
 
     RtlCopyMemory(RequirementsList, PdoExt->RequirementsList, ListSize);
+
+    PipDumpResourceRequirementsList(RequirementsList, 0);
+
     Irp->IoStatus.Information = (ULONG_PTR)RequirementsList;
     return STATUS_SUCCESS;
 }
@@ -893,6 +899,8 @@ IsaPdoPnp(
     {
         case IRP_MN_START_DEVICE:
         {
+            PipDumpCmResourceList(IrpSp->Parameters.StartDevice.AllocatedResources, 0);
+
             if (PdoExt->Common.Signature == IsaPnpLogicalDevice)
             {
                 IsaHwWakeDevice(PdoExt->IsaPnpDevice);
diff --git a/drivers/bus/isapnp/stub.c b/drivers/bus/isapnp/stub.c
index 7b37c887adf..a19b81fdc69 100644
--- a/drivers/bus/isapnp/stub.c
+++ b/drivers/bus/isapnp/stub.c
@@ -15,7 +15,7 @@
 
 #include "isapnp.h"
 
-#define NDEBUG
+// #define NDEBUG
 #include <debug.h>
 
 /* FUNCTIONS ******************************************************************/
diff --git a/ntoskrnl/config/cmconfig.c b/ntoskrnl/config/cmconfig.c
index 42c428f971e..12d34ff2eb5 100644
--- a/ntoskrnl/config/cmconfig.c
+++ b/ntoskrnl/config/cmconfig.c
@@ -14,6 +14,30 @@
 
 /* FUNCTIONS *****************************************************************/
 
+static
+VOID
+DumpBuffer(PVOID Buffer, ULONG Length)
+{
+    PUCHAR BufPtr = (PUCHAR)Buffer;
+    ULONG Offset, Count, i;
+
+    DbgPrint("CM: Buffer at %p with length of %lu bytes:\n", Buffer, Length);
+
+    Offset = 0;
+    while (Offset < Length)
+    {
+        DbgPrint("%04x:\t", Offset);
+
+        Count = min(Length - Offset, 16);
+        for (i = 0; i < Count; i++, Offset++)
+        {
+            DbgPrint("0x%02x, ", BufPtr[Offset], (i == 7) ? '-' : ' ');
+        }
+
+        DbgPrint("\n");
+    }
+}
+
 CODE_SEG("INIT")
 NTSTATUS
 NTAPI
@@ -123,6 +147,7 @@ CmpInitializeRegistryNode(IN PCONFIGURATION_COMPONENT_DATA CurrentEntry,
                                               TRUE);
         if (NT_SUCCESS(Status))
         {
+            DbgPrint("Component Identifier '%wZ'\n", &ValueData);
             /* Save the identifier in the registry */
             Status = NtSetValueKey(KeyHandle,
                                    &ValueName,
@@ -157,6 +182,9 @@ CmpInitializeRegistryNode(IN PCONFIGURATION_COMPONENT_DATA CurrentEntry,
         }
         else
         {
+            DbgPrint("Component Configuration DATA\n");
+            DumpBuffer(CurrentEntry->ConfigurationData, Component->ConfigurationDataLength);
+
             /* Copy the data */
             RtlCopyMemory(&CmpConfigurationData->PartialResourceList.Version,
                           CurrentEntry->ConfigurationData,
