diff --git a/cper-parse.c b/cper-parse.c
index 9bfdb40..128b768 100644
--- a/cper-parse.c
+++ b/cper-parse.c
@@ -68,6 +68,7 @@
 			cper_section_descriptor_to_ir(&section_descriptor));
 
 		//Read the section itself.
+
 		json_object_array_add(sections_ir,
 				      cper_section_to_ir(cper_file, base_pos,
 							 &section_descriptor));
@@ -121,11 +122,6 @@
 				       header->ErrorSeverity)));
 	json_object_object_add(header_ir, "severity", error_severity);
 
-	//The validation bits for each section.
-	json_object *validation_bits = bitfield_to_ir(
-		header->ValidationBits, 3, CPER_HEADER_VALID_BITFIELD_NAMES);
-	json_object_object_add(header_ir, "validationBits", validation_bits);
-
 	//Total length of the record (including headers) in bytes.
 	json_object_object_add(header_ir, "recordLength",
 			       json_object_new_uint64(header->RecordLength));
@@ -256,13 +252,6 @@
 	json_object_object_add(section_descriptor_ir, "revision",
 			       revision_to_ir(section_descriptor->Revision));
 
-	//Validation bits.
-	json_object *validation_bits =
-		bitfield_to_ir(section_descriptor->SecValidMask, 2,
-			       CPER_SECTION_DESCRIPTOR_VALID_BITFIELD_NAMES);
-	json_object_object_add(section_descriptor_ir, "validationBits",
-			       validation_bits);
-
 	//Flag bits.
 	json_object *flags =
 		bitfield_to_ir(section_descriptor->SectionFlags, 8,
diff --git a/cper-utils.c b/cper-utils.c
index 1e259e8..c777974 100644
--- a/cper-utils.c
+++ b/cper-utils.c
@@ -6,6 +6,7 @@
 
 #include <stdio.h>
 #include <json.h>
+#include <string.h>
 #include <libcper/Cper.h>
 #include <libcper/cper-utils.h>
 
@@ -98,8 +99,10 @@
 
 	UINT32 *cur = start;
 	for (int i = 0; i < len; i++) {
+		UINT32 value;
+		memcpy(&value, cur, sizeof(UINT32));
 		json_object_object_add(result, names[i],
-				       json_object_new_uint64(*cur));
+				       json_object_new_uint64(value));
 		cur++;
 	}
 
@@ -196,6 +199,29 @@
 	return result;
 }
 
+//Filters properties based on Validation Bits.
+// Refer to CPER spec for vbit_idx to be passed here.
+void add_to_valid_bitfield(ValidationTypes *val, int vbit_idx)
+{
+	switch (val->size) {
+	case UINT_8T:
+		val->value.ui8 |= (0x01 << vbit_idx);
+		break;
+	case UINT_16T:
+		val->value.ui16 |= (0x01 << vbit_idx);
+		break;
+	case UINT_32T:
+		val->value.ui32 |= (0x01 << vbit_idx);
+		break;
+	case UINT_64T:
+		val->value.ui64 |= (0x01 << vbit_idx);
+		break;
+	default:
+		printf("IR to CPER: Unknown validation bits size passed, Enum IntType=%d",
+		       val->size);
+	}
+}
+
 //Converts the given IR bitfield into a standard UINT64 bitfield, with fields beginning from bit 0.
 UINT64 ir_to_bitfield(json_object *ir, int num_fields, const char *names[])
 {
@@ -210,6 +236,53 @@
 	return result;
 }
 
