diff --git a/sections/cper-section-pcie.c b/sections/cper-section-pcie.c
index 3e3e502..8c70734 100644
--- a/sections/cper-section-pcie.c
+++ b/sections/cper-section-pcie.c
@@ -5,6 +5,7 @@
  * Author: Lawrence.Tang@arm.com
  **/
 #include <stdio.h>
+#include <string.h>
 #include "json.h"
 #include "b64.h"
 #include "../edk/Cper.h"
@@ -113,4 +114,109 @@
 
     json_object_object_add(section_ir, "aerInfo", aer_capability_ir);
     return section_ir;
+}
+
+//Converts a single CPER-JSON PCIe section into CPER binary, outputting to the given stream.
+void ir_section_pcie_to_cper(json_object* section, FILE* out)
+{
+    EFI_PCIE_ERROR_DATA* section_cper = (EFI_PCIE_ERROR_DATA*)calloc(1, sizeof(EFI_PCIE_ERROR_DATA));
+
+    //Validation bits.
+    section_cper->ValidFields = ir_to_bitfield(json_object_object_get(section, "validationBits"), 
+        8, PCIE_ERROR_VALID_BITFIELD_NAMES);
+
+    //Version.
+    json_object* version = json_object_object_get(section, "version");
+    int minor = json_object_get_int(json_object_object_get(version, "minor"));
+    int major = json_object_get_int(json_object_object_get(version, "major"));
+    section_cper->Version = int_to_bcd(minor) + ((UINT16)(int_to_bcd(major)) << 8);
+
+    //Command/status registers.
+    json_object* command_status = json_object_object_get(section, "commandStatus");
+    UINT32 command = (UINT16)json_object_get_uint64(json_object_object_get(command_status, "commandRegister"));
+    UINT32 status = (UINT16)json_object_get_uint64(json_object_object_get(command_status, "statusRegister"));
+    section_cper->CommandStatus = command + (status << 16);
+
+    //Device ID.
+    json_object* device_id = json_object_object_get(section, "deviceID");
+    UINT64 class_id = json_object_get_uint64(json_object_object_get(device_id, "classCode"));
+    section_cper->DevBridge.VendorId = 
+        (UINT16)json_object_get_uint64(json_object_object_get(device_id, "vendorID"));
+    section_cper->DevBridge.DeviceId = 
+        (UINT16)json_object_get_uint64(json_object_object_get(device_id, "deviceID"));
+    section_cper->DevBridge.ClassCode[0] = class_id >> 16;
+    section_cper->DevBridge.ClassCode[1] = (class_id >> 8) & 0xFF;
+    section_cper->DevBridge.ClassCode[1] = class_id & 0xFF;
+    section_cper->DevBridge.Function = 
+        (UINT8)json_object_get_uint64(json_object_object_get(device_id, "functionNumber"));
+    section_cper->DevBridge.Device = 
+        (UINT8)json_object_get_uint64(json_object_object_get(device_id, "deviceNumber"));
+    section_cper->DevBridge.Segment = 
+        (UINT16)json_object_get_uint64(json_object_object_get(device_id, "segmentNumber"));
+    section_cper->DevBridge.PrimaryOrDeviceBus = 
+        (UINT8)json_object_get_uint64(json_object_object_get(device_id, "primaryOrDeviceBusNumber"));
+    section_cper->DevBridge.SecondaryBus = 
+        (UINT8)json_object_get_uint64(json_object_object_get(device_id, "secondaryBusNumber"));
+    section_cper->DevBridge.Slot.Number = 
+        (UINT16)json_object_get_uint64(json_object_object_get(device_id, "slotNumber"));
+
+    //Bridge/control status.
+    json_object* bridge_control = json_object_object_get(section, "bridgeControlStatus");
+    UINT32 bridge_status = (UINT16)json_object_get_uint64(json_object_object_get(bridge_control, "secondaryStatusRegister"));
+    UINT32 control_status = (UINT16)json_object_get_uint64(json_object_object_get(bridge_control, "controlRegister"));
+    section_cper->BridgeControlStatus = bridge_status + (control_status << 16);
+
+    //Capability structure.
+    json_object* capability = json_object_object_get(section, "capabilityStructure");
+    json_object* encoded = json_object_object_get(capability, "data");
+    UINT8* decoded = b64_decode(json_object_get_string(encoded), json_object_get_string_len(encoded));
+    memcpy(section_cper->Capability.PcieCap, decoded, 60);
+    free(decoded);
+
+    //AER capability structure.
+    json_object* aer_info = json_object_object_get(section, "aerInfo");
+    EFI_PCIE_ADV_ERROR_EXT_CAPABILITY* aer_capability = 
+        (EFI_PCIE_ADV_ERROR_EXT_CAPABILITY*)section_cper->AerInfo.PcieAer;
+    aer_capability->Header.PcieExtendedCapabilityId =
+        json_object_get_uint64(json_object_object_get(aer_info, "capabilityID"));
+    aer_capability->Header.CapabilityVersion =
+        json_object_get_uint64(json_object_object_get(aer_info, "capabilityVersion"));
+    aer_capability->UncorrectableErrorStatusReg =
+        (UINT32)json_object_get_uint64(json_object_object_get(aer_info, "uncorrectableErrorStatusRegister"));
+    aer_capability->UncorrectableErrorMaskReg =
+        (UINT32)json_object_get_uint64(json_object_object_get(aer_info, "uncorrectableErrorMaskRegister"));
+    aer_capability->UncorrectableErrorSeverityReg =
+        (UINT32)json_object_get_uint64(json_object_object_get(aer_info, "uncorrectableErrorSeverityRegister"));
+    aer_capability->CorrectableErrorStatusReg =
+        (UINT32)json_object_get_uint64(json_object_object_get(aer_info, "correctableErrorStatusRegister"));
+    aer_capability->CorrectableErrorMaskReg =
+        (UINT32)json_object_get_uint64(json_object_object_get(aer_info, "correctableErrorMaskRegister"));
+    aer_capability->AeccReg =
+        (UINT32)json_object_get_uint64(json_object_object_get(aer_info, "aeccReg"));
+
+    //AER header log register.
+    encoded = json_object_object_get(aer_info, "headerLogRegister");
+    decoded = b64_decode(json_object_get_string(encoded), json_object_get_string_len(encoded));
+    memcpy(aer_capability->HeaderLogReg, decoded, 16);
+    free(decoded);
+
+    //Remaining AER fields.
+    aer_capability->RootErrorCommand =
+        (UINT32)json_object_get_uint64(json_object_object_get(aer_info, "rootErrorCommand"));
+    aer_capability->RootErrorStatus =
+        (UINT32)json_object_get_uint64(json_object_object_get(aer_info, "rootErrorStatus"));
+    aer_capability->ErrorSourceIdReg =
+        (UINT16)json_object_get_uint64(json_object_object_get(aer_info, "errorSourceIDRegister"));
+    aer_capability->CorrectableSourceIdReg =
+        (UINT16)json_object_get_uint64(json_object_object_get(aer_info, "correctableErrorSourceIDRegister"));
+
+
+    //Miscellaneous value fields.
+    section_cper->PortType = (UINT32)readable_pair_to_integer(json_object_object_get(section, "portType"));
+    section_cper->SerialNo = json_object_get_uint64(json_object_object_get(section, "deviceSerialNumber"));
+
+    //Write out to stream, free resources.
+    fwrite(&section_cper, sizeof(section_cper), 1, out);
+    fflush(out);
+    free(section_cper);
 }
\ No newline at end of file