+// Filters properties based on Validation Bits.
+// Refer to CPER spec for vbit_idx to be passed here.
+// Overload function for 16, 32, 64b
+bool isvalid_prop_to_ir(ValidationTypes *val, int vbit_idx)
+{
+	UINT64 vbit_mask = 0x01 << vbit_idx;
+	switch (val->size) {
+	case UINT_16T:
+		return (vbit_mask & val->value.ui16);
+
+	case UINT_32T:
+		return (vbit_mask & val->value.ui32);
+
+	case UINT_64T:
+		return (vbit_mask & val->value.ui64);
+
+	default:
+		printf("CPER to IR:Unknown validation bits size passed. Enum IntType: %d",
+		       val->size);
+	}
+	return 0;
+}
+
+void print_val(ValidationTypes *val)
+{
+	switch (val->size) {
+	case UINT_8T:
+		printf("Validation bits: %x\n", val->value.ui8);
+		break;
+	case UINT_16T:
+		printf("Validation bits: %x\n", val->value.ui16);
+		break;
+
+	case UINT_32T:
+		printf("Validation bits: %x\n", val->value.ui32);
+		break;
+
+	case UINT_64T:
+		printf("Validation bits: %llx\n", val->value.ui64);
+		break;
+
+	default:
+		printf("CPER to IR:Unknown validation bits size passed. Enum IntType: %d",
+		       val->size);
+	}
+}
+
 //Converts the given UINT64 array into a JSON IR array, given the length.
 json_object *uint64_array_to_ir_array(UINT64 *array, int len)
 {
diff --git a/generator/cper-generate-cli.c b/generator/cper-generate-cli.c
index c9882c2..8c570ab 100644
--- a/generator/cper-generate-cli.c
+++ b/generator/cper-generate-cli.c
@@ -25,6 +25,7 @@
 	char *out_file = NULL;
 	char *single_section = NULL;
 	char **sections = NULL;
+	const GEN_VALID_BITS_TEST_TYPE randomValidbitsSet = RANDOM_VALID;
 	UINT16 num_sections = 0;
 	for (int i = 1; i < argc; i++) {
 		if (strcmp(argv[i], "--out") == 0 && i < argc - 1) {
@@ -73,9 +74,11 @@
 
 	//Which type are we generating?
 	if (single_section != NULL && sections == NULL) {
-		generate_single_section_record(single_section, cper_file);
+		generate_single_section_record(single_section, cper_file,
+					       randomValidbitsSet);
 	} else if (sections != NULL && single_section == NULL) {
-		generate_cper_record(sections, num_sections, cper_file);
+		generate_cper_record(sections, num_sections, cper_file,
+				     randomValidbitsSet);
 	} else {
 		//Invalid arguments.
 		printf("Invalid argument. Either both '--sections' and '--single-section' were set, or neither. For command information, refer to 'cper-generate --help'.\n");
diff --git a/generator/cper-generate.c b/generator/cper-generate.c
index 7b60848..8675a78 100644
--- a/generator/cper-generate.c
+++ b/generator/cper-generate.c
@@ -16,19 +16,22 @@
 							  const size_t *lengths,
 							  int index,
 							  int num_sections);
-size_t generate_section(void **location, char *type);
+size_t generate_section(void **location, char *type,
+			GEN_VALID_BITS_TEST_TYPE validBitsType);
 
 //Generates a CPER record with the given section types, outputting to the given stream.
-void generate_cper_record(char **types, UINT16 num_sections, FILE *out)
+void generate_cper_record(char **types, UINT16 num_sections, FILE *out,
+			  GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Initialise randomiser.
-	init_random();
+	init_random(0);
 
 	//Generate the sections.
 	void *sections[num_sections];
 	size_t section_lengths[num_sections];
 	for (int i = 0; i < num_sections; i++) {
-		section_lengths[i] = generate_section(sections + i, types[i]);
+		section_lengths[i] =
+			generate_section(sections + i, types[i], validBitsType);
 		if (section_lengths[i] == 0) {
 			//Error encountered, exit.
 			printf("Error encountered generating section %d of type '%s', length returned zero.\n",
@@ -92,11 +95,12 @@
 }
 
 //Generates a single section record for the given section, and outputs to file.
-void generate_single_section_record(char *type, FILE *out)
+void generate_single_section_record(char *type, FILE *out,
+				    GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Generate a section.
 	void *section = NULL;
-	size_t section_len = generate_section(&section, type);
+	size_t section_len = generate_section(&section, type, validBitsType);
 
 	//Generate a descriptor, correct the offset.
 	EFI_ERROR_SECTION_DESCRIPTOR *section_descriptor =
@@ -185,7 +189,8 @@
 }
 
 //Generates a single CPER section given the string type.
-size_t generate_section(void **location, char *type)
+size_t generate_section(void **location, char *type,
+			GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//The length of the section.
 	size_t length = 0;
@@ -201,7 +206,7 @@
 			if (strcmp(type, generator_definitions[i].ShortName) ==
 			    0) {
 				length = generator_definitions[i].Generate(
-					location);
+					location, validBitsType);
 				section_generated = 1;
 				break;
 			}
diff --git a/generator/gen-utils.c b/generator/gen-utils.c
index 03f6b8d..46642b2 100644
--- a/generator/gen-utils.c
+++ b/generator/gen-utils.c
@@ -44,5 +44,5 @@
 //Initializes the random seed for rand() using the current time.
 void init_random()
 {
-	srand((unsigned int)time(NULL));
+	srand(1);
 }
diff --git a/generator/sections/gen-section-ampere.c b/generator/sections/gen-section-ampere.c
index 3ffe2f5..a28cdf1 100644
--- a/generator/sections/gen-section-ampere.c
+++ b/generator/sections/gen-section-ampere.c
@@ -12,8 +12,10 @@
 
 //Generates a single pseudo-random Ampere error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_ampere(void **location)
+size_t generate_section_ampere(void **location,
+			       GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
+	(void)validBitsType;
 	//Create random bytes.
 	size_t size = sizeof(EFI_AMPERE_ERROR_DATA);
 	UINT8 *section = generate_random_bytes(size);
diff --git a/generator/sections/gen-section-arm.c b/generator/sections/gen-section-arm.c
index 5043741..c181663 100644
--- a/generator/sections/gen-section-arm.c
+++ b/generator/sections/gen-section-arm.c
@@ -5,18 +5,20 @@
  **/
 
 #include <stdlib.h>
+#include <stdio.h>
 #include <string.h>
 #include <libcper/BaseTypes.h>
 #include <libcper/generator/gen-utils.h>
 #include <libcper/generator/sections/gen-section.h>
 #define ARM_ERROR_INFO_SIZE 32
 
-void *generate_arm_error_info();
+void *generate_arm_error_info(GEN_VALID_BITS_TEST_TYPE validBitsType);
 size_t generate_arm_context_info(void **location);
 
 //Generates a single pseudo-random ARM processor section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_arm(void **location)
+size_t generate_section_arm(void **location,
+			    GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Set up for generation of error/context structures.
 	UINT16 error_structure_num = rand() % 4 + 1; //Must be at least 1.
@@ -27,7 +29,7 @@
 
 	//Generate the structures.
 	for (int i = 0; i < error_structure_num; i++) {
-		error_structures[i] = generate_arm_error_info();
+		error_structures[i] = generate_arm_error_info(validBitsType);
 	}
 	for (int i = 0; i < context_structure_num; i++) {
 		context_structure_lengths[i] =
@@ -35,7 +37,7 @@
 	}
 
 	//Determine a random amount of vendor specific info.
-	int vendor_info_len = rand() % 16;
+	size_t vendor_info_len = rand() % 16 + 4;
 
 	//Create the section as a whole.
 	size_t total_len = 40 + (error_structure_num * ARM_ERROR_INFO_SIZE);
@@ -56,8 +58,13 @@
 	*(section + 12) = rand() % 4;
 
 	//Reserved zero bytes.
-	UINT64 *validation = (UINT64 *)section;
-	*validation &= 0x7;
+	UINT32 *validation = (UINT32 *)section;
+	*validation &= 0xF;
+	if (validBitsType == ALL_VALID) {
+		*validation = 0xF;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0xA;
+	}
 	UINT32 *running_state = (UINT32 *)(section + 32);
 	*running_state &= 0x1;
 	memset(section + 13, 0, 3);
@@ -76,13 +83,21 @@
 		cur_pos += context_structure_lengths[i];
 	}
 
+	//vendor specific
+	for (size_t i = 0; i < vendor_info_len; i++) {
+		//Ensure only ascii is used so we don't
+		// fail base64E
+		*cur_pos = rand() % 127 + 1;
+		cur_pos += 1;
+	}
+
 	//Set return values and exit.
 	*location = section;
 	return total_len;
 }
 
 //Generates a single pseudo-random ARM error info structure. Must be later freed.
-void *generate_arm_error_info()
+void *generate_arm_error_info(GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	UINT8 *error_info = generate_random_bytes(ARM_ERROR_INFO_SIZE);
 
@@ -91,12 +106,17 @@
 	*(error_info + 1) = ARM_ERROR_INFO_SIZE;
 
 	//Type of error.
-	UINT8 error_type = rand() % 4;
+	UINT8 error_type = rand() % 3;
 	*(error_info + 4) = error_type;
 
 	//Reserved bits for error information.
 	UINT16 *validation = (UINT16 *)(error_info + 2);
 	*validation &= 0x1F;
+	if (validBitsType == ALL_VALID) {
+		*validation = 0x1F;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x15;
+	}
 
 	//Make sure reserved bits are zero according with the type.
 	UINT64 *error_subinfo = (UINT64 *)(error_info + 8);
@@ -105,11 +125,25 @@
 	case 0:
 	case 1:
 		*error_subinfo &= 0xFFFFFFF;
+		//Reserved bits for cache/tlb.
+		UINT16 *val_cache = (UINT16 *)(error_info + 8);
+		if (validBitsType == ALL_VALID) {
+			*val_cache = 0x7F;
+		} else if (validBitsType == SOME_VALID) {
+			*val_cache = 0x55;
+		}
 		break;
 
 	//Bus
 	case 2:
 		*error_subinfo &= 0xFFFFFFFFFFF;
+		UINT16 *val_bus = (UINT16 *)(error_info + 8);
+		if (validBitsType == ALL_VALID) {
+			*val_bus = 0xFFF;
+		} else if (validBitsType == SOME_VALID) {
+			*val_bus = 0x555;
+		}
+
 		break;
 
 	//Microarch/other.
@@ -117,6 +151,10 @@
 		break;
 	}
 
+	//flags
+	UINT8 *flags = (UINT8 *)(error_info + 7);
+	*flags &= 0xF;
+
 	return error_info;
 }
 
@@ -175,6 +213,14 @@
 	int total_size = 8 + reg_size;
 	UINT16 *context_info = (UINT16 *)generate_random_bytes(total_size);
 
+	//UEFI spec is not clear about bit 15 in the
+	// reg type 8 section. This sets it to 0 to
+	// avoid confusion for now.
+	if (reg_type == 8) {
+		UINT8 *reg_decode = (UINT8 *)context_info;
+		*(reg_decode + 9) &= 0x7F;
+	}
+
 	//Set header information.
 	*(context_info + 1) = reg_type;
 	*((UINT32 *)(context_info + 2)) = reg_size;
diff --git a/generator/sections/gen-section-ccix-per.c b/generator/sections/gen-section-ccix-per.c
index 0784d34..e648cba 100644
--- a/generator/sections/gen-section-ccix-per.c
+++ b/generator/sections/gen-section-ccix-per.c
@@ -11,7 +11,8 @@
 
 //Generates a single pseudo-random CCIX PER error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_ccix_per(void **location)
+size_t generate_section_ccix_per(void **location,
+				 GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Create a random length for the CCIX PER log.
 	//The log attached here does not necessarily conform to the CCIX specification, and is simply random.
@@ -25,6 +26,11 @@
 	UINT32 *validation = (UINT32 *)(bytes + 4);
 	*validation &= 0x7;    //Validation bits 3-63.
 	*(validation + 1) = 0; //Validation bits 3-63.
+	if (validBitsType == ALL_VALID) {
+		*validation = 0x7;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x5;
+	}
 	*(bytes + 13) &= 0x1F; //CCIX port ID bits 5-7.
 	UINT16 *reserved = (UINT16 *)(bytes + 14);
 	*reserved = 0;	       //Reserved bytes 14-15.
diff --git a/generator/sections/gen-section-cxl-component.c b/generator/sections/gen-section-cxl-component.c
index 395defb..615a152 100644
--- a/generator/sections/gen-section-cxl-component.c
+++ b/generator/sections/gen-section-cxl-component.c
@@ -11,7 +11,8 @@
 
 //Generates a single pseudo-random CXL component error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_cxl_component(void **location)
+size_t generate_section_cxl_component(void **location,
+				      GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Create a random length for the CXL component event log.
 	//The logs attached here do not necessarily conform to the specification, and are simply random.
@@ -24,6 +25,11 @@
 	//Set reserved areas to zero.
 	UINT32 *validation = (UINT32 *)(bytes + 4);
 	*validation &= 0x7;
+	if (validBitsType == ALL_VALID) {
+		*validation = 0x7;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x5;
+	}
 	*(validation + 1) = 0;
 	UINT8 *slot_number = (UINT8 *)(bytes + 21);
 	*slot_number &= ~0x7; //Device ID slot number bits 0-2.
diff --git a/generator/sections/gen-section-cxl-protocol.c b/generator/sections/gen-section-cxl-protocol.c
index 5139005..1918d68 100644
--- a/generator/sections/gen-section-cxl-protocol.c
+++ b/generator/sections/gen-section-cxl-protocol.c
@@ -11,7 +11,8 @@
 
 //Generates a single pseudo-random CXL protocol error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_cxl_protocol(void **location)
+size_t generate_section_cxl_protocol(void **location,
+				     GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Create a random length for the CXL DVSEC and CXL error log.
 	//The logs attached here do not necessarily conform to the specification, and are simply random.
@@ -28,7 +29,12 @@
 
 	//Set reserved areas to zero.
 	UINT64 *validation = (UINT64 *)bytes;
-	*validation &= 0x3F;	      //Validation bits 6-63.
+	*validation &= 0x67;
+	if (validBitsType == ALL_VALID) {
+		*validation = 0x67;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x25;
+	}
 	for (int i = 0; i < 7; i++) {
 		*(bytes + 9 + i) = 0; //Reserved bytes 9-15.
 	}
@@ -38,6 +44,8 @@
 		for (int i = 0; i < 3; i++) {
 			*(bytes + 21 + i) = 0; //CXL agent address bytes 5-7.
 		}
+		*validation |=
+			0x18; //Device Serial Number depends on agent type
 	}
 
 	*(bytes + 34) &= ~0x7; //Device ID byte 10 bits 0-2.
diff --git a/generator/sections/gen-section-dmar.c b/generator/sections/gen-section-dmar.c
index dc34696..7c2a85f 100644
--- a/generator/sections/gen-section-dmar.c
+++ b/generator/sections/gen-section-dmar.c
@@ -11,8 +11,10 @@
 
 //Generates a single pseudo-random generic DMAr error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_dmar_generic(void **location)
+size_t generate_section_dmar_generic(void **location,
+				     GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
+	(void)validBitsType;
 	//Create random bytes.
 	int size = 32;
 	UINT8 *bytes = generate_random_bytes(size);
@@ -35,8 +37,10 @@
 
 //Generates a single pseudo-random VT-d DMAr error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_dmar_vtd(void **location)
+size_t generate_section_dmar_vtd(void **location,
+				 GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
+	(void)validBitsType;
 	//Create random bytes.
 	int size = 144;
 	UINT8 *bytes = generate_random_bytes(size);
@@ -59,8 +63,10 @@
 
 //Generates a single pseudo-random IOMMU DMAr error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_dmar_iommu(void **location)
+size_t generate_section_dmar_iommu(void **location,
+				   GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
+	(void)validBitsType;
 	//Create random bytes.
 	int size = 144;
 	UINT8 *bytes = generate_random_bytes(size);
diff --git a/generator/sections/gen-section-firmware.c b/generator/sections/gen-section-firmware.c
index e482a6b..6ec4b88 100644
--- a/generator/sections/gen-section-firmware.c
+++ b/generator/sections/gen-section-firmware.c
@@ -11,8 +11,10 @@
 
 //Generates a single pseudo-random firmware error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_firmware(void **location)
+size_t generate_section_firmware(void **location,
+				 GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
+	(void)validBitsType;
 	//Create random bytes.
 	int size = 32;
 	UINT8 *bytes = generate_random_bytes(size);
diff --git a/generator/sections/gen-section-generic.c b/generator/sections/gen-section-generic.c
index 7baf325..54de52e 100644
--- a/generator/sections/gen-section-generic.c
+++ b/generator/sections/gen-section-generic.c
@@ -11,21 +11,28 @@
 
 //Generates a single pseudo-random generic processor section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_generic(void **location)
+size_t generate_section_generic(void **location,
+				GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Create random bytes.
 	size_t size = generate_random_section(location, 192);
 
 	//Set reserved locations to zero.
 	UINT8 *start_byte = (UINT8 *)*location;
-	*((UINT64 *)start_byte) &= 0xFFF;
+	UINT64 *validation = (UINT64 *)*location;
+	*validation &= 0x1FFF;
+	if (validBitsType == ALL_VALID) {
+		*validation = 0x1FFF;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x1555;
+	}
 	*(start_byte + 12) &= 0x7;
 	*((UINT16 *)(start_byte + 14)) = 0x0;
 
 	//Ensure CPU brand string does not terminate early.
 	for (int i = 0; i < 128; i++) {
 		UINT8 *byte = start_byte + 24 + i;
-		//CPU brand can only be ASCII
+		//Ensure only ascii is used
 		*byte = rand() % 127 + 1;
 
 		//Null terminate last byte.
diff --git a/generator/sections/gen-section-ia32x64.c b/generator/sections/gen-section-ia32x64.c
index 5415f02..647f77d 100644
--- a/generator/sections/gen-section-ia32x64.c
+++ b/generator/sections/gen-section-ia32x64.c
@@ -11,12 +11,13 @@
 #include <libcper/generator/sections/gen-section.h>
 #define IA32X64_ERROR_STRUCTURE_SIZE 64
 
-void *generate_ia32x64_error_structure();
+void *generate_ia32x64_error_structure(GEN_VALID_BITS_TEST_TYPE validBitsType);
 size_t generate_ia32x64_context_structure(void **location);
 
 //Generates a single pseudo-random IA32/x64 section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_ia32x64(void **location)
+size_t generate_section_ia32x64(void **location,
+				GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Set up for generation of error/context structures.
 	UINT16 error_structure_num = rand() % 4 + 1;
@@ -27,7 +28,8 @@
 
 	//Generate the structures.
 	for (int i = 0; i < error_structure_num; i++) {
-		error_structures[i] = generate_ia32x64_error_structure();
+		error_structures[i] =
+			generate_ia32x64_error_structure(validBitsType);
 	}
 	for (int i = 0; i < context_structure_num; i++) {
 		context_structure_lengths[i] =
@@ -51,6 +53,11 @@
 	//Set header information.
 	UINT64 *validation = (UINT64 *)section;
 	*validation &= 0x3;
+	if (validBitsType == ALL_VALID) {
+		*validation = 0x3;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x2;
+	}
 	*validation |= error_structure_num << 2;
 	*validation |= context_structure_num << 8;
 
@@ -75,7 +82,7 @@
 }
 
 //Generates a single IA32/x64 error structure. Must later be freed.
-void *generate_ia32x64_error_structure()
+void *generate_ia32x64_error_structure(GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	UINT8 *error_structure =
 		generate_random_bytes(IA32X64_ERROR_STRUCTURE_SIZE);
@@ -83,6 +90,11 @@
 	//Set error structure reserved space to zero.
 	UINT64 *validation = (UINT64 *)(error_structure + 16);
 	*validation &= 0x1F;
+	if (validBitsType == ALL_VALID) {
+		*validation = 0x1F;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x15;
+	}
 
 	//Create a random type of error structure.
 	EFI_GUID *guid = (EFI_GUID *)error_structure;
@@ -95,7 +107,7 @@
 		       sizeof(EFI_GUID));
 
 		//Set reserved space to zero.
-		*check_info &= ~0x20FF00;
+		*check_info = ~0x20FF00;
 		*check_info &= 0x3FFFFFFF;
 		break;
 
@@ -105,7 +117,7 @@
 		       sizeof(EFI_GUID));
 
 		//Set reserved space to zero.
-		*check_info &= ~0x20FF00;
+		*check_info = ~0x20FF00;
 		*check_info &= 0x3FFFFFFF;
 		break;
 
@@ -115,7 +127,7 @@
 		       sizeof(EFI_GUID));
 
 		//Set reserved space to zero.
-		*check_info &= ~0x20F800;
+		*check_info = ~0x20F800;
 		*check_info &= 0x7FFFFFFFF;
 		break;
 
@@ -125,7 +137,7 @@
 		       sizeof(EFI_GUID));
 
 		//Set reserved space to zero.
-		*check_info &= ~0xFFE0;
+		*check_info = ~0xFFC0;
 		*check_info &= 0xFFFFFF;
 		break;
 	}
diff --git a/generator/sections/gen-section-memory.c b/generator/sections/gen-section-memory.c
index 475d6d0..a45f0ce 100644
--- a/generator/sections/gen-section-memory.c
+++ b/generator/sections/gen-section-memory.c
@@ -11,7 +11,8 @@
 
 //Generates a single pseudo-random platform memory error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_memory(void **location)
+size_t generate_section_memory(void **location,
+			       GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Create random bytes.
 	int size = 80;
@@ -19,8 +20,14 @@
 
 	//Set reserved areas to zero.
 	UINT64 *validation = (UINT64 *)bytes;
-	*validation &= 0x2FFFFF; //Validation 22-63
-	*(bytes + 73) &= ~0x1C;	 //Extended bits 2-4
+	//Validation 22-63 reserved. 19/20=0 for bank
+	*validation &= 0x27FFFF;
+	if (validBitsType == ALL_VALID) {
+		*validation = 0x27FFFF;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x275555;
+	}
+	*(bytes + 73) &= ~0x1C; //Extended bits 2-4
 
 	//Fix values that could be above range.
 	*(bytes + 72) = rand() % 16; //Memory error type
@@ -35,7 +42,8 @@
 
 //Generates a single pseudo-random memory 2 error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_memory2(void **location)
+size_t generate_section_memory2(void **location,
+				GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Create random bytes.
 	int size = 96;
@@ -43,8 +51,14 @@
 
 	//Set reserved areas to zero.
 	UINT64 *validation = (UINT64 *)bytes;
-	*validation &= 0x2FFFFF; //Validation 22-63
-	*(bytes + 63) = 0;	 //Reserved byte 63
+	//Validation 22-63, 20/21 is 0 since 6 is valid
+	*validation &= 0xFFFFF;
+	if (validBitsType == ALL_VALID) {
+		*validation = 0xFFFFF;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x55555;
+	}
+	*(bytes + 63) = 0; //Reserved byte 63
 
 	//Fix values that could be above range.
 	*(bytes + 61) = rand() % 16; //Memory error type
diff --git a/generator/sections/gen-section-nvidia.c b/generator/sections/gen-section-nvidia.c
index 3d2b706..a06f545 100644
--- a/generator/sections/gen-section-nvidia.c
+++ b/generator/sections/gen-section-nvidia.c
@@ -13,8 +13,10 @@
 
 //Generates a single pseudo-random NVIDIA error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_nvidia(void **location)
+size_t generate_section_nvidia(void **location,
+			       GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
+	(void)validBitsType;
 	const char *signatures[] = {
 		"DCC-ECC",   "DCC-COH",	      "HSS-BUSY",      "HSS-IDLE",
 		"CLink",     "C2C",	      "C2C-IP-FAIL",   "L0 RESET",
diff --git a/generator/sections/gen-section-pci-bus.c b/generator/sections/gen-section-pci-bus.c
index 1e424bf..ca0f255 100644
--- a/generator/sections/gen-section-pci-bus.c
+++ b/generator/sections/gen-section-pci-bus.c
@@ -11,7 +11,8 @@
 
 //Generates a single pseudo-random PCI/PCI-X bus error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_pci_bus(void **location)
+size_t generate_section_pci_bus(void **location,
+				GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Create random bytes.
 	int size = 72;
@@ -20,6 +21,11 @@
 	//Set reserved areas to zero.
 	UINT64 *validation = (UINT64 *)bytes;
 	*validation &= 0x1FF; //Validation 9-63
+	if (validBitsType == ALL_VALID) {
+		*validation = 0x1FF;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x155;
+	}
 	UINT32 *reserved = (UINT32 *)(bytes + 20);
 	*reserved = 0;
 	UINT64 *bus_command = (UINT64 *)(bytes + 40);
diff --git a/generator/sections/gen-section-pci-dev.c b/generator/sections/gen-section-pci-dev.c
index 999739a..6deac59 100644
--- a/generator/sections/gen-section-pci-dev.c
+++ b/generator/sections/gen-section-pci-dev.c
@@ -11,7 +11,8 @@
 
 //Generates a single pseudo-random PCI component error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_pci_dev(void **location)
+size_t generate_section_pci_dev(void **location,
+				GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Generate how many register pairs will be attached to this section.
 	UINT32 num_memory_pairs = rand() % 4;
@@ -24,7 +25,12 @@
 
 	//Set reserved areas to zero.
 	UINT64 *validation = (UINT64 *)bytes;
-	*validation &= 0x1F;	       //Validation 5-63
+	*validation &= 0x1F; //Validation 5-63
+	if (validBitsType == ALL_VALID) {
+		*validation = 0x1F;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x15;
+	}
 	for (int i = 0; i < 5; i++) {
 		*(bytes + 27 + i) = 0; //Bytes 11-15 of ID info.
 	}
diff --git a/generator/sections/gen-section-pcie.c b/generator/sections/gen-section-pcie.c
index eaf050c..db9dfd9 100644
--- a/generator/sections/gen-section-pcie.c
+++ b/generator/sections/gen-section-pcie.c
@@ -13,7 +13,8 @@
 
 //Generates a single pseudo-random PCIe error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_pcie(void **location)
+size_t generate_section_pcie(void **location,
+			     GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Create random bytes.
 	int size = 208;
@@ -21,7 +22,12 @@
 
 	//Set reserved areas to zero.
 	UINT64 *validation = (UINT64 *)bytes;
-	*validation &= 0xFF;   //Validation 8-63
+	*validation &= 0xFF; //Validation 8-63
+	if (validBitsType == ALL_VALID) {
+		*validation = 0xFF;
+	} else if (validBitsType == SOME_VALID) {
+		*validation = 0x55;
+	}
 	UINT32 *version = (UINT32 *)(bytes + 12);
 	*version &= 0xFFFF;    //Version bytes 2-3
 	UINT32 *reserved = (UINT32 *)(bytes + 20);
diff --git a/include/libcper/Cper.h b/include/libcper/Cper.h
index 48038e1..29012ef 100644
--- a/include/libcper/Cper.h
+++ b/include/libcper/Cper.h
@@ -1436,9 +1436,9 @@
 	UINT64 ParticipationType : 2;
 	UINT64 TimeOut : 1;
 	UINT64 AddressSpace : 2;
-	UINT64 MemoryAddressAttributes : 8;
+	UINT64 MemoryAddressAttributes : 9;
 	UINT64 AccessMode : 1;
-	UINT64 Reserved : 19;
+	UINT64 Reserved : 20;
 } EFI_ARM_BUS_ERROR_STRUCTURE;
 
 typedef union {
@@ -1643,7 +1643,7 @@
 	UINT64 MrsCrm : 4;
 	UINT64 MrsCrn : 4;
 	UINT64 MrsOp1 : 3;
-	UINT64 MrsO0 : 1;
+	UINT64 MrsO0 : 2;
 	UINT64 Value : 64;
 } EFI_ARM_MISC_CONTEXT_REGISTER;
 #pragma pack(pop)
diff --git a/include/libcper/cper-utils.h b/include/libcper/cper-utils.h
index cd0b6c9..3c3bba4 100644
--- a/include/libcper/cper-utils.h
+++ b/include/libcper/cper-utils.h
@@ -11,6 +11,19 @@
 #include <libcper/common-utils.h>
 #include <libcper/Cper.h>
 #include <json.h>
+#include <stdbool.h>
+
+typedef enum { UINT_8T, UINT_16T, UINT_32T, UINT_64T } IntType;
+
+typedef struct {
+	IntType size;
+	union {
+		UINT8 ui8;
+		UINT16 ui16;
+		UINT32 ui32;
+		UINT64 ui64;
+	} value;
+} ValidationTypes;
 
 json_object *
 cper_generic_error_status_to_ir(EFI_GENERIC_ERROR_STATUS *error_status);
@@ -35,6 +48,9 @@
 json_object *bitfield_to_ir(UINT64 bitfield, int num_fields,
 			    const char *names[]);
 UINT64 ir_to_bitfield(json_object *ir, int num_fields, const char *names[]);
+bool isvalid_prop_to_ir(ValidationTypes *val, int vbit_idx);
+void add_to_valid_bitfield(ValidationTypes *val, int vbit_idx);
+void print_val(ValidationTypes *val);
 json_object *uint64_array_to_ir_array(UINT64 *array, int len);
 json_object *revision_to_ir(UINT16 revision);
 const char *severity_to_string(UINT32 severity);
diff --git a/include/libcper/generator/cper-generate.h b/include/libcper/generator/cper-generate.h
index 97f5ea6..3f1ab08 100644
--- a/include/libcper/generator/cper-generate.h
+++ b/include/libcper/generator/cper-generate.h
@@ -7,9 +7,12 @@
 
 #include <stdio.h>
 #include <libcper/BaseTypes.h>
+#include <libcper/generator/sections/gen-section.h>
 
-void generate_cper_record(char **types, UINT16 num_sections, FILE *out);
-void generate_single_section_record(char *type, FILE *out);
+void generate_cper_record(char **types, UINT16 num_sections, FILE *out,
+			  GEN_VALID_BITS_TEST_TYPE validBitsType);
+void generate_single_section_record(char *type, FILE *out,
+				    GEN_VALID_BITS_TEST_TYPE validBitsType);
 
 #ifdef __cplusplus
 }
diff --git a/include/libcper/generator/sections/gen-section.h b/include/libcper/generator/sections/gen-section.h
index 53c25c8..65f40d2 100644
--- a/include/libcper/generator/sections/gen-section.h
+++ b/include/libcper/generator/sections/gen-section.h
@@ -8,30 +8,50 @@
 #include <stdlib.h>
 #include <libcper/Cper.h>
 
+// Run tests with some or all validation bits set.
+typedef enum { SOME_VALID, RANDOM_VALID, ALL_VALID } GEN_VALID_BITS_TEST_TYPE;
+
 //Section generator function predefinitions.
-size_t generate_section_generic(void **location);
-size_t generate_section_ia32x64(void **location);
-size_t generate_section_arm(void **location);
-size_t generate_section_memory(void **location);
-size_t generate_section_memory2(void **location);
-size_t generate_section_pcie(void **location);
-size_t generate_section_pci_bus(void **location);
-size_t generate_section_pci_dev(void **location);
-size_t generate_section_firmware(void **location);
-size_t generate_section_dmar_generic(void **location);
-size_t generate_section_dmar_vtd(void **location);
-size_t generate_section_dmar_iommu(void **location);
-size_t generate_section_ccix_per(void **location);
-size_t generate_section_cxl_protocol(void **location);
-size_t generate_section_cxl_component(void **location);
-size_t generate_section_nvidia(void **location);
-size_t generate_section_ampere(void **location);
+size_t generate_section_generic(void **location,
+				GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_ia32x64(void **location,
+				GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_arm(void **location,
+			    GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_memory(void **location,
+			       GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_memory2(void **location,
+				GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_pcie(void **location,
+			     GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_pci_bus(void **location,
+				GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_pci_dev(void **location,
+				GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_firmware(void **location,
+				 GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_dmar_generic(void **location,
+				     GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_dmar_vtd(void **location,
+				 GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_dmar_iommu(void **location,
+				   GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_ccix_per(void **location,
+				 GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_cxl_protocol(void **location,
+				     GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_cxl_component(void **location,
+				      GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_nvidia(void **location,
+			       GEN_VALID_BITS_TEST_TYPE validBitsType);
+size_t generate_section_ampere(void **location,
+			       GEN_VALID_BITS_TEST_TYPE validBitsType);
 
 //Definition structure for a single CPER section generator.
 typedef struct {
 	EFI_GUID *Guid;
 	const char *ShortName;
-	size_t (*Generate)(void **);
+	size_t (*Generate)(void **, GEN_VALID_BITS_TEST_TYPE);
 } CPER_GENERATOR_DEFINITION;
 
 extern CPER_GENERATOR_DEFINITION generator_definitions[];
diff --git a/ir-parse.c b/ir-parse.c
index 69f2186..2cb8de0 100644
--- a/ir-parse.c
+++ b/ir-parse.c
@@ -98,36 +98,40 @@
 		json_object_object_get(severity, "code"));
 
 	//Validation bits.
-	header->ValidationBits = ir_to_bitfield(
-		json_object_object_get(header_ir, "validationBits"), 3,
-		CPER_HEADER_VALID_BITFIELD_NAMES);
+	ValidationTypes ui32Type = { UINT_32T, .value.ui32 = 0 };
+	struct json_object *obj = NULL;
 
 	//Record length.
 	header->RecordLength = (UINT32)json_object_get_uint64(
 		json_object_object_get(header_ir, "recordLength"));
 
 	//Timestamp, if present.
-	json_object *timestamp = json_object_object_get(header_ir, "timestamp");
-	if (timestamp != NULL) {
-		string_to_timestamp(&header->TimeStamp,
-				    json_object_get_string(timestamp));
-		header->TimeStamp.Flag = json_object_get_boolean(
-			json_object_object_get(header_ir,
-					       "timestampIsPrecise"));
+	if (json_object_object_get_ex(header_ir, "timestamp", &obj)) {
+		json_object *timestamp = obj;
+		if (timestamp != NULL) {
+			string_to_timestamp(&header->TimeStamp,
+					    json_object_get_string(timestamp));
+			header->TimeStamp.Flag = json_object_get_boolean(
+				json_object_object_get(header_ir,
+						       "timestampIsPrecise"));
+		}
+		add_to_valid_bitfield(&ui32Type, 1);
 	}
 
 	//Various GUIDs.
-	json_object *platform_id =
-		json_object_object_get(header_ir, "platformID");
-	json_object *partition_id =
-		json_object_object_get(header_ir, "partitionID");
+	json_object *platform_id;
+	json_object_object_get_ex(header_ir, "platformID", &platform_id);
+	json_object *partition_id;
+	json_object_object_get_ex(header_ir, "partitionID", &partition_id);
 	if (platform_id != NULL) {
 		string_to_guid(&header->PlatformID,
 			       json_object_get_string(platform_id));
+		add_to_valid_bitfield(&ui32Type, 0);
 	}
 	if (partition_id != NULL) {
 		string_to_guid(&header->PartitionID,
 			       json_object_get_string(partition_id));
+		add_to_valid_bitfield(&ui32Type, 2);
 	}
 	string_to_guid(&header->CreatorID,
 		       json_object_get_string(
@@ -150,6 +154,8 @@
 	json_object *flags = json_object_object_get(header_ir, "flags");
 	header->Flags = (UINT32)json_object_get_uint64(
 		json_object_object_get(flags, "value"));
+
+	header->ValidationBits = ui32Type.value.ui32;
 }
 
 //Converts a single given IR section into CPER, outputting to the given stream.
@@ -186,7 +192,6 @@
 			printf("Failed to allocate decode output buffer. \n");
 		} else {
 			fwrite(decoded, decoded_len, 1, out);
-			fflush(out);
 			free(decoded);
 		}
 	}
@@ -212,9 +217,9 @@
 	descriptor->Revision = minor + (major << 8);
 
 	//Validation bits, flags.
-	descriptor->SecValidMask = ir_to_bitfield(
-		json_object_object_get(section_descriptor_ir, "validationBits"),
-		2, CPER_SECTION_DESCRIPTOR_VALID_BITFIELD_NAMES);
+	ValidationTypes ui8Type = { UINT_8T, .value.ui8 = 0 };
+	struct json_object *obj = NULL;
+
 	descriptor->SectionFlags = ir_to_bitfield(
 		json_object_object_get(section_descriptor_ir, "flags"), 8,
 		CPER_SECTION_DESCRIPTOR_FLAGS_BITFIELD_NAMES);
@@ -227,11 +232,13 @@
 			       json_object_object_get(section_type, "data")));
 
 	//FRU ID, if present.
-	json_object *fru_id =
-		json_object_object_get(section_descriptor_ir, "fruID");
-	if (fru_id != NULL) {
-		string_to_guid(&descriptor->FruId,
-			       json_object_get_string(fru_id));
+	if (json_object_object_get_ex(section_descriptor_ir, "fruID", &obj)) {
+		json_object *fru_id = obj;
+		if (fru_id != NULL) {
+			string_to_guid(&descriptor->FruId,
+				       json_object_get_string(fru_id));
+			add_to_valid_bitfield(&ui8Type, 0);
+		}
 	}
 
 	//Severity code.
@@ -241,33 +248,36 @@
 		json_object_object_get(severity, "code"));
 
 	//FRU text, if present.
-	json_object *fru_text =
-		json_object_object_get(section_descriptor_ir, "fruText");
-	if (fru_text != NULL) {
-		strncpy(descriptor->FruString, json_object_get_string(fru_text),
-			sizeof(descriptor->FruString) - 1);
-		descriptor->FruString[sizeof(descriptor->FruString) - 1] = '\0';
+	if (json_object_object_get_ex(section_descriptor_ir, "fruText", &obj)) {
+		json_object *fru_text = obj;
+		if (fru_text != NULL) {
+			strncpy(descriptor->FruString,
+				json_object_get_string(fru_text),
+				sizeof(descriptor->FruString) - 1);
+			descriptor
+				->FruString[sizeof(descriptor->FruString) - 1] =
+				'\0';
+			add_to_valid_bitfield(&ui8Type, 1);
+		}
 	}
+	descriptor->SecValidMask = ui8Type.value.ui8;
 }
 
 //Converts IR for a given single section format CPER record into CPER binary.
 void ir_single_section_to_cper(json_object *ir, FILE *out)
 {
 	//Create & write a section descriptor to file.
-	EFI_ERROR_SECTION_DESCRIPTOR *section_descriptor =
-		(EFI_ERROR_SECTION_DESCRIPTOR *)calloc(
-			1, sizeof(EFI_ERROR_SECTION_DESCRIPTOR));
+	EFI_ERROR_SECTION_DESCRIPTOR section_descriptor;
+	memset(&section_descriptor, 0, sizeof(section_descriptor));
+
 	ir_section_descriptor_to_cper(
 		json_object_object_get(ir, "sectionDescriptor"),
-		section_descriptor);
-	fwrite(section_descriptor, sizeof(EFI_ERROR_SECTION_DESCRIPTOR), 1,
-	       out);
-	fflush(out);
+		&section_descriptor);
+	fwrite(&section_descriptor, sizeof(section_descriptor), 1, out);
 
 	//Write section to file.
 	ir_section_to_cper(json_object_object_get(ir, "section"),
-			   section_descriptor, out);
+			   &section_descriptor, out);
 
-	//Free remaining resources.
-	free(section_descriptor);
+	fflush(out);
 }
diff --git a/meson.build b/meson.build
index fb4a399..9026168 100644
--- a/meson.build
+++ b/meson.build
@@ -18,6 +18,12 @@
     language: ['c', 'cpp'],
 )
 
+add_project_arguments(
+    '-DLIBCPER_EXAMPLES="'
+    + meson.current_source_dir() + '/examples"',
+    language: ['c', 'cpp'],
+)
+
 library_is_share = get_option('default_library') == 'shared'
 add_project_arguments('-D_POSIX_C_SOURCE=200809L', language: 'c')
 
diff --git a/sections/cper-section-arm.c b/sections/cper-section-arm.c
index b07c829..067c4f8 100644
--- a/sections/cper-section-arm.c
+++ b/sections/cper-section-arm.c
@@ -6,6 +6,7 @@
  **/
 
 #include <stdio.h>
+#include <string.h>
 #include <json.h>
 #include <libcper/base64.h>
 #include <libcper/Cper.h>
@@ -48,10 +49,9 @@
 	EFI_ARM_ERROR_RECORD *record = (EFI_ARM_ERROR_RECORD *)section;
 	json_object *section_ir = json_object_new_object();
 
-	//Validation bits.
-	json_object *validation = bitfield_to_ir(
-		record->ValidFields, 4, ARM_ERROR_VALID_BITFIELD_NAMES);
-	json_object_object_add(section_ir, "validationBits", validation);
+	//Length of ValidationBits from spec
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = record->ValidFields };
 
 	//Number of error info and context info structures, and length.
 	json_object_object_add(section_ir, "errorInfoNum",
@@ -62,33 +62,42 @@
 			       json_object_new_uint64(record->SectionLength));
 
 	//Error affinity.
-	json_object *error_affinity = json_object_new_object();
-	json_object_object_add(error_affinity, "value",
-			       json_object_new_int(record->ErrorAffinityLevel));
-	json_object_object_add(
-		error_affinity, "type",
-		json_object_new_string(record->ErrorAffinityLevel < 4 ?
-					       "Vendor Defined" :
-					       "Reserved"));
-	json_object_object_add(section_ir, "errorAffinity", error_affinity);
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object *error_affinity = json_object_new_object();
+		json_object_object_add(
+			error_affinity, "value",
+			json_object_new_int(record->ErrorAffinityLevel));
+		json_object_object_add(
+			error_affinity, "type",
+			json_object_new_string(record->ErrorAffinityLevel < 4 ?
+						       "Vendor Defined" :
+						       "Reserved"));
+		json_object_object_add(section_ir, "errorAffinity",
+				       error_affinity);
+	}
 
 	//Processor ID (MPIDR_EL1) and chip ID (MIDR_EL1).
-	uint64_t sock;
-	uint64_t mpidr_eli1 = record->MPIDR_EL1;
-	json_object_object_add(section_ir, "mpidrEl1",
-			       json_object_new_uint64(mpidr_eli1));
-	//Arm Processor socket info
-	sock = (mpidr_eli1 & ARM_SOCK_MASK) >> 32;
-	json_object_object_add(section_ir, "affinity3",
-			       json_object_new_uint64(sock));
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		uint64_t mpidr_eli1 = record->MPIDR_EL1;
+		uint64_t sock;
+		json_object_object_add(section_ir, "mpidrEl1",
+				       json_object_new_uint64(mpidr_eli1));
+
+		//Arm Processor socket info dependes on mpidr_eli1
+		sock = (mpidr_eli1 & ARM_SOCK_MASK) >> 32;
+		json_object_object_add(section_ir, "affinity3",
+				       json_object_new_uint64(sock));
+	}
 
 	json_object_object_add(section_ir, "midrEl1",
 			       json_object_new_uint64(record->MIDR_EL1));
 
-	//Whether the processor is running, and the state of it if so.
-	json_object_object_add(section_ir, "running",
-			       json_object_new_boolean(record->RunningState &
-						       0x1));
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		//Whether the processor is running, and the state of it if so.
+		json_object_object_add(
+			section_ir, "running",
+			json_object_new_boolean(record->RunningState & 0x1));
+	}
 	if (!(record->RunningState >> 31)) {
 		//Bit 32 of running state is on, so PSCI state information is included.
 		//This can't be made human readable, as it is unknown whether this will be the pre-PSCI 1.0 format
@@ -124,23 +133,28 @@
 	json_object_object_add(section_ir, "contextInfo", context_info_array);
 
 	//Is there any vendor-specific information following?
-	if (cur_pos < (uint8_t *)section + record->SectionLength) {
-		json_object *vendor_specific = json_object_new_object();
-		size_t input_size =
-			(uint8_t *)section + record->SectionLength - cur_pos;
-		int32_t encoded_len = 0;
-		char *encoded =
-			base64_encode(cur_pos, input_size, &encoded_len);
-		if (encoded == NULL) {
-			return NULL;
-		}
-		json_object_object_add(vendor_specific, "data",
-				       json_object_new_string_len(encoded,
-								  encoded_len));
-		free(encoded);
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		if (cur_pos < (uint8_t *)section + record->SectionLength) {
+			json_object *vendor_specific = json_object_new_object();
+			size_t input_size = (uint8_t *)section +
+					    record->SectionLength - cur_pos;
+			int32_t encoded_len = 0;
+			char *encoded = base64_encode(cur_pos, input_size,
+						      &encoded_len);
+			if (encoded == NULL) {
+				printf("base64 encode of vendorSpecificInfo failed\n");
+				return NULL;
+			}
+			json_object_object_add(vendor_specific, "data",
+					       json_object_new_string_len(
+						       encoded, encoded_len));
+			free(encoded);
 
-		json_object_object_add(section_ir, "vendorSpecificInfo",
-				       vendor_specific);
+			json_object_object_add(section_ir, "vendorSpecificInfo",
+					       vendor_specific);
+		} else {
+			printf("vendorSpecificInfo is marked valid but not present in binary\n");
+		}
 	}
 
 	return section_ir;
@@ -159,10 +173,8 @@
 			       json_object_new_int(error_info->Length));
 
 	//Validation bitfield.
-	json_object *validation =
-		bitfield_to_ir(error_info->ValidationBits, 5,
-			       ARM_ERROR_INFO_ENTRY_VALID_BITFIELD_NAMES);
-	json_object_object_add(error_info_ir, "validationBits", validation);
+	ValidationTypes ui16Type = { UINT_16T,
+				     .value.ui16 = error_info->ValidationBits };
 
 	//The type of error information in this log.
 	json_object *error_type = integer_to_readable_pair(
@@ -171,51 +183,65 @@
 	json_object_object_add(error_info_ir, "errorType", error_type);
 
 	//Multiple error count.
-	json_object *multiple_error = json_object_new_object();
-	json_object_object_add(multiple_error, "value",
-			       json_object_new_int(error_info->MultipleError));
-	json_object_object_add(
-		multiple_error, "type",
-		json_object_new_string(error_info->MultipleError < 1 ?
-					       "Single Error" :
-					       "Multiple Errors"));
-	json_object_object_add(error_info_ir, "multipleError", multiple_error);
+	if (isvalid_prop_to_ir(&ui16Type, 0)) {
+		json_object *multiple_error = json_object_new_object();
+		json_object_object_add(
+			multiple_error, "value",
+			json_object_new_int(error_info->MultipleError));
+		json_object_object_add(
+			multiple_error, "type",
+			json_object_new_string(error_info->MultipleError < 1 ?
+						       "Single Error" :
+						       "Multiple Errors"));
+		json_object_object_add(error_info_ir, "multipleError",
+				       multiple_error);
+	}
 
 	//Flags.
-	json_object *flags = bitfield_to_ir(error_info->Flags, 4,
-					    ARM_ERROR_INFO_ENTRY_FLAGS_NAMES);
-	json_object_object_add(error_info_ir, "flags", flags);
+	if (isvalid_prop_to_ir(&ui16Type, 1)) {
+		json_object *flags = bitfield_to_ir(
+			error_info->Flags, 4, ARM_ERROR_INFO_ENTRY_FLAGS_NAMES);
+		json_object_object_add(error_info_ir, "flags", flags);
+	}
 
 	//Error information, split by type.
-	json_object *error_subinfo = NULL;
-	switch (error_info->Type) {
-	case ARM_ERROR_INFORMATION_TYPE_CACHE: //Cache
-	case ARM_ERROR_INFORMATION_TYPE_TLB:   //TLB
-		error_subinfo = cper_arm_cache_tlb_error_to_ir(
-			(EFI_ARM_CACHE_ERROR_STRUCTURE *)&error_info
-				->ErrorInformation,
-			error_info);
-		break;
-	case ARM_ERROR_INFORMATION_TYPE_BUS: //Bus
-		error_subinfo = cper_arm_bus_error_to_ir(
-			(EFI_ARM_BUS_ERROR_STRUCTURE *)&error_info
-				->ErrorInformation);
-		break;
+	if (isvalid_prop_to_ir(&ui16Type, 2)) {
+		json_object *error_subinfo = NULL;
+		switch (error_info->Type) {
+		case ARM_ERROR_INFORMATION_TYPE_CACHE: //Cache
+		case ARM_ERROR_INFORMATION_TYPE_TLB:   //TLB
+			error_subinfo = cper_arm_cache_tlb_error_to_ir(
+				(EFI_ARM_CACHE_ERROR_STRUCTURE *)&error_info
+					->ErrorInformation,
+				error_info);
+			break;
+		case ARM_ERROR_INFORMATION_TYPE_BUS: //Bus
+			error_subinfo = cper_arm_bus_error_to_ir(
+				(EFI_ARM_BUS_ERROR_STRUCTURE *)&error_info
+					->ErrorInformation);
+			break;
 
-	default:
-		//Unknown/microarch, will not support.
-		break;
+		default:
+			//Unknown/microarch, will not support.
+			break;
+		}
+		json_object_object_add(error_info_ir, "errorInformation",
+				       error_subinfo);
 	}
-	json_object_object_add(error_info_ir, "errorInformation",
-			       error_subinfo);
 
 	//Virtual fault address, physical fault address.
-	json_object_object_add(
-		error_info_ir, "virtualFaultAddress",
-		json_object_new_uint64(error_info->VirtualFaultAddress));
-	json_object_object_add(
-		error_info_ir, "physicalFaultAddress",
-		json_object_new_uint64(error_info->PhysicalFaultAddress));
+	if (isvalid_prop_to_ir(&ui16Type, 3)) {
+		json_object_object_add(
+			error_info_ir, "virtualFaultAddress",
+			json_object_new_uint64(
+				error_info->VirtualFaultAddress));
+	}
+	if (isvalid_prop_to_ir(&ui16Type, 4)) {
+		json_object_object_add(
+			error_info_ir, "physicalFaultAddress",
+			json_object_new_uint64(
+				error_info->PhysicalFaultAddress));
+	}
 
 	return error_info_ir;
 }
@@ -230,59 +256,83 @@
 	char *cache_tlb_propname;
 
 	//Validation bitfield.
-	json_object *validation =
-		bitfield_to_ir(cache_tlb_error->ValidationBits, 7,
-			       ARM_CACHE_TLB_ERROR_VALID_BITFIELD_NAMES);
-	json_object_object_add(cache_tlb_error_ir, "validationBits",
-			       validation);
+	ValidationTypes ui64Type = {
+		UINT_64T, .value.ui64 = cache_tlb_error->ValidationBits
+	};
 
 	//Transaction type.
-	json_object *transaction_type = integer_to_readable_pair(
-		cache_tlb_error->TransactionType, 3,
-		ARM_ERROR_TRANSACTION_TYPES_KEYS,
-		ARM_ERROR_TRANSACTION_TYPES_VALUES, "Unknown (Reserved)");
-	json_object_object_add(cache_tlb_error_ir, "transactionType",
-			       transaction_type);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *transaction_type = integer_to_readable_pair(
+			cache_tlb_error->TransactionType, 3,
+			ARM_ERROR_TRANSACTION_TYPES_KEYS,
+			ARM_ERROR_TRANSACTION_TYPES_VALUES,
+			"Unknown (Reserved)");
+		json_object_object_add(cache_tlb_error_ir, "transactionType",
+				       transaction_type);
+	}
 
 	//Operation.
-	json_object *operation;
+	bool cacheErrorFlag = 1;
 	if (error_info->Type == 0) {
-		//Cache operation.
-		operation = integer_to_readable_pair(
-			cache_tlb_error->Operation, 11,
-			ARM_CACHE_BUS_OPERATION_TYPES_KEYS,
-			ARM_CACHE_BUS_OPERATION_TYPES_VALUES,
-			"Unknown (Reserved)");
 		cache_tlb_propname = "cacheError";
 	} else {
 		//TLB operation.
-		operation = integer_to_readable_pair(
-			cache_tlb_error->Operation, 9,
-			ARM_TLB_OPERATION_TYPES_KEYS,
-			ARM_TLB_OPERATION_TYPES_VALUES, "Unknown (Reserved)");
 		cache_tlb_propname = "tlbError";
+		cacheErrorFlag = 0;
 	}
-	json_object_object_add(cache_tlb_error_ir, "operation", operation);
+
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object *operation;
+
+		if (cacheErrorFlag) {
+			//Cache operation.
+			operation = integer_to_readable_pair(
+				cache_tlb_error->Operation, 11,
+				ARM_CACHE_BUS_OPERATION_TYPES_KEYS,
+				ARM_CACHE_BUS_OPERATION_TYPES_VALUES,
+				"Unknown (Reserved)");
+		} else {
+			operation = integer_to_readable_pair(
+				cache_tlb_error->Operation, 9,
+				ARM_TLB_OPERATION_TYPES_KEYS,
+				ARM_TLB_OPERATION_TYPES_VALUES,
+				"Unknown (Reserved)");
+		}
+		json_object_object_add(cache_tlb_error_ir, "operation",
+				       operation);
+	}
 
 	//Miscellaneous remaining fields.
-	json_object_object_add(cache_tlb_error_ir, "level",
-			       json_object_new_int(cache_tlb_error->Level));
-	json_object_object_add(
-		cache_tlb_error_ir, "processorContextCorrupt",
-		json_object_new_boolean(
-			cache_tlb_error->ProcessorContextCorrupt));
-	json_object_object_add(
-		cache_tlb_error_ir, "corrected",
-		json_object_new_boolean(cache_tlb_error->Corrected));
-	json_object_object_add(
-		cache_tlb_error_ir, "precisePC",
-		json_object_new_boolean(cache_tlb_error->PrecisePC));
-	json_object_object_add(
-		cache_tlb_error_ir, "restartablePC",
-		json_object_new_boolean(cache_tlb_error->RestartablePC));
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		json_object_object_add(
+			cache_tlb_error_ir, "level",
+			json_object_new_int(cache_tlb_error->Level));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		json_object_object_add(
+			cache_tlb_error_ir, "processorContextCorrupt",
+			json_object_new_boolean(
+				cache_tlb_error->ProcessorContextCorrupt));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		json_object_object_add(
+			cache_tlb_error_ir, "corrected",
+			json_object_new_boolean(cache_tlb_error->Corrected));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 5)) {
+		json_object_object_add(
+			cache_tlb_error_ir, "precisePC",
+			json_object_new_boolean(cache_tlb_error->PrecisePC));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 6)) {
+		json_object_object_add(cache_tlb_error_ir, "restartablePC",
+				       json_object_new_boolean(
+					       cache_tlb_error->RestartablePC));
+	}
 
 	json_object_object_add(cache_tlb_prop, cache_tlb_propname,
 			       cache_tlb_error_ir);
+
 	return cache_tlb_prop;
 }
 
@@ -290,73 +340,111 @@
 json_object *cper_arm_bus_error_to_ir(EFI_ARM_BUS_ERROR_STRUCTURE *bus_error)
 {
 	json_object *bus_error_ir = json_object_new_object();
+	json_object *bus_prop = json_object_new_object();
+	char *bus_propname = "busError";
 
 	//Validation bits.
-	json_object *validation =
-		bitfield_to_ir(bus_error->ValidationBits, 12,
-			       ARM_BUS_ERROR_VALID_BITFIELD_NAMES);
-	json_object_object_add(bus_error_ir, "validationBits", validation);
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = bus_error->ValidationBits };
 
 	//Transaction type.
-	json_object *transaction_type = integer_to_readable_pair(
-		bus_error->TransactionType, 3, ARM_ERROR_TRANSACTION_TYPES_KEYS,
-		ARM_ERROR_TRANSACTION_TYPES_VALUES, "Unknown (Reserved)");
-	json_object_object_add(bus_error_ir, "transactionType",
-			       transaction_type);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *transaction_type = integer_to_readable_pair(
+			bus_error->TransactionType, 3,
+			ARM_ERROR_TRANSACTION_TYPES_KEYS,
+			ARM_ERROR_TRANSACTION_TYPES_VALUES,
+			"Unknown (Reserved)");
+		json_object_object_add(bus_error_ir, "transactionType",
+				       transaction_type);
+	}
 
 	//Operation.
-	json_object *operation = integer_to_readable_pair(
-		bus_error->Operation, 7, ARM_CACHE_BUS_OPERATION_TYPES_KEYS,
-		ARM_CACHE_BUS_OPERATION_TYPES_VALUES, "Unknown (Reserved)");
-	json_object_object_add(bus_error_ir, "operation", operation);
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object *operation = integer_to_readable_pair(
+			bus_error->Operation, 7,
+			ARM_CACHE_BUS_OPERATION_TYPES_KEYS,
+			ARM_CACHE_BUS_OPERATION_TYPES_VALUES,
+			"Unknown (Reserved)");
+		json_object_object_add(bus_error_ir, "operation", operation);
+	}
 
-	//Affinity level of bus error, + miscellaneous fields.
-	json_object_object_add(bus_error_ir, "level",
-			       json_object_new_int(bus_error->Level));
-	json_object_object_add(
-		bus_error_ir, "processorContextCorrupt",
-		json_object_new_boolean(bus_error->ProcessorContextCorrupt));
-	json_object_object_add(bus_error_ir, "corrected",
-			       json_object_new_boolean(bus_error->Corrected));
-	json_object_object_add(bus_error_ir, "precisePC",
-			       json_object_new_boolean(bus_error->PrecisePC));
-	json_object_object_add(
-		bus_error_ir, "restartablePC",
-		json_object_new_boolean(bus_error->RestartablePC));
-	json_object_object_add(bus_error_ir, "timedOut",
-			       json_object_new_boolean(bus_error->TimeOut));
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		//Affinity level of bus error, + miscellaneous fields.
+		json_object_object_add(bus_error_ir, "level",
+				       json_object_new_int(bus_error->Level));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		json_object_object_add(
+			bus_error_ir, "processorContextCorrupt",
+			json_object_new_boolean(
+				bus_error->ProcessorContextCorrupt));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		json_object_object_add(
+			bus_error_ir, "corrected",
+			json_object_new_boolean(bus_error->Corrected));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 5)) {
+		json_object_object_add(
+			bus_error_ir, "precisePC",
+			json_object_new_boolean(bus_error->PrecisePC));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 6)) {
+		json_object_object_add(
+			bus_error_ir, "restartablePC",
+			json_object_new_boolean(bus_error->RestartablePC));
+	}
 
 	//Participation type.
-	json_object *participation_type = integer_to_readable_pair(
-		bus_error->ParticipationType, 4,
-		ARM_BUS_PARTICIPATION_TYPES_KEYS,
-		ARM_BUS_PARTICIPATION_TYPES_VALUES, "Unknown");
-	json_object_object_add(bus_error_ir, "participationType",
-			       participation_type);
+	if (isvalid_prop_to_ir(&ui64Type, 7)) {
+		json_object *participation_type = integer_to_readable_pair(
+			bus_error->ParticipationType, 4,
+			ARM_BUS_PARTICIPATION_TYPES_KEYS,
+			ARM_BUS_PARTICIPATION_TYPES_VALUES, "Unknown");
+		json_object_object_add(bus_error_ir, "participationType",
+				       participation_type);
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 8)) {
+		json_object_object_add(
+			bus_error_ir, "timedOut",
+			json_object_new_boolean(bus_error->TimeOut));
+	}
 
 	//Address space.
-	json_object *address_space = integer_to_readable_pair(
-		bus_error->AddressSpace, 3, ARM_BUS_ADDRESS_SPACE_TYPES_KEYS,
-		ARM_BUS_ADDRESS_SPACE_TYPES_VALUES, "Unknown");
-	json_object_object_add(bus_error_ir, "addressSpace", address_space);
+	if (isvalid_prop_to_ir(&ui64Type, 9)) {
+		json_object *address_space = integer_to_readable_pair(
+			bus_error->AddressSpace, 3,
+			ARM_BUS_ADDRESS_SPACE_TYPES_KEYS,
+			ARM_BUS_ADDRESS_SPACE_TYPES_VALUES, "Unknown");
+		json_object_object_add(bus_error_ir, "addressSpace",
+				       address_space);
+	}
 
 	//Memory access attributes.
 	//todo: find the specification of these in the ARM ARM
-	json_object_object_add(
-		bus_error_ir, "memoryAttributes",
-		json_object_new_int(bus_error->MemoryAddressAttributes));
+	if (isvalid_prop_to_ir(&ui64Type, 10)) {
+		json_object_object_add(
+			bus_error_ir, "memoryAttributes",
+			json_object_new_int(
+				bus_error->MemoryAddressAttributes));
+	}
 
 	//Access Mode
-	json_object *access_mode = json_object_new_object();
-	json_object_object_add(access_mode, "value",
-			       json_object_new_int(bus_error->AccessMode));
-	json_object_object_add(
-		access_mode, "name",
-		json_object_new_string(bus_error->AccessMode == 0 ? "Secure" :
-								    "Normal"));
-	json_object_object_add(bus_error_ir, "accessMode", access_mode);
+	if (isvalid_prop_to_ir(&ui64Type, 8)) {
+		json_object *access_mode = json_object_new_object();
+		json_object_object_add(
+			access_mode, "value",
+			json_object_new_int(bus_error->AccessMode));
+		json_object_object_add(
+			access_mode, "name",
+			json_object_new_string(bus_error->AccessMode == 0 ?
+						       "Secure" :
+						       "Normal"));
+		json_object_object_add(bus_error_ir, "accessMode", access_mode);
+	}
+	json_object_object_add(bus_prop, bus_propname, bus_error_ir);
 
-	return bus_error_ir;
+	return bus_prop;
 }
 
 //Converts a single ARM processor context block into JSON IR.
@@ -389,67 +477,67 @@
 	switch (header->RegisterContextType) {
 	case EFI_ARM_CONTEXT_TYPE_AARCH32_GPR:
 		register_array = uniform_struct_to_ir(
-			(UINT32 *)cur_pos,
+			(UINT32 *)*cur_pos,
 			sizeof(EFI_ARM_V8_AARCH32_GPR) / sizeof(UINT32),
 			ARM_AARCH32_GPR_NAMES);
 		break;
 	case EFI_ARM_CONTEXT_TYPE_AARCH32_EL1:
 		register_array = uniform_struct_to_ir(
-			(UINT32 *)cur_pos,
+			(UINT32 *)*cur_pos,
 			sizeof(EFI_ARM_AARCH32_EL1_CONTEXT_REGISTERS) /
 				sizeof(UINT32),
 			ARM_AARCH32_EL1_REGISTER_NAMES);
 		break;
 	case EFI_ARM_CONTEXT_TYPE_AARCH32_EL2:
 		register_array = uniform_struct_to_ir(
-			(UINT32 *)cur_pos,
+			(UINT32 *)*cur_pos,
 			sizeof(EFI_ARM_AARCH32_EL2_CONTEXT_REGISTERS) /
 				sizeof(UINT32),
 			ARM_AARCH32_EL2_REGISTER_NAMES);
 		break;
 	case EFI_ARM_CONTEXT_TYPE_AARCH32_SECURE:
 		register_array = uniform_struct_to_ir(
-			(UINT32 *)cur_pos,
+			(UINT32 *)*cur_pos,
 			sizeof(EFI_ARM_AARCH32_SECURE_CONTEXT_REGISTERS) /
 				sizeof(UINT32),
 			ARM_AARCH32_SECURE_REGISTER_NAMES);
 		break;
 	case EFI_ARM_CONTEXT_TYPE_AARCH64_GPR:
 		register_array = uniform_struct64_to_ir(
-			(UINT64 *)cur_pos,
+			(UINT64 *)*cur_pos,
 			sizeof(EFI_ARM_V8_AARCH64_GPR) / sizeof(UINT64),
 			ARM_AARCH64_GPR_NAMES);
 		break;
 	case EFI_ARM_CONTEXT_TYPE_AARCH64_EL1:
 		register_array = uniform_struct64_to_ir(
-			(UINT64 *)cur_pos,
+			(UINT64 *)*cur_pos,
 			sizeof(EFI_ARM_AARCH64_EL1_CONTEXT_REGISTERS) /
 				sizeof(UINT64),
 			ARM_AARCH64_EL1_REGISTER_NAMES);
 		break;
 	case EFI_ARM_CONTEXT_TYPE_AARCH64_EL2:
 		register_array = uniform_struct64_to_ir(
-			(UINT64 *)cur_pos,
+			(UINT64 *)*cur_pos,
 			sizeof(EFI_ARM_AARCH64_EL2_CONTEXT_REGISTERS) /
 				sizeof(UINT64),
 			ARM_AARCH64_EL2_REGISTER_NAMES);
 		break;
 	case EFI_ARM_CONTEXT_TYPE_AARCH64_EL3:
 		register_array = uniform_struct64_to_ir(
-			(UINT64 *)cur_pos,
+			(UINT64 *)*cur_pos,
 			sizeof(EFI_ARM_AARCH64_EL3_CONTEXT_REGISTERS) /
 				sizeof(UINT64),
 			ARM_AARCH64_EL3_REGISTER_NAMES);
 		break;
 	case EFI_ARM_CONTEXT_TYPE_MISC:
 		register_array = cper_arm_misc_register_array_to_ir(
-			(EFI_ARM_MISC_CONTEXT_REGISTER *)cur_pos);
+			(EFI_ARM_MISC_CONTEXT_REGISTER *)*cur_pos);
 		break;
 	default:
 		//Unknown register array type, add as base64 data instead.
 		register_array = json_object_new_object();
 		int32_t encoded_len = 0;
-		char *encoded = base64_encode((UINT8 *)cur_pos,
+		char *encoded = base64_encode((UINT8 *)*cur_pos,
 					      header->RegisterArraySize,
 					      &encoded_len);
 		if (encoded == NULL) {
@@ -497,45 +585,60 @@
 //Converts a single CPER-JSON ARM error section into CPER binary, outputting to the given stream.
 void ir_section_arm_to_cper(json_object *section, FILE *out)
 {
-	EFI_ARM_ERROR_RECORD *section_cper =
-		(EFI_ARM_ERROR_RECORD *)calloc(1, sizeof(EFI_ARM_ERROR_RECORD));
+	EFI_ARM_ERROR_RECORD section_cper;
+	memset(&section_cper, 0, sizeof(section_cper));
 
 	//Validation bits.
-	section_cper->ValidFields = ir_to_bitfield(
-		json_object_object_get(section, "validationBits"), 4,
-		ARM_ERROR_VALID_BITFIELD_NAMES);
+	struct json_object *obj = NULL;
+	ValidationTypes u32Type = { UINT_32T, .value.ui32 = 0 };
 
 	//Count of error/context info structures.
-	section_cper->ErrInfoNum = json_object_get_int(
+	section_cper.ErrInfoNum = json_object_get_int(
 		json_object_object_get(section, "errorInfoNum"));
-	section_cper->ContextInfoNum = json_object_get_int(
+	section_cper.ContextInfoNum = json_object_get_int(
 		json_object_object_get(section, "contextInfoNum"));
 
 	//Miscellaneous raw value fields.
-	section_cper->SectionLength = json_object_get_uint64(
+	section_cper.SectionLength = json_object_get_uint64(
 		json_object_object_get(section, "sectionLength"));
-	section_cper->ErrorAffinityLevel = readable_pair_to_integer(
-		json_object_object_get(section, "errorAffinity"));
-	section_cper->MPIDR_EL1 = json_object_get_uint64(
-		json_object_object_get(section, "mpidrEl1"));
-	section_cper->MIDR_EL1 = json_object_get_uint64(
+	if (json_object_object_get_ex(section, "mpidrEl1", &obj)) {
+		section_cper.MPIDR_EL1 = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&u32Type, 0);
+	}
+	if (json_object_object_get_ex(section, "errorAffinity", &obj)) {
+		section_cper.ErrorAffinityLevel = readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&u32Type, 1);
+	}
+	section_cper.MIDR_EL1 = json_object_get_uint64(
 		json_object_object_get(section, "midrEl1"));
-	section_cper->RunningState = json_object_get_boolean(
-		json_object_object_get(section, "running"));
+	if (json_object_object_get_ex(section, "running", &obj)) {
+		section_cper.RunningState = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&u32Type, 2);
+	}
 
 	//Optional PSCI state.
 	json_object *psci_state = json_object_object_get(section, "psciState");
 	if (psci_state != NULL) {
-		section_cper->PsciState = json_object_get_uint64(psci_state);
+		section_cper.PsciState = json_object_get_uint64(psci_state);
 	}
 
+	//Validationbits for EFI_ARM_ERROR_RECORD should also consider vendorSpecificInfo
+	bool vendorSpecificPresent =
+		json_object_object_get_ex(section, "vendorSpecificInfo", &obj);
+	json_object *vendor_specific_info = obj;
+	if (vendorSpecificPresent) {
+		add_to_valid_bitfield(&u32Type, 3);
+	}
+
+	section_cper.ValidFields = u32Type.value.ui32;
+
 	//Flush header to stream.
-	fwrite(section_cper, sizeof(EFI_ARM_ERROR_RECORD), 1, out);
-	fflush(out);
+	fwrite(&section_cper, sizeof(section_cper), 1, out);
 
 	//Error info structure array.
+
 	json_object *error_info = json_object_object_get(section, "errorInfo");
-	for (int i = 0; i < section_cper->ErrInfoNum; i++) {
+	for (int i = 0; i < section_cper.ErrInfoNum; i++) {
 		ir_arm_error_info_to_cper(
 			json_object_array_get_idx(error_info, i), out);
 	}
@@ -543,15 +646,13 @@
 	//Context info structure array.
 	json_object *context_info =
 		json_object_object_get(section, "contextInfo");
-	for (int i = 0; i < section_cper->ContextInfoNum; i++) {
+	for (int i = 0; i < section_cper.ContextInfoNum; i++) {
 		ir_arm_context_info_to_cper(
 			json_object_array_get_idx(context_info, i), out);
 	}
 
 	//Vendor specific error info.
-	json_object *vendor_specific_info =
-		json_object_object_get(section, "vendorSpecificInfo");
-	if (vendor_specific_info != NULL) {
+	if (vendorSpecificPresent) {
 		json_object *vendor_info_string =
 			json_object_object_get(vendor_specific_info, "data");
 		int vendor_specific_len =
@@ -565,18 +666,19 @@
 
 		//Write out to file.
 		fwrite(decoded, decoded_len, 1, out);
-		fflush(out);
 		free(decoded);
 	}
 
-	//Free remaining resources.
-	free(section_cper);
+	fflush(out);
 }
 
 //Converts a single ARM error information structure into CPER binary, outputting to the given stream.
 void ir_arm_error_info_to_cper(json_object *error_info, FILE *out)
 {
 	EFI_ARM_ERROR_INFORMATION_ENTRY error_info_cper;
+	memset(&error_info_cper, 0, sizeof(error_info_cper));
+	struct json_object *obj = NULL;
+	ValidationTypes ui16Type = { UINT_16T, .value.ui16 = 0 };
 
 	//Version, length.
 	error_info_cper.Version = json_object_get_int(
@@ -584,64 +686,88 @@
 	error_info_cper.Length = json_object_get_int(
 		json_object_object_get(error_info, "length"));
 
-	//Validation bits.
-	error_info_cper.ValidationBits = ir_to_bitfield(
-		json_object_object_get(error_info, "validationBits"), 5,
-		ARM_ERROR_INFO_ENTRY_VALID_BITFIELD_NAMES);
-
 	//Type, multiple error.
 	error_info_cper.Type = (UINT8)readable_pair_to_integer(
-		json_object_object_get(error_info, "type"));
-	error_info_cper.MultipleError = (UINT16)readable_pair_to_integer(
-		json_object_object_get(error_info, "multipleError"));
+		json_object_object_get(error_info, "errorType"));
+
+	if (json_object_object_get_ex(error_info, "multipleError", &obj)) {
+		error_info_cper.MultipleError =
+			(UINT16)readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui16Type, 0);
+	} else {
+		error_info_cper.MultipleError = 0;
+	}
 
 	//Flags object.
-	error_info_cper.Flags = (UINT8)ir_to_bitfield(
-		json_object_object_get(error_info, "flags"), 4,
-		ARM_ERROR_INFO_ENTRY_FLAGS_NAMES);
+	if (json_object_object_get_ex(error_info, "flags", &obj)) {
+		error_info_cper.Flags = (UINT8)ir_to_bitfield(
+			obj, 4, ARM_ERROR_INFO_ENTRY_FLAGS_NAMES);
+		add_to_valid_bitfield(&ui16Type, 1);
+	} else {
+		error_info_cper.Flags = 0;
+	}
 
 	//Error information.
-	json_object *error_info_information =
-		json_object_object_get(error_info, "errorInformation");
-	json_object *error_info_prop = NULL;
+	if (json_object_object_get_ex(error_info, "errorInformation", &obj)) {
+		json_object *error_info_information = obj;
+		json_object *error_info_prop = NULL;
+		switch (error_info_cper.Type) {
+		case ARM_ERROR_INFORMATION_TYPE_CACHE:
+			error_info_cper.ErrorInformation.Value = 0;
+			error_info_prop = json_object_object_get(
+				error_info_information, "cacheError");
+			ir_arm_error_cache_tlb_info_to_cper(
+				error_info_prop,
+				&error_info_cper.ErrorInformation.CacheError);
+			break;
+		case ARM_ERROR_INFORMATION_TYPE_TLB:
+			error_info_cper.ErrorInformation.Value = 0;
+			error_info_prop = json_object_object_get(
+				error_info_information, "tlbError");
+			ir_arm_error_cache_tlb_info_to_cper(
+				error_info_prop,
+				&error_info_cper.ErrorInformation.CacheError);
+			break;
 
-	switch (error_info_cper.Type) {
-	case ARM_ERROR_INFORMATION_TYPE_CACHE:
-		error_info_prop = json_object_object_get(error_info_information,
-							 "cacheError");
-		ir_arm_error_cache_tlb_info_to_cper(
-			error_info_prop,
-			&error_info_cper.ErrorInformation.CacheError);
-		break;
-	case ARM_ERROR_INFORMATION_TYPE_TLB:
-		error_info_prop = json_object_object_get(error_info_information,
-							 "tlbError");
-		ir_arm_error_cache_tlb_info_to_cper(
-			error_info_prop,
-			&error_info_cper.ErrorInformation.CacheError);
-		break;
+		case ARM_ERROR_INFORMATION_TYPE_BUS:
+			error_info_cper.ErrorInformation.Value = 0;
+			error_info_prop = json_object_object_get(
+				error_info_information, "busError");
+			ir_arm_error_bus_info_to_cper(
+				error_info_prop,
+				&error_info_cper.ErrorInformation.BusError);
+			break;
 
-	case ARM_ERROR_INFORMATION_TYPE_BUS:
-		ir_arm_error_bus_info_to_cper(
-			error_info_information,
-			&error_info_cper.ErrorInformation.BusError);
-		break;
-
-	default:
-		//Unknown error information type.
-		break;
+		default:
+			//Unknown error information type.
+			break;
+		}
+		add_to_valid_bitfield(&ui16Type, 2);
 	}
 
 	//Virtual/physical fault address.
-	error_info_cper.VirtualFaultAddress = json_object_get_uint64(
-		json_object_object_get(error_info, "virtualFaultAddress"));
-	error_info_cper.PhysicalFaultAddress = json_object_get_uint64(
-		json_object_object_get(error_info, "physicalFaultAddress"));
+	if (json_object_object_get_ex(error_info, "virtualFaultAddress",
+				      &obj)) {
+		error_info_cper.VirtualFaultAddress =
+			json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui16Type, 3);
+	} else {
+		error_info_cper.VirtualFaultAddress = 0;
+	}
+
+	if (json_object_object_get_ex(error_info, "physicalFaultAddress",
+				      &obj)) {
+		error_info_cper.PhysicalFaultAddress =
+			json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui16Type, 4);
+	} else {
+		error_info_cper.PhysicalFaultAddress = 0;
+	}
+	error_info_cper.ValidationBits = ui16Type.value.ui16;
 
 	//Write out to stream.
 	fwrite(&error_info_cper, sizeof(EFI_ARM_ERROR_INFORMATION_ENTRY), 1,
 	       out);
-	fflush(out);
 }
 
 //Converts a single ARM cache/TLB error information structure into a CPER structure.
@@ -649,28 +775,46 @@
 	json_object *error_information,
 	EFI_ARM_CACHE_ERROR_STRUCTURE *error_info_cper)
 {
-	//Validation bits.
-	error_info_cper->ValidationBits = ir_to_bitfield(
-		json_object_object_get(error_information, "validationBits"), 7,
-		ARM_CACHE_TLB_ERROR_VALID_BITFIELD_NAMES);
+	// //Validation bits.
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 
 	//Miscellaneous value fields.
-	error_info_cper->TransactionType = readable_pair_to_integer(
-		json_object_object_get(error_information, "transactionType"));
-	error_info_cper->Operation = readable_pair_to_integer(
-		json_object_object_get(error_information, "operation"));
-	error_info_cper->Level = json_object_get_uint64(
-		json_object_object_get(error_information, "level"));
-	error_info_cper->ProcessorContextCorrupt = json_object_get_boolean(
-		json_object_object_get(error_information,
-				       "processorContextCorrupt"));
-	error_info_cper->Corrected = json_object_get_boolean(
-		json_object_object_get(error_information, "corrected"));
-	error_info_cper->PrecisePC = json_object_get_boolean(
-		json_object_object_get(error_information, "precisePC"));
-	error_info_cper->RestartablePC = json_object_get_boolean(
-		json_object_object_get(error_information, "restartablePC"));
+	if (json_object_object_get_ex(error_information, "transactionType",
+				      &obj)) {
+		error_info_cper->TransactionType =
+			readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
+	if (json_object_object_get_ex(error_information, "operation", &obj)) {
+		error_info_cper->Operation = readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
+	if (json_object_object_get_ex(error_information, "level", &obj)) {
+		error_info_cper->Level = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+	if (json_object_object_get_ex(error_information,
+				      "processorContextCorrupt", &obj)) {
+		error_info_cper->ProcessorContextCorrupt =
+			json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 3);
+	}
+	if (json_object_object_get_ex(error_information, "corrected", &obj)) {
+		error_info_cper->Corrected = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 4);
+	}
+	if (json_object_object_get_ex(error_information, "precisePC", &obj)) {
+		error_info_cper->PrecisePC = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 5);
+	}
+	if (json_object_object_get_ex(error_information, "restartablePC",
+				      &obj)) {
+		error_info_cper->RestartablePC = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 6);
+	}
 	error_info_cper->Reserved = 0;
+	error_info_cper->ValidationBits = ui64Type.value.ui64;
 }
 
 //Converts a single ARM bus error information structure into a CPER structure.
@@ -678,35 +822,96 @@
 				   EFI_ARM_BUS_ERROR_STRUCTURE *error_info_cper)
 {
 	//Validation bits.
-	error_info_cper->ValidationBits = ir_to_bitfield(
-		json_object_object_get(error_information, "validationBits"), 7,
-		ARM_BUS_ERROR_VALID_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
+
+	memset(error_info_cper, 0, sizeof(EFI_ARM_BUS_ERROR_STRUCTURE));
 
 	//Miscellaneous value fields.
-	error_info_cper->TransactionType = readable_pair_to_integer(
-		json_object_object_get(error_information, "transactionType"));
-	error_info_cper->Operation = readable_pair_to_integer(
-		json_object_object_get(error_information, "operation"));
-	error_info_cper->Level = json_object_get_uint64(
-		json_object_object_get(error_information, "level"));
-	error_info_cper->ProcessorContextCorrupt = json_object_get_boolean(
-		json_object_object_get(error_information,
-				       "processorContextCorrupt"));
-	error_info_cper->Corrected = json_object_get_boolean(
-		json_object_object_get(error_information, "corrected"));
-	error_info_cper->PrecisePC = json_object_get_boolean(
-		json_object_object_get(error_information, "precisePC"));
-	error_info_cper->RestartablePC = json_object_get_boolean(
-		json_object_object_get(error_information, "restartablePC"));
-	error_info_cper->ParticipationType = readable_pair_to_integer(
-		json_object_object_get(error_information, "participationType"));
-	error_info_cper->AddressSpace = readable_pair_to_integer(
-		json_object_object_get(error_information, "addressSpace"));
-	error_info_cper->AccessMode = readable_pair_to_integer(
-		json_object_object_get(error_information, "accessMode"));
-	error_info_cper->MemoryAddressAttributes = json_object_get_uint64(
-		json_object_object_get(error_information, "memoryAttributes"));
+	if (json_object_object_get_ex(error_information, "transactionType",
+				      &obj)) {
+		error_info_cper->TransactionType =
+			readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 0);
+	} else {
+		error_info_cper->TransactionType = 0;
+	}
+	if (json_object_object_get_ex(error_information, "operation", &obj)) {
+		error_info_cper->Operation = readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	} else {
+		error_info_cper->Operation = 0;
+	}
+	if (json_object_object_get_ex(error_information, "level", &obj)) {
+		error_info_cper->Level = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 2);
+	} else {
+		error_info_cper->Level = 0;
+	}
+	if (json_object_object_get_ex(error_information,
+				      "processorContextCorrupt", &obj)) {
+		error_info_cper->ProcessorContextCorrupt =
+			json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 3);
+	} else {
+		error_info_cper->ProcessorContextCorrupt = 0;
+	}
+	if (json_object_object_get_ex(error_information, "corrected", &obj)) {
+		error_info_cper->Corrected = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 4);
+	} else {
+		error_info_cper->Corrected = 0;
+	}
+	if (json_object_object_get_ex(error_information, "precisePC", &obj)) {
+		error_info_cper->PrecisePC = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 5);
+	} else {
+		error_info_cper->PrecisePC = 0;
+	}
+	if (json_object_object_get_ex(error_information, "restartablePC",
+				      &obj)) {
+		error_info_cper->RestartablePC = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 6);
+	} else {
+		error_info_cper->RestartablePC = 0;
+	}
+	if (json_object_object_get_ex(error_information, "participationType",
+				      &obj)) {
+		error_info_cper->ParticipationType =
+			readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 7);
+	} else {
+		error_info_cper->ParticipationType = 0;
+	}
+	if (json_object_object_get_ex(error_information, "timedOut", &obj)) {
+		error_info_cper->TimeOut = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 8);
+	} else {
+		error_info_cper->TimeOut = 0;
+	}
+	if (json_object_object_get_ex(error_information, "addressSpace",
+				      &obj)) {
+		error_info_cper->AddressSpace = readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 9);
+	} else {
+		error_info_cper->AddressSpace = 0;
+	}
+	if (json_object_object_get_ex(error_information, "accessMode", &obj)) {
+		error_info_cper->AccessMode = readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 11);
+	} else {
+		error_info_cper->AccessMode = 0;
+	}
+	if (json_object_object_get_ex(error_information, "memoryAttributes",
+				      &obj)) {
+		error_info_cper->MemoryAddressAttributes =
+			json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 10);
+	} else {
+		error_info_cper->MemoryAddressAttributes = 0;
+	}
 	error_info_cper->Reserved = 0;
+	error_info_cper->ValidationBits = ui64Type.value.ui64;
 }
 
 //Converts a single ARM context information structure into CPER binary, outputting to the given stream.
diff --git a/sections/cper-section-ccix-per.c b/sections/cper-section-ccix-per.c
index 9081fe2..6f85939 100644
--- a/sections/cper-section-ccix-per.c
+++ b/sections/cper-section-ccix-per.c
@@ -17,39 +17,46 @@
 {
 	EFI_CCIX_PER_LOG_DATA *ccix_error = (EFI_CCIX_PER_LOG_DATA *)section;
 	json_object *section_ir = json_object_new_object();
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = ccix_error->ValidBits };
 
 	//Length (bytes) for the entire structure.
 	json_object_object_add(section_ir, "length",
 			       json_object_new_uint64(ccix_error->Length));
 
-	//Validation bits.
-	json_object *validation = bitfield_to_ir(
-		ccix_error->ValidBits, 3, CCIX_PER_ERROR_VALID_BITFIELD_NAMES);
-	json_object_object_add(section_ir, "validationBits", validation);
-
 	//CCIX source/port IDs.
-	json_object_object_add(section_ir, "ccixSourceID",
-			       json_object_new_int(ccix_error->CcixSourceId));
-	json_object_object_add(section_ir, "ccixPortID",
-			       json_object_new_int(ccix_error->CcixPortId));
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object_object_add(
+			section_ir, "ccixSourceID",
+			json_object_new_int(ccix_error->CcixSourceId));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object_object_add(
+			section_ir, "ccixPortID",
+			json_object_new_int(ccix_error->CcixPortId));
+	}
 
 	//CCIX PER Log.
-	//This is formatted as described in Section 7.3.2 of CCIX Base Specification (Rev 1.0).
-	const char *cur_pos = (const char *)(ccix_error + 1);
-	int remaining_length =
-		ccix_error->Length - sizeof(EFI_CCIX_PER_LOG_DATA);
-	if (remaining_length > 0) {
-		int32_t encoded_len = 0;
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		//This is formatted as described in Section 7.3.2 of CCIX Base Specification (Rev 1.0).
+		const char *cur_pos = (const char *)(ccix_error + 1);
+		int remaining_length =
+			ccix_error->Length - sizeof(EFI_CCIX_PER_LOG_DATA);
+		if (remaining_length > 0) {
+			int32_t encoded_len = 0;
 
-		char *encoded = base64_encode((UINT8 *)cur_pos,
-					      remaining_length, &encoded_len);
-		if (encoded == NULL) {
-			printf("Failed to allocate encode output buffer. \n");
-		} else {
-			json_object_object_add(section_ir, "ccixPERLog",
-					       json_object_new_string_len(
-						       encoded, encoded_len));
-			free(encoded);
+			char *encoded = base64_encode((UINT8 *)cur_pos,
+						      remaining_length,
+						      &encoded_len);
+			if (encoded == NULL) {
+				printf("Failed to allocate encode output buffer. \n");
+			} else {
+				json_object_object_add(
+					section_ir, "ccixPERLog",
+					json_object_new_string_len(
+						encoded, encoded_len));
+				free(encoded);
+			}
 		}
 	}
 
@@ -62,6 +69,9 @@
 	EFI_CCIX_PER_LOG_DATA *section_cper = (EFI_CCIX_PER_LOG_DATA *)calloc(
 		1, sizeof(EFI_CCIX_PER_LOG_DATA));
 
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
+
 	//Length.
 	section_cper->Length = json_object_get_uint64(
 		json_object_object_get(section, "length"));
@@ -72,28 +82,41 @@
 		CCIX_PER_ERROR_VALID_BITFIELD_NAMES);
 
 	//CCIX source/port IDs.
-	section_cper->CcixSourceId = (UINT8)json_object_get_int(
-		json_object_object_get(section, "ccixSourceID"));
-	section_cper->CcixPortId = (UINT8)json_object_get_int(
-		json_object_object_get(section, "ccixPortID"));
+	if (json_object_object_get_ex(section, "ccixSourceID", &obj)) {
+		section_cper->CcixSourceId = (UINT8)json_object_get_int(obj);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
+	if (json_object_object_get_ex(section, "ccixPortID", &obj)) {
+		section_cper->CcixPortId = (UINT8)json_object_get_int(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
+
+	bool perlog_exists = false;
+	if (json_object_object_get_ex(section, "ccixPERLog", &obj)) {
+		perlog_exists = true;
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+	section_cper->ValidBits = ui64Type.value.ui64;
 
 	//Write header out to stream.
 	fwrite(section_cper, sizeof(EFI_CCIX_PER_LOG_DATA), 1, out);
 	fflush(out);
 
 	//Write CCIX PER log itself to stream.
-	json_object *encoded = json_object_object_get(section, "ccixPERLog");
-	int32_t decoded_len = 0;
+	if (perlog_exists) {
+		json_object *encoded = obj;
+		int32_t decoded_len = 0;
 
-	UINT8 *decoded = base64_decode(json_object_get_string(encoded),
-				       json_object_get_string_len(encoded),
-				       &decoded_len);
-	if (decoded == NULL) {
-		printf("Failed to allocate decode output buffer. \n");
-	} else {
-		fwrite(decoded, decoded_len, 1, out);
-		fflush(out);
-		free(decoded);
+		UINT8 *decoded = base64_decode(
+			json_object_get_string(encoded),
+			json_object_get_string_len(encoded), &decoded_len);
+		if (decoded == NULL) {
+			printf("Failed to allocate decode output buffer. \n");
+		} else {
+			fwrite(decoded, decoded_len, 1, out);
+			fflush(out);
+			free(decoded);
+		}
 	}
 	//Free resources.
 	free(section_cper);
diff --git a/sections/cper-section-cxl-component.c b/sections/cper-section-cxl-component.c
index a5c6846..f915b28 100644
--- a/sections/cper-section-cxl-component.c
+++ b/sections/cper-section-cxl-component.c
@@ -23,62 +23,68 @@
 			       json_object_new_uint64(cxl_error->Length));
 
 	//Validation bits.
-	json_object *validation =
-		bitfield_to_ir(cxl_error->ValidBits, 3,
-			       CXL_COMPONENT_ERROR_VALID_BITFIELD_NAMES);
-	json_object_object_add(section_ir, "validationBits", validation);
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = cxl_error->ValidBits };
 
 	//Device ID.
-	json_object *device_id = json_object_new_object();
-	json_object_object_add(
-		device_id, "vendorID",
-		json_object_new_int(cxl_error->DeviceId.VendorId));
-	json_object_object_add(
-		device_id, "deviceID",
-		json_object_new_int(cxl_error->DeviceId.DeviceId));
-	json_object_object_add(
-		device_id, "functionNumber",
-		json_object_new_int(cxl_error->DeviceId.FunctionNumber));
-	json_object_object_add(
-		device_id, "deviceNumber",
-		json_object_new_int(cxl_error->DeviceId.DeviceNumber));
-	json_object_object_add(
-		device_id, "busNumber",
-		json_object_new_int(cxl_error->DeviceId.BusNumber));
-	json_object_object_add(
-		device_id, "segmentNumber",
-		json_object_new_int(cxl_error->DeviceId.SegmentNumber));
-	json_object_object_add(
-		device_id, "slotNumber",
-		json_object_new_int(cxl_error->DeviceId.SlotNumber));
-	json_object_object_add(section_ir, "deviceID", device_id);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *device_id = json_object_new_object();
+		json_object_object_add(
+			device_id, "vendorID",
+			json_object_new_int(cxl_error->DeviceId.VendorId));
+		json_object_object_add(
+			device_id, "deviceID",
+			json_object_new_int(cxl_error->DeviceId.DeviceId));
+		json_object_object_add(
+			device_id, "functionNumber",
+			json_object_new_int(
+				cxl_error->DeviceId.FunctionNumber));
+		json_object_object_add(
+			device_id, "deviceNumber",
+			json_object_new_int(cxl_error->DeviceId.DeviceNumber));
+		json_object_object_add(
+			device_id, "busNumber",
+			json_object_new_int(cxl_error->DeviceId.BusNumber));
+		json_object_object_add(
+			device_id, "segmentNumber",
+			json_object_new_int(cxl_error->DeviceId.SegmentNumber));
+		json_object_object_add(
+			device_id, "slotNumber",
+			json_object_new_int(cxl_error->DeviceId.SlotNumber));
+		json_object_object_add(section_ir, "deviceID", device_id);
+	}
 
 	//Device serial.
-	json_object_object_add(section_ir, "deviceSerial",
-			       json_object_new_uint64(cxl_error->DeviceSerial));
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object_object_add(
+			section_ir, "deviceSerial",
+			json_object_new_uint64(cxl_error->DeviceSerial));
+	}
 
 	//The specification for this is defined within the CXL Specification Section 8.2.9.1.
-	const char *cur_pos = (const char *)(cxl_error + 1);
-	int remaining_len =
-		cxl_error->Length - sizeof(EFI_CXL_COMPONENT_EVENT_HEADER);
-	if (remaining_len > 0) {
-		json_object *event_log = json_object_new_object();
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		const char *cur_pos = (const char *)(cxl_error + 1);
+		int remaining_len = cxl_error->Length -
+				    sizeof(EFI_CXL_COMPONENT_EVENT_HEADER);
+		if (remaining_len > 0) {
+			json_object *event_log = json_object_new_object();
 
-		int32_t encoded_len = 0;
+			int32_t encoded_len = 0;
 
-		char *encoded = base64_encode((UINT8 *)cur_pos, remaining_len,
-					      &encoded_len);
-		if (encoded == NULL) {
-			printf("Failed to allocate encode output buffer. \n");
-			return NULL;
+			char *encoded = base64_encode(
+				(UINT8 *)cur_pos, remaining_len, &encoded_len);
+			if (encoded == NULL) {
+				printf("Failed to allocate encode output buffer. \n");
+				return NULL;
+			}
+			json_object_object_add(event_log, "data",
+					       json_object_new_string_len(
+						       encoded, encoded_len));
+
+			free(encoded);
+			json_object_object_add(
+				section_ir, "cxlComponentEventLog", event_log);
 		}
-		json_object_object_add(event_log, "data",
-				       json_object_new_string_len(encoded,
-								  encoded_len));
-
-		free(encoded);
-		json_object_object_add(section_ir, "cxlComponentEventLog",
-				       event_log);
 	}
 
 	return section_ir;
@@ -97,52 +103,64 @@
 		json_object_object_get(section, "length"));
 
 	//Validation bits.
-	section_cper->ValidBits = ir_to_bitfield(
-		json_object_object_get(section, "validationBits"), 3,
-		CXL_COMPONENT_ERROR_VALID_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 
 	//Device ID information.
-	json_object *device_id = json_object_object_get(section, "deviceID");
-	section_cper->DeviceId.VendorId = json_object_get_uint64(
-		json_object_object_get(device_id, "vendorID"));
-	section_cper->DeviceId.DeviceId = json_object_get_uint64(
-		json_object_object_get(device_id, "deviceID"));
-	section_cper->DeviceId.FunctionNumber = json_object_get_uint64(
-		json_object_object_get(device_id, "functionNumber"));
-	section_cper->DeviceId.DeviceNumber = json_object_get_uint64(
-		json_object_object_get(device_id, "deviceNumber"));
-	section_cper->DeviceId.BusNumber = json_object_get_uint64(
-		json_object_object_get(device_id, "busNumber"));
-	section_cper->DeviceId.SegmentNumber = json_object_get_uint64(
-		json_object_object_get(device_id, "segmentNumber"));
-	section_cper->DeviceId.SlotNumber = json_object_get_uint64(
-		json_object_object_get(device_id, "slotNumber"));
+	if (json_object_object_get_ex(section, "deviceID", &obj)) {
+		json_object *device_id = obj;
+		section_cper->DeviceId.VendorId = json_object_get_uint64(
+			json_object_object_get(device_id, "vendorID"));
+		section_cper->DeviceId.DeviceId = json_object_get_uint64(
+			json_object_object_get(device_id, "deviceID"));
+		section_cper->DeviceId.FunctionNumber = json_object_get_uint64(
+			json_object_object_get(device_id, "functionNumber"));
+		section_cper->DeviceId.DeviceNumber = json_object_get_uint64(
+			json_object_object_get(device_id, "deviceNumber"));
+		section_cper->DeviceId.BusNumber = json_object_get_uint64(
+			json_object_object_get(device_id, "busNumber"));
+		section_cper->DeviceId.SegmentNumber = json_object_get_uint64(
+			json_object_object_get(device_id, "segmentNumber"));
+		section_cper->DeviceId.SlotNumber = json_object_get_uint64(
+			json_object_object_get(device_id, "slotNumber"));
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
 
 	//Device serial number.
-	section_cper->DeviceSerial = json_object_get_uint64(
-		json_object_object_get(section, "deviceSerial"));
+	if (json_object_object_get_ex(section, "deviceSerial", &obj)) {
+		section_cper->DeviceSerial = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
+
+	//CXL component event log, decoded from base64.
+	json_object *event_log = NULL;
+	if (json_object_object_get_ex(section, "cxlComponentEventLog", &obj)) {
+		event_log = obj;
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+	section_cper->ValidBits = ui64Type.value.ui64;
 
 	//Write header out to stream.
 	fwrite(section_cper, sizeof(EFI_CXL_COMPONENT_EVENT_HEADER), 1, out);
 	fflush(out);
 
-	//CXL component event log, decoded from base64.
-	json_object *event_log =
-		json_object_object_get(section, "cxlComponentEventLog");
-	json_object *encoded = json_object_object_get(event_log, "data");
+	if (event_log != NULL) {
+		json_object *encoded =
+			json_object_object_get(event_log, "data");
 
-	int32_t decoded_len = 0;
+		int32_t decoded_len = 0;
 
-	UINT8 *decoded = base64_decode(json_object_get_string(encoded),
-				       json_object_get_string_len(encoded),
-				       &decoded_len);
+		UINT8 *decoded = base64_decode(
+			json_object_get_string(encoded),
+			json_object_get_string_len(encoded), &decoded_len);
 
-	if (decoded == NULL) {
-		printf("Failed to allocate decode output buffer. \n");
-	} else {
-		fwrite(decoded, decoded_len, 1, out);
-		fflush(out);
-		free(decoded);
+		if (decoded == NULL) {
+			printf("Failed to allocate decode output buffer. \n");
+		} else {
+			fwrite(decoded, decoded_len, 1, out);
+			fflush(out);
+			free(decoded);
+		}
 	}
 
 	free(section_cper);
diff --git a/sections/cper-section-cxl-protocol.c b/sections/cper-section-cxl-protocol.c
index 141f26b..151943f 100644
--- a/sections/cper-section-cxl-protocol.c
+++ b/sections/cper-section-cxl-protocol.c
@@ -17,19 +17,19 @@
 	EFI_CXL_PROTOCOL_ERROR_DATA *cxl_protocol_error =
 		(EFI_CXL_PROTOCOL_ERROR_DATA *)section;
 	json_object *section_ir = json_object_new_object();
-
-	//Validation bits.
-	json_object *validation =
-		bitfield_to_ir(cxl_protocol_error->ValidBits, 7,
-			       CXL_PROTOCOL_ERROR_VALID_BITFIELD_NAMES);
-	json_object_object_add(section_ir, "validationBits", validation);
+	ValidationTypes ui64Type = {
+		UINT_64T, .value.ui64 = cxl_protocol_error->ValidBits
+	};
 
 	//Type of detecting agent.
-	json_object *agent_type = integer_to_readable_pair(
-		cxl_protocol_error->CxlAgentType, 2,
-		CXL_PROTOCOL_ERROR_AGENT_TYPES_KEYS,
-		CXL_PROTOCOL_ERROR_AGENT_TYPES_VALUES, "Unknown (Reserved)");
-	json_object_object_add(section_ir, "agentType", agent_type);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *agent_type = integer_to_readable_pair(
+			cxl_protocol_error->CxlAgentType, 2,
+			CXL_PROTOCOL_ERROR_AGENT_TYPES_KEYS,
+			CXL_PROTOCOL_ERROR_AGENT_TYPES_VALUES,
+			"Unknown (Reserved)");
+		json_object_object_add(section_ir, "agentType", agent_type);
+	}
 
 	//CXL agent address, depending on the agent type.
 	json_object *agent_address = json_object_new_object();
@@ -65,48 +65,62 @@
 				cxl_protocol_error->CxlAgentAddress
 					.PortRcrbBaseAddress));
 	}
-	json_object_object_add(section_ir, "cxlAgentAddress", agent_address);
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object_object_add(section_ir, "cxlAgentAddress",
+				       agent_address);
+	} else {
+		json_object_put(agent_address);
+	}
 
-	//Device ID.
 	json_object *device_id = json_object_new_object();
 	json_object_object_add(
 		device_id, "vendorID",
 		json_object_new_uint64(cxl_protocol_error->DeviceId.VendorId));
-	json_object_object_add(
-		device_id, "deviceID",
-		json_object_new_uint64(cxl_protocol_error->DeviceId.DeviceId));
-	json_object_object_add(
-		device_id, "subsystemVendorID",
-		json_object_new_uint64(
-			cxl_protocol_error->DeviceId.SubsystemVendorId));
-	json_object_object_add(
-		device_id, "subsystemDeviceID",
-		json_object_new_uint64(
-			cxl_protocol_error->DeviceId.SubsystemDeviceId));
-	json_object_object_add(
-		device_id, "classCode",
-		json_object_new_uint64(cxl_protocol_error->DeviceId.ClassCode));
-	json_object_object_add(
-		device_id, "slotNumber",
-		json_object_new_uint64(
-			cxl_protocol_error->DeviceId.SlotNumber));
-	json_object_object_add(section_ir, "deviceID", device_id);
+
+	//Device ID.
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		json_object_object_add(
+			device_id, "deviceID",
+			json_object_new_uint64(
+				cxl_protocol_error->DeviceId.DeviceId));
+		json_object_object_add(
+			device_id, "subsystemVendorID",
+			json_object_new_uint64(
+				cxl_protocol_error->DeviceId.SubsystemVendorId));
+		json_object_object_add(
+			device_id, "subsystemDeviceID",
+			json_object_new_uint64(
+				cxl_protocol_error->DeviceId.SubsystemDeviceId));
+		json_object_object_add(
+			device_id, "classCode",
+			json_object_new_uint64(
+				cxl_protocol_error->DeviceId.ClassCode));
+		json_object_object_add(
+			device_id, "slotNumber",
+			json_object_new_uint64(
+				cxl_protocol_error->DeviceId.SlotNumber));
+		json_object_object_add(section_ir, "deviceID", device_id);
+	}
 
 	char *encoded;
-	//Device serial & capability structure (if CXL 1.1 device).
-	if (cxl_protocol_error->CxlAgentType ==
-	    CXL_PROTOCOL_ERROR_DEVICE_AGENT) {
-		json_object_object_add(
-			section_ir, "deviceSerial",
-			json_object_new_uint64(
-				cxl_protocol_error->DeviceSerial));
 
-		//The PCIe capability structure provided here could either be PCIe 1.1 Capability Structure
-		//(36-byte, padded to 60 bytes) or PCIe 2.0 Capability Structure (60-byte). There does not seem
-		//to be a way to differentiate these, so this is left as a b64 dump.
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		//Device serial & capability structure (if CXL 1.1 device).
+		if (cxl_protocol_error->CxlAgentType ==
+		    CXL_PROTOCOL_ERROR_DEVICE_AGENT) {
+			json_object_object_add(
+				section_ir, "deviceSerial",
+				json_object_new_uint64(
+					cxl_protocol_error->DeviceSerial));
+		}
+	}
 
-		int32_t encoded_len = 0;
+	int32_t encoded_len = 0;
 
+	//The PCIe capability structure provided here could either be PCIe 1.1 Capability Structure
+	//(36-byte, padded to 60 bytes) or PCIe 2.0 Capability Structure (60-byte). There does not seem
+	//to be a way to differentiate these, so this is left as a b64 dump.
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
 		encoded = base64_encode(
 			(UINT8 *)cxl_protocol_error->CapabilityStructure.PcieCap,
 			60, &encoded_len);
@@ -120,50 +134,57 @@
 		free(encoded);
 	}
 
-	//CXL DVSEC & error log length.
-	json_object_object_add(
-		section_ir, "dvsecLength",
-		json_object_new_int(cxl_protocol_error->CxlDvsecLength));
-	json_object_object_add(
-		section_ir, "errorLogLength",
-		json_object_new_int(cxl_protocol_error->CxlErrorLogLength));
-
-	//CXL DVSEC
-	//For CXL 1.1 devices, this is the "CXL DVSEC For Flex Bus Device" structure as in CXL 1.1 spec.
-	//For CXL 1.1 host downstream ports, this is the "CXL DVSEC For Flex Bus Port" structure as in CXL 1.1 spec.
 	const char *cur_pos = (const char *)(cxl_protocol_error + 1);
-	int32_t encoded_len = 0;
 
-	encoded = base64_encode((UINT8 *)cur_pos,
-				cxl_protocol_error->CxlDvsecLength,
-				&encoded_len);
-	if (encoded == NULL) {
-		return NULL;
+	if (isvalid_prop_to_ir(&ui64Type, 5)) {
+		//CXL DVSEC & error log length.
+		json_object_object_add(
+			section_ir, "dvsecLength",
+			json_object_new_int(
+				cxl_protocol_error->CxlDvsecLength));
+		//CXL DVSEC
+		//For CXL 1.1 devices, this is the "CXL DVSEC For Flex Bus Device" structure as in CXL 1.1 spec.
+		//For CXL 1.1 host downstream ports, this is the "CXL DVSEC For Flex Bus Port" structure as in CXL 1.1 spec.
+		int32_t encoded_len = 0;
+
+		encoded = base64_encode((UINT8 *)cur_pos,
+					cxl_protocol_error->CxlDvsecLength,
+					&encoded_len);
+		if (encoded == NULL) {
+			return NULL;
+		}
+		json_object_object_add(section_ir, "cxlDVSEC",
+				       json_object_new_string_len(encoded,
+								  encoded_len));
+
+		free(encoded);
 	}
-	json_object_object_add(section_ir, "cxlDVSEC",
-			       json_object_new_string_len(encoded,
-							  encoded_len));
-
-	free(encoded);
 
 	cur_pos += cxl_protocol_error->CxlDvsecLength;
 
-	//CXL Error Log
-	//This is the "CXL RAS Capability Structure" as in CXL 1.1 spec.
+	if (isvalid_prop_to_ir(&ui64Type, 6)) {
+		json_object_object_add(
+			section_ir, "errorLogLength",
+			json_object_new_int(
+				cxl_protocol_error->CxlErrorLogLength));
 
-	encoded_len = 0;
-	encoded = base64_encode((UINT8 *)cur_pos,
-				cxl_protocol_error->CxlErrorLogLength,
-				&encoded_len);
+		//CXL Error Log
+		//This is the "CXL RAS Capability Structure" as in CXL 1.1 spec.
 
-	if (encoded == NULL) {
-		printf("Failed to allocate encode output buffer. \n");
-		return NULL;
+		encoded_len = 0;
+		encoded = base64_encode((UINT8 *)cur_pos,
+					cxl_protocol_error->CxlErrorLogLength,
+					&encoded_len);
+
+		if (encoded == NULL) {
+			printf("Failed to allocate encode output buffer. \n");
+			return NULL;
+		}
+		json_object_object_add(section_ir, "cxlErrorLog",
+				       json_object_new_string_len(encoded,
+								  encoded_len));
+		free(encoded);
 	}
-	json_object_object_add(section_ir, "cxlErrorLog",
-			       json_object_new_string_len(encoded,
-							  encoded_len));
-	free(encoded);
 
 	return section_ir;
 }
@@ -174,80 +195,99 @@
 	EFI_CXL_PROTOCOL_ERROR_DATA *section_cper =
 		(EFI_CXL_PROTOCOL_ERROR_DATA *)calloc(
 			1, sizeof(EFI_CXL_PROTOCOL_ERROR_DATA));
+	struct json_object *obj = NULL;
 
 	//Validation bits.
-	section_cper->ValidBits = ir_to_bitfield(
-		json_object_object_get(section, "validationBits"), 7,
-		CXL_PROTOCOL_ERROR_VALID_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
 
 	//Detecting agent type.
-	section_cper->CxlAgentType = readable_pair_to_integer(
-		json_object_object_get(section, "agentType"));
+	if (json_object_object_get_ex(section, "agentType", &obj)) {
+		section_cper->CxlAgentType = readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
 
 	//Based on the agent type, set the address.
-	json_object *address =
-		json_object_object_get(section, "cxlAgentAddress");
-	if (section_cper->CxlAgentType == CXL_PROTOCOL_ERROR_DEVICE_AGENT) {
-		//Address is split by function, device, bus & segment.
-		UINT64 function = json_object_get_uint64(
-			json_object_object_get(address, "functionNumber"));
-		UINT64 device = json_object_get_uint64(
-			json_object_object_get(address, "deviceNumber"));
-		UINT64 bus = json_object_get_uint64(
-			json_object_object_get(address, "busNumber"));
-		UINT64 segment = json_object_get_uint64(
-			json_object_object_get(address, "segmentNumber"));
-		section_cper->CxlAgentAddress.DeviceAddress.FunctionNumber =
-			function;
-		section_cper->CxlAgentAddress.DeviceAddress.DeviceNumber =
-			device;
-		section_cper->CxlAgentAddress.DeviceAddress.BusNumber = bus;
-		section_cper->CxlAgentAddress.DeviceAddress.SegmentNumber =
-			segment;
-	} else if (section_cper->CxlAgentType ==
-		   CXL_PROTOCOL_ERROR_HOST_DOWNSTREAM_PORT_AGENT) {
-		//Plain RCRB base address.
-		section_cper->CxlAgentAddress.PortRcrbBaseAddress =
-			json_object_get_uint64(
-				json_object_object_get(address, "value"));
+	if (json_object_object_get_ex(section, "cxlAgentAddress", &obj)) {
+		json_object *address = obj;
+		if (section_cper->CxlAgentType ==
+		    CXL_PROTOCOL_ERROR_DEVICE_AGENT) {
+			//Address is split by function, device, bus & segment.
+			UINT64 function = json_object_get_uint64(
+				json_object_object_get(address,
+						       "functionNumber"));
+			UINT64 device = json_object_get_uint64(
+				json_object_object_get(address,
+						       "deviceNumber"));
+			UINT64 bus = json_object_get_uint64(
+				json_object_object_get(address, "busNumber"));
+			UINT64 segment = json_object_get_uint64(
+				json_object_object_get(address,
+						       "segmentNumber"));
+			section_cper->CxlAgentAddress.DeviceAddress
+				.FunctionNumber = function;
+			section_cper->CxlAgentAddress.DeviceAddress
+				.DeviceNumber = device;
+			section_cper->CxlAgentAddress.DeviceAddress.BusNumber =
+				bus;
+			section_cper->CxlAgentAddress.DeviceAddress
+				.SegmentNumber = segment;
+		} else if (section_cper->CxlAgentType ==
+			   CXL_PROTOCOL_ERROR_HOST_DOWNSTREAM_PORT_AGENT) {
+			//Plain RCRB base address.
+			section_cper->CxlAgentAddress.PortRcrbBaseAddress =
+				json_object_get_uint64(json_object_object_get(
+					address, "value"));
+		}
+		add_to_valid_bitfield(&ui64Type, 1);
 	}
 
 	//Device ID information.
-	json_object *device_id = json_object_object_get(section, "deviceID");
-	section_cper->DeviceId.VendorId = json_object_get_uint64(
-		json_object_object_get(device_id, "vendorID"));
-	section_cper->DeviceId.DeviceId = json_object_get_uint64(
-		json_object_object_get(device_id, "deviceID"));
-	section_cper->DeviceId.SubsystemVendorId = json_object_get_uint64(
-		json_object_object_get(device_id, "subsystemVendorID"));
-	section_cper->DeviceId.SubsystemDeviceId = json_object_get_uint64(
-		json_object_object_get(device_id, "subsystemDeviceID"));
-	section_cper->DeviceId.ClassCode = json_object_get_uint64(
-		json_object_object_get(device_id, "classCode"));
-	section_cper->DeviceId.SlotNumber = json_object_get_uint64(
-		json_object_object_get(device_id, "slotNumber"));
+	if (json_object_object_get_ex(section, "deviceID", &obj)) {
+		json_object *device_id = obj;
+		section_cper->DeviceId.VendorId = json_object_get_uint64(
+			json_object_object_get(device_id, "vendorID"));
+		section_cper->DeviceId.DeviceId = json_object_get_uint64(
+			json_object_object_get(device_id, "deviceID"));
+		section_cper->DeviceId.SubsystemVendorId =
+			json_object_get_uint64(json_object_object_get(
+				device_id, "subsystemVendorID"));
+		section_cper->DeviceId.SubsystemDeviceId =
+			json_object_get_uint64(json_object_object_get(
+				device_id, "subsystemDeviceID"));
+		section_cper->DeviceId.ClassCode = json_object_get_uint64(
+			json_object_object_get(device_id, "classCode"));
+		section_cper->DeviceId.SlotNumber = json_object_get_uint64(
+			json_object_object_get(device_id, "slotNumber"));
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
 
 	//If CXL 1.1 device, the serial number & PCI capability structure.
 	UINT8 *decoded;
 	if (section_cper->CxlAgentType == CXL_PROTOCOL_ERROR_DEVICE_AGENT) {
-		section_cper->DeviceSerial = json_object_get_uint64(
-			json_object_object_get(section, "deviceSerial"));
+		if (json_object_object_get_ex(section, "deviceSerial", &obj)) {
+			section_cper->DeviceSerial =
+				json_object_get_uint64(obj);
+			add_to_valid_bitfield(&ui64Type, 3);
+		}
+		if (json_object_object_get_ex(section, "capabilityStructure",
+					      &obj)) {
+			json_object *encoded = obj;
 
-		json_object *encoded =
-			json_object_object_get(section, "capabilityStructure");
+			int32_t decoded_len = 0;
 
-		int32_t decoded_len = 0;
+			decoded = base64_decode(
+				json_object_get_string(encoded),
+				json_object_get_string_len(encoded),
+				&decoded_len);
 
-		decoded = base64_decode(json_object_get_string(encoded),
-					json_object_get_string_len(encoded),
-					&decoded_len);
-
-		if (decoded == NULL) {
-			printf("Failed to allocate decode output buffer. \n");
-		} else {
-			memcpy(section_cper->CapabilityStructure.PcieCap,
-			       decoded, decoded_len);
-			free(decoded);
+			if (decoded == NULL) {
+				printf("Failed to allocate decode output buffer. \n");
+			} else {
+				memcpy(section_cper->CapabilityStructure.PcieCap,
+				       decoded, decoded_len);
+				free(decoded);
+				add_to_valid_bitfield(&ui64Type, 4);
+			}
 		}
 	}
 
@@ -257,39 +297,54 @@
 	section_cper->CxlErrorLogLength = (UINT16)json_object_get_int(
 		json_object_object_get(section, "errorLogLength"));
 
+	json_object *encodedsrc = NULL;
+	json_object *encodederr = NULL;
+
+	//DVSEC out: write valid bits
+	if (json_object_object_get_ex(section, "cxlDVSEC", &obj)) {
+		add_to_valid_bitfield(&ui64Type, 5);
+		encodedsrc = obj;
+	}
+
+	//Error log: write valid bits
+	if (json_object_object_get_ex(section, "cxlErrorLog", &obj)) {
+		add_to_valid_bitfield(&ui64Type, 6);
+		encodederr = obj;
+	}
+	section_cper->ValidBits = ui64Type.value.ui64;
+
 	//Write header to stream.
 	fwrite(section_cper, sizeof(EFI_CXL_PROTOCOL_ERROR_DATA), 1, out);
 	fflush(out);
 
 	//DVSEC out to stream.
-	json_object *encoded = json_object_object_get(section, "cxlDVSEC");
-
 	int32_t decoded_len = 0;
-
-	decoded = base64_decode(json_object_get_string(encoded),
-				json_object_get_string_len(encoded),
-				&decoded_len);
-	if (decoded == NULL) {
-		printf("Failed to allocate decode output buffer. \n");
-	} else {
-		fwrite(decoded, decoded_len, 1, out);
-		fflush(out);
-		free(decoded);
+	if (encodedsrc != NULL) {
+		decoded = base64_decode(json_object_get_string(encodedsrc),
+					json_object_get_string_len(encodedsrc),
+					&decoded_len);
+		if (decoded == NULL) {
+			printf("Failed to allocate decode output buffer. \n");
+		} else {
+			fwrite(decoded, decoded_len, 1, out);
+			fflush(out);
+			free(decoded);
+		}
 	}
 
 	//Error log out to stream.
-	encoded = json_object_object_get(section, "cxlErrorLog");
 	decoded_len = 0;
-
-	decoded = base64_decode(json_object_get_string(encoded),
-				json_object_get_string_len(encoded),
-				&decoded_len);
-	if (decoded == NULL) {
-		printf("Failed to allocate decode output buffer. \n");
-	} else {
-		fwrite(decoded, decoded_len, 1, out);
-		fflush(out);
-		free(decoded);
+	if (encodederr != NULL) {
+		decoded = base64_decode(json_object_get_string(encodederr),
+					json_object_get_string_len(encodederr),
+					&decoded_len);
+		if (decoded == NULL) {
+			printf("Failed to allocate decode output buffer. \n");
+		} else {
+			fwrite(decoded, decoded_len, 1, out);
+			fflush(out);
+			free(decoded);
+		}
 	}
 
 	free(section_cper);
diff --git a/sections/cper-section-generic.c b/sections/cper-section-generic.c
index ebbd628..36a5d89 100644
--- a/sections/cper-section-generic.c
+++ b/sections/cper-section-generic.c
@@ -19,78 +19,112 @@
 		(EFI_PROCESSOR_GENERIC_ERROR_DATA *)section;
 	json_object *section_ir = json_object_new_object();
 
-	//Validation bits.
-	json_object *validation =
-		bitfield_to_ir(section_generic->ValidFields, 13,
-			       GENERIC_VALIDATION_BITFIELD_NAMES);
-	json_object_object_add(section_ir, "validationBits", validation);
+	ValidationTypes ui64Type = {
+		UINT_64T, .value.ui64 = section_generic->ValidFields
+	};
 
-	//Processor type, with human readable name if possible.
-	json_object *processor_type = integer_to_readable_pair(
-		section_generic->Type,
-		sizeof(GENERIC_PROC_TYPES_KEYS) / sizeof(int),
-		GENERIC_PROC_TYPES_KEYS, GENERIC_PROC_TYPES_VALUES,
-		"Unknown (Reserved)");
-	json_object_object_add(section_ir, "processorType", processor_type);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		//Processor type, with human readable name if possible.
+		json_object *processor_type = integer_to_readable_pair(
+			section_generic->Type,
+			sizeof(GENERIC_PROC_TYPES_KEYS) / sizeof(int),
+			GENERIC_PROC_TYPES_KEYS, GENERIC_PROC_TYPES_VALUES,
+			"Unknown (Reserved)");
+		json_object_object_add(section_ir, "processorType",
+				       processor_type);
+	}
 
-	//Processor ISA, with human readable name if possible.
-	json_object *processor_isa = integer_to_readable_pair(
-		section_generic->Isa,
-		sizeof(GENERIC_ISA_TYPES_KEYS) / sizeof(int),
-		GENERIC_ISA_TYPES_KEYS, GENERIC_ISA_TYPES_VALUES,
-		"Unknown (Reserved)");
-	json_object_object_add(section_ir, "processorISA", processor_isa);
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		//Processor ISA, with human readable name if possible.
+		json_object *processor_isa = integer_to_readable_pair(
+			section_generic->Isa,
+			sizeof(GENERIC_ISA_TYPES_KEYS) / sizeof(int),
+			GENERIC_ISA_TYPES_KEYS, GENERIC_ISA_TYPES_VALUES,
+			"Unknown (Reserved)");
+		json_object_object_add(section_ir, "processorISA",
+				       processor_isa);
+	}
 
-	//Processor error type, with human readable name if possible.
-	json_object *processor_error_type = integer_to_readable_pair(
-		section_generic->ErrorType,
-		sizeof(GENERIC_ERROR_TYPES_KEYS) / sizeof(int),
-		GENERIC_ERROR_TYPES_KEYS, GENERIC_ERROR_TYPES_VALUES,
-		"Unknown (Reserved)");
-	json_object_object_add(section_ir, "errorType", processor_error_type);
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		//Processor error type, with human readable name if possible.
+		json_object *processor_error_type = integer_to_readable_pair(
+			section_generic->ErrorType,
+			sizeof(GENERIC_ERROR_TYPES_KEYS) / sizeof(int),
+			GENERIC_ERROR_TYPES_KEYS, GENERIC_ERROR_TYPES_VALUES,
+			"Unknown (Reserved)");
+		json_object_object_add(section_ir, "errorType",
+				       processor_error_type);
+	}
 
-	//The operation performed, with a human readable name if possible.
-	json_object *operation = integer_to_readable_pair(
-		section_generic->Operation,
-		sizeof(GENERIC_OPERATION_TYPES_KEYS) / sizeof(int),
-		GENERIC_OPERATION_TYPES_KEYS, GENERIC_OPERATION_TYPES_VALUES,
-		"Unknown (Reserved)");
-	json_object_object_add(section_ir, "operation", operation);
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		//The operation performed, with a human readable name if possible.
+		json_object *operation = integer_to_readable_pair(
+			section_generic->Operation,
+			sizeof(GENERIC_OPERATION_TYPES_KEYS) / sizeof(int),
+			GENERIC_OPERATION_TYPES_KEYS,
+			GENERIC_OPERATION_TYPES_VALUES, "Unknown (Reserved)");
+		json_object_object_add(section_ir, "operation", operation);
+	}
 
-	//Flags, additional information about the error.
-	json_object *flags = bitfield_to_ir(section_generic->Flags, 4,
-					    GENERIC_FLAGS_BITFIELD_NAMES);
-	json_object_object_add(section_ir, "flags", flags);
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		//Flags, additional information about the error.
+		json_object *flags =
+			bitfield_to_ir(section_generic->Flags, 4,
+				       GENERIC_FLAGS_BITFIELD_NAMES);
+		json_object_object_add(section_ir, "flags", flags);
+	}
 
-	//The level of the error.
-	json_object_object_add(section_ir, "level",
-			       json_object_new_int(section_generic->Level));
+	if (isvalid_prop_to_ir(&ui64Type, 5)) {
+		//The level of the error.
+		json_object_object_add(
+			section_ir, "level",
+			json_object_new_int(section_generic->Level));
+	}
 
-	//CPU version information.
-	json_object_object_add(
-		section_ir, "cpuVersionInfo",
-		json_object_new_uint64(section_generic->VersionInfo));
+	if (isvalid_prop_to_ir(&ui64Type, 6)) {
+		//CPU version information.
+		json_object_object_add(
+			section_ir, "cpuVersionInfo",
+			json_object_new_uint64(section_generic->VersionInfo));
+	}
 
-	//CPU brand string. May not exist if on ARM.
-	json_object_object_add(
-		section_ir, "cpuBrandString",
-		json_object_new_string(section_generic->BrandString));
+	if (isvalid_prop_to_ir(&ui64Type, 7)) {
+		//CPU brand string. May not exist if on ARM.
+		json_object_object_add(
+			section_ir, "cpuBrandString",
+			json_object_new_string(section_generic->BrandString));
+	}
 
-	//Remaining 64-bit fields.
-	json_object_object_add(section_ir, "processorID",
-			       json_object_new_uint64(section_generic->ApicId));
-	json_object_object_add(
-		section_ir, "targetAddress",
-		json_object_new_uint64(section_generic->TargetAddr));
-	json_object_object_add(
-		section_ir, "requestorID",
-		json_object_new_uint64(section_generic->RequestorId));
-	json_object_object_add(
-		section_ir, "responderID",
-		json_object_new_uint64(section_generic->ResponderId));
-	json_object_object_add(
-		section_ir, "instructionIP",
-		json_object_new_uint64(section_generic->InstructionIP));
+	if (isvalid_prop_to_ir(&ui64Type, 8)) {
+		//Remaining 64-bit fields.
+		json_object_object_add(
+			section_ir, "processorID",
+			json_object_new_uint64(section_generic->ApicId));
+	}
+
+	if (isvalid_prop_to_ir(&ui64Type, 9)) {
+		json_object_object_add(
+			section_ir, "targetAddress",
+			json_object_new_uint64(section_generic->TargetAddr));
+	}
+
+	if (isvalid_prop_to_ir(&ui64Type, 10)) {
+		json_object_object_add(
+			section_ir, "requestorID",
+			json_object_new_uint64(section_generic->RequestorId));
+	}
+
+	if (isvalid_prop_to_ir(&ui64Type, 11)) {
+		json_object_object_add(
+			section_ir, "responderID",
+			json_object_new_uint64(section_generic->ResponderId));
+	}
+
+	if (isvalid_prop_to_ir(&ui64Type, 12)) {
+		json_object_object_add(
+			section_ir, "instructionIP",
+			json_object_new_uint64(section_generic->InstructionIP));
+	}
 
 	return section_ir;
 }
@@ -104,51 +138,79 @@
 			1, sizeof(EFI_PROCESSOR_GENERIC_ERROR_DATA));
 
 	//Validation bits.
-	section_cper->ValidFields = ir_to_bitfield(
-		json_object_object_get(section, "validationBits"), 13,
-		GENERIC_VALIDATION_BITFIELD_NAMES);
-
+	//Remove
+	// section_cper->ValidFields = ir_to_bitfield(
+	// 	json_object_object_get(section, "validationBits"), 13,
+	// 	GENERIC_VALIDATION_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 	//Various name/value pair fields.
-	section_cper->Type = (UINT8)readable_pair_to_integer(
-		json_object_object_get(section, "processorType"));
-	section_cper->Isa = (UINT8)readable_pair_to_integer(
-		json_object_object_get(section, "processorISA"));
-	section_cper->ErrorType = (UINT8)readable_pair_to_integer(
-		json_object_object_get(section, "errorType"));
-	section_cper->Operation = (UINT8)readable_pair_to_integer(
-		json_object_object_get(section, "operation"));
-
+	if (json_object_object_get_ex(section, "processorType", &obj)) {
+		section_cper->Type = (UINT8)readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
+	if (json_object_object_get_ex(section, "processorISA", &obj)) {
+		section_cper->Isa = (UINT8)readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
+	if (json_object_object_get_ex(section, "errorType", &obj)) {
+		section_cper->ErrorType = (UINT8)readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+	if (json_object_object_get_ex(section, "operation", &obj)) {
+		section_cper->Operation = (UINT8)readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 3);
+	}
 	//Flags.
-	section_cper->Flags =
-		(UINT8)ir_to_bitfield(json_object_object_get(section, "flags"),
-				      4, GENERIC_FLAGS_BITFIELD_NAMES);
+	if (json_object_object_get_ex(section, "flags", &obj)) {
+		section_cper->Flags = (UINT8)ir_to_bitfield(
+			obj, 4, GENERIC_FLAGS_BITFIELD_NAMES);
+		add_to_valid_bitfield(&ui64Type, 4);
+	}
 
 	//Various numeric/string fields.
-	section_cper->Level = (UINT8)json_object_get_int(
-		json_object_object_get(section, "level"));
-	section_cper->VersionInfo = json_object_get_uint64(
-		json_object_object_get(section, "cpuVersionInfo"));
-	section_cper->ApicId = json_object_get_uint64(
-		json_object_object_get(section, "processorID"));
-	section_cper->TargetAddr = json_object_get_uint64(
-		json_object_object_get(section, "targetAddress"));
-	section_cper->RequestorId = json_object_get_uint64(
-		json_object_object_get(section, "requestorID"));
-	section_cper->ResponderId = json_object_get_uint64(
-		json_object_object_get(section, "responderID"));
-	section_cper->InstructionIP = json_object_get_uint64(
-		json_object_object_get(section, "instructionIP"));
+	if (json_object_object_get_ex(section, "level", &obj)) {
+		section_cper->Level = (UINT8)json_object_get_int(obj);
+		add_to_valid_bitfield(&ui64Type, 5);
+	}
+	if (json_object_object_get_ex(section, "cpuVersionInfo", &obj)) {
+		section_cper->VersionInfo = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 6);
+	}
+	if (json_object_object_get_ex(section, "processorID", &obj)) {
+		section_cper->ApicId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 8);
+	}
+	if (json_object_object_get_ex(section, "targetAddress", &obj)) {
+		section_cper->TargetAddr = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 9);
+	}
+	if (json_object_object_get_ex(section, "requestorID", &obj)) {
+		section_cper->RequestorId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 10);
+	}
+	if (json_object_object_get_ex(section, "responderID", &obj)) {
+		section_cper->ResponderId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 11);
+	}
+	if (json_object_object_get_ex(section, "instructionIP", &obj)) {
+		section_cper->InstructionIP = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 12);
+	}
 
 	//CPU brand string.
-	const char *brand_string = json_object_get_string(
-		json_object_object_get(section, "cpuBrandString"));
-	if (brand_string != NULL) {
-		strncpy(section_cper->BrandString, brand_string,
-			sizeof(section_cper->BrandString) - 1);
-		section_cper
-			->BrandString[sizeof(section_cper->BrandString) - 1] =
-			'\0';
+	if (json_object_object_get_ex(section, "cpuBrandString", &obj)) {
+		const char *brand_string = json_object_get_string(obj);
+		if (brand_string != NULL) {
+			strncpy(section_cper->BrandString, brand_string,
+				sizeof(section_cper->BrandString) - 1);
+			section_cper
+				->BrandString[sizeof(section_cper->BrandString) -
+					      1] = '\0';
+		}
+		add_to_valid_bitfield(&ui64Type, 7);
 	}
+	section_cper->ValidFields = ui64Type.value.ui64;
 
 	//Write & flush out to file, free memory.
 	fwrite(section_cper, sizeof(EFI_PROCESSOR_GENERIC_ERROR_DATA), 1, out);
diff --git a/sections/cper-section-ia32x64.c b/sections/cper-section-ia32x64.c
index bdeb4fa..8e89ee3 100644
--- a/sections/cper-section-ia32x64.c
+++ b/sections/cper-section-ia32x64.c
@@ -50,38 +50,40 @@
 	json_object *record_ir = json_object_new_object();
 
 	//Validation bits.
-	json_object *validationBits = json_object_new_object();
-	json_object_object_add(validationBits, "localAPICIDValid",
-			       json_object_new_boolean(record->ValidFields &
-						       0x1));
-	json_object_object_add(
-		validationBits, "cpuIDInfoValid",
-		json_object_new_boolean((record->ValidFields >> 1) & 0x1));
+	//validation bits contain information
+	//about processorErrorInfoNum and processorContextInfoNum.
+	//Ensure this is decoded properly in IR->CPER
 	int processor_error_info_num = (record->ValidFields >> 2) & 0x3F;
-	json_object_object_add(validationBits, "processorErrorInfoNum",
+	json_object_object_add(record_ir, "processorErrorInfoNum",
 			       json_object_new_int(processor_error_info_num));
 	int processor_context_info_num = (record->ValidFields >> 8) & 0x3F;
-	json_object_object_add(validationBits, "processorContextInfoNum",
+	json_object_object_add(record_ir, "processorContextInfoNum",
 			       json_object_new_int(processor_context_info_num));
-	json_object_object_add(record_ir, "validationBits", validationBits);
+
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = record->ValidFields };
 
 	//APIC ID.
-	json_object_object_add(record_ir, "localAPICID",
-			       json_object_new_uint64(record->ApicId));
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object_object_add(record_ir, "localAPICID",
+				       json_object_new_uint64(record->ApicId));
+	}
 
 	//CPUID information.
-	json_object *cpuid_info_ir = json_object_new_object();
-	EFI_IA32_X64_CPU_ID *cpuid_info =
-		(EFI_IA32_X64_CPU_ID *)record->CpuIdInfo;
-	json_object_object_add(cpuid_info_ir, "eax",
-			       json_object_new_uint64(cpuid_info->Eax));
-	json_object_object_add(cpuid_info_ir, "ebx",
-			       json_object_new_uint64(cpuid_info->Ebx));
-	json_object_object_add(cpuid_info_ir, "ecx",
-			       json_object_new_uint64(cpuid_info->Ecx));
-	json_object_object_add(cpuid_info_ir, "edx",
-			       json_object_new_uint64(cpuid_info->Edx));
-	json_object_object_add(record_ir, "cpuidInfo", cpuid_info_ir);
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object *cpuid_info_ir = json_object_new_object();
+		EFI_IA32_X64_CPU_ID *cpuid_info =
+			(EFI_IA32_X64_CPU_ID *)record->CpuIdInfo;
+		json_object_object_add(cpuid_info_ir, "eax",
+				       json_object_new_uint64(cpuid_info->Eax));
+		json_object_object_add(cpuid_info_ir, "ebx",
+				       json_object_new_uint64(cpuid_info->Ebx));
+		json_object_object_add(cpuid_info_ir, "ecx",
+				       json_object_new_uint64(cpuid_info->Ecx));
+		json_object_object_add(cpuid_info_ir, "edx",
+				       json_object_new_uint64(cpuid_info->Edx));
+		json_object_object_add(record_ir, "cpuidInfo", cpuid_info_ir);
+	}
 
 	//Processor error information, of the amount described above.
 	EFI_IA32_X64_PROCESS_ERROR_INFO *current_error_info =
@@ -148,44 +150,60 @@
 	json_object_object_add(error_info_ir, "type", type);
 
 	//Validation bits.
-	json_object *validation =
-		bitfield_to_ir(error_info->ValidFields, 5,
-			       IA32X64_PROCESSOR_ERROR_VALID_BITFIELD_NAMES);
-	json_object_object_add(error_info_ir, "validationBits", validation);
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = error_info->ValidFields };
 
 	//Add the check information on a per-structure basis.
 	//Cache and TLB check information are identical, so can be equated.
-	json_object *check_information = NULL;
-	if (guid_equal(&error_info->ErrorType,
-		       &gEfiIa32x64ErrorTypeCacheCheckGuid) ||
-	    guid_equal(&error_info->ErrorType,
-		       &gEfiIa32x64ErrorTypeTlbCheckGuid)) {
-		check_information = cper_ia32x64_cache_tlb_check_to_ir(
-			(EFI_IA32_X64_CACHE_CHECK_INFO *)&error_info->CheckInfo);
-	} else if (guid_equal(&error_info->ErrorType,
-			      &gEfiIa32x64ErrorTypeBusCheckGuid)) {
-		check_information = cper_ia32x64_bus_check_to_ir(
-			(EFI_IA32_X64_BUS_CHECK_INFO *)&error_info->CheckInfo);
-	} else if (guid_equal(&error_info->ErrorType,
-			      &gEfiIa32x64ErrorTypeMsCheckGuid)) {
-		check_information = cper_ia32x64_ms_check_to_ir(
-			(EFI_IA32_X64_MS_CHECK_INFO *)&error_info->CheckInfo);
-	} else {
-		//Unknown check information.
-		printf("WARN: Invalid/unknown check information GUID found in IA32/x64 CPER section. Ignoring.\n");
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *check_information = NULL;
+		if (guid_equal(&error_info->ErrorType,
+			       &gEfiIa32x64ErrorTypeCacheCheckGuid) ||
+		    guid_equal(&error_info->ErrorType,
+			       &gEfiIa32x64ErrorTypeTlbCheckGuid)) {
+			check_information = cper_ia32x64_cache_tlb_check_to_ir(
+				(EFI_IA32_X64_CACHE_CHECK_INFO *)&error_info
+					->CheckInfo);
+		} else if (guid_equal(&error_info->ErrorType,
+				      &gEfiIa32x64ErrorTypeBusCheckGuid)) {
+			check_information = cper_ia32x64_bus_check_to_ir(
+				(EFI_IA32_X64_BUS_CHECK_INFO *)&error_info
+					->CheckInfo);
+		} else if (guid_equal(&error_info->ErrorType,
+				      &gEfiIa32x64ErrorTypeMsCheckGuid)) {
+			check_information = cper_ia32x64_ms_check_to_ir(
+				(EFI_IA32_X64_MS_CHECK_INFO *)&error_info
+					->CheckInfo);
+
+		} else {
+			//Unknown check information.
+			printf("WARN: Invalid/unknown check information GUID found in IA32/x64 CPER section. Ignoring.\n");
+		}
+		json_object_object_add(error_info_ir, "checkInfo",
+				       check_information);
 	}
-	json_object_object_add(error_info_ir, "checkInfo", check_information);
 
 	//Target, requestor, and responder identifiers.
-	json_object_object_add(error_info_ir, "targetAddressID",
-			       json_object_new_uint64(error_info->TargetId));
-	json_object_object_add(error_info_ir, "requestorID",
-			       json_object_new_uint64(error_info->RequestorId));
-	json_object_object_add(error_info_ir, "responderID",
-			       json_object_new_uint64(error_info->ResponderId));
-	json_object_object_add(
-		error_info_ir, "instructionPointer",
-		json_object_new_uint64(error_info->InstructionIP));
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object_object_add(
+			error_info_ir, "targetAddressID",
+			json_object_new_uint64(error_info->TargetId));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		json_object_object_add(
+			error_info_ir, "requestorID",
+			json_object_new_uint64(error_info->RequestorId));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		json_object_object_add(
+			error_info_ir, "responderID",
+			json_object_new_uint64(error_info->ResponderId));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		json_object_object_add(
+			error_info_ir, "instructionPointer",
+			json_object_new_uint64(error_info->InstructionIP));
+	}
 
 	return error_info_ir;
 }
@@ -197,49 +215,67 @@
 	json_object *cache_tlb_check_ir = json_object_new_object();
 
 	//Validation bits.
-	json_object *validation =
-		bitfield_to_ir(cache_tlb_check->ValidFields, 8,
-			       IA32X64_CHECK_INFO_VALID_BITFIELD_NAMES);
-	json_object_object_add(cache_tlb_check_ir, "validationBits",
-			       validation);
+	ValidationTypes ui64Type = {
+		UINT_64T, .value.ui64 = cache_tlb_check->ValidFields
+	};
 
 	//Transaction type.
-	json_object *transaction_type = integer_to_readable_pair(
-		cache_tlb_check->TransactionType, 3,
-		IA32X64_CHECK_INFO_TRANSACTION_TYPES_KEYS,
-		IA32X64_CHECK_INFO_TRANSACTION_TYPES_VALUES,
-		"Unknown (Reserved)");
-	json_object_object_add(cache_tlb_check_ir, "transactionType",
-			       transaction_type);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *transaction_type = integer_to_readable_pair(
+			cache_tlb_check->TransactionType, 3,
+			IA32X64_CHECK_INFO_TRANSACTION_TYPES_KEYS,
+			IA32X64_CHECK_INFO_TRANSACTION_TYPES_VALUES,
+			"Unknown (Reserved)");
+		json_object_object_add(cache_tlb_check_ir, "transactionType",
+				       transaction_type);
+	}
 
 	//Operation.
-	json_object *operation = integer_to_readable_pair(
-		cache_tlb_check->Operation, 9,
-		IA32X64_CHECK_INFO_OPERATION_TYPES_KEYS,
-		IA32X64_CHECK_INFO_OPERATION_TYPES_VALUES,
-		"Unknown (Reserved)");
-	json_object_object_add(cache_tlb_check_ir, "operation", operation);
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object *operation = integer_to_readable_pair(
+			cache_tlb_check->Operation, 9,
+			IA32X64_CHECK_INFO_OPERATION_TYPES_KEYS,
+			IA32X64_CHECK_INFO_OPERATION_TYPES_VALUES,
+			"Unknown (Reserved)");
+		json_object_object_add(cache_tlb_check_ir, "operation",
+				       operation);
+	}
 
 	//Affected cache/TLB level.
-	json_object_object_add(cache_tlb_check_ir, "level",
-			       json_object_new_uint64(cache_tlb_check->Level));
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		json_object_object_add(
+			cache_tlb_check_ir, "level",
+			json_object_new_uint64(cache_tlb_check->Level));
+	}
 
 	//Miscellaneous boolean fields.
-	json_object_object_add(
-		cache_tlb_check_ir, "processorContextCorrupt",
-		json_object_new_boolean(cache_tlb_check->ContextCorrupt));
-	json_object_object_add(
-		cache_tlb_check_ir, "uncorrected",
-		json_object_new_boolean(cache_tlb_check->ErrorUncorrected));
-	json_object_object_add(
-		cache_tlb_check_ir, "preciseIP",
-		json_object_new_boolean(cache_tlb_check->PreciseIp));
-	json_object_object_add(
-		cache_tlb_check_ir, "restartableIP",
-		json_object_new_boolean(cache_tlb_check->RestartableIp));
-	json_object_object_add(
-		cache_tlb_check_ir, "overflow",
-		json_object_new_boolean(cache_tlb_check->Overflow));
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		json_object_object_add(
+			cache_tlb_check_ir, "processorContextCorrupt",
+			json_object_new_boolean(
+				cache_tlb_check->ContextCorrupt));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		json_object_object_add(
+			cache_tlb_check_ir, "uncorrected",
+			json_object_new_boolean(
+				cache_tlb_check->ErrorUncorrected));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 5)) {
+		json_object_object_add(
+			cache_tlb_check_ir, "preciseIP",
+			json_object_new_boolean(cache_tlb_check->PreciseIp));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 6)) {
+		json_object_object_add(cache_tlb_check_ir, "restartableIP",
+				       json_object_new_boolean(
+					       cache_tlb_check->RestartableIp));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 7)) {
+		json_object_object_add(
+			cache_tlb_check_ir, "overflow",
+			json_object_new_boolean(cache_tlb_check->Overflow));
+	}
 
 	return cache_tlb_check_ir;
 }
@@ -251,63 +287,90 @@
 	json_object *bus_check_ir = json_object_new_object();
 
 	//Validation bits.
-	json_object *validation =
-		bitfield_to_ir(bus_check->ValidFields, 11,
-			       IA32X64_CHECK_INFO_VALID_BITFIELD_NAMES);
-	json_object_object_add(bus_check_ir, "validationBits", validation);
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = bus_check->ValidFields };
 
 	//Transaction type.
-	json_object *transaction_type = integer_to_readable_pair(
-		bus_check->TransactionType, 3,
-		IA32X64_CHECK_INFO_TRANSACTION_TYPES_KEYS,
-		IA32X64_CHECK_INFO_TRANSACTION_TYPES_VALUES,
-		"Unknown (Reserved)");
-	json_object_object_add(bus_check_ir, "transactionType",
-			       transaction_type);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *transaction_type = integer_to_readable_pair(
+			bus_check->TransactionType, 3,
+			IA32X64_CHECK_INFO_TRANSACTION_TYPES_KEYS,
+			IA32X64_CHECK_INFO_TRANSACTION_TYPES_VALUES,
+			"Unknown (Reserved)");
+		json_object_object_add(bus_check_ir, "transactionType",
+				       transaction_type);
+	}
 
 	//Operation.
-	json_object *operation = integer_to_readable_pair(
-		bus_check->Operation, 9,
-		IA32X64_CHECK_INFO_OPERATION_TYPES_KEYS,
-		IA32X64_CHECK_INFO_OPERATION_TYPES_VALUES,
-		"Unknown (Reserved)");
-	json_object_object_add(bus_check_ir, "operation", operation);
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object *operation = integer_to_readable_pair(
+			bus_check->Operation, 9,
+			IA32X64_CHECK_INFO_OPERATION_TYPES_KEYS,
+			IA32X64_CHECK_INFO_OPERATION_TYPES_VALUES,
+			"Unknown (Reserved)");
+		json_object_object_add(bus_check_ir, "operation", operation);
+	}
 
 	//Affected bus level.
-	json_object_object_add(bus_check_ir, "level",
-			       json_object_new_uint64(bus_check->Level));
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		json_object_object_add(
+			bus_check_ir, "level",
+			json_object_new_uint64(bus_check->Level));
+	}
 
 	//Miscellaneous boolean fields.
-	json_object_object_add(
-		bus_check_ir, "processorContextCorrupt",
-		json_object_new_boolean(bus_check->ContextCorrupt));
-	json_object_object_add(
-		bus_check_ir, "uncorrected",
-		json_object_new_boolean(bus_check->ErrorUncorrected));
-	json_object_object_add(bus_check_ir, "preciseIP",
-			       json_object_new_boolean(bus_check->PreciseIp));
-	json_object_object_add(
-		bus_check_ir, "restartableIP",
-		json_object_new_boolean(bus_check->RestartableIp));
-	json_object_object_add(bus_check_ir, "overflow",
-			       json_object_new_boolean(bus_check->Overflow));
-	json_object_object_add(bus_check_ir, "timedOut",
-			       json_object_new_boolean(bus_check->TimeOut));
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		json_object_object_add(
+			bus_check_ir, "processorContextCorrupt",
+			json_object_new_boolean(bus_check->ContextCorrupt));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		json_object_object_add(
+			bus_check_ir, "uncorrected",
+			json_object_new_boolean(bus_check->ErrorUncorrected));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 5)) {
+		json_object_object_add(
+			bus_check_ir, "preciseIP",
+			json_object_new_boolean(bus_check->PreciseIp));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 6)) {
+		json_object_object_add(
+			bus_check_ir, "restartableIP",
+			json_object_new_boolean(bus_check->RestartableIp));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 7)) {
+		json_object_object_add(
+			bus_check_ir, "overflow",
+			json_object_new_boolean(bus_check->Overflow));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 9)) {
+		json_object_object_add(
+			bus_check_ir, "timedOut",
+			json_object_new_boolean(bus_check->TimeOut));
+	}
 
 	//Participation type.
-	json_object *participation_type = integer_to_readable_pair(
-		bus_check->ParticipationType, 4,
-		IA32X64_BUS_CHECK_INFO_PARTICIPATION_TYPES_KEYS,
-		IA32X64_BUS_CHECK_INFO_PARTICIPATION_TYPES_VALUES, "Unknown");
-	json_object_object_add(bus_check_ir, "participationType",
-			       participation_type);
+	if (isvalid_prop_to_ir(&ui64Type, 8)) {
+		json_object *participation_type = integer_to_readable_pair(
+			bus_check->ParticipationType, 4,
+			IA32X64_BUS_CHECK_INFO_PARTICIPATION_TYPES_KEYS,
+			IA32X64_BUS_CHECK_INFO_PARTICIPATION_TYPES_VALUES,
+			"Unknown");
+		json_object_object_add(bus_check_ir, "participationType",
+				       participation_type);
+	}
 
 	//Address space.
-	json_object *address_space = integer_to_readable_pair(
-		bus_check->AddressSpace, 4,
-		IA32X64_BUS_CHECK_INFO_ADDRESS_SPACE_TYPES_KEYS,
-		IA32X64_BUS_CHECK_INFO_ADDRESS_SPACE_TYPES_VALUES, "Unknown");
-	json_object_object_add(bus_check_ir, "addressSpace", address_space);
+	if (isvalid_prop_to_ir(&ui64Type, 10)) {
+		json_object *address_space = integer_to_readable_pair(
+			bus_check->AddressSpace, 4,
+			IA32X64_BUS_CHECK_INFO_ADDRESS_SPACE_TYPES_KEYS,
+			IA32X64_BUS_CHECK_INFO_ADDRESS_SPACE_TYPES_VALUES,
+			"Unknown");
+		json_object_object_add(bus_check_ir, "addressSpace",
+				       address_space);
+	}
 
 	return bus_check_ir;
 }
@@ -316,34 +379,45 @@
 json_object *cper_ia32x64_ms_check_to_ir(EFI_IA32_X64_MS_CHECK_INFO *ms_check)
 {
 	json_object *ms_check_ir = json_object_new_object();
-
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = ms_check->ValidFields };
 	//Validation bits.
-	json_object *validation = bitfield_to_ir(
-		ms_check->ValidFields, 6,
-		IA32X64_CHECK_INFO_MS_CHECK_VALID_BITFIELD_NAMES);
-	json_object_object_add(ms_check_ir, "validationBits", validation);
-
 	//Error type (operation that caused the error).
-	json_object *error_type = integer_to_readable_pair(
-		ms_check->ErrorType, 4, IA32X64_MS_CHECK_INFO_ERROR_TYPES_KEYS,
-		IA32X64_MS_CHECK_INFO_ERROR_TYPES_VALUES,
-		"Unknown (Processor Specific)");
-	json_object_object_add(ms_check_ir, "errorType", error_type);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *error_type = integer_to_readable_pair(
+			ms_check->ErrorType, 4,
+			IA32X64_MS_CHECK_INFO_ERROR_TYPES_KEYS,
+			IA32X64_MS_CHECK_INFO_ERROR_TYPES_VALUES,
+			"Unknown (Processor Specific)");
+		json_object_object_add(ms_check_ir, "errorType", error_type);
+	}
 
 	//Miscellaneous fields.
-	json_object_object_add(
-		ms_check_ir, "processorContextCorrupt",
-		json_object_new_boolean(ms_check->ContextCorrupt));
-	json_object_object_add(
-		ms_check_ir, "uncorrected",
-		json_object_new_boolean(ms_check->ErrorUncorrected));
-	json_object_object_add(ms_check_ir, "preciseIP",
-			       json_object_new_boolean(ms_check->PreciseIp));
-	json_object_object_add(
-		ms_check_ir, "restartableIP",
-		json_object_new_boolean(ms_check->RestartableIp));
-	json_object_object_add(ms_check_ir, "overflow",
-			       json_object_new_boolean(ms_check->Overflow));
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object_object_add(
+			ms_check_ir, "processorContextCorrupt",
+			json_object_new_boolean(ms_check->ContextCorrupt));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		json_object_object_add(
+			ms_check_ir, "uncorrected",
+			json_object_new_boolean(ms_check->ErrorUncorrected));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		json_object_object_add(
+			ms_check_ir, "preciseIP",
+			json_object_new_boolean(ms_check->PreciseIp));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		json_object_object_add(
+			ms_check_ir, "restartableIP",
+			json_object_new_boolean(ms_check->RestartableIp));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 5)) {
+		json_object_object_add(
+			ms_check_ir, "overflow",
+			json_object_new_boolean(ms_check->Overflow));
+	}
 
 	return ms_check_ir;
 }
@@ -568,43 +642,42 @@
 		(EFI_IA32_X64_PROCESSOR_ERROR_RECORD *)calloc(
 			1, sizeof(EFI_IA32_X64_PROCESSOR_ERROR_RECORD));
 
-	//Validation bits.
-	json_object *validation =
-		json_object_object_get(section, "validationBits");
-	section_cper->ValidFields = 0x0;
-	section_cper->ValidFields |= json_object_get_boolean(
-		json_object_object_get(validation, "localAPICIDValid"));
-	section_cper->ValidFields |=
-		json_object_get_boolean(
-			json_object_object_get(validation, "cpuIDInfoValid"))
-		<< 1;
-	int proc_error_info_num =
-		json_object_get_int(json_object_object_get(
-			validation, "processorErrorInfoNum")) &
-		0x3F;
-	int proc_ctx_info_num =
-		json_object_get_int(json_object_object_get(
-			validation, "processorContextInfoNum")) &
-		0x3F;
-	section_cper->ValidFields |= proc_error_info_num << 2;
-	section_cper->ValidFields |= proc_ctx_info_num << 8;
+	uint64_t valid = 0x0;
+
+	int proc_error_info_num = json_object_get_int(json_object_object_get(
+					  section, "processorErrorInfoNum")) &
+				  0x3F;
+	int proc_ctx_info_num = json_object_get_int(json_object_object_get(
+					section, "processorContextInfoNum")) &
+				0x3F;
+	valid |= proc_error_info_num << 2;
+	valid |= proc_ctx_info_num << 8;
+
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = valid };
+	struct json_object *obj = NULL;
 
 	//Local APIC ID.
-	section_cper->ApicId = json_object_get_uint64(
-		json_object_object_get(section, "localAPICID"));
+	if (json_object_object_get_ex(section, "localAPICID", &obj)) {
+		section_cper->ApicId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
 
 	//CPUID info.
-	json_object *cpuid_info = json_object_object_get(section, "cpuidInfo");
-	EFI_IA32_X64_CPU_ID *cpuid_info_cper =
-		(EFI_IA32_X64_CPU_ID *)section_cper->CpuIdInfo;
-	cpuid_info_cper->Eax = json_object_get_uint64(
-		json_object_object_get(cpuid_info, "eax"));
-	cpuid_info_cper->Ebx = json_object_get_uint64(
-		json_object_object_get(cpuid_info, "ebx"));
-	cpuid_info_cper->Ecx = json_object_get_uint64(
-		json_object_object_get(cpuid_info, "ecx"));
-	cpuid_info_cper->Edx = json_object_get_uint64(
-		json_object_object_get(cpuid_info, "edx"));
+	if (json_object_object_get_ex(section, "cpuidInfo", &obj)) {
+		json_object *cpuid_info = obj;
+		EFI_IA32_X64_CPU_ID *cpuid_info_cper =
+			(EFI_IA32_X64_CPU_ID *)section_cper->CpuIdInfo;
+		cpuid_info_cper->Eax = json_object_get_uint64(
+			json_object_object_get(cpuid_info, "eax"));
+		cpuid_info_cper->Ebx = json_object_get_uint64(
+			json_object_object_get(cpuid_info, "ebx"));
+		cpuid_info_cper->Ecx = json_object_get_uint64(
+			json_object_object_get(cpuid_info, "ecx"));
+		cpuid_info_cper->Edx = json_object_get_uint64(
+			json_object_object_get(cpuid_info, "edx"));
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
+	section_cper->ValidFields = ui64Type.value.ui64;
 
 	//Flush the header to file before dealing w/ info sections.
 	fwrite(section_cper, sizeof(EFI_IA32_X64_PROCESSOR_ERROR_RECORD), 1,
@@ -642,45 +715,55 @@
 		json_object_get_string(json_object_object_get(type, "guid")));
 
 	//Validation bits.
-	error_info_cper->ValidFields = ir_to_bitfield(
-		json_object_object_get(error_info, "validationBits"), 5,
-		IA32X64_PROCESSOR_ERROR_VALID_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 
 	//Check information, parsed based on the error type.
-	json_object *check_info =
-		json_object_object_get(error_info, "checkInfo");
-	if (guid_equal(&error_info_cper->ErrorType,
-		       &gEfiIa32x64ErrorTypeCacheCheckGuid) ||
-	    guid_equal(&error_info_cper->ErrorType,
-		       &gEfiIa32x64ErrorTypeTlbCheckGuid)) {
-		ir_ia32x64_cache_tlb_check_error_to_cper(
-			check_info,
-			(EFI_IA32_X64_CACHE_CHECK_INFO *)&error_info_cper
-				->CheckInfo);
-	} else if (guid_equal(&error_info_cper->ErrorType,
-			      &gEfiIa32x64ErrorTypeBusCheckGuid)) {
-		ir_ia32x64_bus_check_error_to_cper(
-			check_info,
-			(EFI_IA32_X64_BUS_CHECK_INFO *)&error_info_cper
-				->CheckInfo);
-	} else if (guid_equal(&error_info_cper->ErrorType,
-			      &gEfiIa32x64ErrorTypeMsCheckGuid)) {
-		ir_ia32x64_ms_check_error_to_cper(
-			check_info,
-			(EFI_IA32_X64_MS_CHECK_INFO *)&error_info_cper
-				->CheckInfo);
+	if (json_object_object_get_ex(error_info, "checkInfo", &obj)) {
+		json_object *check_info = obj;
+		if (guid_equal(&error_info_cper->ErrorType,
+			       &gEfiIa32x64ErrorTypeCacheCheckGuid) ||
+		    guid_equal(&error_info_cper->ErrorType,
+			       &gEfiIa32x64ErrorTypeTlbCheckGuid)) {
+			ir_ia32x64_cache_tlb_check_error_to_cper(
+				check_info,
+				(EFI_IA32_X64_CACHE_CHECK_INFO
+					 *)&error_info_cper->CheckInfo);
+		} else if (guid_equal(&error_info_cper->ErrorType,
+				      &gEfiIa32x64ErrorTypeBusCheckGuid)) {
+			ir_ia32x64_bus_check_error_to_cper(
+				check_info,
+				(EFI_IA32_X64_BUS_CHECK_INFO *)&error_info_cper
+					->CheckInfo);
+		} else if (guid_equal(&error_info_cper->ErrorType,
+				      &gEfiIa32x64ErrorTypeMsCheckGuid)) {
+			ir_ia32x64_ms_check_error_to_cper(
+				check_info,
+				(EFI_IA32_X64_MS_CHECK_INFO *)&error_info_cper
+					->CheckInfo);
+		}
+		add_to_valid_bitfield(&ui64Type, 0);
 	}
 
 	//Miscellaneous numeric fields.
-	error_info_cper->TargetId = json_object_get_uint64(
-		json_object_object_get(error_info, "targetAddressID"));
-	error_info_cper->RequestorId = json_object_get_uint64(
-		json_object_object_get(error_info, "requestorID"));
-	error_info_cper->ResponderId = json_object_get_uint64(
-		json_object_object_get(error_info, "responderID"));
-	error_info_cper->InstructionIP = json_object_get_uint64(
-		json_object_object_get(error_info, "instructionPointer"));
+	if (json_object_object_get_ex(error_info, "targetAddressID", &obj)) {
+		error_info_cper->TargetId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
+	if (json_object_object_get_ex(error_info, "requestorID", &obj)) {
+		error_info_cper->RequestorId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+	if (json_object_object_get_ex(error_info, "responderID", &obj)) {
+		error_info_cper->ResponderId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 3);
+	}
+	if (json_object_object_get_ex(error_info, "instructionPointer", &obj)) {
+		error_info_cper->InstructionIP = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 4);
+	}
 
+	error_info_cper->ValidFields = ui64Type.value.ui64;
 	//Write out to stream, then free resources.
 	fwrite(error_info_cper, sizeof(EFI_IA32_X64_PROCESS_ERROR_INFO), 1,
 	       out);
@@ -693,29 +776,48 @@
 	json_object *check_info, EFI_IA32_X64_CACHE_CHECK_INFO *check_info_cper)
 {
 	//Validation bits.
-	check_info_cper->ValidFields = ir_to_bitfield(
-		json_object_object_get(check_info, "validationBits"), 8,
-		IA32X64_CHECK_INFO_VALID_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 
 	//Transaction type, operation.
-	check_info_cper->TransactionType = readable_pair_to_integer(
-		json_object_object_get(check_info, "transactionType"));
-	check_info_cper->Operation = readable_pair_to_integer(
-		json_object_object_get(check_info, "operation"));
+	if (json_object_object_get_ex(check_info, "transactionType", &obj)) {
+		check_info_cper->TransactionType =
+			readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
+	if (json_object_object_get_ex(check_info, "operation", &obj)) {
+		check_info_cper->Operation = readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
 
 	//Miscellaneous raw value fields.
-	check_info_cper->Level = json_object_get_uint64(
-		json_object_object_get(check_info, "level"));
-	check_info_cper->ContextCorrupt = json_object_get_boolean(
-		json_object_object_get(check_info, "processorContextCorrupt"));
-	check_info_cper->ErrorUncorrected = json_object_get_boolean(
-		json_object_object_get(check_info, "uncorrected"));
-	check_info_cper->PreciseIp = json_object_get_boolean(
-		json_object_object_get(check_info, "preciseIP"));
-	check_info_cper->RestartableIp = json_object_get_boolean(
-		json_object_object_get(check_info, "restartableIP"));
-	check_info_cper->Overflow = json_object_get_boolean(
-		json_object_object_get(check_info, "overflow"));
+	if (json_object_object_get_ex(check_info, "level", &obj)) {
+		check_info_cper->Level = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+	if (json_object_object_get_ex(check_info, "processorContextCorrupt",
+				      &obj)) {
+		check_info_cper->ContextCorrupt = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 3);
+	}
+	if (json_object_object_get_ex(check_info, "uncorrected", &obj)) {
+		check_info_cper->ErrorUncorrected =
+			json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 4);
+	}
+	if (json_object_object_get_ex(check_info, "preciseIP", &obj)) {
+		check_info_cper->PreciseIp = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 5);
+	}
+	if (json_object_object_get_ex(check_info, "restartableIP", &obj)) {
+		check_info_cper->RestartableIp = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 6);
+	}
+	if (json_object_object_get_ex(check_info, "overflow", &obj)) {
+		check_info_cper->Overflow = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 7);
+	}
+	check_info_cper->ValidFields = ui64Type.value.ui64;
 }
 
 //Converts a single CPER-JSON IA32/x64 bus error info structure to CPER binary.
@@ -723,35 +825,62 @@
 	json_object *check_info, EFI_IA32_X64_BUS_CHECK_INFO *check_info_cper)
 {
 	//Validation bits.
-	check_info_cper->ValidFields = ir_to_bitfield(
-		json_object_object_get(check_info, "validationBits"), 11,
-		IA32X64_CHECK_INFO_VALID_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 
 	//Readable pair fields.
-	check_info_cper->TransactionType = readable_pair_to_integer(
-		json_object_object_get(check_info, "transactionType"));
-	check_info_cper->Operation = readable_pair_to_integer(
-		json_object_object_get(check_info, "operation"));
-	check_info_cper->ParticipationType = readable_pair_to_integer(
-		json_object_object_get(check_info, "participationType"));
-	check_info_cper->AddressSpace = readable_pair_to_integer(
-		json_object_object_get(check_info, "addressSpace"));
+	if (json_object_object_get_ex(check_info, "transactionType", &obj)) {
+		check_info_cper->TransactionType =
+			readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
+	if (json_object_object_get_ex(check_info, "operation", &obj)) {
+		check_info_cper->Operation = readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
+	if (json_object_object_get_ex(check_info, "participationType", &obj)) {
+		check_info_cper->ParticipationType =
+			readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 8);
+	}
+
+	if (json_object_object_get_ex(check_info, "addressSpace", &obj)) {
+		check_info_cper->AddressSpace = readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 10);
+	}
 
 	//Miscellaneous raw value fields.
-	check_info_cper->Level = json_object_get_uint64(
-		json_object_object_get(check_info, "level"));
-	check_info_cper->ContextCorrupt = json_object_get_boolean(
-		json_object_object_get(check_info, "processorContextCorrupt"));
-	check_info_cper->ErrorUncorrected = json_object_get_boolean(
-		json_object_object_get(check_info, "uncorrected"));
-	check_info_cper->PreciseIp = json_object_get_boolean(
-		json_object_object_get(check_info, "preciseIP"));
-	check_info_cper->RestartableIp = json_object_get_boolean(
-		json_object_object_get(check_info, "restartableIP"));
-	check_info_cper->Overflow = json_object_get_boolean(
-		json_object_object_get(check_info, "overflow"));
-	check_info_cper->TimeOut = json_object_get_boolean(
-		json_object_object_get(check_info, "timedOut"));
+	if (json_object_object_get_ex(check_info, "level", &obj)) {
+		check_info_cper->Level = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+	if (json_object_object_get_ex(check_info, "processorContextCorrupt",
+				      &obj)) {
+		check_info_cper->ContextCorrupt = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 3);
+	}
+	if (json_object_object_get_ex(check_info, "uncorrected", &obj)) {
+		check_info_cper->ErrorUncorrected =
+			json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 4);
+	}
+	if (json_object_object_get_ex(check_info, "preciseIP", &obj)) {
+		check_info_cper->PreciseIp = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 5);
+	}
+	if (json_object_object_get_ex(check_info, "restartableIP", &obj)) {
+		check_info_cper->RestartableIp = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 6);
+	}
+	if (json_object_object_get_ex(check_info, "overflow", &obj)) {
+		check_info_cper->Overflow = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 7);
+	}
+	if (json_object_object_get_ex(check_info, "timedOut", &obj)) {
+		check_info_cper->TimeOut = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 9);
+	}
+	check_info_cper->ValidFields = ui64Type.value.ui64;
 }
 
 //Converts a single CPER-JSON IA32/x64 MS error info structure to CPER binary.
@@ -759,25 +888,39 @@
 	json_object *check_info, EFI_IA32_X64_MS_CHECK_INFO *check_info_cper)
 {
 	//Validation bits.
-	check_info_cper->ValidFields = ir_to_bitfield(
-		json_object_object_get(check_info, "validationBits"), 6,
-		IA32X64_CHECK_INFO_MS_CHECK_VALID_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 
 	//Type of MS check error.
-	check_info_cper->ErrorType = readable_pair_to_integer(
-		json_object_object_get(check_info, "errorType"));
+	if (json_object_object_get_ex(check_info, "errorType", &obj)) {
+		check_info_cper->ErrorType = readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
 
 	//Miscellaneous raw value fields.
-	check_info_cper->ContextCorrupt = json_object_get_boolean(
-		json_object_object_get(check_info, "processorContextCorrupt"));
-	check_info_cper->ErrorUncorrected = json_object_get_boolean(
-		json_object_object_get(check_info, "uncorrected"));
-	check_info_cper->PreciseIp = json_object_get_boolean(
-		json_object_object_get(check_info, "preciseIP"));
-	check_info_cper->RestartableIp = json_object_get_boolean(
-		json_object_object_get(check_info, "restartableIP"));
-	check_info_cper->Overflow = json_object_get_boolean(
-		json_object_object_get(check_info, "overflow"));
+	if (json_object_object_get_ex(check_info, "processorContextCorrupt",
+				      &obj)) {
+		check_info_cper->ContextCorrupt = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
+	if (json_object_object_get_ex(check_info, "uncorrected", &obj)) {
+		check_info_cper->ErrorUncorrected =
+			json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+	if (json_object_object_get_ex(check_info, "preciseIP", &obj)) {
+		check_info_cper->PreciseIp = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 3);
+	}
+	if (json_object_object_get_ex(check_info, "restartableIP", &obj)) {
+		check_info_cper->RestartableIp = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 4);
+	}
+	if (json_object_object_get_ex(check_info, "overflow", &obj)) {
+		check_info_cper->Overflow = json_object_get_boolean(obj);
+		add_to_valid_bitfield(&ui64Type, 5);
+	}
+	check_info_cper->ValidFields = ui64Type.value.ui64;
 }
 
 //Converts a single CPER-JSON IA32/x64 context information structure into CPER binary, outputting to the
diff --git a/sections/cper-section-memory.c b/sections/cper-section-memory.c
index 4aeae43..ce9119d 100644
--- a/sections/cper-section-memory.c
+++ b/sections/cper-section-memory.c
@@ -17,20 +17,19 @@
 		(EFI_PLATFORM_MEMORY_ERROR_DATA *)section;
 	json_object *section_ir = json_object_new_object();
 
-	//Validation bitfield.
-	json_object *validation =
-		bitfield_to_ir(memory_error->ValidFields, 22,
-			       MEMORY_ERROR_VALID_BITFIELD_NAMES);
-	json_object_object_add(section_ir, "validationBits", validation);
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = memory_error->ValidFields };
 
 	//Error status.
-	json_object *error_status =
-		cper_generic_error_status_to_ir(&memory_error->ErrorStatus);
-	json_object_object_add(section_ir, "errorStatus", error_status);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *error_status = cper_generic_error_status_to_ir(
+			&memory_error->ErrorStatus);
+		json_object_object_add(section_ir, "errorStatus", error_status);
+	}
 
-	//Bank.
+	//Bank
 	json_object *bank = json_object_new_object();
-	if ((memory_error->ValidFields >> 5) & 0x1) {
+	if (isvalid_prop_to_ir(&ui64Type, 6)) {
 		//Entire bank address mode.
 		json_object_object_add(
 			bank, "value",
@@ -47,71 +46,121 @@
 	json_object_object_add(section_ir, "bank", bank);
 
 	//Memory error type.
-	json_object *memory_error_type = integer_to_readable_pair(
-		memory_error->ErrorType, 16, MEMORY_ERROR_TYPES_KEYS,
-		MEMORY_ERROR_TYPES_VALUES, "Unknown (Reserved)");
-	json_object_object_add(section_ir, "memoryErrorType",
-			       memory_error_type);
+	if (isvalid_prop_to_ir(&ui64Type, 14)) {
+		json_object *memory_error_type = integer_to_readable_pair(
+			memory_error->ErrorType, 16, MEMORY_ERROR_TYPES_KEYS,
+			MEMORY_ERROR_TYPES_VALUES, "Unknown (Reserved)");
+		json_object_object_add(section_ir, "memoryErrorType",
+				       memory_error_type);
+	}
 
 	//"Extended" row/column indication field + misc.
-	json_object *extended = json_object_new_object();
-	json_object_object_add(extended, "rowBit16",
-			       json_object_new_boolean(memory_error->Extended &
-						       0x1));
-	json_object_object_add(
-		extended, "rowBit17",
-		json_object_new_boolean((memory_error->Extended >> 1) & 0x1));
-	json_object_object_add(extended, "chipIdentification",
-			       json_object_new_int(memory_error->Extended >>
-						   5));
-	json_object_object_add(section_ir, "extended", extended);
+	// Review this
+	if (isvalid_prop_to_ir(&ui64Type, 18)) {
+		json_object *extended = json_object_new_object();
+		json_object_object_add(
+			extended, "rowBit16",
+			json_object_new_boolean(memory_error->Extended & 0x1));
+		json_object_object_add(
+			extended, "rowBit17",
+			json_object_new_boolean((memory_error->Extended >> 1) &
+						0x1));
+		if (isvalid_prop_to_ir(&ui64Type, 21)) {
+			json_object_object_add(
+				extended, "chipIdentification",
+				json_object_new_int(memory_error->Extended >>
+						    5));
+		}
+		json_object_object_add(section_ir, "extended", extended);
+
+		//bit 16 and 17 are valid only if extended is valid
+		if (isvalid_prop_to_ir(&ui64Type, 16)) {
+			json_object_object_add(
+				section_ir, "cardSmbiosHandle",
+				json_object_new_uint64(
+					memory_error->CardHandle));
+		}
+		if (isvalid_prop_to_ir(&ui64Type, 17)) {
+			json_object_object_add(
+				section_ir, "moduleSmbiosHandle",
+				json_object_new_uint64(
+					memory_error->ModuleHandle));
+		}
+	}
 
 	//Miscellaneous numeric fields.
-	json_object_object_add(
-		section_ir, "physicalAddress",
-		json_object_new_uint64(memory_error->PhysicalAddress));
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object_object_add(
+			section_ir, "physicalAddress",
+			json_object_new_uint64(memory_error->PhysicalAddress));
 
-	char hexstring_buf[EFI_UINT64_HEX_STRING_LEN];
-	snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN, "0x%016llX",
-		 memory_error->PhysicalAddress);
-	json_object_object_add(section_ir, "physicalAddressHex",
-			       json_object_new_string(hexstring_buf));
-
-	json_object_object_add(
-		section_ir, "physicalAddressMask",
-		json_object_new_uint64(memory_error->PhysicalAddressMask));
-	json_object_object_add(section_ir, "node",
-			       json_object_new_uint64(memory_error->Node));
-	json_object_object_add(section_ir, "card",
-			       json_object_new_uint64(memory_error->Card));
-	json_object_object_add(
-		section_ir, "moduleRank",
-		json_object_new_uint64(memory_error->ModuleRank));
-	json_object_object_add(section_ir, "device",
-			       json_object_new_uint64(memory_error->Device));
-	json_object_object_add(section_ir, "row",
-			       json_object_new_uint64(memory_error->Row));
-	json_object_object_add(section_ir, "column",
-			       json_object_new_uint64(memory_error->Column));
-	json_object_object_add(
-		section_ir, "bitPosition",
-		json_object_new_uint64(memory_error->BitPosition));
-	json_object_object_add(
-		section_ir, "requestorID",
-		json_object_new_uint64(memory_error->RequestorId));
-	json_object_object_add(
-		section_ir, "responderID",
-		json_object_new_uint64(memory_error->ResponderId));
-	json_object_object_add(section_ir, "targetID",
-			       json_object_new_uint64(memory_error->TargetId));
-	json_object_object_add(section_ir, "rankNumber",
-			       json_object_new_uint64(memory_error->RankNum));
-	json_object_object_add(
-		section_ir, "cardSmbiosHandle",
-		json_object_new_uint64(memory_error->CardHandle));
-	json_object_object_add(
-		section_ir, "moduleSmbiosHandle",
-		json_object_new_uint64(memory_error->ModuleHandle));
+		char hexstring_buf[EFI_UINT64_HEX_STRING_LEN];
+		snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN, "0x%016llX",
+			 memory_error->PhysicalAddress);
+		json_object_object_add(section_ir, "physicalAddressHex",
+				       json_object_new_string(hexstring_buf));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		json_object_object_add(
+			section_ir, "physicalAddressMask",
+			json_object_new_uint64(
+				memory_error->PhysicalAddressMask));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		json_object_object_add(
+			section_ir, "node",
+			json_object_new_uint64(memory_error->Node));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		json_object_object_add(
+			section_ir, "card",
+			json_object_new_uint64(memory_error->Card));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 5)) {
+		json_object_object_add(
+			section_ir, "moduleRank",
+			json_object_new_uint64(memory_error->ModuleRank));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 7)) {
+		json_object_object_add(
+			section_ir, "device",
+			json_object_new_uint64(memory_error->Device));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 8)) {
+		json_object_object_add(
+			section_ir, "row",
+			json_object_new_uint64(memory_error->Row));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 9)) {
+		json_object_object_add(
+			section_ir, "column",
+			json_object_new_uint64(memory_error->Column));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 10)) {
+		json_object_object_add(
+			section_ir, "bitPosition",
+			json_object_new_uint64(memory_error->BitPosition));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 11)) {
+		json_object_object_add(
+			section_ir, "requestorID",
+			json_object_new_uint64(memory_error->RequestorId));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 12)) {
+		json_object_object_add(
+			section_ir, "responderID",
+			json_object_new_uint64(memory_error->ResponderId));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 13)) {
+		json_object_object_add(
+			section_ir, "targetID",
+			json_object_new_uint64(memory_error->TargetId));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 15)) {
+		json_object_object_add(
+			section_ir, "rankNumber",
+			json_object_new_uint64(memory_error->RankNum));
+	}
 
 	return section_ir;
 }
@@ -123,20 +172,19 @@
 		(EFI_PLATFORM_MEMORY2_ERROR_DATA *)section;
 	json_object *section_ir = json_object_new_object();
 
-	//Validation bits.
-	json_object *validation =
-		bitfield_to_ir(memory_error->ValidFields, 22,
-			       MEMORY_ERROR_2_VALID_BITFIELD_NAMES);
-	json_object_object_add(section_ir, "validationBits", validation);
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = memory_error->ValidFields };
 
 	//Error status.
-	json_object *error_status =
-		cper_generic_error_status_to_ir(&memory_error->ErrorStatus);
-	json_object_object_add(section_ir, "errorStatus", error_status);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *error_status = cper_generic_error_status_to_ir(
+			&memory_error->ErrorStatus);
+		json_object_object_add(section_ir, "errorStatus", error_status);
+	}
 
 	//Bank.
 	json_object *bank = json_object_new_object();
-	if ((memory_error->ValidFields >> 5) & 0x1) {
+	if (isvalid_prop_to_ir(&ui64Type, 6)) {
 		//Entire bank address mode.
 		json_object_object_add(
 			bank, "value",
@@ -153,27 +201,35 @@
 	json_object_object_add(section_ir, "bank", bank);
 
 	//Memory error type.
-	json_object *memory_error_type = integer_to_readable_pair(
-		memory_error->MemErrorType, 16, MEMORY_ERROR_TYPES_KEYS,
-		MEMORY_ERROR_TYPES_VALUES, "Unknown (Reserved)");
-	json_object_object_add(section_ir, "memoryErrorType",
-			       memory_error_type);
+	if (isvalid_prop_to_ir(&ui64Type, 13)) {
+		json_object *memory_error_type = integer_to_readable_pair(
+			memory_error->MemErrorType, 16, MEMORY_ERROR_TYPES_KEYS,
+			MEMORY_ERROR_TYPES_VALUES, "Unknown (Reserved)");
+		json_object_object_add(section_ir, "memoryErrorType",
+				       memory_error_type);
+	}
 
 	//Status.
-	json_object *status = json_object_new_object();
-	json_object_object_add(status, "value",
-			       json_object_new_int(memory_error->Status));
-	json_object_object_add(
-		status, "state",
-		json_object_new_string((memory_error->Status & 0x1) == 0 ?
-					       "Corrected" :
-					       "Uncorrected"));
-	json_object_object_add(section_ir, "status", status);
+	if (isvalid_prop_to_ir(&ui64Type, 14)) {
+		json_object *status = json_object_new_object();
+		json_object_object_add(
+			status, "value",
+			json_object_new_int(memory_error->Status));
+		json_object_object_add(
+			status, "state",
+			json_object_new_string((memory_error->Status & 0x1) ==
+							       0 ?
+						       "Corrected" :
+						       "Uncorrected"));
+		json_object_object_add(section_ir, "status", status);
+	}
 
 	//Miscellaneous numeric fields.
-	json_object_object_add(
-		section_ir, "physicalAddress",
-		json_object_new_uint64(memory_error->PhysicalAddress));
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object_object_add(
+			section_ir, "physicalAddress",
+			json_object_new_uint64(memory_error->PhysicalAddress));
+	}
 
 	char hexstring_buf[EFI_UINT64_HEX_STRING_LEN];
 	snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN, "0x%016llX",
@@ -181,42 +237,82 @@
 	json_object_object_add(section_ir, "physicalAddressHex",
 			       json_object_new_string(hexstring_buf));
 
-	json_object_object_add(
-		section_ir, "physicalAddressMask",
-		json_object_new_uint64(memory_error->PhysicalAddressMask));
-	json_object_object_add(section_ir, "node",
-			       json_object_new_uint64(memory_error->Node));
-	json_object_object_add(section_ir, "card",
-			       json_object_new_uint64(memory_error->Card));
-	json_object_object_add(section_ir, "module",
-			       json_object_new_uint64(memory_error->Module));
-	json_object_object_add(section_ir, "device",
-			       json_object_new_uint64(memory_error->Device));
-	json_object_object_add(section_ir, "row",
-			       json_object_new_uint64(memory_error->Row));
-	json_object_object_add(section_ir, "column",
-			       json_object_new_uint64(memory_error->Column));
-	json_object_object_add(section_ir, "rank",
-			       json_object_new_uint64(memory_error->Rank));
-	json_object_object_add(
-		section_ir, "bitPosition",
-		json_object_new_uint64(memory_error->BitPosition));
-	json_object_object_add(section_ir, "chipID",
-			       json_object_new_uint64(memory_error->ChipId));
-	json_object_object_add(
-		section_ir, "requestorID",
-		json_object_new_uint64(memory_error->RequestorId));
-	json_object_object_add(
-		section_ir, "responderID",
-		json_object_new_uint64(memory_error->ResponderId));
-	json_object_object_add(section_ir, "targetID",
-			       json_object_new_uint64(memory_error->TargetId));
-	json_object_object_add(
-		section_ir, "cardSmbiosHandle",
-		json_object_new_uint64(memory_error->CardHandle));
-	json_object_object_add(
-		section_ir, "moduleSmbiosHandle",
-		json_object_new_uint64(memory_error->ModuleHandle));
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		json_object_object_add(
+			section_ir, "physicalAddressMask",
+			json_object_new_uint64(
+				memory_error->PhysicalAddressMask));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		json_object_object_add(
+			section_ir, "node",
+			json_object_new_uint64(memory_error->Node));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		json_object_object_add(
+			section_ir, "card",
+			json_object_new_uint64(memory_error->Card));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 5)) {
+		json_object_object_add(
+			section_ir, "module",
+			json_object_new_uint64(memory_error->Module));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 7)) {
+		json_object_object_add(
+			section_ir, "device",
+			json_object_new_uint64(memory_error->Device));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 8)) {
+		json_object_object_add(
+			section_ir, "row",
+			json_object_new_uint64(memory_error->Row));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 9)) {
+		json_object_object_add(
+			section_ir, "column",
+			json_object_new_uint64(memory_error->Column));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 10)) {
+		json_object_object_add(
+			section_ir, "rank",
+			json_object_new_uint64(memory_error->Rank));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 11)) {
+		json_object_object_add(
+			section_ir, "bitPosition",
+			json_object_new_uint64(memory_error->BitPosition));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 12)) {
+		json_object_object_add(
+			section_ir, "chipID",
+			json_object_new_uint64(memory_error->ChipId));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 15)) {
+		json_object_object_add(
+			section_ir, "requestorID",
+			json_object_new_uint64(memory_error->RequestorId));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 16)) {
+		json_object_object_add(
+			section_ir, "responderID",
+			json_object_new_uint64(memory_error->ResponderId));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 17)) {
+		json_object_object_add(
+			section_ir, "targetID",
+			json_object_new_uint64(memory_error->TargetId));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 18)) {
+		json_object_object_add(
+			section_ir, "cardSmbiosHandle",
+			json_object_new_uint64(memory_error->CardHandle));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 19)) {
+		json_object_object_add(
+			section_ir, "moduleSmbiosHandle",
+			json_object_new_uint64(memory_error->ModuleHandle));
+	}
 
 	return section_ir;
 }
@@ -228,77 +324,122 @@
 		(EFI_PLATFORM_MEMORY_ERROR_DATA *)calloc(
 			1, sizeof(EFI_PLATFORM_MEMORY_ERROR_DATA));
 
-	//Validation bits.
-	section_cper->ValidFields = ir_to_bitfield(
-		json_object_object_get(section, "validationBits"), 22,
-		MEMORY_ERROR_VALID_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 
 	//Error status.
-	ir_generic_error_status_to_cper(json_object_object_get(section,
-							       "errorStatus"),
-					&section_cper->ErrorStatus);
+	if (json_object_object_get_ex(section, "errorStatus", &obj)) {
+		ir_generic_error_status_to_cper(obj,
+						&section_cper->ErrorStatus);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
 
 	//Bank.
-	json_object *bank = json_object_object_get(section, "bank");
-	if ((section_cper->ValidFields >> 5) & 0x1) {
-		//Bank just uses simple address.
-		section_cper->Bank = (UINT16)json_object_get_uint64(
-			json_object_object_get(bank, "value"));
-	} else {
-		//Bank uses address/group style address.
-		UINT16 address = (UINT8)json_object_get_uint64(
-			json_object_object_get(bank, "address"));
-		UINT16 group = (UINT8)json_object_get_uint64(
-			json_object_object_get(bank, "group"));
-		section_cper->Bank = address + (group << 8);
+	if (json_object_object_get_ex(section, "bank", &obj)) {
+		json_object *bank = obj;
+		if (json_object_object_get_ex(bank, "value", &obj)) {
+			//Bank just uses simple address.
+			section_cper->Bank =
+				(UINT16)json_object_get_uint64(obj);
+			add_to_valid_bitfield(&ui64Type, 6);
+		} else {
+			//Bank uses address/group style address.
+			UINT16 address = (UINT8)json_object_get_uint64(
+				json_object_object_get(bank, "address"));
+			UINT16 group = (UINT8)json_object_get_uint64(
+				json_object_object_get(bank, "group"));
+			section_cper->Bank = address + (group << 8);
+			add_to_valid_bitfield(&ui64Type, 19);
+			add_to_valid_bitfield(&ui64Type, 20);
+		}
 	}
 
 	//"Extended" field.
-	json_object *extended = json_object_object_get(section, "extended");
-	section_cper->Extended = 0;
-	section_cper->Extended |= json_object_get_boolean(
-		json_object_object_get(extended, "rowBit16"));
-	section_cper->Extended |=
-		json_object_get_boolean(
-			json_object_object_get(extended, "rowBit17"))
-		<< 1;
-	section_cper->Extended |= json_object_get_int(json_object_object_get(
-					  extended, "chipIdentification"))
-				  << 5;
+	if (json_object_object_get_ex(section, "extended", &obj)) {
+		json_object *extended = obj;
+		section_cper->Extended = 0;
+		section_cper->Extended |= json_object_get_boolean(
+			json_object_object_get(extended, "rowBit16"));
+		section_cper->Extended |=
+			json_object_get_boolean(
+				json_object_object_get(extended, "rowBit17"))
+			<< 1;
+		if (json_object_object_get_ex(extended, "chipIdentification",
+					      &obj)) {
+			section_cper->Extended |= json_object_get_int(obj) << 5;
+			add_to_valid_bitfield(&ui64Type, 21);
+		}
+		add_to_valid_bitfield(&ui64Type, 18);
+	}
 
 	//Miscellaneous value fields.
-	section_cper->ErrorType = (UINT8)readable_pair_to_integer(
-		json_object_object_get(section, "memoryErrorType"));
-	section_cper->PhysicalAddress = json_object_get_uint64(
-		json_object_object_get(section, "physicalAddress"));
-	section_cper->PhysicalAddressMask = json_object_get_uint64(
-		json_object_object_get(section, "physicalAddressMask"));
-	section_cper->Node = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "node"));
-	section_cper->Card = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "card"));
-	section_cper->ModuleRank = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "moduleRank"));
-	section_cper->Device = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "device"));
-	section_cper->Row = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "row"));
-	section_cper->Column = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "column"));
-	section_cper->BitPosition = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "bitPosition"));
-	section_cper->RequestorId = json_object_get_uint64(
-		json_object_object_get(section, "requestorID"));
-	section_cper->ResponderId = json_object_get_uint64(
-		json_object_object_get(section, "responderID"));
-	section_cper->TargetId = json_object_get_uint64(
-		json_object_object_get(section, "targetID"));
-	section_cper->RankNum = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "rankNumber"));
-	section_cper->CardHandle = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "cardSmbiosHandle"));
-	section_cper->ModuleHandle = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "moduleSmbiosHandle"));
+	if (json_object_object_get_ex(section, "memoryErrorType", &obj)) {
+		section_cper->ErrorType = (UINT8)readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 14);
+	}
+	if (json_object_object_get_ex(section, "physicalAddress", &obj)) {
+		section_cper->PhysicalAddress = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
+	if (json_object_object_get_ex(section, "physicalAddressMask", &obj)) {
+		section_cper->PhysicalAddressMask = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+	if (json_object_object_get_ex(section, "node", &obj)) {
+		section_cper->Node = (UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 3);
+	}
+	if (json_object_object_get_ex(section, "card", &obj)) {
+		section_cper->Card = (UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 4);
+	}
+	if (json_object_object_get_ex(section, "moduleRank", &obj)) {
+		section_cper->ModuleRank = (UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 5);
+	}
+	if (json_object_object_get_ex(section, "device", &obj)) {
+		section_cper->Device = (UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 7);
+	}
+	if (json_object_object_get_ex(section, "row", &obj)) {
+		section_cper->Row = (UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 8);
+	}
+	if (json_object_object_get_ex(section, "column", &obj)) {
+		section_cper->Column = (UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 9);
+	}
+	if (json_object_object_get_ex(section, "bitPosition", &obj)) {
+		section_cper->BitPosition = (UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 10);
+	}
+	if (json_object_object_get_ex(section, "requestorID", &obj)) {
+		section_cper->RequestorId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 11);
+	}
+	if (json_object_object_get_ex(section, "responderID", &obj)) {
+		section_cper->ResponderId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 12);
+	}
+	if (json_object_object_get_ex(section, "targetID", &obj)) {
+		section_cper->TargetId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 13);
+	}
+	if (json_object_object_get_ex(section, "rankNumber", &obj)) {
+		section_cper->RankNum = (UINT16)json_object_get_uint64(
+			json_object_object_get(section, "rankNumber"));
+		add_to_valid_bitfield(&ui64Type, 15);
+	}
+	if (json_object_object_get_ex(section, "cardSmbiosHandle", &obj)) {
+		section_cper->CardHandle = (UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 16);
+	}
+	if (json_object_object_get_ex(section, "moduleSmbiosHandle", &obj)) {
+		section_cper->ModuleHandle =
+			(UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 17);
+	}
+	section_cper->ValidFields = ui64Type.value.ui64;
 
 	//Write to stream, free up resources.
 	fwrite(section_cper, sizeof(EFI_PLATFORM_MEMORY_ERROR_DATA), 1, out);
@@ -314,21 +455,22 @@
 			1, sizeof(EFI_PLATFORM_MEMORY2_ERROR_DATA));
 
 	//Validation bits.
-	section_cper->ValidFields = ir_to_bitfield(
-		json_object_object_get(section, "validationBits"), 22,
-		MEMORY_ERROR_2_VALID_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 
 	//Error status.
-	ir_generic_error_status_to_cper(json_object_object_get(section,
-							       "errorStatus"),
-					&section_cper->ErrorStatus);
+	if (json_object_object_get_ex(section, "errorStatus", &obj)) {
+		ir_generic_error_status_to_cper(obj,
+						&section_cper->ErrorStatus);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
 
 	//Bank.
 	json_object *bank = json_object_object_get(section, "bank");
-	if ((section_cper->ValidFields >> 5) & 0x1) {
+	if (json_object_object_get_ex(bank, "value", &obj)) {
 		//Bank just uses simple address.
-		section_cper->Bank = (UINT16)json_object_get_uint64(
-			json_object_object_get(bank, "value"));
+		section_cper->Bank = (UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 6);
 	} else {
 		//Bank uses address/group style address.
 		UINT16 address = (UINT8)json_object_get_uint64(
@@ -336,45 +478,86 @@
 		UINT16 group = (UINT8)json_object_get_uint64(
 			json_object_object_get(bank, "group"));
 		section_cper->Bank = address + (group << 8);
+		add_to_valid_bitfield(&ui64Type, 20);
+		add_to_valid_bitfield(&ui64Type, 21);
 	}
 
 	//Miscellaneous value fields.
-	section_cper->MemErrorType = readable_pair_to_integer(
-		json_object_object_get(section, "memoryErrorType"));
-	section_cper->Status = (UINT8)readable_pair_to_integer(
-		json_object_object_get(section, "status"));
-	section_cper->PhysicalAddress = json_object_get_uint64(
-		json_object_object_get(section, "physicalAddress"));
-	section_cper->PhysicalAddressMask = json_object_get_uint64(
-		json_object_object_get(section, "physicalAddressMask"));
-	section_cper->Node = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "node"));
-	section_cper->Card = (UINT16)json_object_get_uint64(
-		json_object_object_get(section, "card"));
-	section_cper->Module = (UINT32)json_object_get_uint64(
-		json_object_object_get(section, "module"));
-	section_cper->Device = (UINT32)json_object_get_uint64(
-		json_object_object_get(section, "device"));
-	section_cper->Row = (UINT32)json_object_get_uint64(
-		json_object_object_get(section, "row"));
-	section_cper->Column = (UINT32)json_object_get_uint64(
-		json_object_object_get(section, "column"));
-	section_cper->Rank = (UINT32)json_object_get_uint64(
-		json_object_object_get(section, "rank"));
-	section_cper->BitPosition = (UINT32)json_object_get_uint64(
-		json_object_object_get(section, "bitPosition"));
-	section_cper->ChipId = (UINT8)json_object_get_uint64(
-		json_object_object_get(section, "chipID"));
-	section_cper->RequestorId = json_object_get_uint64(
-		json_object_object_get(section, "requestorID"));
-	section_cper->ResponderId = json_object_get_uint64(
-		json_object_object_get(section, "responderID"));
-	section_cper->TargetId = json_object_get_uint64(
-		json_object_object_get(section, "targetID"));
-	section_cper->CardHandle = (UINT32)json_object_get_uint64(
-		json_object_object_get(section, "cardSmbiosHandle"));
-	section_cper->ModuleHandle = (UINT32)json_object_get_uint64(
-		json_object_object_get(section, "moduleSmbiosHandle"));
+	if (json_object_object_get_ex(section, "memoryErrorType", &obj)) {
+		section_cper->MemErrorType = readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 13);
+	}
+	if (json_object_object_get_ex(section, "status", &obj)) {
+		section_cper->Status = (UINT8)readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 14);
+	}
+	if (json_object_object_get_ex(section, "physicalAddress", &obj)) {
+		section_cper->PhysicalAddress = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
+	if (json_object_object_get_ex(section, "physicalAddressMask", &obj)) {
+		section_cper->PhysicalAddressMask = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+	if (json_object_object_get_ex(section, "node", &obj)) {
+		section_cper->Node = (UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 3);
+	}
+	if (json_object_object_get_ex(section, "card", &obj)) {
+		section_cper->Card = (UINT16)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 4);
+	}
+	if (json_object_object_get_ex(section, "module", &obj)) {
+		section_cper->Module = (UINT32)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 5);
+	}
+	if (json_object_object_get_ex(section, "device", &obj)) {
+		section_cper->Device = (UINT32)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 7);
+	}
+	if (json_object_object_get_ex(section, "row", &obj)) {
+		section_cper->Row = (UINT32)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 8);
+	}
+	if (json_object_object_get_ex(section, "column", &obj)) {
+		section_cper->Column = (UINT32)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 9);
+	}
+	if (json_object_object_get_ex(section, "rank", &obj)) {
+		section_cper->Rank = (UINT32)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 10);
+	}
+	if (json_object_object_get_ex(section, "bitPosition", &obj)) {
+		section_cper->BitPosition = (UINT32)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 11);
+	}
+	if (json_object_object_get_ex(section, "chipID", &obj)) {
+		section_cper->ChipId = (UINT8)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 12);
+	}
+	if (json_object_object_get_ex(section, "requestorID", &obj)) {
+		section_cper->RequestorId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 15);
+	}
+	if (json_object_object_get_ex(section, "responderID", &obj)) {
+		section_cper->ResponderId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 16);
+	}
+	if (json_object_object_get_ex(section, "targetID", &obj)) {
+		section_cper->TargetId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 17);
+	}
+	if (json_object_object_get_ex(section, "cardSmbiosHandle", &obj)) {
+		section_cper->CardHandle = (UINT32)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 18);
+	}
+	if (json_object_object_get_ex(section, "moduleSmbiosHandle", &obj)) {
+		section_cper->ModuleHandle =
+			(UINT32)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 19);
+	}
+
+	section_cper->ValidFields = ui64Type.value.ui64;
 
 	//Write to stream, free up resources.
 	fwrite(section_cper, sizeof(EFI_PLATFORM_MEMORY2_ERROR_DATA), 1, out);
diff --git a/sections/cper-section-pci-bus.c b/sections/cper-section-pci-bus.c
index ab6e921..2884f61 100644
--- a/sections/cper-section-pci-bus.c
+++ b/sections/cper-section-pci-bus.c
@@ -19,58 +19,83 @@
 	json_object *section_ir = json_object_new_object();
 
 	//Validation bits.
-	json_object *validation = bitfield_to_ir(
-		bus_error->ValidFields, 9, PCI_BUS_ERROR_VALID_BITFIELD_NAMES);
-	json_object_object_add(section_ir, "validationBits", validation);
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = bus_error->ValidFields };
 
 	//Error status.
-	json_object *error_status =
-		cper_generic_error_status_to_ir(&bus_error->ErrorStatus);
-	json_object_object_add(section_ir, "errorStatus", error_status);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *error_status = cper_generic_error_status_to_ir(
+			&bus_error->ErrorStatus);
+		json_object_object_add(section_ir, "errorStatus", error_status);
+	}
 
 	//PCI bus error type.
-	json_object *error_type = integer_to_readable_pair(
-		bus_error->Type, 8, PCI_BUS_ERROR_TYPES_KEYS,
-		PCI_BUS_ERROR_TYPES_VALUES, "Unknown (Reserved)");
-	json_object_object_add(section_ir, "errorType", error_type);
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object *error_type = integer_to_readable_pair(
+			bus_error->Type, 8, PCI_BUS_ERROR_TYPES_KEYS,
+			PCI_BUS_ERROR_TYPES_VALUES, "Unknown (Reserved)");
+		json_object_object_add(section_ir, "errorType", error_type);
+	}
 
 	//Bus ID.
-	json_object *bus_id = json_object_new_object();
-	json_object_object_add(bus_id, "busNumber",
-			       json_object_new_int(bus_error->BusId & 0xFF));
-	json_object_object_add(bus_id, "segmentNumber",
-			       json_object_new_int(bus_error->BusId >> 8));
-	json_object_object_add(section_ir, "busID", bus_id);
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		json_object *bus_id = json_object_new_object();
+		json_object_object_add(bus_id, "busNumber",
+				       json_object_new_int(bus_error->BusId &
+							   0xFF));
+		json_object_object_add(bus_id, "segmentNumber",
+				       json_object_new_int(bus_error->BusId >>
+							   8));
+		json_object_object_add(section_ir, "busID", bus_id);
+	}
 
 	//Miscellaneous numeric fields.
 	UINT8 command_type = (bus_error->BusCommand >> 56) &
 			     0x1; //Byte 7, bit 0.
-	json_object_object_add(section_ir, "busAddress",
-			       json_object_new_uint64(bus_error->BusAddress));
-	json_object_object_add(section_ir, "busData",
-			       json_object_new_uint64(bus_error->BusData));
-	json_object_object_add(
-		section_ir, "busCommandType",
-		json_object_new_string(command_type == 0 ? "PCI" : "PCI-X"));
-
-	json_object_object_add(section_ir, "busRequestorID",
-			       json_object_new_uint64(bus_error->RequestorId));
-
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		json_object_object_add(
+			section_ir, "busAddress",
+			json_object_new_uint64(bus_error->BusAddress));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		json_object_object_add(
+			section_ir, "busData",
+			json_object_new_uint64(bus_error->BusData));
+	}
+	if (isvalid_prop_to_ir(&ui64Type, 5)) {
+		json_object_object_add(
+			section_ir, "busCommandType",
+			json_object_new_string(command_type == 0 ? "PCI" :
+								   "PCI-X"));
+	}
 	char hexstring_buf[EFI_UINT64_HEX_STRING_LEN];
-	snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN, "0x%016llX",
-		 bus_error->RequestorId);
-	json_object_object_add(section_ir, "busRequestorIDHex",
-			       json_object_new_string(hexstring_buf));
 
-	json_object_object_add(section_ir, "busCompleterID",
-			       json_object_new_uint64(bus_error->ResponderId));
-	snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN, "0x%016llX",
-		 bus_error->ResponderId);
-	json_object_object_add(section_ir, "busCompleterIDHex",
-			       json_object_new_string(hexstring_buf));
+	if (isvalid_prop_to_ir(&ui64Type, 6)) {
+		json_object_object_add(
+			section_ir, "busRequestorID",
+			json_object_new_uint64(bus_error->RequestorId));
 
-	json_object_object_add(section_ir, "targetID",
-			       json_object_new_uint64(bus_error->TargetId));
+		snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN, "0x%016llX",
+			 bus_error->RequestorId);
+		json_object_object_add(section_ir, "busRequestorIDHex",
+				       json_object_new_string(hexstring_buf));
+	}
+
+	if (isvalid_prop_to_ir(&ui64Type, 7)) {
+		json_object_object_add(
+			section_ir, "busCompleterID",
+			json_object_new_uint64(bus_error->ResponderId));
+		snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN, "0x%016llX",
+			 bus_error->ResponderId);
+		json_object_object_add(section_ir, "busCompleterIDHex",
+				       json_object_new_string(hexstring_buf));
+	}
+
+	if (isvalid_prop_to_ir(&ui64Type, 8)) {
+		json_object_object_add(
+			section_ir, "targetID",
+			json_object_new_uint64(bus_error->TargetId));
+	}
 
 	return section_ir;
 }
@@ -84,41 +109,62 @@
 			1, sizeof(EFI_PCI_PCIX_BUS_ERROR_DATA));
 
 	//Validation bits.
-	section_cper->ValidFields = ir_to_bitfield(
-		json_object_object_get(section, "validationBits"), 9,
-		PCI_BUS_ERROR_VALID_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 
 	//Error status.
-	ir_generic_error_status_to_cper(json_object_object_get(section,
-							       "errorStatus"),
-					&section_cper->ErrorStatus);
+	if (json_object_object_get_ex(section, "errorStatus", &obj)) {
+		ir_generic_error_status_to_cper(obj,
+						&section_cper->ErrorStatus);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
 
 	//Bus ID.
-	json_object *bus_id = json_object_object_get(section, "busID");
-	UINT16 bus_number = (UINT8)json_object_get_int(
-		json_object_object_get(bus_id, "busNumber"));
-	UINT16 segment_number = (UINT8)json_object_get_int(
-		json_object_object_get(bus_id, "segmentNumber"));
-	section_cper->BusId = bus_number + (segment_number << 8);
+	if (json_object_object_get_ex(section, "busID", &obj)) {
+		json_object *bus_id = json_object_object_get(section, "busID");
+		UINT16 bus_number = (UINT8)json_object_get_int(
+			json_object_object_get(bus_id, "busNumber"));
+		UINT16 segment_number = (UINT8)json_object_get_int(
+			json_object_object_get(bus_id, "segmentNumber"));
+		section_cper->BusId = bus_number + (segment_number << 8);
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
 
 	//Remaining fields.
 	UINT64 pcix_command = (UINT64)0x1 << 56;
-	const char *bus_command = json_object_get_string(
-		json_object_object_get(section, "busCommandType"));
-	section_cper->Type = (UINT16)readable_pair_to_integer(
-		json_object_object_get(section, "errorType"));
-	section_cper->BusAddress = json_object_get_uint64(
-		json_object_object_get(section, "busAddress"));
-	section_cper->BusData = json_object_get_uint64(
-		json_object_object_get(section, "busData"));
-	section_cper->BusCommand =
-		strcmp(bus_command, "PCI") == 0 ? 0 : pcix_command;
-	section_cper->RequestorId = json_object_get_uint64(
-		json_object_object_get(section, "busRequestorID"));
-	section_cper->ResponderId = json_object_get_uint64(
-		json_object_object_get(section, "busCompleterID"));
-	section_cper->TargetId = json_object_get_uint64(
-		json_object_object_get(section, "targetID"));
+
+	if (json_object_object_get_ex(section, "errorType", &obj)) {
+		section_cper->Type = (UINT16)readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
+	if (json_object_object_get_ex(section, "busAddress", &obj)) {
+		section_cper->BusAddress = json_object_get_uint64(
+			json_object_object_get(section, "busAddress"));
+		add_to_valid_bitfield(&ui64Type, 3);
+	}
+	if (json_object_object_get_ex(section, "busData", &obj)) {
+		section_cper->BusData = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 4);
+	}
+	if (json_object_object_get_ex(section, "busCommandType", &obj)) {
+		const char *bus_command = json_object_get_string(obj);
+		section_cper->BusCommand =
+			strcmp(bus_command, "PCI") == 0 ? 0 : pcix_command;
+		add_to_valid_bitfield(&ui64Type, 5);
+	}
+	if (json_object_object_get_ex(section, "busRequestorID", &obj)) {
+		section_cper->RequestorId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 6);
+	}
+	if (json_object_object_get_ex(section, "busCompleterID", &obj)) {
+		section_cper->ResponderId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 7);
+	}
+	if (json_object_object_get_ex(section, "targetID", &obj)) {
+		section_cper->TargetId = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 8);
+	}
+	section_cper->ValidFields = ui64Type.value.ui64;
 
 	//Write to stream, free resources.
 	fwrite(section_cper, sizeof(EFI_PCI_PCIX_BUS_ERROR_DATA), 1, out);
diff --git a/sections/cper-section-pci-dev.c b/sections/cper-section-pci-dev.c
index ccf9f0c..8dc899b 100644
--- a/sections/cper-section-pci-dev.c
+++ b/sections/cper-section-pci-dev.c
@@ -18,67 +18,85 @@
 	json_object *section_ir = json_object_new_object();
 
 	//Validation bits.
-	json_object *validation = bitfield_to_ir(
-		dev_error->ValidFields, 5, PCI_DEV_ERROR_VALID_BITFIELD_NAMES);
-	json_object_object_add(section_ir, "validationBits", validation);
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = dev_error->ValidFields };
 
 	//Error status.
-	json_object *error_status =
-		cper_generic_error_status_to_ir(&dev_error->ErrorStatus);
-	json_object_object_add(section_ir, "errorStatus", error_status);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *error_status = cper_generic_error_status_to_ir(
+			&dev_error->ErrorStatus);
+		json_object_object_add(section_ir, "errorStatus", error_status);
+	}
 
 	//ID information.
-	json_object *id_info = json_object_new_object();
-	json_object_object_add(
-		id_info, "vendorID",
-		json_object_new_uint64(dev_error->IdInfo.VendorId));
-	json_object_object_add(
-		id_info, "deviceID",
-		json_object_new_uint64(dev_error->IdInfo.DeviceId));
-	json_object_object_add(
-		id_info, "classCode",
-		json_object_new_uint64(dev_error->IdInfo.ClassCode));
-	json_object_object_add(
-		id_info, "functionNumber",
-		json_object_new_uint64(dev_error->IdInfo.FunctionNumber));
-	json_object_object_add(
-		id_info, "deviceNumber",
-		json_object_new_uint64(dev_error->IdInfo.DeviceNumber));
-	json_object_object_add(
-		id_info, "busNumber",
-		json_object_new_uint64(dev_error->IdInfo.BusNumber));
-	json_object_object_add(
-		id_info, "segmentNumber",
-		json_object_new_uint64(dev_error->IdInfo.SegmentNumber));
-	json_object_object_add(section_ir, "idInfo", id_info);
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object *id_info = json_object_new_object();
+		json_object_object_add(
+			id_info, "vendorID",
+			json_object_new_uint64(dev_error->IdInfo.VendorId));
+		json_object_object_add(
+			id_info, "deviceID",
+			json_object_new_uint64(dev_error->IdInfo.DeviceId));
+		json_object_object_add(
+			id_info, "classCode",
+			json_object_new_uint64(dev_error->IdInfo.ClassCode));
+		json_object_object_add(
+			id_info, "functionNumber",
+			json_object_new_uint64(
+				dev_error->IdInfo.FunctionNumber));
+		json_object_object_add(
+			id_info, "deviceNumber",
+			json_object_new_uint64(dev_error->IdInfo.DeviceNumber));
+		json_object_object_add(
+			id_info, "busNumber",
+			json_object_new_uint64(dev_error->IdInfo.BusNumber));
+		json_object_object_add(
+			id_info, "segmentNumber",
+			json_object_new_uint64(
+				dev_error->IdInfo.SegmentNumber));
+		json_object_object_add(section_ir, "idInfo", id_info);
+	}
 
 	//Number of following register data pairs.
-	json_object_object_add(section_ir, "memoryNumber",
-			       json_object_new_uint64(dev_error->MemoryNumber));
-	json_object_object_add(section_ir, "ioNumber",
-			       json_object_new_uint64(dev_error->IoNumber));
-	int num_data_pairs = dev_error->MemoryNumber + dev_error->IoNumber;
-
-	//Register pairs, described by the numeric fields.
-	//The actual "pairs" of address and data aren't necessarily 8 bytes long, so can't assume the contents.
-	//Hence the naming "firstHalf" and "secondHalf" rather than "address" and "data".
-	json_object *register_data_pair_array = json_object_new_array();
-	UINT64 *cur_pos = (UINT64 *)(dev_error + 1);
-	for (int i = 0; i < num_data_pairs; i++) {
-		//Save current pair to array.
-		json_object *register_data_pair = json_object_new_object();
-		json_object_object_add(register_data_pair, "firstHalf",
-				       json_object_new_uint64(*cur_pos));
-		json_object_object_add(register_data_pair, "secondHalf",
-				       json_object_new_uint64(*(cur_pos + 1)));
-		json_object_array_add(register_data_pair_array,
-				      register_data_pair);
-
-		//Move to next pair.
-		cur_pos += 2;
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		json_object_object_add(
+			section_ir, "memoryNumber",
+			json_object_new_uint64(dev_error->MemoryNumber));
 	}
-	json_object_object_add(section_ir, "registerDataPairs",
-			       register_data_pair_array);
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		json_object_object_add(
+			section_ir, "ioNumber",
+			json_object_new_uint64(dev_error->IoNumber));
+	}
+
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		int num_data_pairs =
+			dev_error->MemoryNumber + dev_error->IoNumber;
+
+		//Register pairs, described by the numeric fields.
+		//The actual "pairs" of address and data aren't necessarily 8 bytes long, so can't assume the contents.
+		//Hence the naming "firstHalf" and "secondHalf" rather than "address" and "data".
+		json_object *register_data_pair_array = json_object_new_array();
+		UINT64 *cur_pos = (UINT64 *)(dev_error + 1);
+		for (int i = 0; i < num_data_pairs; i++) {
+			//Save current pair to array.
+			json_object *register_data_pair =
+				json_object_new_object();
+			json_object_object_add(
+				register_data_pair, "firstHalf",
+				json_object_new_uint64(*cur_pos));
+			json_object_object_add(
+				register_data_pair, "secondHalf",
+				json_object_new_uint64(*(cur_pos + 1)));
+			json_object_array_add(register_data_pair_array,
+					      register_data_pair);
+
+			//Move to next pair.
+			cur_pos += 2;
+		}
+		json_object_object_add(section_ir, "registerDataPairs",
+				       register_data_pair_array);
+	}
 
 	return section_ir;
 }
@@ -90,37 +108,53 @@
 			1, sizeof(EFI_PCI_PCIX_DEVICE_ERROR_DATA));
 
 	//Validation bits.
-	section_cper->ValidFields = ir_to_bitfield(
-		json_object_object_get(section, "validationBits"), 5,
-		PCI_DEV_ERROR_VALID_BITFIELD_NAMES);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 
 	//Error status.
-	ir_generic_error_status_to_cper(json_object_object_get(section,
-							       "errorStatus"),
-					&section_cper->ErrorStatus);
+	if (json_object_object_get_ex(section, "errorStatus", &obj)) {
+		ir_generic_error_status_to_cper(obj,
+						&section_cper->ErrorStatus);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
 
 	//Device ID information.
-	json_object *id_info = json_object_object_get(section, "idInfo");
-	section_cper->IdInfo.VendorId = json_object_get_uint64(
-		json_object_object_get(id_info, "vendorID"));
-	section_cper->IdInfo.DeviceId = json_object_get_uint64(
-		json_object_object_get(id_info, "deviceID"));
-	section_cper->IdInfo.ClassCode = json_object_get_uint64(
-		json_object_object_get(id_info, "classCode"));
-	section_cper->IdInfo.FunctionNumber = json_object_get_uint64(
-		json_object_object_get(id_info, "functionNumber"));
-	section_cper->IdInfo.DeviceNumber = json_object_get_uint64(
-		json_object_object_get(id_info, "deviceNumber"));
-	section_cper->IdInfo.BusNumber = json_object_get_uint64(
-		json_object_object_get(id_info, "busNumber"));
-	section_cper->IdInfo.SegmentNumber = json_object_get_uint64(
-		json_object_object_get(id_info, "segmentNumber"));
+	if (json_object_object_get_ex(section, "idInfo", &obj)) {
+		json_object *id_info = obj;
+		section_cper->IdInfo.VendorId = json_object_get_uint64(
+			json_object_object_get(id_info, "vendorID"));
+		section_cper->IdInfo.DeviceId = json_object_get_uint64(
+			json_object_object_get(id_info, "deviceID"));
+		section_cper->IdInfo.ClassCode = json_object_get_uint64(
+			json_object_object_get(id_info, "classCode"));
+		section_cper->IdInfo.FunctionNumber = json_object_get_uint64(
+			json_object_object_get(id_info, "functionNumber"));
+		section_cper->IdInfo.DeviceNumber = json_object_get_uint64(
+			json_object_object_get(id_info, "deviceNumber"));
+		section_cper->IdInfo.BusNumber = json_object_get_uint64(
+			json_object_object_get(id_info, "busNumber"));
+		section_cper->IdInfo.SegmentNumber = json_object_get_uint64(
+			json_object_object_get(id_info, "segmentNumber"));
+		add_to_valid_bitfield(&ui64Type, 1);
+	}
 
 	//Amount of following data pairs.
-	section_cper->MemoryNumber = (UINT32)json_object_get_uint64(
-		json_object_object_get(section, "memoryNumber"));
-	section_cper->IoNumber = (UINT32)json_object_get_uint64(
-		json_object_object_get(section, "ioNumber"));
+	if (json_object_object_get_ex(section, "memoryNumber", &obj)) {
+		section_cper->MemoryNumber =
+			(UINT32)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+	if (json_object_object_get_ex(section, "ioNumber", &obj)) {
+		section_cper->IoNumber = (UINT32)json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 3);
+	}
+	json_object *register_pairs = NULL;
+	if (json_object_object_get_ex(section, "registerDataPairs", &obj)) {
+		register_pairs = obj;
+		add_to_valid_bitfield(&ui64Type, 4);
+	}
+
+	section_cper->ValidFields = ui64Type.value.ui64;
 
 	//Write header out to stream, free it.
 	fwrite(section_cper, sizeof(EFI_PCI_PCIX_DEVICE_ERROR_DATA), 1, out);
@@ -128,23 +162,23 @@
 	free(section_cper);
 
 	//Begin writing register pairs.
-	json_object *register_pairs =
-		json_object_object_get(section, "registerDataPairs");
-	int num_pairs = json_object_array_length(register_pairs);
-	for (int i = 0; i < num_pairs; i++) {
-		//Get the pair array item out.
-		json_object *register_pair =
-			json_object_array_get_idx(register_pairs, i);
+	if (register_pairs != NULL) {
+		int num_pairs = json_object_array_length(register_pairs);
+		for (int i = 0; i < num_pairs; i++) {
+			//Get the pair array item out.
+			json_object *register_pair =
+				json_object_array_get_idx(register_pairs, i);
 
-		//Create the pair array.
-		UINT64 pair[2];
-		pair[0] = json_object_get_uint64(
-			json_object_object_get(register_pair, "firstHalf"));
-		pair[1] = json_object_get_uint64(
-			json_object_object_get(register_pair, "secondHalf"));
+			//Create the pair array.
+			UINT64 pair[2];
+			pair[0] = json_object_get_uint64(json_object_object_get(
+				register_pair, "firstHalf"));
+			pair[1] = json_object_get_uint64(json_object_object_get(
+				register_pair, "secondHalf"));
 
-		//Push to stream.
-		fwrite(pair, sizeof(UINT64), 2, out);
-		fflush(out);
+			//Push to stream.
+			fwrite(pair, sizeof(UINT64), 2, out);
+			fflush(out);
+		}
 	}
 }
diff --git a/sections/cper-section-pcie.c b/sections/cper-section-pcie.c
index ae91cc1..05c1a53 100644
--- a/sections/cper-section-pcie.c
+++ b/sections/cper-section-pcie.c
@@ -30,181 +30,214 @@
 	json_object *section_ir = json_object_new_object();
 
 	//Validation bits.
-	json_object *validation = bitfield_to_ir(
-		pcie_error->ValidFields, 8, PCIE_ERROR_VALID_BITFIELD_NAMES);
-	json_object_object_add(section_ir, "validationBits", validation);
+	ValidationTypes ui64Type = { UINT_64T,
+				     .value.ui64 = pcie_error->ValidFields };
 
 	//Port type.
-	json_object *port_type = integer_to_readable_pair(
-		pcie_error->PortType, 9, PCIE_ERROR_PORT_TYPES_KEYS,
-		PCIE_ERROR_PORT_TYPES_VALUES, "Unknown");
-	json_object_object_add(section_ir, "portType", port_type);
+	if (isvalid_prop_to_ir(&ui64Type, 0)) {
+		json_object *port_type = integer_to_readable_pair(
+			pcie_error->PortType, 9, PCIE_ERROR_PORT_TYPES_KEYS,
+			PCIE_ERROR_PORT_TYPES_VALUES, "Unknown");
+		json_object_object_add(section_ir, "portType", port_type);
+	}
 
 	//Version, provided each half in BCD.
-	json_object *version = json_object_new_object();
-	json_object_object_add(
-		version, "minor",
-		json_object_new_int(bcd_to_int(pcie_error->Version & 0xFF)));
-	json_object_object_add(
-		version, "major",
-		json_object_new_int(bcd_to_int(pcie_error->Version >> 8)));
-	json_object_object_add(section_ir, "version", version);
+	if (isvalid_prop_to_ir(&ui64Type, 1)) {
+		json_object *version = json_object_new_object();
+		json_object_object_add(version, "minor",
+				       json_object_new_int(bcd_to_int(
+					       pcie_error->Version & 0xFF)));
+		json_object_object_add(version, "major",
+				       json_object_new_int(bcd_to_int(
+					       pcie_error->Version >> 8)));
+		json_object_object_add(section_ir, "version", version);
+	}
 
 	//Command & status.
-	json_object *command_status = json_object_new_object();
-	json_object_object_add(
-		command_status, "commandRegister",
-		json_object_new_uint64(pcie_error->CommandStatus & 0xFFFF));
-	json_object_object_add(
-		command_status, "statusRegister",
-		json_object_new_uint64(pcie_error->CommandStatus >> 16));
-	json_object_object_add(section_ir, "commandStatus", command_status);
+	if (isvalid_prop_to_ir(&ui64Type, 2)) {
+		json_object *command_status = json_object_new_object();
+		json_object_object_add(
+			command_status, "commandRegister",
+			json_object_new_uint64(pcie_error->CommandStatus &
+					       0xFFFF));
+		json_object_object_add(
+			command_status, "statusRegister",
+			json_object_new_uint64(pcie_error->CommandStatus >>
+					       16));
+		json_object_object_add(section_ir, "commandStatus",
+				       command_status);
+	}
 
 	//PCIe Device ID.
-	json_object *device_id = json_object_new_object();
-	UINT64 class_id = (pcie_error->DevBridge.ClassCode[0] << 16) +
-			  (pcie_error->DevBridge.ClassCode[1] << 8) +
-			  pcie_error->DevBridge.ClassCode[2];
-	json_object_object_add(
-		device_id, "vendorID",
-		json_object_new_uint64(pcie_error->DevBridge.VendorId));
-	json_object_object_add(
-		device_id, "deviceID",
-		json_object_new_uint64(pcie_error->DevBridge.DeviceId));
-
 	char hexstring_buf[EFI_UINT64_HEX_STRING_LEN];
-	snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN, "0x%0X",
-		 pcie_error->DevBridge.DeviceId);
-	json_object_object_add(device_id, "deviceIDHex",
-			       json_object_new_string(hexstring_buf));
+	if (isvalid_prop_to_ir(&ui64Type, 3)) {
+		json_object *device_id = json_object_new_object();
+		UINT64 class_id = (pcie_error->DevBridge.ClassCode[0] << 16) +
+				  (pcie_error->DevBridge.ClassCode[1] << 8) +
+				  pcie_error->DevBridge.ClassCode[2];
+		json_object_object_add(
+			device_id, "vendorID",
+			json_object_new_uint64(pcie_error->DevBridge.VendorId));
+		json_object_object_add(
+			device_id, "deviceID",
+			json_object_new_uint64(pcie_error->DevBridge.DeviceId));
 
-	json_object_object_add(device_id, "classCode",
-			       json_object_new_uint64(class_id));
-	json_object_object_add(
-		device_id, "functionNumber",
-		json_object_new_uint64(pcie_error->DevBridge.Function));
-	json_object_object_add(
-		device_id, "deviceNumber",
-		json_object_new_uint64(pcie_error->DevBridge.Device));
-	json_object_object_add(
-		device_id, "segmentNumber",
-		json_object_new_uint64(pcie_error->DevBridge.Segment));
-	json_object_object_add(
-		device_id, "primaryOrDeviceBusNumber",
-		json_object_new_uint64(
-			pcie_error->DevBridge.PrimaryOrDeviceBus));
-	json_object_object_add(
-		device_id, "secondaryBusNumber",
-		json_object_new_uint64(pcie_error->DevBridge.SecondaryBus));
-	json_object_object_add(
-		device_id, "slotNumber",
-		json_object_new_uint64(pcie_error->DevBridge.Slot.Number));
-	json_object_object_add(section_ir, "deviceID", device_id);
+		snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN, "0x%0X",
+			 pcie_error->DevBridge.DeviceId);
+		json_object_object_add(device_id, "deviceIDHex",
+				       json_object_new_string(hexstring_buf));
+
+		json_object_object_add(device_id, "classCode",
+				       json_object_new_uint64(class_id));
+		json_object_object_add(
+			device_id, "functionNumber",
+			json_object_new_uint64(pcie_error->DevBridge.Function));
+		json_object_object_add(
+			device_id, "deviceNumber",
+			json_object_new_uint64(pcie_error->DevBridge.Device));
+		json_object_object_add(
+			device_id, "segmentNumber",
+			json_object_new_uint64(pcie_error->DevBridge.Segment));
+		json_object_object_add(
+			device_id, "primaryOrDeviceBusNumber",
+			json_object_new_uint64(
+				pcie_error->DevBridge.PrimaryOrDeviceBus));
+		json_object_object_add(
+			device_id, "secondaryBusNumber",
+			json_object_new_uint64(
+				pcie_error->DevBridge.SecondaryBus));
+		json_object_object_add(
+			device_id, "slotNumber",
+			json_object_new_uint64(
+				pcie_error->DevBridge.Slot.Number));
+		json_object_object_add(section_ir, "deviceID", device_id);
+	}
 
 	//Device serial number.
-	json_object_object_add(section_ir, "deviceSerialNumber",
-			       json_object_new_uint64(pcie_error->SerialNo));
+	if (isvalid_prop_to_ir(&ui64Type, 4)) {
+		json_object_object_add(
+			section_ir, "deviceSerialNumber",
+			json_object_new_uint64(pcie_error->SerialNo));
+	}
 
 	//Bridge control status.
-	json_object *bridge_control_status = json_object_new_object();
-	json_object_object_add(
-		bridge_control_status, "secondaryStatusRegister",
-		json_object_new_uint64(pcie_error->BridgeControlStatus &
-				       0xFFFF));
-	json_object_object_add(
-		bridge_control_status, "controlRegister",
-		json_object_new_uint64(pcie_error->BridgeControlStatus >> 16));
-	json_object_object_add(section_ir, "bridgeControlStatus",
-			       bridge_control_status);
+	if (isvalid_prop_to_ir(&ui64Type, 5)) {
+		json_object *bridge_control_status = json_object_new_object();
+		json_object_object_add(
+			bridge_control_status, "secondaryStatusRegister",
+			json_object_new_uint64(pcie_error->BridgeControlStatus &
+					       0xFFFF));
+		json_object_object_add(
+			bridge_control_status, "controlRegister",
+			json_object_new_uint64(
+				pcie_error->BridgeControlStatus >> 16));
+		json_object_object_add(section_ir, "bridgeControlStatus",
+				       bridge_control_status);
+	}
 
 	//Capability structure.
 	//The PCIe capability structure provided here could either be PCIe 1.1 Capability Structure
 	//(36-byte, padded to 60 bytes) or PCIe 2.0 Capability Structure (60-byte). There does not seem
 	//to be a way to differentiate these, so this is left as a b64 dump.
 	int32_t encoded_len = 0;
-
-	char *encoded = base64_encode((UINT8 *)pcie_error->Capability.PcieCap,
+	char *encoded = NULL;
+	if (isvalid_prop_to_ir(&ui64Type, 6)) {
+		char *encoded =
+			base64_encode((UINT8 *)pcie_error->Capability.PcieCap,
 				      60, &encoded_len);
-	if (encoded == NULL) {
-		printf("Failed to allocate encode output buffer. \n");
-	} else {
-		json_object *capability = json_object_new_object();
-		json_object_object_add(capability, "data",
-				       json_object_new_string_len(encoded,
-								  encoded_len));
-		free(encoded);
+		if (encoded == NULL) {
+			printf("Failed to allocate encode output buffer. \n");
+		} else {
+			json_object *capability = json_object_new_object();
+			json_object_object_add(capability, "data",
+					       json_object_new_string_len(
+						       encoded, encoded_len));
+			free(encoded);
 
-		json_object_object_add(section_ir, "capabilityStructure",
-				       capability);
+			json_object_object_add(
+				section_ir, "capabilityStructure", capability);
+		}
 	}
 
 	//AER information.
-	json_object *aer_capability_ir = json_object_new_object();
 	encoded_len = 0;
+	encoded = NULL;
+	if (isvalid_prop_to_ir(&ui64Type, 7)) {
+		json_object *aer_capability_ir = json_object_new_object();
 
-	encoded = base64_encode((UINT8 *)pcie_error->AerInfo.PcieAer, 96,
-				&encoded_len);
-	if (encoded == NULL) {
-		printf("Failed to allocate encode output buffer. \n");
-	} else {
-		json_object_object_add(aer_capability_ir, "data",
-				       json_object_new_string_len(encoded,
-								  encoded_len));
-		free(encoded);
+		encoded = base64_encode((UINT8 *)pcie_error->AerInfo.PcieAer,
+					96, &encoded_len);
+		if (encoded == NULL) {
+			printf("Failed to allocate encode output buffer. \n");
+		} else {
+			json_object_object_add(aer_capability_ir, "data",
+					       json_object_new_string_len(
+						       encoded, encoded_len));
+			free(encoded);
+		}
+
+		struct aer_info_registers *aer_decode;
+		aer_decode = (struct aer_info_registers *)&pcie_error->AerInfo
+				     .PcieAer;
+		json_object_object_add(
+			aer_capability_ir, "capability_header",
+			json_object_new_uint64(
+				aer_decode->pcie_capability_header));
+		json_object_object_add(
+			aer_capability_ir, "uncorrectable_error_status",
+			json_object_new_uint64(
+				aer_decode->uncorrectable_error_status));
+
+		snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN,
+			 "0x%08" PRIX32,
+			 aer_decode->uncorrectable_error_status);
+		json_object_object_add(aer_capability_ir,
+				       "uncorrectable_error_status_hex",
+				       json_object_new_string(hexstring_buf));
+
+		json_object_object_add(
+			aer_capability_ir, "uncorrectable_error_mask",
+			json_object_new_uint64(
+				aer_decode->uncorrectable_error_mask));
+		json_object_object_add(
+			aer_capability_ir, "uncorrectable_error_severity",
+			json_object_new_uint64(
+				aer_decode->uncorrectable_error_severity));
+		json_object_object_add(
+			aer_capability_ir, "correctable_error_status",
+			json_object_new_uint64(
+				aer_decode->correctable_error_status));
+
+		snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN,
+			 "0x%08" PRIX32, aer_decode->correctable_error_status);
+		json_object_object_add(aer_capability_ir,
+				       "correctable_error_status_hex",
+				       json_object_new_string(hexstring_buf));
+
+		json_object_object_add(
+			aer_capability_ir, "correctable_error_mask",
+			json_object_new_uint64(
+				aer_decode->correctable_error_mask));
+		json_object_object_add(
+			aer_capability_ir, "capabilites_control",
+			json_object_new_uint64(
+				aer_decode->aer_capabilites_control));
+		json_object_object_add(
+			aer_capability_ir, "tlp_header_0",
+			json_object_new_uint64(aer_decode->tlp_header_log[0]));
+		json_object_object_add(
+			aer_capability_ir, "tlp_header_1",
+			json_object_new_uint64(aer_decode->tlp_header_log[1]));
+		json_object_object_add(
+			aer_capability_ir, "tlp_header_2",
+			json_object_new_uint64(aer_decode->tlp_header_log[2]));
+		json_object_object_add(
+			aer_capability_ir, "tlp_header_3",
+			json_object_new_uint64(aer_decode->tlp_header_log[3]));
+		json_object_object_add(section_ir, "aerInfo",
+				       aer_capability_ir);
 	}
 
-	struct aer_info_registers *aer_decode;
-	aer_decode = (struct aer_info_registers *)&pcie_error->AerInfo.PcieAer;
-	json_object_object_add(
-		aer_capability_ir, "capability_header",
-		json_object_new_uint64(aer_decode->pcie_capability_header));
-	json_object_object_add(
-		aer_capability_ir, "uncorrectable_error_status",
-		json_object_new_uint64(aer_decode->uncorrectable_error_status));
-
-	snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN, "0x%08" PRIX32,
-		 aer_decode->uncorrectable_error_status);
-	json_object_object_add(aer_capability_ir,
-			       "uncorrectable_error_status_hex",
-			       json_object_new_string(hexstring_buf));
-
-	json_object_object_add(
-		aer_capability_ir, "uncorrectable_error_mask",
-		json_object_new_uint64(aer_decode->uncorrectable_error_mask));
-	json_object_object_add(
-		aer_capability_ir, "uncorrectable_error_severity",
-		json_object_new_uint64(
-			aer_decode->uncorrectable_error_severity));
-	json_object_object_add(
-		aer_capability_ir, "correctable_error_status",
-		json_object_new_uint64(aer_decode->correctable_error_status));
-
-	snprintf(hexstring_buf, EFI_UINT64_HEX_STRING_LEN, "0x%08" PRIX32,
-		 aer_decode->correctable_error_status);
-	json_object_object_add(aer_capability_ir,
-			       "correctable_error_status_hex",
-			       json_object_new_string(hexstring_buf));
-
-	json_object_object_add(
-		aer_capability_ir, "correctable_error_mask",
-		json_object_new_uint64(aer_decode->correctable_error_mask));
-	json_object_object_add(
-		aer_capability_ir, "capabilites_control",
-		json_object_new_uint64(aer_decode->aer_capabilites_control));
-	json_object_object_add(
-		aer_capability_ir, "tlp_header_0",
-		json_object_new_uint64(aer_decode->tlp_header_log[0]));
-	json_object_object_add(
-		aer_capability_ir, "tlp_header_1",
-		json_object_new_uint64(aer_decode->tlp_header_log[1]));
-	json_object_object_add(
-		aer_capability_ir, "tlp_header_2",
-		json_object_new_uint64(aer_decode->tlp_header_log[2]));
-	json_object_object_add(
-		aer_capability_ir, "tlp_header_3",
-		json_object_new_uint64(aer_decode->tlp_header_log[3]));
-	json_object_object_add(section_ir, "aerInfo", aer_capability_ir);
-
 	return section_ir;
 }
 
@@ -215,101 +248,136 @@
 		(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);
+	ValidationTypes ui64Type = { UINT_64T, .value.ui64 = 0 };
+	struct json_object *obj = NULL;
 
 	//Version.
-	json_object *version = json_object_object_get(section, "version");
-	UINT32 minor = int_to_bcd(
-		json_object_get_int(json_object_object_get(version, "minor")));
-	UINT32 major = int_to_bcd(
-		json_object_get_int(json_object_object_get(version, "major")));
-	section_cper->Version = minor + (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[2] = 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");
-
-	int32_t decoded_len = 0;
-
-	UINT8 *decoded = base64_decode(json_object_get_string(encoded),
-				       json_object_get_string_len(encoded),
-				       &decoded_len);
-	if (decoded == NULL) {
-		printf("Failed to allocate decode output buffer. \n");
-	} else {
-		memcpy(section_cper->Capability.PcieCap, decoded, decoded_len);
-		free(decoded);
+	if (json_object_object_get_ex(section, "version", &obj)) {
+		json_object *version = obj;
+		UINT32 minor = int_to_bcd(json_object_get_int(
+			json_object_object_get(version, "minor")));
+		UINT32 major = int_to_bcd(json_object_get_int(
+			json_object_object_get(version, "major")));
+		section_cper->Version = minor + (major << 8);
+		add_to_valid_bitfield(&ui64Type, 1);
 	}
 
+	//Command/status registers.
+	if (json_object_object_get_ex(section, "commandStatus", &obj)) {
+		json_object *command_status = obj;
+		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);
+		add_to_valid_bitfield(&ui64Type, 2);
+	}
+
+	//Device ID.
+	if (json_object_object_get_ex(section, "deviceID", &obj)) {
+		json_object *device_id = obj;
+		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[2] = 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"));
+		add_to_valid_bitfield(&ui64Type, 3);
+	}
+
+	//Bridge/control status.
+	if (json_object_object_get_ex(section, "bridgeControlStatus", &obj)) {
+		json_object *bridge_control = obj;
+		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);
+		add_to_valid_bitfield(&ui64Type, 5);
+	}
+
+	//Capability structure.
+	int32_t decoded_len = 0;
+	UINT8 *decoded = NULL;
+	json_object *encoded = NULL;
+	if (json_object_object_get_ex(section, "capabilityStructure", &obj)) {
+		json_object *capability = obj;
+		json_object *encoded =
+			json_object_object_get(capability, "data");
+
+		UINT8 *decoded = base64_decode(
+			json_object_get_string(encoded),
+			json_object_get_string_len(encoded), &decoded_len);
+		if (decoded == NULL) {
+			printf("Failed to allocate decode output buffer. \n");
+		} else {
+			memcpy(section_cper->Capability.PcieCap, decoded,
+			       decoded_len);
+			free(decoded);
+		}
+		add_to_valid_bitfield(&ui64Type, 6);
+	}
+
+	decoded = NULL;
+	encoded = NULL;
 	//AER capability structure.
-	json_object *aer_info = json_object_object_get(section, "aerInfo");
-	encoded = json_object_object_get(aer_info, "data");
-	decoded_len = 0;
+	if (json_object_object_get_ex(section, "aerInfo", &obj)) {
+		json_object *aer_info = obj;
+		encoded = json_object_object_get(aer_info, "data");
+		decoded_len = 0;
 
-	decoded = base64_decode(json_object_get_string(encoded),
-				json_object_get_string_len(encoded),
-				&decoded_len);
+		decoded = base64_decode(json_object_get_string(encoded),
+					json_object_get_string_len(encoded),
+					&decoded_len);
 
-	if (decoded == NULL) {
-		printf("Failed to allocate decode output buffer. \n");
-	} else {
-		memcpy(section_cper->AerInfo.PcieAer, decoded, decoded_len);
-		free(decoded);
+		if (decoded == NULL) {
+			printf("Failed to allocate decode output buffer. \n");
+		} else {
+			memcpy(section_cper->AerInfo.PcieAer, decoded,
+			       decoded_len);
+			free(decoded);
+		}
+		add_to_valid_bitfield(&ui64Type, 7);
 	}
 
 	//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"));
+	if (json_object_object_get_ex(section, "portType", &obj)) {
+		section_cper->PortType = (UINT32)readable_pair_to_integer(obj);
+		add_to_valid_bitfield(&ui64Type, 0);
+	}
+	if (json_object_object_get_ex(section, "deviceSerialNumber", &obj)) {
+		section_cper->SerialNo = json_object_get_uint64(obj);
+		add_to_valid_bitfield(&ui64Type, 4);
+	}
+
+	section_cper->ValidFields = ui64Type.value.ui64;
 
 	//Write out to stream, free resources.
 	fwrite(section_cper, sizeof(EFI_PCIE_ERROR_DATA), 1, out);
diff --git a/specification/json/cper-json-header.json b/specification/json/cper-json-header.json
index 8edb4e1..d031d2f 100644
--- a/specification/json/cper-json-header.json
+++ b/specification/json/cper-json-header.json
@@ -7,7 +7,6 @@
         "revision",
         "sectionCount",
         "severity",
-        "validationBits",
         "recordLength",
         "creatorID",
         "notificationType",
@@ -51,26 +50,6 @@
                 }
             }
         },
-        "validationBits": {
-            "type": "object",
-            "description": "This field indicates the validity of other header feilds.",
-            "required": [
-                "platformIDValid",
-                "timestampValid",
-                "partitionIDValid"
-            ],
-            "properties": {
-                "platformIDValid": {
-                    "type": "boolean"
-                },
-                "timestampValid": {
-                    "type": "boolean"
-                },
-                "partitionIDValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "recordLength": {
             "type": "integer",
             "description": "Indicates the size of the actual error record, including the size of the record header, all section descriptors, and section bodies.",
diff --git a/specification/json/cper-json-section-descriptor.json b/specification/json/cper-json-section-descriptor.json
index 5bb4dc8..d9c101c 100644
--- a/specification/json/cper-json-section-descriptor.json
+++ b/specification/json/cper-json-section-descriptor.json
@@ -7,7 +7,6 @@
         "sectionOffset",
         "sectionLength",
         "revision",
-        "validationBits",
         "flags",
         "sectionType",
         "severity"
@@ -37,19 +36,6 @@
                 }
             }
         },
-        "validationBits": {
-            "type": "object",
-            "description": "This field indicates the validity of other feilds in this descriptor.",
-            "required": ["fruIDValid", "fruStringValid"],
-            "properties": {
-                "fruIDValid": {
-                    "type": "boolean"
-                },
-                "fruStringValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "flags": {
             "type": "object",
             "required": [
diff --git a/specification/json/sections/cper-arm-processor.json b/specification/json/sections/cper-arm-processor.json
index bcfaee3..50895f9 100644
--- a/specification/json/sections/cper-arm-processor.json
+++ b/specification/json/sections/cper-arm-processor.json
@@ -2,45 +2,9 @@
     "$schema": "https://json-schema.org/draft/2020-12/schema",
     "type": "object",
     "description": "ARM Processor Error Section",
-    "required": [
-        "validationBits",
-        "errorInfoNum",
-        "contextInfoNum",
-        "sectionLength",
-        "errorAffinity",
-        "mpidrEl1",
-        "affinity3",
-        "midrEl1",
-        "running",
-        "errorInfo",
-        "contextInfo"
-    ],
+    "required": ["errorInfoNum", "contextInfoNum", "sectionLength", "midrEl1"],
     "additionalProperties": false,
     "properties": {
-        "validationBits": {
-            "type": "object",
-            "description": "Indiciates what fields in the section are valid",
-            "required": [
-                "mpidrValid",
-                "errorAffinityLevelValid",
-                "runningStateValid",
-                "vendorSpecificInfoValid"
-            ],
-            "properties": {
-                "mpidrValid": {
-                    "type": "boolean"
-                },
-                "errorAffinityLevelValid": {
-                    "type": "boolean"
-                },
-                "runningStateValid": {
-                    "type": "boolean"
-                },
-                "vendorSpecificInfoValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "errorInfoNum": {
             "type": "integer",
             "description": "The number of Processor Error Information Structures"
@@ -86,17 +50,7 @@
             "type": "array",
             "items": {
                 "type": "object",
-                "required": [
-                    "version",
-                    "length",
-                    "validationBits",
-                    "errorType",
-                    "multipleError",
-                    "flags",
-                    "errorInformation",
-                    "virtualFaultAddress",
-                    "physicalFaultAddress"
-                ],
+                "required": ["version", "length", "errorType"],
                 "additionalProperties": false,
                 "properties": {
                     "version": {
@@ -105,33 +59,6 @@
                     "length": {
                         "type": "integer"
                     },
-                    "validationBits": {
-                        "type": "object",
-                        "required": [
-                            "multipleErrorValid",
-                            "flagsValid",
-                            "errorInformationValid",
-                            "virtualFaultAddressValid",
-                            "physicalFaultAddressValid"
-                        ],
-                        "properties": {
-                            "multipleErrorValid": {
-                                "type": "boolean"
-                            },
-                            "flagsValid": {
-                                "type": "boolean"
-                            },
-                            "errorInformationValid": {
-                                "type": "boolean"
-                            },
-                            "virtualFaultAddressValid": {
-                                "type": "boolean"
-                            },
-                            "physicalFaultAddressValid": {
-                                "type": "boolean"
-                            }
-                        }
-                    },
                     "errorType": {
                         "type": "object",
                         "$ref": "./common/cper-json-nvp.json"
@@ -182,53 +109,9 @@
                                 "properties": {
                                     "cacheError": {
                                         "type": "object",
-                                        "required": [
-                                            "validationBits",
-                                            "transactionType",
-                                            "operation",
-                                            "level",
-                                            "processorContextCorrupt",
-                                            "corrected",
-                                            "precisePC",
-                                            "restartablePC"
-                                        ],
+                                        "required": [],
                                         "additionalProperties": false,
                                         "properties": {
-                                            "validationBits": {
-                                                "type": "object",
-                                                "required": [
-                                                    "transactionTypeValid",
-                                                    "operationValid",
-                                                    "levelValid",
-                                                    "processorContextCorruptValid",
-                                                    "correctedValid",
-                                                    "precisePCValid",
-                                                    "restartablePCValid"
-                                                ],
-                                                "properties": {
-                                                    "transactionTypeValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "operationValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "levelValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "processorContextCorruptValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "correctedValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "precisePCValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "restartablePCValid": {
-                                                        "type": "boolean"
-                                                    }
-                                                }
-                                            },
                                             "transactionType": {
                                                 "type": "object",
                                                 "$ref": "./common/cper-json-nvp.json"
@@ -263,15 +146,44 @@
                                 "properties": {
                                     "tlbError": {
                                         "type": "object",
+                                        "required": [],
+                                        "additionalProperties": false,
+                                        "properties": {
+                                            "transactionType": {
+                                                "type": "object",
+                                                "$ref": "./common/cper-json-nvp.json"
+                                            },
+                                            "operation": {
+                                                "type": "object",
+                                                "$ref": "./common/cper-json-nvp.json"
+                                            },
+                                            "level": {
+                                                "type": "integer"
+                                            },
+                                            "processorContextCorrupt": {
+                                                "type": "boolean"
+                                            },
+                                            "corrected": {
+                                                "type": "boolean"
+                                            },
+                                            "precisePC": {
+                                                "type": "boolean"
+                                            },
+                                            "restartablePC": {
+                                                "type": "boolean"
+                                            }
+                                        }
+                                    }
+                                }
+                            },
+                            {
+                                "$id": "cper-json-buserror-section",
+                                "type": "object",
+                                "required": ["busError"],
+                                "properties": {
+                                    "busError": {
+                                        "type": "object",
                                         "required": [
-                                            "validationBits",
-                                            "transactionType",
-                                            "operation",
-                                            "level",
-                                            "processorContextCorrupt",
-                                            "corrected",
-                                            "precisePC",
-                                            "restartablePC",
                                             "timedOut",
                                             "participationType",
                                             "addressSpace",
@@ -280,61 +192,6 @@
                                         ],
                                         "additionalProperties": false,
                                         "properties": {
-                                            "validationBits": {
-                                                "type": "object",
-                                                "required": [
-                                                    "transactionTypeValid",
-                                                    "operationValid",
-                                                    "levelValid",
-                                                    "processorContextCorruptValid",
-                                                    "correctedValid",
-                                                    "precisePCValid",
-                                                    "restartablePCValid",
-                                                    "participationTypeValid",
-                                                    "timedOutValid",
-                                                    "addressSpaceValid",
-                                                    "memoryAttributesValid",
-                                                    "accessModeValid"
-                                                ],
-                                                "properties": {
-                                                    "transactionTypeValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "operationValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "levelValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "processorContextCorruptValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "correctedValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "precisePCValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "restartablePCValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "participationTypeValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "timedOutValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "addressSpaceValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "memoryAttributesValid": {
-                                                        "type": "boolean"
-                                                    },
-                                                    "accessModeValid": {
-                                                        "type": "boolean"
-                                                    }
-                                                }
-                                            },
                                             "transactionType": {
                                                 "type": "object",
                                                 "$ref": "./common/cper-json-nvp.json"
diff --git a/specification/json/sections/cper-ccix-per.json b/specification/json/sections/cper-ccix-per.json
index 785ab65..f39678a 100644
--- a/specification/json/sections/cper-ccix-per.json
+++ b/specification/json/sections/cper-ccix-per.json
@@ -1,37 +1,12 @@
 {
     "$schema": "https://json-schema.org/draft/2020-12/schema",
     "type": "object",
-    "required": [
-        "length",
-        "validationBits",
-        "ccixSourceID",
-        "ccixPortID",
-        "ccixPERLog"
-    ],
+    "required": ["length", "ccixSourceID", "ccixPortID", "ccixPERLog"],
     "additionalProperties": false,
     "properties": {
         "length": {
             "type": "integer"
         },
-        "validationBits": {
-            "type": "object",
-            "required": [
-                "ccixSourceIDValid",
-                "ccixPortIDValid",
-                "ccixPERLogValid"
-            ],
-            "properties": {
-                "ccixSourceIDValid": {
-                    "type": "boolean"
-                },
-                "ccixPortIDValid": {
-                    "type": "boolean"
-                },
-                "ccixPERLogValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "ccixSourceID": {
             "type": "integer"
         },
diff --git a/specification/json/sections/cper-cxl-component.json b/specification/json/sections/cper-cxl-component.json
index f86252a..9d3e8d4 100644
--- a/specification/json/sections/cper-cxl-component.json
+++ b/specification/json/sections/cper-cxl-component.json
@@ -2,32 +2,12 @@
     "$schema": "https://json-schema.org/draft/2020-12/schema",
     "type": "object",
     "description": "CXL Component Events Section",
-    "required": ["length", "validationBits", "deviceID", "deviceSerial"],
+    "required": ["length", "deviceID", "deviceSerial"],
     "additionalProperties": false,
     "properties": {
         "length": {
             "type": "integer"
         },
-        "validationBits": {
-            "type": "object",
-            "description": "Indiciates what fields in the section are valid",
-            "required": [
-                "deviceIDValid",
-                "deviceSerialValid",
-                "cxlComponentEventLogValid"
-            ],
-            "properties": {
-                "deviceIDValid": {
-                    "type": "boolean"
-                },
-                "deviceSerialValid": {
-                    "type": "boolean"
-                },
-                "cxlComponentEventLogValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "deviceID": {
             "type": "object",
             "description": "Provides devices specific identifies.",
diff --git a/specification/json/sections/cper-cxl-protocol.json b/specification/json/sections/cper-cxl-protocol.json
index 8d70e83..a0cf8a0 100644
--- a/specification/json/sections/cper-cxl-protocol.json
+++ b/specification/json/sections/cper-cxl-protocol.json
@@ -3,7 +3,6 @@
     "type": "object",
     "description": "Compute Express Link (CXL) Protocol Error Section",
     "required": [
-        "validationBits",
         "agentType",
         "cxlAgentAddress",
         "deviceID",
@@ -14,42 +13,6 @@
     ],
     "additionalProperties": false,
     "properties": {
-        "validationBits": {
-            "type": "object",
-            "description": "Indiciates what fields in the section are valid",
-            "required": [
-                "cxlAgentTypeValid",
-                "cxlAgentAddressValid",
-                "deviceIDValid",
-                "deviceSerialValid",
-                "capabilityStructureValid",
-                "cxlDVSECValid",
-                "cxlErrorLogValid"
-            ],
-            "properties": {
-                "cxlAgentTypeValid": {
-                    "type": "boolean"
-                },
-                "cxlAgentAddressValid": {
-                    "type": "boolean"
-                },
-                "deviceIDValid": {
-                    "type": "boolean"
-                },
-                "deviceSerialValid": {
-                    "type": "boolean"
-                },
-                "capabilityStructureValid": {
-                    "type": "boolean"
-                },
-                "cxlDVSECValid": {
-                    "type": "boolean"
-                },
-                "cxlErrorLogValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "agentType": {
             "type": "object",
             "description": "CXL Agent Type",
diff --git a/specification/json/sections/cper-generic-processor.json b/specification/json/sections/cper-generic-processor.json
index 65bb997..6c6e0c2 100644
--- a/specification/json/sections/cper-generic-processor.json
+++ b/specification/json/sections/cper-generic-processor.json
@@ -3,7 +3,6 @@
     "type": "object",
     "description": "Generic Processor Error Section",
     "required": [
-        "validationBits",
         "processorType",
         "processorISA",
         "errorType",
@@ -20,66 +19,6 @@
     ],
     "additionalProperties": false,
     "properties": {
-        "validationBits": {
-            "type": "object",
-            "description": "Indiciates what fields in the section are valid",
-            "required": [
-                "processorTypeValid",
-                "processorISAValid",
-                "processorErrorTypeValid",
-                "operationValid",
-                "flagsValid",
-                "levelValid",
-                "cpuVersionValid",
-                "cpuBrandInfoValid",
-                "cpuIDValid",
-                "targetAddressValid",
-                "requestorIDValid",
-                "responderIDValid",
-                "instructionIPValid"
-            ],
-            "properties": {
-                "processorTypeValid": {
-                    "type": "boolean"
-                },
-                "processorISAValid": {
-                    "type": "boolean"
-                },
-                "processorErrorTypeValid": {
-                    "type": "boolean"
-                },
-                "operationValid": {
-                    "type": "boolean"
-                },
-                "flagsValid": {
-                    "type": "boolean"
-                },
-                "levelValid": {
-                    "type": "boolean"
-                },
-                "cpuVersionValid": {
-                    "type": "boolean"
-                },
-                "cpuBrandInfoValid": {
-                    "type": "boolean"
-                },
-                "cpuIDValid": {
-                    "type": "boolean"
-                },
-                "targetAddressValid": {
-                    "type": "boolean"
-                },
-                "requestorIDValid": {
-                    "type": "boolean"
-                },
-                "responderIDValid": {
-                    "type": "boolean"
-                },
-                "instructionIPValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "processorType": {
             "type": "object",
             "description": "Identifies the type of the processor architecture.",
diff --git a/specification/json/sections/cper-ia32x64-processor.json b/specification/json/sections/cper-ia32x64-processor.json
index 3f41564..ecf203e 100644
--- a/specification/json/sections/cper-ia32x64-processor.json
+++ b/specification/json/sections/cper-ia32x64-processor.json
@@ -1,40 +1,16 @@
 {
     "$schema": "https://json-schema.org/draft/2020-12/schema",
     "type": "object",
-    "required": [
-        "validationBits",
-        "localAPICID",
-        "cpuidInfo",
-        "processorErrorInfo",
-        "processorContextInfo"
-    ],
+    "required": ["processorErrorInfoNum", "processorContextInfoNum"],
     "additionalProperties": false,
     "properties": {
-        "validationBits": {
-            "type": "object",
-            "description": "Indicates which fields are valid in the section.",
-            "required": [
-                "localAPICIDValid",
-                "cpuIDInfoValid",
-                "processorErrorInfoNum",
-                "processorContextInfoNum"
-            ],
-            "properties": {
-                "localAPICIDValid": {
-                    "type": "boolean"
-                },
-                "cpuIDInfoValid": {
-                    "type": "boolean"
-                },
-                "processorErrorInfoNum": {
-                    "type": "integer",
-                    "minimum": 0
-                },
-                "processorContextInfoNum": {
-                    "type": "integer",
-                    "minimum": 0
-                }
-            }
+        "processorErrorInfoNum": {
+            "type": "integer",
+            "description": "This is the number of Error Information structures."
+        },
+        "processorContextInfoNum": {
+            "type": "integer",
+            "description": "This is the number of Context Information structures."
         },
         "localAPICID": {
             "type": "integer",
@@ -64,15 +40,7 @@
             "description": "Array of processor error information structure.",
             "items": {
                 "type": "object",
-                "required": [
-                    "type",
-                    "validationBits",
-                    "checkInfo",
-                    "targetAddressID",
-                    "requestorID",
-                    "responderID",
-                    "instructionPointer"
-                ],
+                "required": ["type"],
                 "additionalProperties": false,
                 "properties": {
                     "type": {
@@ -87,92 +55,15 @@
                             }
                         }
                     },
-                    "validationBits": {
-                        "type": "object",
-                        "required": [
-                            "checkInfoValid",
-                            "targetAddressIDValid",
-                            "requestorIDValid",
-                            "responderIDValid",
-                            "instructionPointerValid"
-                        ],
-                        "additionalProperties": false,
-                        "properties": {
-                            "checkInfoValid": {
-                                "type": "boolean"
-                            },
-                            "targetAddressIDValid": {
-                                "type": "boolean"
-                            },
-                            "requestorIDValid": {
-                                "type": "boolean"
-                            },
-                            "responderIDValid": {
-                                "type": "boolean"
-                            },
-                            "instructionPointerValid": {
-                                "type": "boolean"
-                            }
-                        }
-                    },
                     "checkInfo": {
                         "type": "object",
                         "oneOf": [
                             {
                                 "$id": "cper-json-checkinfo0",
                                 "type": "object",
-                                "required": [
-                                    "validationBits",
-                                    "transactionType",
-                                    "operation",
-                                    "level",
-                                    "processorContextCorrupt",
-                                    "uncorrected",
-                                    "preciseIP",
-                                    "restartableIP",
-                                    "overflow"
-                                ],
+                                "required": [],
                                 "additionalProperties": false,
                                 "properties": {
-                                    "validationBits": {
-                                        "type": "object",
-                                        "required": [
-                                            "transactionTypeValid",
-                                            "operationValid",
-                                            "levelValid",
-                                            "processorContextCorruptValid",
-                                            "uncorrectedValid",
-                                            "preciseIPValid",
-                                            "restartableIPValid",
-                                            "overflowValid"
-                                        ],
-                                        "properties": {
-                                            "transactionTypeValid": {
-                                                "type": "boolean"
-                                            },
-                                            "operationValid": {
-                                                "type": "boolean"
-                                            },
-                                            "levelValid": {
-                                                "type": "boolean"
-                                            },
-                                            "processorContextCorruptValid": {
-                                                "type": "boolean"
-                                            },
-                                            "uncorrectedValid": {
-                                                "type": "boolean"
-                                            },
-                                            "preciseIPValid": {
-                                                "type": "boolean"
-                                            },
-                                            "restartableIPValid": {
-                                                "type": "boolean"
-                                            },
-                                            "overflowValid": {
-                                                "type": "boolean"
-                                            }
-                                        }
-                                    },
                                     "transactionType": {
                                         "type": "object",
                                         "$ref": "./common/cper-json-nvp.json"
@@ -205,73 +96,9 @@
                             {
                                 "$id": "cper-json-checkinfo1",
                                 "type": "object",
-                                "required": [
-                                    "validationBits",
-                                    "transactionType",
-                                    "operation",
-                                    "level",
-                                    "processorContextCorrupt",
-                                    "uncorrected",
-                                    "preciseIP",
-                                    "restartableIP",
-                                    "overflow",
-                                    "participationType",
-                                    "timedOut",
-                                    "addressSpace"
-                                ],
+                                "required": [],
                                 "additionalProperties": false,
                                 "properties": {
-                                    "validationBits": {
-                                        "type": "object",
-                                        "required": [
-                                            "transactionTypeValid",
-                                            "operationValid",
-                                            "levelValid",
-                                            "processorContextCorruptValid",
-                                            "uncorrectedValid",
-                                            "preciseIPValid",
-                                            "restartableIPValid",
-                                            "overflowValid",
-                                            "participationTypeValid",
-                                            "timedOutValid",
-                                            "addressSpaceValid"
-                                        ],
-                                        "properties": {
-                                            "transactionTypeValid": {
-                                                "type": "boolean"
-                                            },
-                                            "operationValid": {
-                                                "type": "boolean"
-                                            },
-                                            "levelValid": {
-                                                "type": "boolean"
-                                            },
-                                            "processorContextCorruptValid": {
-                                                "type": "boolean"
-                                            },
-                                            "uncorrectedValid": {
-                                                "type": "boolean"
-                                            },
-                                            "preciseIPValid": {
-                                                "type": "boolean"
-                                            },
-                                            "restartableIPValid": {
-                                                "type": "boolean"
-                                            },
-                                            "overflowValid": {
-                                                "type": "boolean"
-                                            },
-                                            "participationTypeValid": {
-                                                "type": "boolean"
-                                            },
-                                            "timedOutValid": {
-                                                "type": "boolean"
-                                            },
-                                            "addressSpaceValid": {
-                                                "type": "boolean"
-                                            }
-                                        }
-                                    },
                                     "transactionType": {
                                         "type": "object",
                                         "$ref": "./common/cper-json-nvp.json"
@@ -318,37 +145,6 @@
                                 "required": [],
                                 "additionalProperties": false,
                                 "properties": {
-                                    "validationBits": {
-                                        "type": "object",
-                                        "required": [
-                                            "errorTypeValid",
-                                            "processorContextCorruptValid",
-                                            "uncorrectedValid",
-                                            "preciseIPValid",
-                                            "restartableIPValid",
-                                            "overflowValid"
-                                        ],
-                                        "properties": {
-                                            "errorTypeValid": {
-                                                "type": "boolean"
-                                            },
-                                            "processorContextCorruptValid": {
-                                                "type": "boolean"
-                                            },
-                                            "uncorrectedValid": {
-                                                "type": "boolean"
-                                            },
-                                            "preciseIPValid": {
-                                                "type": "boolean"
-                                            },
-                                            "restartableIPValid": {
-                                                "type": "boolean"
-                                            },
-                                            "overflowValid": {
-                                                "type": "boolean"
-                                            }
-                                        }
-                                    },
                                     "errorType": {
                                         "type": "object",
                                         "$ref": "./common/cper-json-nvp.json"
diff --git a/specification/json/sections/cper-memory.json b/specification/json/sections/cper-memory.json
index e2bd787..52e1fe9 100644
--- a/specification/json/sections/cper-memory.json
+++ b/specification/json/sections/cper-memory.json
@@ -2,7 +2,6 @@
     "$schema": "https://json-schema.org/draft/2020-12/schema",
     "type": "object",
     "required": [
-        "validationBits",
         "errorStatus",
         "bank",
         "memoryErrorType",
@@ -26,102 +25,6 @@
     ],
     "additionalProperties": false,
     "properties": {
-        "validationBits": {
-            "type": "object",
-            "description": "Indicates which fields in the section are valid.",
-            "required": [
-                "errorStatusValid",
-                "physicalAddressValid",
-                "physicalAddressMaskValid",
-                "nodeValid",
-                "cardValid",
-                "moduleValid",
-                "bankValid",
-                "deviceValid",
-                "rowValid",
-                "columnValid",
-                "bitPositionValid",
-                "platformRequestorIDValid",
-                "platformResponderIDValid",
-                "memoryPlatformTargetValid",
-                "memoryErrorTypeValid",
-                "rankNumberValid",
-                "cardHandleValid",
-                "moduleHandleValid",
-                "extendedRowBitsValid",
-                "bankGroupValid",
-                "bankAddressValid",
-                "chipIdentificationValid"
-            ],
-            "properties": {
-                "errorStatusValid": {
-                    "type": "boolean"
-                },
-                "physicalAddressValid": {
-                    "type": "boolean"
-                },
-                "physicalAddressMaskValid": {
-                    "type": "boolean"
-                },
-                "nodeValid": {
-                    "type": "boolean"
-                },
-                "cardValid": {
-                    "type": "boolean"
-                },
-                "moduleValid": {
-                    "type": "boolean"
-                },
-                "bankValid": {
-                    "type": "boolean"
-                },
-                "deviceValid": {
-                    "type": "boolean"
-                },
-                "rowValid": {
-                    "type": "boolean"
-                },
-                "columnValid": {
-                    "type": "boolean"
-                },
-                "bitPositionValid": {
-                    "type": "boolean"
-                },
-                "platformRequestorIDValid": {
-                    "type": "boolean"
-                },
-                "platformResponderIDValid": {
-                    "type": "boolean"
-                },
-                "memoryPlatformTargetValid": {
-                    "type": "boolean"
-                },
-                "memoryErrorTypeValid": {
-                    "type": "boolean"
-                },
-                "rankNumberValid": {
-                    "type": "boolean"
-                },
-                "cardHandleValid": {
-                    "type": "boolean"
-                },
-                "moduleHandleValid": {
-                    "type": "boolean"
-                },
-                "extendedRowBitsValid": {
-                    "type": "boolean"
-                },
-                "bankGroupValid": {
-                    "type": "boolean"
-                },
-                "bankAddressValid": {
-                    "type": "boolean"
-                },
-                "chipIdentificationValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "errorStatus": {
             "type": "object",
             "description": "Memory error status information.",
diff --git a/specification/json/sections/cper-memory2.json b/specification/json/sections/cper-memory2.json
index edc62ab..955a969 100644
--- a/specification/json/sections/cper-memory2.json
+++ b/specification/json/sections/cper-memory2.json
@@ -2,7 +2,6 @@
     "$schema": "https://json-schema.org/draft/2020-12/schema",
     "type": "object",
     "required": [
-        "validationBits",
         "errorStatus",
         "bank",
         "memoryErrorType",
@@ -27,102 +26,6 @@
     ],
     "additionalProperties": false,
     "properties": {
-        "validationBits": {
-            "type": "object",
-            "description": "Indicates which fields in this section are valid.",
-            "required": [
-                "errorStatusValid",
-                "physicalAddressValid",
-                "physicalAddressMaskValid",
-                "nodeValid",
-                "cardValid",
-                "moduleValid",
-                "bankValid",
-                "deviceValid",
-                "rowValid",
-                "columnValid",
-                "rankValid",
-                "bitPositionValid",
-                "chipIDValid",
-                "memoryErrorTypeValid",
-                "statusValid",
-                "requestorIDValid",
-                "responderIDValid",
-                "targetIDValid",
-                "cardHandleValid",
-                "moduleHandleValid",
-                "bankGroupValid",
-                "bankAddressValid"
-            ],
-            "properties": {
-                "errorStatusValid": {
-                    "type": "boolean"
-                },
-                "physicalAddressValid": {
-                    "type": "boolean"
-                },
-                "physicalAddressMaskValid": {
-                    "type": "boolean"
-                },
-                "nodeValid": {
-                    "type": "boolean"
-                },
-                "cardValid": {
-                    "type": "boolean"
-                },
-                "moduleValid": {
-                    "type": "boolean"
-                },
-                "bankValid": {
-                    "type": "boolean"
-                },
-                "deviceValid": {
-                    "type": "boolean"
-                },
-                "rowValid": {
-                    "type": "boolean"
-                },
-                "columnValid": {
-                    "type": "boolean"
-                },
-                "rankValid": {
-                    "type": "boolean"
-                },
-                "bitPositionValid": {
-                    "type": "boolean"
-                },
-                "chipIDValid": {
-                    "type": "boolean"
-                },
-                "memoryErrorTypeValid": {
-                    "type": "boolean"
-                },
-                "statusValid": {
-                    "type": "boolean"
-                },
-                "requestorIDValid": {
-                    "type": "boolean"
-                },
-                "responderIDValid": {
-                    "type": "boolean"
-                },
-                "targetIDValid": {
-                    "type": "boolean"
-                },
-                "cardHandleValid": {
-                    "type": "boolean"
-                },
-                "moduleHandleValid": {
-                    "type": "boolean"
-                },
-                "bankGroupValid": {
-                    "type": "boolean"
-                },
-                "bankAddressValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "errorStatus": {
             "type": "object",
             "description": "Memory error status information.",
diff --git a/specification/json/sections/cper-pci-bus.json b/specification/json/sections/cper-pci-bus.json
index ba23e72..bffc494 100644
--- a/specification/json/sections/cper-pci-bus.json
+++ b/specification/json/sections/cper-pci-bus.json
@@ -2,7 +2,6 @@
     "$schema": "https://json-schema.org/draft/2020-12/schema",
     "type": "object",
     "required": [
-        "validationBits",
         "errorStatus",
         "errorType",
         "busID",
@@ -17,50 +16,6 @@
     ],
     "additionalProperties": false,
     "properties": {
-        "validationBits": {
-            "type": "object",
-            "description": "Inidicates which fields are valid in the section.",
-            "required": [
-                "errorStatusValid",
-                "errorTypeValid",
-                "busIDValid",
-                "busAddressValid",
-                "busDataValid",
-                "commandValid",
-                "requestorIDValid",
-                "completerIDValid",
-                "targetIDValid"
-            ],
-            "properties": {
-                "errorStatusValid": {
-                    "type": "boolean"
-                },
-                "errorTypeValid": {
-                    "type": "boolean"
-                },
-                "busIDValid": {
-                    "type": "boolean"
-                },
-                "busAddressValid": {
-                    "type": "boolean"
-                },
-                "busDataValid": {
-                    "type": "boolean"
-                },
-                "commandValid": {
-                    "type": "boolean"
-                },
-                "requestorIDValid": {
-                    "type": "boolean"
-                },
-                "completerIDValid": {
-                    "type": "boolean"
-                },
-                "targetIDValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "errorStatus": {
             "type": "object",
             "description": "PCI Bus Error Status.",
diff --git a/specification/json/sections/cper-pci-component.json b/specification/json/sections/cper-pci-component.json
index ef1f3da..79abbb4 100644
--- a/specification/json/sections/cper-pci-component.json
+++ b/specification/json/sections/cper-pci-component.json
@@ -2,7 +2,6 @@
     "$schema": "https://json-schema.org/draft/2020-12/schema",
     "type": "object",
     "required": [
-        "validationBits",
         "errorStatus",
         "idInfo",
         "memoryNumber",
@@ -11,34 +10,6 @@
     ],
     "additionalProperties": false,
     "properties": {
-        "validationBits": {
-            "type": "object",
-            "description": "Indicates which other fields are valid in the section.",
-            "required": [
-                "errorStatusValid",
-                "idInfoValid",
-                "memoryNumberValid",
-                "ioNumberValid",
-                "registerDataPairsValid"
-            ],
-            "properties": {
-                "errorStatusValid": {
-                    "type": "boolean"
-                },
-                "idInfoValid": {
-                    "type": "boolean"
-                },
-                "memoryNumberValid": {
-                    "type": "boolean"
-                },
-                "ioNumberValid": {
-                    "type": "boolean"
-                },
-                "registerDataPairsValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "errorStatus": {
             "type": "object",
             "description": "PCI Component Error Status.",
diff --git a/specification/json/sections/cper-pcie.json b/specification/json/sections/cper-pcie.json
index c9970ef..0ae27f2 100644
--- a/specification/json/sections/cper-pcie.json
+++ b/specification/json/sections/cper-pcie.json
@@ -3,7 +3,6 @@
     "type": "object",
     "description": "PCI Express Error Section",
     "required": [
-        "validationBits",
         "portType",
         "version",
         "commandStatus",
@@ -15,46 +14,6 @@
     ],
     "additionalProperties": false,
     "properties": {
-        "validationBits": {
-            "type": "object",
-            "description": "Indicates validity of other fields in this section.",
-            "required": [
-                "portTypeValid",
-                "versionValid",
-                "commandStatusValid",
-                "deviceIDValid",
-                "deviceSerialNumberValid",
-                "bridgeControlStatusValid",
-                "capabilityStructureStatusValid",
-                "aerInfoValid"
-            ],
-            "properties": {
-                "portTypeValid": {
-                    "type": "boolean"
-                },
-                "versionValid": {
-                    "type": "boolean"
-                },
-                "commandStatusValid": {
-                    "type": "boolean"
-                },
-                "deviceIDValid": {
-                    "type": "boolean"
-                },
-                "deviceSerialNumberValid": {
-                    "type": "boolean"
-                },
-                "bridgeControlStatusValid": {
-                    "type": "boolean"
-                },
-                "capabilityStructureStatusValid": {
-                    "type": "boolean"
-                },
-                "aerInfoValid": {
-                    "type": "boolean"
-                }
-            }
-        },
         "portType": {
             "type": "object",
             "description": "PCIe Device/Port Type as defined in the PCI Express capabilities register.",
diff --git a/tests/ir-tests.cpp b/tests/ir-tests.cpp
index 5041a23..fa1f9f3 100644
--- a/tests/ir-tests.cpp
+++ b/tests/ir-tests.cpp
@@ -8,24 +8,144 @@
 #include "gtest/gtest.h"
 #include "test-utils.hpp"
 #include <json.h>
+#include <nlohmann/json.hpp>
+#include <filesystem>
+#include <fstream>
 #include <libcper/cper-parse.h>
 #include <libcper/json-schema.h>
 #include <libcper/generator/cper-generate.h>
 #include <libcper/sections/cper-section.h>
 #include <libcper/generator/sections/gen-section.h>
 
+namespace fs = std::filesystem;
+
 /*
 * Test templates.
 */
+static const GEN_VALID_BITS_TEST_TYPE allValidbitsSet = ALL_VALID;
+static const GEN_VALID_BITS_TEST_TYPE fixedValidbitsSet = SOME_VALID;
+static const int GEN_EXAMPLES = 0;
+
+void cper_create_examples(const char *section_name)
+{
+	//Generate full CPER record for the given type.
+	fs::path file_path = LIBCPER_EXAMPLES;
+	file_path /= section_name;
+	fs::path cper_out = file_path.replace_extension("cper");
+	fs::path json_out = file_path.replace_extension("json");
+
+	char *buf;
+	size_t size;
+	FILE *record = generate_record_memstream(&section_name, 1, &buf, &size,
+						 0, fixedValidbitsSet);
+
+	// Write example CPER to disk
+	std::ofstream outFile(cper_out, std::ios::binary);
+	if (!outFile.is_open()) {
+		std::cerr << "Failed to create/open CPER output file: "
+			  << cper_out << std::endl;
+		return;
+	}
+
+	char buffer[1024];
+	size_t bytesRead;
+	while ((bytesRead = fread(buffer, 1, sizeof(buffer), record)) > 0) {
+		outFile.write(buffer, bytesRead);
+		if (!outFile) {
+			std::cerr << "Failed to write to output file."
+				  << std::endl;
+			outFile.close();
+			return;
+		}
+	}
+	outFile.close();
+
+	//Convert to IR, free resources.
+	rewind(record);
+	json_object *ir = cper_to_ir(record);
+	if (ir == NULL) {
+		std::cerr << "Empty JSON from CPER bin" << std::endl;
+		FAIL();
+		return;
+	}
+	char *str = strdup(json_object_to_json_string(ir));
+	nlohmann::json jsonData = nlohmann::json::parse(str, nullptr, false);
+	if (jsonData.is_discarded()) {
+		std::cerr << "cper_create_examples: JSON parse error:"
+			  << std::endl;
+	}
+	free(str);
+	fclose(record);
+	free(buf);
+
+	//Write json output to disk
+	std::ofstream jsonOutFile(json_out);
+	jsonOutFile << std::setw(4) << jsonData << std::endl;
+	jsonOutFile.close();
+}
+
+//Tests fixed CPER sections for IR validity with an example set.
+void cper_example_section_ir_test(const char *section_name)
+{
+	//Open CPER record for the given type.
+	fs::path fpath = LIBCPER_EXAMPLES;
+	fpath /= section_name;
+	fs::path cper = fpath.replace_extension("cper");
+	fs::path json = fpath.replace_extension("json");
+
+	// Do a C style read to obtain FILE*
+	FILE *record = fopen(cper.string().c_str(), "rb");
+	if (record == NULL) {
+		std::cerr
+			<< "cper_example_section_ir_test: File cannot be opened/does not exist "
+			<< cper << std::endl;
+		FAIL() << "cper_example_section_ir_test: File cannot be opened/does not exist";
+		return;
+	}
+
+	//Convert to IR, free resources.
+	json_object *ir = cper_to_ir(record);
+	if (ir == NULL) {
+		fclose(record);
+		std::cerr << "Empty JSON from CPER bin" << std::endl;
+		FAIL();
+		return;
+	}
+	const char *str = json_object_to_json_string(ir);
+	nlohmann::json jsonData = nlohmann::json::parse(str, nullptr, false);
+	if (jsonData.is_discarded()) {
+		std::cerr << "cper_example_section_ir_test: JSON parse error:"
+			  << std::endl;
+		FAIL() << "cper_example_section_ir_test: JSON parse error:";
+		fclose(record);
+		json_object_put(ir);
+
+		return;
+	}
+	fclose(record);
+
+	//Open json example file
+	nlohmann::json jGolden = loadJson(json.string().c_str());
+	if (jGolden.is_discarded()) {
+		std::cerr << "Could not open JSON example file: " << json
+			  << std::endl;
+		FAIL() << "Could not open JSON example file";
+	}
+
+	json_object_put(ir);
+
+	EXPECT_EQ(jGolden, jsonData);
+}
 
 //Tests a single randomly generated CPER section of the given type to ensure CPER-JSON IR validity.
-void cper_log_section_ir_test(const char *section_name, int single_section)
+void cper_log_section_ir_test(const char *section_name, int single_section,
+			      GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Generate full CPER record for the given type.
 	char *buf;
 	size_t size;
 	FILE *record = generate_record_memstream(&section_name, 1, &buf, &size,
-						 single_section);
+						 single_section, validBitsType);
 
 	//Convert to IR, free resources.
 	json_object *ir;
@@ -34,13 +154,21 @@
 	} else {
 		ir = cper_to_ir(record);
 	}
+
+	char *str = strdup(json_object_to_json_string(ir));
+	nlohmann::json jsonData = nlohmann::json::parse(str, nullptr, false);
+	if (jsonData.is_discarded()) {
+		std::cerr << "Could not parse json output" << std::endl;
+	}
+	free(str);
 	fclose(record);
 	free(buf);
 
 	//Validate against schema.
-	char error_message[JSON_ERROR_MSG_MAX_LEN] = { 0 };
-	int valid =
-		validate_schema_from_file(LIBCPER_JSON_SPEC, ir, error_message);
+	std::string error_message;
+
+	int valid = schema_validate_from_file(LIBCPER_JSON_SPEC, jsonData,
+					      error_message);
 	json_object_put(ir);
 	ASSERT_TRUE(valid)
 		<< "IR validation test failed (single section mode = "
@@ -48,13 +176,19 @@
 }
 
 //Checks for binary round-trip equality for a given randomly generated CPER record.
-void cper_log_section_binary_test(const char *section_name, int single_section)
+void cper_log_section_binary_test(const char *section_name, int single_section,
+				  GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Generate CPER record for the given type.
 	char *buf;
 	size_t size;
 	FILE *record = generate_record_memstream(&section_name, 1, &buf, &size,
-						 single_section);
+						 single_section, validBitsType);
+	if (record == NULL) {
+		std::cerr << "Could not generate memstream for binary test"
+			  << std::endl;
+		return;
+	}
 
 	//Convert to IR.
 	json_object *ir;
@@ -73,12 +207,12 @@
 	} else {
 		ir_to_cper(ir, stream);
 	}
-	size_t cper_len = ftell(stream);
 	fclose(stream);
 
-	//Validate the two are identical.
-	ASSERT_GE(size, cper_len);
-	ASSERT_EQ(memcmp(buf, cper_buf, cper_len), 0)
+	std::cout << "size: " << size << ", cper_buf_size: " << cper_buf_size
+		  << std::endl;
+	EXPECT_EQ(std::string_view(buf, size),
+		  std::string_view(cper_buf, std::min(size, cper_buf_size)))
 		<< "Binary output was not identical to input (single section mode = "
 		<< single_section << ").";
 
@@ -92,15 +226,17 @@
 //Tests randomly generated CPER sections for IR validity of a given type, in both single section mode and full CPER log mode.
 void cper_log_section_dual_ir_test(const char *section_name)
 {
-	cper_log_section_ir_test(section_name, 0);
-	cper_log_section_ir_test(section_name, 1);
+	cper_log_section_ir_test(section_name, 0, allValidbitsSet);
+	cper_log_section_ir_test(section_name, 1, allValidbitsSet);
+	//Validate against examples
+	cper_example_section_ir_test(section_name);
 }
 
 //Tests randomly generated CPER sections for binary compatibility of a given type, in both single section mode and full CPER log mode.
 void cper_log_section_dual_binary_test(const char *section_name)
 {
-	cper_log_section_binary_test(section_name, 0);
-	cper_log_section_binary_test(section_name, 1);
+	cper_log_section_binary_test(section_name, 0, allValidbitsSet);
+	cper_log_section_binary_test(section_name, 1, allValidbitsSet);
 }
 
 /*
@@ -316,6 +452,24 @@
 //Entrypoint for the testing program.
 int main()
 {
+	if (GEN_EXAMPLES) {
+		cper_create_examples("arm");
+		cper_create_examples("ia32x64");
+		cper_create_examples("memory");
+		cper_create_examples("memory2");
+		cper_create_examples("pcie");
+		cper_create_examples("firmware");
+		cper_create_examples("pcibus");
+		cper_create_examples("pcidev");
+		cper_create_examples("dmargeneric");
+		cper_create_examples("dmarvtd");
+		cper_create_examples("dmariommu");
+		cper_create_examples("ccixper");
+		cper_create_examples("cxlprotocol");
+		cper_create_examples("cxlcomponent-media");
+		cper_create_examples("nvidia");
+		cper_create_examples("unknown");
+	}
 	testing::InitGoogleTest();
 	return RUN_ALL_TESTS();
 }
diff --git a/tests/meson.build b/tests/meson.build
index 68eb1f3..d9e9d96 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -1,3 +1,5 @@
+cmake = import('cmake')
+
 gtest = dependency('gtest', main: true, disabler: true, required: false)
 gmock = dependency('gmock', disabler: true, required: false)
 if not gtest.found() or not gmock.found()
@@ -19,6 +21,23 @@
     endif
 endif
 
+nlohmann_json_dep = dependency(
+    'nlohmann_json',
+    required: false,
+    version: '>=3.11.2',
+    include_type: 'system',
+)
+if not nlohmann_json_dep.found()
+    nlohmann_proj = subproject('nlohmann_json', required: true)
+    nlohmann_json_dep = nlohmann_proj.get_variable('nlohmann_json_dep')
+endif
+
+valijson_dep = dependency('valijson', required: false)
+if not valijson_dep.found()
+    valijson_proj = cmake.subproject('valijson')
+    valijson_dep = valijson_proj.get_variable('valijson_dep')
+endif
+
 sources = ['ir-tests.cpp', 'test-utils.cpp', 'base64_test.cpp']
 
 test_include_dirs = ['.', '../include']
@@ -35,6 +54,8 @@
         json_c_dep,
         gtest,
         gmock,
+        nlohmann_json_dep,
+        valijson_dep
     ],
 )
 test('test-cper-tests', cper_tests)
diff --git a/tests/test-utils.cpp b/tests/test-utils.cpp
index e16413c..5b5925a 100644
--- a/tests/test-utils.cpp
+++ b/tests/test-utils.cpp
@@ -6,15 +6,45 @@
 
 #include <cstdio>
 #include <cstdlib>
+#include <fstream>
+#include <filesystem>
 #include "test-utils.hpp"
 
 #include <libcper/BaseTypes.h>
 #include <libcper/generator/cper-generate.h>
 
+namespace fs = std::filesystem;
+
+// Truly optional properties that shouldn't be added to "required" field for
+// validating the entire schema with validationbits=1
+const static std::map<std::string, std::vector<std::string> >
+	optional_properties_map = {
+		{ "./sections/cper-arm-processor.json",
+		  { "vendorSpecificInfo" } },
+		{ "./cper-json-section-log.json", { "header" } },
+		{ "./sections/cper-cxl-protocol.json",
+		  { "capabilityStructure", "deviceSerial" } },
+		{ "./sections/cper-generic-dmar.json",
+		  { "faultReason", "description" } },
+		{ "./sections/cper-cxl-component.json",
+		  { "cxlComponentEventLog" } },
+	};
+
+nlohmann::json loadJson(const char *filePath)
+{
+	std::ifstream file(filePath);
+	if (!file.is_open()) {
+		std::cerr << "Failed to open file: " << filePath << std::endl;
+	}
+	nlohmann::json out = nlohmann::json::parse(file, nullptr, false);
+	return out;
+}
+
 //Returns a ready-for-use memory stream containing a CPER record with the given sections inside.
 FILE *generate_record_memstream(const char **types, UINT16 num_types,
 				char **buf, size_t *buf_size,
-				int single_section)
+				int single_section,
+				GEN_VALID_BITS_TEST_TYPE validBitsType)
 {
 	//Open a memory stream.
 	FILE *stream = open_memstream(buf, buf_size);
@@ -22,13 +52,162 @@
 	//Generate a section to the stream, close & return.
 	if (!single_section) {
 		generate_cper_record(const_cast<char **>(types), num_types,
-				     stream);
+				     stream, validBitsType);
 	} else {
 		generate_single_section_record(const_cast<char *>(types[0]),
-					       stream);
+					       stream, validBitsType);
 	}
 	fclose(stream);
 
 	//Return fmemopen() buffer for reading.
 	return fmemopen(*buf, *buf_size, "r");
 }
+
+void iterate_make_required_props(nlohmann::json &jsonSchema,
+				 std::vector<std::string> &optional_props)
+{
+	//id
+	const auto it_id = jsonSchema.find("$id");
+	if (it_id != jsonSchema.end()) {
+		auto id_strptr = it_id->get_ptr<const std::string *>();
+		std::string id_str = *id_strptr;
+		if (id_str.find("header") != std::string::npos ||
+		    id_str.find("section-descriptor") != std::string::npos) {
+			return;
+		}
+	}
+	//oneOf
+	const auto it_oneof = jsonSchema.find("oneOf");
+	if (it_oneof != jsonSchema.end()) {
+		//Iterate over oneOf properties
+		for (auto &oneOfProp : *it_oneof) {
+			iterate_make_required_props(oneOfProp, optional_props);
+		}
+	}
+
+	//items
+	const auto it_items = jsonSchema.find("items");
+	if (it_items != jsonSchema.end()) {
+		iterate_make_required_props(*it_items, optional_props);
+	}
+	//required
+	const auto it_req = jsonSchema.find("required");
+	if (it_req == jsonSchema.end()) {
+		return;
+	}
+
+	//properties
+	const auto it_prop = jsonSchema.find("properties");
+	if (it_prop == jsonSchema.end()) {
+		return;
+	}
+	nlohmann::json &propertyFields = *it_prop;
+	nlohmann::json::array_t property_list;
+	if (propertyFields.is_object()) {
+		for (auto &[key, value] : propertyFields.items()) {
+			const auto it_find_opt_prop =
+				std::find(optional_props.begin(),
+					  optional_props.end(), key);
+			if (it_find_opt_prop == optional_props.end()) {
+				//Add to list if property is not optional
+				property_list.push_back(key);
+			}
+
+			iterate_make_required_props(value, optional_props);
+		}
+	}
+
+	*it_req = property_list;
+}
+
+// Document loader callback function
+const nlohmann::json *documentLoader(const std::string &uri)
+{
+	// Load the schema from a file
+	nlohmann::json *ref_schema = new nlohmann::json;
+	*ref_schema = loadJson(uri.c_str());
+	if (ref_schema->is_discarded()) {
+		std::cerr << "Could not open schema file: " << uri << std::endl;
+	}
+	std::vector<std::string> opt = {};
+	const auto it_optional_file = optional_properties_map.find(uri);
+	if (it_optional_file != optional_properties_map.end()) {
+		opt = it_optional_file->second;
+	}
+	iterate_make_required_props(*ref_schema, opt);
+
+	return ref_schema;
+}
+
+// Document release callback function
+void documentRelease(const nlohmann::json *adapter)
+{
+	delete adapter; // Free the adapter memory
+}
+
+int schema_validate_from_file(const char *schema_file_path,
+			      nlohmann::json &jsonData,
+			      std::string &error_message)
+{
+	// Load the schema
+	nlohmann::json schema_root = loadJson(schema_file_path);
+	if (schema_root.is_discarded()) {
+		std::cerr << "Could not open schema file: " << schema_file_path
+			  << std::endl;
+		return 0;
+	}
+
+	fs::path pathObj(schema_file_path);
+	fs::path base_path = pathObj.parent_path();
+	try {
+		fs::current_path(base_path);
+		// std::cout << "Changed directory to: " << fs::current_path()
+		// 	  << std::endl;
+	} catch (const fs::filesystem_error &e) {
+		std::cerr << "Filesystem error: " << e.what() << std::endl;
+	}
+
+	// Parse the json schema into an internal schema format
+	valijson::Schema schema;
+	valijson::SchemaParser parser;
+	valijson::adapters::NlohmannJsonAdapter schemaDocumentAdapter(
+		schema_root);
+
+	// Set up callbacks for resolving external references
+	try {
+		parser.populateSchema(schemaDocumentAdapter, schema,
+				      documentLoader, documentRelease);
+	} catch (std::exception &e) {
+		std::cerr << "Failed to parse schema: " << e.what()
+			  << std::endl;
+		return 0;
+	}
+
+	// Perform validation
+	valijson::Validator validator(valijson::Validator::kStrongTypes);
+	valijson::ValidationResults results;
+	valijson::adapters::NlohmannJsonAdapter targetDocumentAdapter(jsonData);
+	if (!validator.validate(schema, targetDocumentAdapter, &results)) {
+		std::cerr << "Validation failed." << std::endl;
+		valijson::ValidationResults::Error error;
+		unsigned int errorNum = 1;
+		while (results.popError(error)) {
+			std::string context;
+			std::vector<std::string>::iterator itr =
+				error.context.begin();
+			for (; itr != error.context.end(); itr++) {
+				context += *itr;
+			}
+
+			std::cout << "Error #" << errorNum << std::endl
+				  << "  context: " << context << std::endl
+				  << "  desc:    " << error.description
+				  << std::endl;
+			++errorNum;
+		}
+		return 0;
+	}
+
+	error_message = "Schema validation successful";
+	return 1;
+}
diff --git a/tests/test-utils.hpp b/tests/test-utils.hpp
index dd8ec6a..42e41bc 100644
--- a/tests/test-utils.hpp
+++ b/tests/test-utils.hpp
@@ -1,13 +1,24 @@
 #ifndef CPER_IR_TEST_UTILS_H
 #define CPER_IR_TEST_UTILS_H
 
+#include <valijson/adapters/nlohmann_json_adapter.hpp>
+#include <valijson/schema.hpp>
+#include <valijson/schema_parser.hpp>
+#include <valijson/validator.hpp>
+#include <nlohmann/json.hpp>
+
 extern "C" {
 #include <stdio.h>
 #include <libcper/BaseTypes.h>
+#include <libcper/generator/sections/gen-section.h>
 }
 
 FILE *generate_record_memstream(const char **types, UINT16 num_types,
 				char **buf, size_t *buf_size,
-				int single_section);
+				int single_section,
+				GEN_VALID_BITS_TEST_TYPE validBitsType);
+int schema_validate_from_file(const char *file_path, nlohmann::json &jsonData,
+			      std::string &error_message);
+nlohmann::json loadJson(const char *filePath);
 
 #endif
