Patchwork [1/3] fwts: remove launchpad tagging from fwts

login
register
mail settings
Submitter Colin King
Date Dec. 17, 2013, 2:21 p.m.
Message ID <1387290104-9560-2-git-send-email-colin.king@canonical.com>
Download mbox | patch
Permalink /patch/302201/
State Accepted
Headers show

Comments

Colin King - Dec. 17, 2013, 2:21 p.m.
From: Colin Ian King <colin.king@canonical.com>

fwts launchpad tags have never been used and are an overhead
that is effectivelty redundant.  So, rather than keep on maintaining
this, remove the tagging from the fwts lib and the fwts tests.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 src/acpi/apicinstance/apicinstance.c |   1 -
 src/acpi/checksum/checksum.c         |   2 -
 src/acpi/dmar/dmar.c                 |   1 -
 src/acpi/fadt/fadt.c                 |  13 +--
 src/acpi/lid/lid.c                   |  16 ++-
 src/acpi/mcfg/mcfg.c                 |   6 --
 src/acpi/method/method.c             |  90 ++--------------
 src/acpi/powerbutton/powerbutton.c   |   5 +-
 src/acpi/s3/s3.c                     |   4 -
 src/acpi/s3power/s3power.c           |   7 +-
 src/acpi/s4/s4.c                     |   8 --
 src/acpi/wakealarm/wakealarm.c       |   5 -
 src/apic/apicedge/apicedge.c         |  12 +--
 src/bios/bios32/bios32.c             |  24 ++---
 src/bios/ebda_region/ebda_region.c   |   4 +-
 src/bios/mtrr/mtrr.c                 |  12 +--
 src/bios/os2gap/os2gap.c             |   1 -
 src/bios/pciirq/pciirq.c             |   4 +-
 src/bios/pnp/pnp.c                   |   4 +-
 src/lib/include/fwts.h               |   1 -
 src/lib/include/fwts_framework.h     |   7 +-
 src/lib/include/fwts_klog.h          |   1 -
 src/lib/include/fwts_log.h           |   3 -
 src/lib/include/fwts_tag.h           |  83 --------------
 src/lib/src/Makefile.am              |   1 -
 src/lib/src/fwts_framework.c         |  57 +++-------
 src/lib/src/fwts_klog.c              |   5 -
 src/lib/src/fwts_log.c               |   5 -
 src/lib/src/fwts_tag.c               | 202 -----------------------------------
 src/pci/crs/crs.c                    |   7 --
 src/pci/maxreadreq/maxreadreq.c      |   1 -
 31 files changed, 53 insertions(+), 539 deletions(-)
 delete mode 100644 src/lib/include/fwts_tag.h
 delete mode 100644 src/lib/src/fwts_tag.c
Ivan Hu - Dec. 23, 2013, 7:02 a.m.
On 12/17/2013 10:21 PM, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
>
> fwts launchpad tags have never been used and are an overhead
> that is effectivelty redundant.  So, rather than keep on maintaining
> this, remove the tagging from the fwts lib and the fwts tests.
>
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>   src/acpi/apicinstance/apicinstance.c |   1 -
>   src/acpi/checksum/checksum.c         |   2 -
>   src/acpi/dmar/dmar.c                 |   1 -
>   src/acpi/fadt/fadt.c                 |  13 +--
>   src/acpi/lid/lid.c                   |  16 ++-
>   src/acpi/mcfg/mcfg.c                 |   6 --
>   src/acpi/method/method.c             |  90 ++--------------
>   src/acpi/powerbutton/powerbutton.c   |   5 +-
>   src/acpi/s3/s3.c                     |   4 -
>   src/acpi/s3power/s3power.c           |   7 +-
>   src/acpi/s4/s4.c                     |   8 --
>   src/acpi/wakealarm/wakealarm.c       |   5 -
>   src/apic/apicedge/apicedge.c         |  12 +--
>   src/bios/bios32/bios32.c             |  24 ++---
>   src/bios/ebda_region/ebda_region.c   |   4 +-
>   src/bios/mtrr/mtrr.c                 |  12 +--
>   src/bios/os2gap/os2gap.c             |   1 -
>   src/bios/pciirq/pciirq.c             |   4 +-
>   src/bios/pnp/pnp.c                   |   4 +-
>   src/lib/include/fwts.h               |   1 -
>   src/lib/include/fwts_framework.h     |   7 +-
>   src/lib/include/fwts_klog.h          |   1 -
>   src/lib/include/fwts_log.h           |   3 -
>   src/lib/include/fwts_tag.h           |  83 --------------
>   src/lib/src/Makefile.am              |   1 -
>   src/lib/src/fwts_framework.c         |  57 +++-------
>   src/lib/src/fwts_klog.c              |   5 -
>   src/lib/src/fwts_log.c               |   5 -
>   src/lib/src/fwts_tag.c               | 202 -----------------------------------
>   src/pci/crs/crs.c                    |   7 --
>   src/pci/maxreadreq/maxreadreq.c      |   1 -
>   31 files changed, 53 insertions(+), 539 deletions(-)
>   delete mode 100644 src/lib/include/fwts_tag.h
>   delete mode 100644 src/lib/src/fwts_tag.c
>
> diff --git a/src/acpi/apicinstance/apicinstance.c b/src/acpi/apicinstance/apicinstance.c
> index 1c262b4..5949879 100644
> --- a/src/acpi/apicinstance/apicinstance.c
> +++ b/src/acpi/apicinstance/apicinstance.c
> @@ -61,7 +61,6 @@ static int apicinstance_test1(fwts_framework *fw)
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "MultipleAPICMADT",
>   			"Found %d APIC/MADT tables, the kernel expects just one.",
>   			count);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		snprintf(buffer, sizeof(buffer), " (or up to %d)", count);
>   		fwts_log_advice(fw,
>   			"If you find any APIC issues, perhaps try using "
> diff --git a/src/acpi/checksum/checksum.c b/src/acpi/checksum/checksum.c
> index 3eb3f74..0138430 100644
> --- a/src/acpi/checksum/checksum.c
> +++ b/src/acpi/checksum/checksum.c
> @@ -133,8 +133,6 @@ static int checksum_scan_tables(fwts_framework *fw)
>   				"error and still load it. This is not a "
>   				"critical issue, but should be fixed if "
>   				"possible to avoid the warning messages.");
> -
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_TABLE_CHECKSUM);
>   		}
>   	}
>   	return FWTS_OK;
> diff --git a/src/acpi/dmar/dmar.c b/src/acpi/dmar/dmar.c
> index 880ba88..d6a6d28 100644
> --- a/src/acpi/dmar/dmar.c
> +++ b/src/acpi/dmar/dmar.c
> @@ -264,7 +264,6 @@ static int dmar_acpi_table_check(fwts_framework *fw)
>   	if (table->length <= DMAR_HEADER_SIZE) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidDMAR",
>   			"Invalid DMAR ACPI table.");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		return FWTS_ERROR;
>   	}
>
> diff --git a/src/acpi/fadt/fadt.c b/src/acpi/fadt/fadt.c
> index 9807d56..70ec5e9 100644
> --- a/src/acpi/fadt/fadt.c
> +++ b/src/acpi/fadt/fadt.c
> @@ -75,20 +75,16 @@ static int fadt_test1(fwts_framework *fw)
>   	if ((fadt->header.revision > 1) || (fadt->header.length >= 244)) {
>   		/*  Sanity check sizes with extended address variants */
>   		fwts_log_info(fw, "FADT is greater than ACPI version 1.0");
> -		if ((uint64_t)port != fadt->x_pm1a_cnt_blk.address) {
> +		if ((uint64_t)port != fadt->x_pm1a_cnt_blk.address)
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"FADTPM1CNTAddrMismatch",
>   				"32 and 64 bit versions of FADT pm1_cnt address do not match (0x%8.8x vs 0x%16.16" PRIx64 ").",
>   				port, fadt->x_pm1a_cnt_blk.address);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_BAD_ADDRESS);
> -		}
> -		if (width != fadt->x_pm1a_cnt_blk.register_bit_width) {
> +		if (width != fadt->x_pm1a_cnt_blk.register_bit_width)
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"FADTPM1CNTSizeMismatch",
>   				"32 and 64 bit versions of FADT pm1_cnt size do not match (0x%x vs 0x%x).",
>   				width, fadt->x_pm1a_cnt_blk.register_bit_width);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_BAD_ADDRESS);
> -		}
>
>   		port = fadt->x_pm1a_cnt_blk.address;
>   		width = fadt->x_pm1a_cnt_blk.register_bit_width;
> @@ -129,7 +125,6 @@ static int fadt_test1(fwts_framework *fw)
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "FADTPM1AInvalidWidth",
>   			"FADT pm1a register has invalid bit width of %d.",
>   			width);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_BAD_LENGTH);
>   		return FWTS_OK;
>   	}
>
> @@ -140,11 +135,9 @@ static int fadt_test1(fwts_framework *fw)
>
>   	if (val32 & 0x01)
>   		fwts_passed(fw, "SCI_EN bit in PM1a Control Register Block is enabled.");
> -	else {
> +	else
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "SCI_ENNotEnabled",
>   			"SCI_EN bit in PM1a Control Register Block is not enabled.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
> -	}
>
>   	return FWTS_OK;
>   }
> diff --git a/src/acpi/lid/lid.c b/src/acpi/lid/lid.c
> index 65fdc8a..6948f41 100644
> --- a/src/acpi/lid/lid.c
> +++ b/src/acpi/lid/lid.c
> @@ -70,11 +70,10 @@ static int lid_test1(fwts_framework *fw)
>
>   	lid_check_field_poll(fw, FWTS_BUTTON_LID_OPENED, &matching, &not_matching);
>
> -	if ((matching == 0) || (not_matching > 0)) {
> +	if ((matching == 0) || (not_matching > 0))
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "LidNotOpen",
>   			"Detected a closed LID state.");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_LID);
> -	} else
> +	else
>   		fwts_passed(fw, "Detected open LID state.");
>
>   	return FWTS_OK;
> @@ -141,18 +140,15 @@ static int lid_test_state(fwts_framework *fw, int button)
>   	fwts_gpe_free(gpes_start, gpe_count);
>   	fwts_gpe_free(gpes_end, gpe_count);
>
> -	if (events == 0) {
> +	if (events == 0)
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "NoLidEvents",
>   			"Did not detect any ACPI LID events while waiting for to LID %s.", state);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_LID);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_EVENT);
> -	} else {
> +	else {
>   		fwts_passed(fw, "Detected ACPI LID events while waiting for LID to %s.", state);
> -		if ((matching == 0) || (not_matching > 0)) {
> +		if ((matching == 0) || (not_matching > 0))
>   			fwts_failed(fw, LOG_LEVEL_HIGH, "NoLidState",
>   				"Could not detect lid %s state.", state);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_LID);
> -		} else
> +		else
>   			fwts_passed(fw, "Detected lid %s state.", state);
>   	}
>
> diff --git a/src/acpi/mcfg/mcfg.c b/src/acpi/mcfg/mcfg.c
> index a4d22a6..85d0bb8 100644
> --- a/src/acpi/mcfg/mcfg.c
> +++ b/src/acpi/mcfg/mcfg.c
> @@ -151,7 +151,6 @@ static int mcfg_test1(fwts_framework *fw)
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidSize",
>   			"Invalid MCFG ACPI table size: got %zd bytes expecting more",
>   			mcfg_size + sizeof(fwts_acpi_table_mcfg));
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		fwts_advice(fw,
>   			"MCFG table must be least %zd bytes (header size) with "
>   			"multiples of %zd bytes for each MCFG entry.",
> @@ -170,7 +169,6 @@ static int mcfg_test1(fwts_framework *fw)
>   	if (mcfg_size != (ssize_t)(nr * sizeof(fwts_acpi_mcfg_configuration))) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidSize2",
>   			"MCFG table is not a multiple of record size");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		return FWTS_ERROR;
>   	}
>
> @@ -181,7 +179,6 @@ static int mcfg_test1(fwts_framework *fw)
>   	if (mcfg == NULL) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidTable",
>   			"Invalid MCFG ACPI table");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		return FWTS_ERROR;
>   	}
>
> @@ -204,8 +201,6 @@ static int mcfg_test1(fwts_framework *fw)
>   				"MCFG MMIO config space at 0x%" PRIx64
>   				" is not reserved in the memory map table",
>   				config->base_address);
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -
>   			fwts_advice(fw,
>   				"The PCI Express specification states that the "
>   				"PCI Express configuration space should "
> @@ -238,7 +233,6 @@ static int mcfg_test2(fwts_framework *fw)
>   	if (mcfg == NULL) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidTable",
>   			"Invalid MCFG ACPI table");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		return FWTS_ERROR;
>   	}
>
> diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
> index e6d925d..a7e81ef 100644
> --- a/src/acpi/method/method.c
> +++ b/src/acpi/method/method.c
> @@ -333,7 +333,6 @@ static int method_package_count_min(
>   			" element%s, got %" PRIu32 " element%s instead.",
>   			name, min, min == 1 ? "" : "s",
>   			obj->Package.Count, obj->Package.Count == 1 ? "" : "s");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return FWTS_ERROR;
>   	}
>   	return FWTS_OK;
> @@ -359,7 +358,6 @@ static int method_package_count_equal(
>   			" element%s, got %" PRIu32 " element%s instead.",
>   			name, count, count == 1 ? "" : "s",
>   			obj->Package.Count, obj->Package.Count == 1 ? "" : "s");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return FWTS_ERROR;
>   	}
>   	return FWTS_OK;
> @@ -448,7 +446,6 @@ static void method_evaluate_found_method(
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "AMLLocksAcquired",
>   			"%s left %d locks in an acquired state.",
>   			name, sem_acquired - sem_released);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_MUTEX);
>   		fwts_advice(fw,
>   			"Locks left in an acquired state generally indicates "
>   			"that the AML code is not releasing a lock. This can "
> @@ -559,7 +556,6 @@ static int method_name_check(fwts_framework *fw)
>   						"be corrected.",
>   						fwts_list_data(char *, item),
>   						*ptr);
> -					fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD);
>   					failed = true;
>   					break;
>   				}
> @@ -685,7 +681,6 @@ static void method_test_NULL_return(
>
>   	if (buf && buf->Length && buf->Pointer) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodShouldReturnNothing", "%s returned values, but was expected to return nothing.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		fwts_log_info(fw, "Object returned:");
>   		fwts_acpi_object_dump(fw, obj);
>   		fwts_advice(fw,
> @@ -718,7 +713,6 @@ static void method_test_passed_failed_return(
>   				"MethodReturnZeroOrOne",
>   				"%s returned 0x%8.8" PRIx32 ", should return 1 "
>   				"(success) or 0 (failed).", method, val);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			fwts_advice(fw,
>   				"Method %s should be returning the correct "
>   				"1/0 success/failed return values. "
> @@ -754,7 +748,6 @@ static void method_test_polling_return(
>   				"%s returned a value %f seconds > (1 hour) "
>   				"which is probably incorrect.",
>   				method, (float)obj->Integer.Value / 10.0);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			fwts_advice(fw,
>   				"The method is returning a polling interval "
>   				"which is very long and hence most probably "
> @@ -817,7 +810,6 @@ static int method_package_elements_all_type(
>   				name, i,
>   				method_type_name(type),
>   				method_type_name(obj->Package.Elements[i].Type));
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   	}
> @@ -859,7 +851,6 @@ static int method_package_elements_type(
>   				name, i, info[i].name,
>   				method_type_name(info[i].type),
>   				method_type_name(obj->Package.Elements[i].Type));
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   	}
> @@ -991,7 +982,6 @@ static void method_test_HID_return(
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"Method_HIDNullString",
>   				"%s returned a NULL string.", name);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		}
>   		break;
>   	case ACPI_TYPE_INTEGER:
> @@ -1011,7 +1001,6 @@ static void method_test_HID_return(
>   	default:
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_HIDBadReturnType",
>   			"%s did not return a string or an integer.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		break;
>   	}
>   }
> @@ -1098,12 +1087,10 @@ static void method_test_SUB_return(
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"Method_SUBNullString",
>   				"%s returned a NULL string.", name);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		}
>   	else {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UIDBadReturnType",
>   			"Method _SUB did not return a string or an integer.");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   	}
>   }
>
> @@ -1141,12 +1128,10 @@ static void method_test_UID_return(
>   			fwts_passed(fw,
>   				"%s returned a string '%s' as expected.",
>   				name, obj->String.Pointer);
> -		else {
> +		else
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"Method_UIDNullString",
>   				"%s returned a NULL string.", name);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> -		}
>   		break;
>   	case ACPI_TYPE_INTEGER:
>   		method_passed_sane_uint64(fw, name, obj->Integer.Value);
> @@ -1154,7 +1139,6 @@ static void method_test_UID_return(
>   	default:
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UIDBadReturnType",
>   			"Method %s did not return a string or an integer.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		break;
>   	}
>   }
> @@ -1841,8 +1825,6 @@ static void method_test_CRS_return(
>
>   	if (passed)
>   		fwts_passed(fw, "%s (%s) looks sane.", name, tag);
> -	else
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   }
>
>   static int method_test_CRS(fwts_framework *fw)
> @@ -2122,7 +2104,6 @@ static void method_test_SEG_return(
>   			"upper 16 reserved bits are set when they "
>   			"should in fact be zero.",
>   			name, obj->Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   	} else
>   		method_passed_sane_uint64(fw, name, obj->Integer.Value);
>   }
> @@ -2308,7 +2289,6 @@ static void method_test_Sx__return(
>   			"integers, and %s only returned %" PRIu32
>   			" elements in the package.",
>   			name, obj->Package.Count);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -2328,7 +2308,6 @@ static void method_test_Sx__return(
>   			"expect. So, while this is conforming to the ACPI "
>   			"specification it will in fact not work in the "
>   			"Linux kernel.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -2339,7 +2318,6 @@ static void method_test_Sx__return(
>   			"Method_SxElementType",
>   			"%s returned a package that did not contain "
>   			"an integer.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -2348,7 +2326,6 @@ static void method_test_Sx__return(
>   			"Method_SxElementValue",
>   			"%s package element 0 had upper 24 bits "
>   			"of bits that were non-zero.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>
> @@ -2357,7 +2334,6 @@ static void method_test_Sx__return(
>   			"Method_SxElementValue",
>   			"%s package element 1 had upper 24 bits "
>   			"of bits that were non-zero.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>
> @@ -2483,7 +2459,6 @@ static void method_test_CSD_return(
>   				"%s sub-package %" PRIu32 " was expected to "
>   				"have 5 elements, got %" PRIu32 " elements instead.",
>   				name, i, pkg->Package.Count);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   			continue;
>   		}
> @@ -2496,7 +2471,6 @@ static void method_test_CSD_return(
>   					" element %" PRIu32 " is not "
>   					"an integer.",
>   					name, i, j);
> -				fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   				elements_ok = false;
>   			}
>   		}
> @@ -2514,7 +2488,6 @@ static void method_test_CSD_return(
>   				"was expected to have value 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[0].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 1 should contain zero */
> @@ -2526,7 +2499,6 @@ static void method_test_CSD_return(
>   				"was 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[1].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 3 should contain 0xfc..0xfe */
> @@ -2541,7 +2513,6 @@ static void method_test_CSD_return(
>   				"was 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[3].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 4 number of processors, skip check */
> @@ -2599,7 +2570,6 @@ static void method_test_CST_return(
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_CSTElement0NotInteger",
>   			"%s should return package with element zero being an integer "
>   			"count of the number of C state sub-packages.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -2611,7 +2581,6 @@ static void method_test_CST_return(
>   			"reports it has %" PRIu64 " C states.",
>   			name, obj->Package.Count - 1,
>   			obj->Package.Elements[0].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -2631,7 +2600,6 @@ static void method_test_CST_return(
>   				"Method_CSTElementType",
>   				"%s package element %" PRIu32 " was not a package.",
>   				name, i);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			cst_elements_ok[i] = false;
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
> @@ -2795,7 +2763,6 @@ static void method_test_PSS_return(
>   				"Method_PSSElementType",
>   				"%s package element %" PRIu32
>   				" was not a package.", name, i);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
>   		}
> @@ -2808,7 +2775,6 @@ static void method_test_PSS_return(
>   				" was expected to "
>   				"have 6 elements, got %" PRIu32 " elements instead.",
>   				name, i, obj->Package.Count);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
>   		}
> @@ -2988,7 +2954,6 @@ static void method_test_TSD_return(
>   				"Method_TSDElementType",
>   				"%s package element %" PRIu32
>   				" was not a package.", name, i);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
>   		}
> @@ -3003,7 +2968,6 @@ static void method_test_TSD_return(
>   				"%s sub-package %" PRIu32 " was expected to "
>   				"have 5 elements, got %" PRIu32 " elements instead.",
>   				name, i, pkg->Package.Count);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   			continue;
>   		}
> @@ -3015,7 +2979,6 @@ static void method_test_TSD_return(
>   					"%s sub-package %" PRIu32
>   					" element %" PRIu32 " is not "
>   					"an integer.", name, i, j);
> -				fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   				elements_ok = false;
>   			}
>   		}
> @@ -3034,7 +2997,6 @@ static void method_test_TSD_return(
>   				"was expected to have value 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[0].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 1 should contain zero */
> @@ -3047,7 +3009,6 @@ static void method_test_TSD_return(
>   				"was 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[1].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 3 should contain 0xfc..0xfe */
> @@ -3063,7 +3024,6 @@ static void method_test_TSD_return(
>   				"was 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[3].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 4 number of processors, skip check */
> @@ -3118,7 +3078,6 @@ static void method_test_TSS_return(
>   				"Method_TSSElementType",
>   				"%s package element %" PRIu32
>   				" was not a package.", name, i);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			tss_elements_ok[i] = false;
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
> @@ -3135,7 +3094,6 @@ static void method_test_TSS_return(
>   				" was expected to have 5 elements, "
>   				"got %" PRIu32" elements instead.",
>   				name, i, pkg->Package.Count);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			tss_elements_ok[i] = false;
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
> @@ -3148,7 +3106,6 @@ static void method_test_TSS_return(
>   					"%s sub-package %" PRIu32
>   					" element %" PRIu32 " is not "
>   					"an integer.", name, i, j);
> -				fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   				tss_elements_ok[i] = false;
>   			}
>   		}
> @@ -3170,7 +3127,6 @@ static void method_test_TSS_return(
>   				"was %" PRIu64 ".",
>   				name, i,
>   				pkg->Package.Elements[0].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Skip checking elements 1..4 */
> @@ -3296,15 +3252,14 @@ static void method_test_GCP_return(
>   	if (method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK)
>   		return;
>
> -	if (obj->Integer.Value & ~0xf) {
> +	if (obj->Integer.Value & ~0xf)
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   			"Method_GCPReturn",
>   			"%s returned %" PRId64 ", should be between 0 and 15, "
>   			"one or more of the reserved bits 4..31 seem "
>   			"to be set.",
>   			name, obj->Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> -	} else
> +	else
>   		method_passed_sane_uint64(fw, name, obj->Integer.Value);
>   }
>
> @@ -3332,7 +3287,6 @@ static void method_test_GRT_return(
>   			"%s should return a buffer of 16 bytes, but "
>   			"instead just returned %" PRIu32,
>   			name, obj->Buffer.Length);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -3361,15 +3315,14 @@ static void method_test_GWS_return(
>   	if (method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK)
>   		return;
>
> -	if (obj->Integer.Value & ~0x3) {
> +	if (obj->Integer.Value & ~0x3)
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   			"Method_GWSReturn",
>   			"%s returned %" PRIu64 ", should be between 0 and 3, "
>   			"one or more of the reserved bits 2..31 seem "
>   			"to be set.",
>   			name, obj->Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> -	} else
> +	else
>   		method_passed_sane_uint64(fw, name, obj->Integer.Value);
>   }
>
> @@ -3466,7 +3419,6 @@ static void method_test_SBS_return(
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_SBSReturn",
>   			"%s returned %" PRIu64 ", should be between 0 and 4.",
>   			name, obj->Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		fwts_advice(fw,
>   			"Smart Battery %s is incorrectly informing "
>   			"the OS about the smart battery "
> @@ -3545,7 +3497,6 @@ static void method_test_BIF_return(
>   			"%s: Expected Power Unit (Element 0) to be "
>   			"0 (mWh) or 1 (mAh), got 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[0].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #ifdef FWTS_METHOD_PEDANDTIC
> @@ -3560,7 +3511,6 @@ static void method_test_BIF_return(
>   			"%s: Design Capacity (Element 1) is "
>   			"unknown: 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[1].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Last Full Charge Capacity */
> @@ -3570,7 +3520,6 @@ static void method_test_BIF_return(
>   			"%s: Last Full Charge Capacity (Element 2) "
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[2].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #endif
> @@ -3582,7 +3531,6 @@ static void method_test_BIF_return(
>   			"(Element 3) to be 0 (Primary) or 1 "
>   			"(Secondary), got 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[3].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #ifdef FWTS_METHOD_PEDANDTIC
> @@ -3597,7 +3545,6 @@ static void method_test_BIF_return(
>   			"%s: Design Voltage (Element 4) is "
>   			"unknown: 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[4].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Design capacity warning */
> @@ -3607,7 +3554,6 @@ static void method_test_BIF_return(
>   			"%s: Design Capacity Warning (Element 5) "
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[5].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Design capacity low */
> @@ -3617,7 +3563,6 @@ static void method_test_BIF_return(
>   			"%s: Design Capacity Warning (Element 6) "
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[6].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #endif
> @@ -3690,7 +3635,6 @@ static void method_test_BIX_return(
>   			"0 (mWh) or 1 (mAh), got 0x%8.8" PRIx64 ".",
>   			name, elements[1].name,
>   			obj->Package.Elements[1].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #ifdef FWTS_METHOD_PEDANDTIC
> @@ -3706,7 +3650,6 @@ static void method_test_BIX_return(
>   			"unknown: 0x%8.8" PRIx64 ".",
>   			name, elements[2].name,
>   			obj->Package.Elements[2].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Last Full Charge Capacity */
> @@ -3717,7 +3660,6 @@ static void method_test_BIX_return(
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, elements[3].name,
>   			obj->Package.Elements[3].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #endif
> @@ -3730,7 +3672,6 @@ static void method_test_BIX_return(
>   			"(Secondary), got 0x%8.8" PRIx64 ".",
>   			name, elements[4].name,
>   			obj->Package.Elements[4].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #ifdef FWTS_METHOD_PEDANDTIC
> @@ -3746,7 +3687,6 @@ static void method_test_BIX_return(
>   			"0x%8.8" PRIx64 ".",
>   			name, elements[5].name,
>   			obj->Package.Elements[5].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Design capacity warning */
> @@ -3757,7 +3697,6 @@ static void method_test_BIX_return(
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, elements[6].name,
>   			obj->Package.Elements[6].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Design capacity low */
> @@ -3768,7 +3707,6 @@ static void method_test_BIX_return(
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, elements[7].name,
>   			obj->Package.Elements[7].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Cycle Count */
> @@ -3777,7 +3715,6 @@ static void method_test_BIX_return(
>   			"%s: %s (Element 8) is unknown: "
>   			"0x%8.8" PRIx64 ".", Elements[8].name,
>   			name, obj->Package.Elements[8].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #endif
> @@ -3846,7 +3783,6 @@ static void method_test_BST_return(
>   			"%s: Expected Battery State (Element 0) to "
>   			"be 0..7, got 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[0].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Ensure bits 0 (discharging) and 1 (charging) are not both set, see 10.2.2.6 */
> @@ -3857,7 +3793,6 @@ static void method_test_BST_return(
>   			"indicating both charging and discharginng "
>   			"which is not allowed. Got value 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[0].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Battery Present Rate - cannot check, pulled from EC */
> @@ -4003,7 +3938,6 @@ static void method_test_PSR_return(
>   			"%s returned 0x%8.8" PRIx64 ", expected 0 "
>   			"(offline) or 1 (online)",
>   			name, obj->Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   	} else
>   		method_passed_sane_uint64(fw, name, obj->Integer.Value);
>   }
> @@ -4202,7 +4136,6 @@ static void method_test_THERM_return(
>   				method,
>   				obj->Integer.Value,
>   				(float)((uint64_t)obj->Integer.Value) / 10.0);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			fwts_advice(fw,
>   				"The value returned was probably a "
>   				"hard-coded thermal value which is "
> @@ -4562,13 +4495,12 @@ static void method_test_DOD_return(
>   		}
>   	}
>
> -	if (failed) {
> +	if (failed)
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   			"Method_DODNoPackage",
>   			"Method _DOD did not return a package of "
>   			"%" PRIu32 " integers.", obj->Package.Count);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> -	} else
> +	else
>   		method_passed_sane(fw, name, "package");
>   }
>
> @@ -4672,7 +4604,6 @@ static void method_test_BCL_return(
>   			"battery power (%" PRIu64 ").",
>   			obj->Package.Elements[0].Integer.Value,
>   			obj->Package.Elements[1].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>
> @@ -4698,7 +4629,6 @@ static void method_test_BCL_return(
>   			"level are not in ascending "
>   			"order which should be fixed "
>   			"in the firmware.");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>
> @@ -4781,14 +4711,13 @@ static void method_test_DDC_return(
>
>   	switch (obj->Type) {
>   	case ACPI_TYPE_BUFFER:
> -		if (requested != obj->Buffer.Length) {
> +		if (requested != obj->Buffer.Length)
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"Method_DDCElementCount",
>   				"%s returned a buffer of %" PRIu32 " items, "
>   				"expected %" PRIu32 ".",
>   				name, obj->Buffer.Length, requested);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> -		} else
> +		else
>   			fwts_passed(fw,
>   				"Method %s returned a buffer of %d items "
>   				"as expected.",
> @@ -4804,7 +4733,6 @@ static void method_test_DDC_return(
>   	default:
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_DDCBadReturnType",
>   			"%s did not return a buffer or an integer.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		break;
>   	}
>   }
> diff --git a/src/acpi/powerbutton/powerbutton.c b/src/acpi/powerbutton/powerbutton.c
> index 7820f65..5a12614 100644
> --- a/src/acpi/powerbutton/powerbutton.c
> +++ b/src/acpi/powerbutton/powerbutton.c
> @@ -56,11 +56,10 @@ static int power_button_test1(fwts_framework *fw)
>   		}
>   		fwts_printf(fw, "Waiting %2.2d/20\r", 20-i);
>   	}
> -	if (matching == 0) {
> +	if (matching == 0)
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "NoPowerButtonEvents",
>   			"Did not detect any ACPI power buttons events while waiting for power button to be pressed.");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_EVENT);
> -	} else  {
> +	else  {
>   		char button[4096];
>   		memset(button, 0, sizeof(button));
>   		sscanf(buffer, "%*s %s", button);
> diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c
> index 45f62f7..27a5af0 100644
> --- a/src/acpi/s3/s3.c
> +++ b/src/acpi/s3/s3.c
> @@ -147,7 +147,6 @@ static int s3_do_suspend_resume(fwts_framework *fw,
>   		(*pm_errors)++;
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "ShortSuspend",
>   			"Unexpected: S3 slept for %d seconds, less than the expected %d seconds.", duration, delay);
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	}
>   	fwts_progress_message(fw, percent, "(Checking for errors)");
>   	if (duration > (delay*2)) {
> @@ -174,19 +173,16 @@ static int s3_do_suspend_resume(fwts_framework *fw,
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedPreS3",
>   			"pm-action failed before trying to put the system "
>   			"in the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	} else if (status == 128) {
>   		(*pm_errors)++;
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionPowerStateS3",
>   			"pm-action tried to put the machine in the requested "
>   			"power state but failed.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	} else if (status > 128) {
>   		(*pm_errors)++;
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedS3",
>   			"pm-action encountered an error and also failed to "
>   			"enter the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	}
>
>   	return FWTS_OK;
> diff --git a/src/acpi/s3power/s3power.c b/src/acpi/s3power/s3power.c
> index 6c6213a..75d660d 100644
> --- a/src/acpi/s3power/s3power.c
> +++ b/src/acpi/s3power/s3power.c
> @@ -203,12 +203,10 @@ static int s3power_test(fwts_framework *fw)
>   	duration = (int)(t_end - t_start);
>   	fwts_log_info(fw, "pm-suspend returned %d after %d seconds.", status, duration);
>
> -	if (duration < s3power_sleep_delay) {
> +	if (duration < s3power_sleep_delay)
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "ShortSuspend",
>   			"Unexpected: S3 slept for %d seconds, less than the expected %d seconds.",
>   			duration, s3power_sleep_delay);
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
> -	}
>   	if (duration > (s3power_sleep_delay*2))
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "LongSuspend",
>   			"Unexpected: S3 much longer than expected (%d seconds).", duration);
> @@ -218,17 +216,14 @@ static int s3power_test(fwts_framework *fw)
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionFailedPreS3",
>   			"pm-action failed before trying to put the system "
>   			"in the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	} else if (status == 128) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionPowerStateS3",
>   			"pm-action tried to put the machine in the requested "
>   			"power state but failed.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	} else if (status > 128) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionFailedS3",
>   			"pm-action encountered an error and also failed to "
>   			"enter the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	}
>
>   	return FWTS_OK;
> diff --git a/src/acpi/s4/s4.c b/src/acpi/s4/s4.c
> index 9f07bcf..d9ddd6b 100644
> --- a/src/acpi/s4/s4.c
> +++ b/src/acpi/s4/s4.c
> @@ -180,33 +180,28 @@ static int s4_hibernate(fwts_framework *fw,
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedPreS4",
>   			"pm-action failed before trying to put the system "
>   			"in the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	} else if (status == 128) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionPowerStateS4",
>   			"pm-action tried to put the machine in the requested "
>   			"power state but failed.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	} else if (status > 128) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedS4",
>   			"pm-action encountered an error and also failed to "
>   			"enter the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	}
>
>   	if (fwts_klog_regex_find(fw, klog, "Freezing user space processes.*done") < 1) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "UserSpaceTaskFreeze",
>   			"Failed to freeze user space processes.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	}
>
>   	if (fwts_klog_regex_find(fw, klog, "Freezing remaining freezable tasks.*done") < 1) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "KernelTaskFreeze",
>   			"Failed to freeze remaining non-user space processes.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	}
>
> @@ -214,14 +209,12 @@ static int s4_hibernate(fwts_framework *fw,
>   	    (fwts_klog_regex_find(fw, klog, "PM: late freeze of devices complete") < 1)) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "DeviceFreeze",
>   			"Failed to freeze devices.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	}
>
>   	if (fwts_klog_regex_find(fw, klog, "PM: Allocated.*kbytes") < 1) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "HibernateImageAlloc",
>   			"Failed to allocate memory for hibernate image.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		*failed_alloc_image = 1;
>   		(*pm_errors)++;
>   	}
> @@ -229,7 +222,6 @@ static int s4_hibernate(fwts_framework *fw,
>   	if (fwts_klog_regex_find(fw, klog, "PM: Image restored successfully") < 1) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "HibernateImageRestore",
>   			"Failed to restore hibernate image.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	}
>
> diff --git a/src/acpi/wakealarm/wakealarm.c b/src/acpi/wakealarm/wakealarm.c
> index dd92861..0243a5e 100644
> --- a/src/acpi/wakealarm/wakealarm.c
> +++ b/src/acpi/wakealarm/wakealarm.c
> @@ -56,7 +56,6 @@ static int wakealarm_test2(fwts_framework *fw)
>   	if (fwts_wakealarm_trigger(fw, 1)) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotTriggeredTest2",
>   			"RTC wakealarm did not trigger.");
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   		return FWTS_OK;
>   	}
>
> @@ -75,7 +74,6 @@ static int wakealarm_test3(fwts_framework *fw)
>   	if (ret < 0) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotTriggeredTest3",
>   			"Failed to trigger and fire wakealarm.");
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   		return FWTS_ERROR;	/* Really went wrong */
>   	}
>   	if (ret == 0)
> @@ -83,7 +81,6 @@ static int wakealarm_test3(fwts_framework *fw)
>   	else {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotFiredTest3",
>   			"RTC wakealarm was triggered but did not fire.");
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   	}
>
>   	return FWTS_OK;
> @@ -101,14 +98,12 @@ static int wakealarm_test4(fwts_framework *fw)
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"WakeAlarmNotTriggeredTest4",
>   				"Failed to trigger and fire wakealarm.");
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			return FWTS_ERROR;	/* Really went wrong */
>   		}
>   		if (ret != 0) {
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"WakeAlarmNotFiredTest4",
>   				"RTC wakealarm was triggered but did not fire.");
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			failed++;
>   		}
>   		fwts_progress(fw, 25 * i);
> diff --git a/src/apic/apicedge/apicedge.c b/src/apic/apicedge/apicedge.c
> index c679959..de2ca8b 100644
> --- a/src/apic/apicedge/apicedge.c
> +++ b/src/apic/apicedge/apicedge.c
> @@ -76,26 +76,20 @@ static int apicedge_test1(fwts_framework *fw)
>   			edge = 0;
>
>   		if (strstr(line,"acpi")) {
> -			if (edge == 1) {
> +			if (edge == 1)
>   				fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   					"ACPIIRQEdgeTrig",
>   					"ACPI Interrupt is incorrectly edge triggered.");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS_IRQ);
> -			}
>   			continue;
>   		}
> -		if ((irq < 15) && (edge == 0)) {
> +		if ((irq < 15) && (edge == 0))
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"LegacyIRQLevelTrig",
>   				"Legacy interrupt %i is incorrectly level triggered.", irq);
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS_IRQ);
> -		}
> -		if ((irq < 15) && (edge == -1)) {
> +		if ((irq < 15) && (edge == -1))
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"NonLegacyIRQLevelTrig",
>   				"Non-Legacy interrupt %i is incorrectly level triggered.", irq);
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS_IRQ);
> -		}
>   	}
>   	fclose(file);
>
> diff --git a/src/bios/bios32/bios32.c b/src/bios/bios32/bios32.c
> index aedac87..57d219f 100644
> --- a/src/bios/bios32/bios32.c
> +++ b/src/bios/bios32/bios32.c
> @@ -87,51 +87,47 @@ static int bios32_test1(fwts_framework *fw)
>   				bios32->checksum);
>   			fwts_log_nl(fw);
>
> -			if (bios32->entry_point >= 0x100000) {
> +			if (bios32->entry_point >= 0x100000)
>   				fwts_failed(fw, LOG_LEVEL_HIGH,
>   					"BIOS32SrvDirEntryPointHighMem",
>   					"Service Directory Entry Point 0x%8.8" PRIx32
>   					" is in high memory and cannot be used "
>   					"by the kernel.",
>   					bios32->entry_point);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -			} else
> +			else
>   				fwts_passed(fw, "Service Directory Entry Point "
>   					"0x%8.8x is not in high memory.",
>   					bios32->entry_point);
>
> -			if (bios32->length != 1) {
> +			if (bios32->length != 1)
>   				fwts_failed(fw, LOG_LEVEL_HIGH,
>   					"BIOS32SrvDirEntryLength",
>   					"Service Directory Length is 0x%8.8" PRIx8
>   					", expected 1 (1 x 16 bytes).",
>   					bios32->length);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -			} else
> +			else
>   				fwts_passed(fw,
>   					"Service Directory Length is 1 "
>   					"(1 x 16 bytes) as expected.");
>
> -			if (bios32->revision_level != 0) {
> +			if (bios32->revision_level != 0)
>   				fwts_failed(fw, LOG_LEVEL_HIGH,
>   					"BIOS32SrvDirRevision",
>   					"Service Directory Revision is 0x%2.2" PRIx8
>   					", only version 0 is supported by the "
>   					"kernel.",
>   					bios32->revision_level);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -			} else
> +			else
>   				fwts_passed(fw,
>   					"Service Directory Revision is 0x%2.2" PRIx8
>   					" and is supported by the kernel.",
>   					bios32->revision_level);
>
> -			if (fwts_checksum(mem + i, 16) != 0) {
> +			if (fwts_checksum(mem + i, 16) != 0)
>   				fwts_failed(fw, LOG_LEVEL_HIGH,
>   					"BIOS32SrvDirCheckSum",
>   					"Service Directory checksum failed.");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -			} else
> +			else
>   				fwts_passed(fw,
>   					"Service Directory checksum passed.");
>   			found++;
> @@ -140,13 +136,11 @@ static int bios32_test1(fwts_framework *fw)
>
>   	if (found == 0)
>   		fwts_log_info(fw, "Could not find BIOS32 Service Directory.");
> -	else if (found > 1) {
> +	else if (found > 1)
>   		fwts_failed(fw, LOG_LEVEL_HIGH,
>   			"BIOS32MultipleSrvDirInstances",
>   			"Found %d instances of BIOS32 Service Directory, "
>   			"there should only be 1.", found);
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -	}
>
>           (void)fwts_munmap(mem, BIOS32_SD_REGION_SIZE);
>
> diff --git a/src/bios/ebda_region/ebda_region.c b/src/bios/ebda_region/ebda_region.c
> index af8a0e6..f82333e 100644
> --- a/src/bios/ebda_region/ebda_region.c
> +++ b/src/bios/ebda_region/ebda_region.c
> @@ -90,13 +90,11 @@ static int ebda_test1(fwts_framework *fw)
>   			memory_map_name,
>   			entry->start_address,
>   			entry->end_address);
> -	} else {
> +	} else
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   			"EBDAMappedNotReserved",
>   			"EBDA region mapped at 0x%lx but not reserved in the %s table.",
>   			ebda_addr, memory_map_name);
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -	}
>   		
>   	return FWTS_OK;
>   }
> diff --git a/src/bios/mtrr/mtrr.c b/src/bios/mtrr/mtrr.c
> index 4bcdf3a..b604950 100644
> --- a/src/bios/mtrr/mtrr.c
> +++ b/src/bios/mtrr/mtrr.c
> @@ -384,7 +384,6 @@ static int validate_iomem(fwts_framework *fw)
>   				"has incorrect attribute%s.",
>   				start, end,
>   				c2, cache_to_string(type & type_mustnot));
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			if (type_must == UNCACHED)
>   				skiperror = true;
>   		}
> @@ -402,7 +401,6 @@ static int validate_iomem(fwts_framework *fw)
>   				start, end,
>   				c2,
>   				cache_to_string( (type & type_must) ^ type_must));
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   		}
>
>   	}
> @@ -487,17 +485,14 @@ static int mtrr_test2(fwts_framework *fw)
>
>   		if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent fixed MTRR settings") > 0) {
>   			fwts_log_info(fw, "Detected CPUs with inconsistent fixed MTRR settings which the kernel fixed.");
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			failed = true;
>   		}
>   		if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent variable MTRR settings") > 0) {
>   			fwts_log_info(fw, "Detected CPUs with inconsistent variable MTRR settings which the kernel fixed.");
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			failed = true;
>   		}
>   		if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent MTRRdefType") > 0) {
>   			fwts_log_info(fw, "Detected CPUs with inconsistent variable MTRR settings which the kernel fixed.");
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			failed = true;
>   		}
>
> @@ -519,7 +514,7 @@ static int mtrr_test3(fwts_framework *fw)
>   {
>   	if (strstr(fwts_cpuinfo->vendor_id, "AMD")) {
>   		if (klog != NULL) {
> -			if (fwts_klog_regex_find(fw, klog, "SYSCFG[MtrrFixDramModEn] not cleared by BIOS, clearing this bit") > 0) {
> +			if (fwts_klog_regex_find(fw, klog, "SYSCFG[MtrrFixDramModEn] not cleared by BIOS, clearing this bit") > 0)
>   				fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   					"MTRRFixDramModEnBit",
>   					"The BIOS is expected to clear MtrrFixDramModEn bit, see for example "
> @@ -528,11 +523,8 @@ static int mtrr_test3(fwts_framework *fw)
>    					"\"13.2.1.2 SYSCFG Register\": \"The MtrrFixDramModEn bit should be set "
>    					"to 1 during BIOS initialization of the fixed MTRRs, then cleared to "
>    					"0 for operation.\"");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -			}
> -			else {
> +			else
>   				fwts_passed(fw, "No MtrrFixDramModEn error detected.");
> -			}
>   		}
>   	} else
>   		fwts_skipped(fw, "CPU is not an AMD, cannot test.");
> diff --git a/src/bios/os2gap/os2gap.c b/src/bios/os2gap/os2gap.c
> index 40773f1..de16bf3 100644
> --- a/src/bios/os2gap/os2gap.c
> +++ b/src/bios/os2gap/os2gap.c
> @@ -57,7 +57,6 @@ static int os2gap_test1(fwts_framework *fw)
>   			OS2_GAP_SIZE / 1024,
>   			(void*)OS2_GAP_ADDRESS,
>   			(void*)(OS2_GAP_ADDRESS + OS2_GAP_SIZE));
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   		fwts_log_nl(fw);
>   		fwts_memory_map_table_dump(fw, os2gap_memory_map_info);
>   	} else
> diff --git a/src/bios/pciirq/pciirq.c b/src/bios/pciirq/pciirq.c
> index 5df0e37..b00214f 100644
> --- a/src/bios/pciirq/pciirq.c
> +++ b/src/bios/pciirq/pciirq.c
> @@ -230,12 +230,10 @@ static int pciirq_test1(fwts_framework *fw)
>   			"Could not find PCI IRQ Routing Table. Since this table "
>   			"is for legacy BIOS systems which don't have ACPI support "
>   			"this is generally not a problem.");
> -	} else if (found > 1) {
> +	} else if (found > 1)
>   		fwts_failed(fw, LOG_LEVEL_HIGH,
>   			"PCIIRQMultipleTables",
>   			"Found %d instances of PCI Routing Tables, there should only be 1.", found);
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -	}
>
>           (void)fwts_munmap(mem, PCIIRQ_REGION_SIZE);
>
> diff --git a/src/bios/pnp/pnp.c b/src/bios/pnp/pnp.c
> index 65a16d1..34a0a34 100644
> --- a/src/bios/pnp/pnp.c
> +++ b/src/bios/pnp/pnp.c
> @@ -167,12 +167,10 @@ static int pnp_test1(fwts_framework *fw)
>   		fwts_log_info(fw,
>   			"Could not find PnP BIOS Support Installation Check structure. "
>   			"This is not necessarily a failure.");
> -	else if (found > 1) {
> +	else if (found > 1)
>   		fwts_failed(fw, LOG_LEVEL_HIGH,
>   			"PNPMultipleTables",
>   			"Found %d instances of PCI Routing Tables, there should only be 1.", found);
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -	}
>
>           (void)fwts_munmap(mem, PNP_REGION_SIZE);
>
> diff --git a/src/lib/include/fwts.h b/src/lib/include/fwts.h
> index c29e7f2..d27d2dc 100644
> --- a/src/lib/include/fwts.h
> +++ b/src/lib/include/fwts.h
> @@ -30,7 +30,6 @@
>
>   #include "fwts_version.h"
>   #include "fwts_types.h"
> -#include "fwts_tag.h"
>   #include "fwts_binpaths.h"
>   #include "fwts_framework.h"
>   #include "fwts_log.h"
> diff --git a/src/lib/include/fwts_framework.h b/src/lib/include/fwts_framework.h
> index 1e5171c..5278dfb 100644
> --- a/src/lib/include/fwts_framework.h
> +++ b/src/lib/include/fwts_framework.h
> @@ -50,9 +50,7 @@ typedef enum {
>   	FWTS_FLAG_TEST_ACPI			= 0x04000000,
>   	FWTS_FLAG_UTILS				= 0x08000000,
>   	FWTS_FLAG_QUIET				= 0x10000000,
> -	FWTS_FLAG_LP_TAGS			= 0x20000000,
> -	FWTS_FLAG_LP_TAGS_LOG			= 0x40000000,
> -	FWTS_FLAG_SHOW_TESTS_FULL		= 0x80000000,
> +	FWTS_FLAG_SHOW_TESTS_FULL		= 0x20000000,
>   } fwts_framework_flags;
>
>   #define FWTS_FLAG_TEST_MASK		\
> @@ -132,9 +130,6 @@ typedef struct {
>   	bool print_summary;			/* Print summary of results at end of test runs */
>   	fwts_log_level failed_level;		/* Bit mask of failed levels in test run */
>
> -	fwts_list test_taglist;			/* List of tags found when running all minor tests */
> -	fwts_list total_taglist;		/* List of tags found when running all tests */
> -
>   	int firmware_type;			/* Type of firmware */
>   	bool show_progress;			/* Show progress while running current test */
>
> diff --git a/src/lib/include/fwts_klog.h b/src/lib/include/fwts_klog.h
> index ef23750..fe8f520 100644
> --- a/src/lib/include/fwts_klog.h
> +++ b/src/lib/include/fwts_klog.h
> @@ -40,7 +40,6 @@ typedef enum {
>   typedef struct {
>   	fwts_compare_mode compare_mode;
>   	fwts_log_level level;
> -	fwts_tag tag;
>           const char *pattern;
>   	const char *advice;
>   	char *label;
> diff --git a/src/lib/include/fwts_log.h b/src/lib/include/fwts_log.h
> index e760efa..b9f378a 100644
> --- a/src/lib/include/fwts_log.h
> +++ b/src/lib/include/fwts_log.h
> @@ -184,9 +184,6 @@ static inline int fwts_log_type_count(fwts_log_type type)
>   #define fwts_log_heading(fw, fmt, args...)	\
>   	fwts_log_printf(fw->results, LOG_HEADING, LOG_LEVEL_NONE, "", "", "", fmt, ## args)
>
> -#define fwts_log_tag(fw, fmt, args...)	\
> -	fwts_log_printf(fw->results, LOG_TAG | LOG_VERBATUM, LOG_LEVEL_NONE, "", "", "", fmt, ## args)
> -
>   #define fwts_log_nl(fw) \
>   	fwts_log_printf(fw->results, LOG_NEWLINE, LOG_LEVEL_NONE, "", "", "", "%s", "")
>
> diff --git a/src/lib/include/fwts_tag.h b/src/lib/include/fwts_tag.h
> deleted file mode 100644
> index b7d00a4..0000000
> --- a/src/lib/include/fwts_tag.h
> +++ /dev/null
> @@ -1,83 +0,0 @@
> -/*
> - * Copyright (C) 2010-2013 Canonical
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * as published by the Free Software Foundation; either version 2
> - * of the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - */
> -
> -#ifndef __FWTS_TAG__
> -#define __FWTS_TAG__
> -
> -#include "fwts_list.h"
> -#include "fwts_framework.h"
> -
> -typedef enum {
> -	FWTS_TAG_NONE = 1,
> -	FWTS_TAG_ERROR_CRITICAL,
> -	FWTS_TAG_ERROR_HIGH,
> -	FWTS_TAG_ERROR_MEDIUM,
> -	FWTS_TAG_ERROR_LOW,
> -	FWTS_TAG_BIOS,
> -	FWTS_TAG_BIOS_THERMAL,
> -	FWTS_TAG_BIOS_IRQ,
> -	FWTS_TAG_BIOS_AMD_POWERNOW,
> -	FWTS_TAG_BIOS_MMCONFIG,
> -	FWTS_TAG_BIOS_DMI,
> -	FWTS_TAG_ACPI,
> -	FWTS_TAG_ACPI_IO_PORT,
> -	FWTS_TAG_ACPI_INVALID_TABLE,
> -	FWTS_TAG_ACPI_BUFFER_OVERFLOW,
> -	FWTS_TAG_ACPI_AML_OPCODE,
> -	FWTS_TAG_ACPI_NAMESPACE_LOOKUP,
> -	FWTS_TAG_ACPI_PCI_EXPRESS,
> -	FWTS_TAG_ACPI_BAD_RESULT,
> -	FWTS_TAG_ACPI_NO_HANDLER,
> -	FWTS_TAG_ACPI_PACKAGE_LIST,
> -	FWTS_TAG_ACPI_PARSE_EXEC_FAIL,
> -	FWTS_TAG_ACPI_EVAL,
> -	FWTS_TAG_ACPI_BAD_LENGTH,
> -	FWTS_TAG_ACPI_BAD_ADDRESS,
> -	FWTS_TAG_ACPI_METHOD_RETURN,
> -	FWTS_TAG_ACPI_BRIGHTNESS,
> -	FWTS_TAG_ACPI_BUTTON,
> -	FWTS_TAG_ACPI_EVENT,
> -	FWTS_TAG_ACPI_PARAMETER,
> -	FWTS_TAG_ACPI_THROTTLING,
> -	FWTS_TAG_ACPI_EXCEPTION,
> -	FWTS_TAG_ACPI_PACKAGE,
> -	FWTS_TAG_ACPI_APIC,
> -	FWTS_TAG_ACPI_DISPLAY,
> -	FWTS_TAG_ACPI_MULTIPLE_FACS,
> -	FWTS_TAG_ACPI_POINTER_MISMATCH,
> -	FWTS_TAG_ACPI_TABLE_CHECKSUM,
> -	FWTS_TAG_ACPI_HOTPLUG,
> -	FWTS_TAG_ACPI_RSDP,
> -	FWTS_TAG_ACPI_MUTEX,
> -	FWTS_TAG_ACPI_THERMAL,
> -	FWTS_TAG_ACPI_LID,
> -	FWTS_TAG_ACPI_METHOD,
> -	FWTS_TAG_EMBEDDED_CONTROLLER,
> -	FWTS_TAG_POWER_MANAGEMENT,
> -	FWTS_TAG_WMI,
> -} fwts_tag;
> -
> -fwts_tag fwts_tag_id_str_to_tag(const char *tag);
> -const char *fwts_tag_to_str(const fwts_tag tag);
> -void fwts_tag_add(fwts_list *taglist, const char *tag);
> -char *fwts_tag_list_to_str(fwts_list *taglist);
> -void fwts_tag_report(fwts_framework *fw, const fwts_log_field field, fwts_list *taglist);
> -void fwts_tag_failed(fwts_framework *fw, const fwts_tag tag);
> -
> -#endif
> diff --git a/src/lib/src/Makefile.am b/src/lib/src/Makefile.am
> index 4760a6f..d708f34 100644
> --- a/src/lib/src/Makefile.am
> +++ b/src/lib/src/Makefile.am
> @@ -65,7 +65,6 @@ libfwts_la_SOURCES = 		\
>   	fwts_smbios.c 		\
>   	fwts_stringextras.c 	\
>   	fwts_summary.c 		\
> -	fwts_tag.c 		\
>   	fwts_text_list.c 	\
>   	fwts_tty.c 		\
>   	fwts_uefi.c 		\
> diff --git a/src/lib/src/fwts_framework.c b/src/lib/src/fwts_framework.c
> index 92aa74d..0cf0f2c 100644
> --- a/src/lib/src/fwts_framework.c
> +++ b/src/lib/src/fwts_framework.c
> @@ -70,11 +70,9 @@ static fwts_option fwts_framework_options[] = {
>   	{ "skip-test", 		"S:", 1, "Skip listed tests, e.g. --skip-test=s3,nx,method" },
>   	{ "quiet", 		"q",  0, "Run quietly." },
>   	{ "dumpfile", 		"",   1, "Load ACPI tables using file generated by acpidump, e.g. --dumpfile=acpidump.dat" },
> -	{ "lp-tags", 		"",   0, "Output just LaunchPad bug tags." },
>   	{ "show-tests-full", 	"",   0, "Show available tests including all minor tests." },
>   	{ "utils", 		"u",  0, "Run Utility 'tests'." },
>   	{ "json-data-path", 	"j:", 1, "Specify path to fwts json data files - default is /usr/share/fwts." },
> -	{ "lp-tags-log", 	"",   0, "Output LaunchPad bug tags in results log." },
>   	{ "disassemble-aml", 	"",   0, "Disassemble AML from DSDT and SSDT tables." },
>   	{ "log-type",		"",   1, "Specify log type (plaintext, json, html or xml)." },
>   	{ "unsafe",		"U",  0, "Unsafe tests (tests that can potentially cause kernel oopses)." },
> @@ -452,8 +450,7 @@ static int fwts_framework_test_summary(fwts_framework *fw)
>   			printf("%s\n", fwts_log_field_to_str_upper(LOG_PASSED));
>   	}
>
> -	if (!(fw->flags & FWTS_FLAG_LP_TAGS))
> -		fwts_log_newline(fw->results);
> +	fwts_log_newline(fw->results);
>
>   	return FWTS_OK;
>   }
> @@ -475,7 +472,6 @@ static int fwts_framework_run_test(fwts_framework *fw, fwts_framework_test *test
>
>   	fw->current_major_test = test;
>   	fw->current_minor_test_name = "";
> -	fwts_list_init(&fw->test_taglist);
>
>   	test->was_run = true;
>   	fw->total_run++;
> @@ -597,15 +593,7 @@ static int fwts_framework_run_test(fwts_framework *fw, fwts_framework_test *test
>   	if (test->ops->deinit)
>   		test->ops->deinit(fw);
>
> -	if (fw->flags & FWTS_FLAG_LP_TAGS_LOG) {
> -		fwts_log_section_begin(fw->results, "tags");
> -		fwts_tag_report(fw, LOG_TAG, &fw->test_taglist);
> -		fwts_log_section_end(fw->results);
> -	}
> -
>   done:
> -	fwts_list_free_items(&fw->test_taglist, free);
> -
>   	if (!(test->flags & FWTS_FLAG_UTILS)) {
>   		fwts_log_section_begin(fw->results, "results");
>   		fwts_framework_test_summary(fw);
> @@ -872,8 +860,7 @@ static void fwts_framework_heading_info(
>
>   		fwts_log_info(fw, "Running tests: %s.",
>   			fwts_list_len(tests_to_run) == 0 ? "None" : tests);
> -		if (!(fw->flags & FWTS_FLAG_LP_TAGS))
> -			fwts_log_newline(fw->results);
> +		fwts_log_newline(fw->results);
>   		free(tests);
>   	}
>   }
> @@ -1094,52 +1081,44 @@ int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
>   		case 25: /* --dumpfile */
>   			fwts_framework_strdup(&fw->acpi_table_acpidump_file, optarg);
>   			break;
> -		case 26: /* --lp-tags */
> -			fw->flags |= FWTS_FLAG_LP_TAGS;
> -			fwts_log_filter_unset_field(~0);
> -			fwts_log_filter_set_field(LOG_TAG);
> -			break;
> -		case 27: /* --show-tests-full */
> +		case 26: /* --show-tests-full */
>   			fw->flags |= FWTS_FLAG_SHOW_TESTS_FULL;
>   			break;
> -		case 28: /* --utils */
> +		case 27: /* --utils */
>   			fw->flags |= FWTS_FLAG_UTILS;
>   			break;
> -		case 29: /* --json-data-path */
> +		case 28: /* --json-data-path */
>   			fwts_framework_strdup(&fw->json_data_path, optarg);
>   			break;
> -		case 30: /* --lp-tags-log */
> -			fw->flags |= FWTS_FLAG_LP_TAGS_LOG;
> -			break;
> -		case 31: /* --disassemble-aml */
> +		case 29: /* --disassemble-aml */
>   			fwts_iasl_disassemble_all_to_file(fw);
>   			return FWTS_COMPLETE;
> -		case 32: /* --log-type */
> +		case 30: /* --log-type */
>   			if (fwts_framework_log_type_parse(fw, optarg) != FWTS_OK)
>   				return FWTS_ERROR;
>   			break;
> -		case 33: /* --unsafe */
> +		case 31: /* --unsafe */
>   			fw->flags |= FWTS_FLAG_UNSAFE;
>   			break;
> -		case 34: /* --filter-error-discard */
> +		case 32: /* --filter-error-discard */
>   			if (fwts_framework_filter_error_parse(optarg, &fw->errors_filter_discard) != FWTS_OK)
>   				return FWTS_ERROR;
>   			break;
> -		case 35: /* --filter-error-keep */
> +		case 33: /* --filter-error-keep */
>   			if (fwts_framework_filter_error_parse(optarg, &fw->errors_filter_keep) != FWTS_OK)
>   				return FWTS_ERROR;
>   			break;
> -		case 36: /* --acpica-debug */
> +		case 34: /* --acpica-debug */
>   			fw->flags |= FWTS_FLAG_ACPICA_DEBUG;
>   			break;
> -		case 37: /* --acpica */
> +		case 35: /* --acpica */
>   			if (fwts_framework_acpica_parse(fw, optarg) != FWTS_OK)
>   				return FWTS_ERROR;
>   			break;
> -		case 38: /* --uefi */
> +		case 36: /* --uefi */
>   			fw->flags |= FWTS_FLAG_TEST_UEFI;
>   			break;
> -		case 39: /* --rsdp */
> +		case 37: /* --rsdp */
>   			fw->rsdp = (void *)strtoul(optarg, NULL, 0);
>   			break;
>   		}
> @@ -1176,7 +1155,6 @@ int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
>   		fwts_framework_strdup(&fw->klog, optarg);
>   		break;
>   	case 'l': /* --lp-flags */
> -		fw->flags |= FWTS_FLAG_LP_TAGS;
>   		break;
>   	case 'p': /* --show-progress */
>   		fw->flags = (fw->flags &
> @@ -1252,7 +1230,6 @@ int fwts_framework_args(const int argc, char **argv)
>   		    FWTS_FLAG_SHOW_PROGRESS;
>   	fw->log_type = LOG_TYPE_PLAINTEXT;
>
> -	fwts_list_init(&fw->total_taglist);
>   	fwts_list_init(&fw->errors_filter_keep);
>   	fwts_list_init(&fw->errors_filter_discard);
>
> @@ -1383,17 +1360,12 @@ int fwts_framework_args(const int argc, char **argv)
>   		fwts_log_section_begin(fw->results, "summary");
>   		fwts_log_set_owner(fw->results, "summary");
>   		fwts_log_nl(fw);
> -		if (fw->flags & FWTS_FLAG_LP_TAGS_LOG)
> -			fwts_tag_report(fw, LOG_SUMMARY, &fw->total_taglist);
>   		fwts_framework_total_summary(fw);
>   		fwts_log_nl(fw);
>   		fwts_summary_report(fw, &fwts_framework_test_list);
>   		fwts_log_section_end(fw->results);
>   	}
>
> -	if (fw->flags & FWTS_FLAG_LP_TAGS)
> -		fwts_tag_report(fw, LOG_TAG | LOG_NO_FIELDS, &fw->total_taglist);
> -
>   tidy:
>   	fwts_list_free_items(&tests_to_skip, NULL);
>   	fwts_list_free_items(&tests_to_run, NULL);
> @@ -1410,7 +1382,6 @@ tidy_close:
>
>   	fwts_list_free_items(&fw->errors_filter_discard, NULL);
>   	fwts_list_free_items(&fw->errors_filter_keep, NULL);
> -	fwts_list_free_items(&fw->total_taglist, free);
>   	fwts_list_free_items(&fwts_framework_test_list, free);
>
>   	/* Failed tests flagged an error */
> diff --git a/src/lib/src/fwts_klog.c b/src/lib/src/fwts_klog.c
> index 8d3d874..9ae93d6 100644
> --- a/src/lib/src/fwts_klog.c
> +++ b/src/lib/src/fwts_klog.c
> @@ -252,7 +252,6 @@ void fwts_klog_scan_patterns(fwts_framework *fw,
>   			if (pattern->level == LOG_LEVEL_INFO)
>   				fwts_log_info(fw, "Kernel message: %s", line);
>   			else {
> -				fwts_tag_failed(fw, pattern->tag);
>   				fwts_failed(fw, pattern->level, pattern->label,
>   					"%s Kernel message: %s", fwts_log_level_to_str(pattern->level), line);
>   				fwts_error_inc(fw, pattern->label, errors);
> @@ -376,10 +375,6 @@ static int fwts_klog_check(fwts_framework *fw,
>   			goto fail;
>   		patterns[i].level   = fwts_log_str_to_level(str);
>
> -		if ((str = fwts_json_str(fw, table, i, obj, "tag", true)) == NULL)
> -			goto fail;
> -		patterns[i].tag     = fwts_tag_id_str_to_tag(str);
> -
>   		if ((patterns[i].pattern = fwts_json_str(fw, table, i, obj, "pattern", true)) == NULL)
>   			goto fail;
>
> diff --git a/src/lib/src/fwts_log.c b/src/lib/src/fwts_log.c
> index 693b943..54e8215 100644
> --- a/src/lib/src/fwts_log.c
> +++ b/src/lib/src/fwts_log.c
> @@ -75,8 +75,6 @@ char *fwts_log_field_to_str(const fwts_log_field field)
>   		return "ADV";
>   	case LOG_HEADING:
>   		return "HED";
> -	case LOG_TAG:
> -		return "TAG";
>   	case LOG_PASSED:
>   		return "PAS";
>   	case LOG_FAILED:
> @@ -119,8 +117,6 @@ char *fwts_log_field_to_str_full(const fwts_log_field field)
>   		return "Advice";
>   	case LOG_HEADING:
>   		return "Heading";
> -	case LOG_TAG:
> -		return "Tag";
>   	case LOG_PASSED:
>   		return "Passed";
>   	case LOG_FAILED:
> @@ -239,7 +235,6 @@ fwts_log_field fwts_log_str_to_field(const char *text)
>   		{ "SEP", LOG_SEPARATOR },
>   		{ "ADV", LOG_ADVICE },
>   		{ "HED", LOG_HEADING },
> -		{ "TAG", LOG_TAG },
>   		{ "ALL", ~0 },
>   		{ NULL, 0 }
>   	};
> diff --git a/src/lib/src/fwts_tag.c b/src/lib/src/fwts_tag.c
> deleted file mode 100644
> index 958a3c2..0000000
> --- a/src/lib/src/fwts_tag.c
> +++ /dev/null
> @@ -1,202 +0,0 @@
> -/*
> - * Copyright (C) 2010-2013 Canonical
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * as published by the Free Software Foundation; either version 2
> - * of the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - */
> -
> -#include <stdlib.h>
> -#include <string.h>
> -
> -#include "fwts.h"
> -
> -typedef struct {
> -	const fwts_tag	tag;
> -	const char	*tag_id;
> -	const char 	*tag_str;
> -} fwts_tag_info;
> -
> -#define FWTS_TAG(tag, str)	\
> -	{ tag, #tag, str }
> -
> -static fwts_tag_info fwts_tags[] = {
> -	FWTS_TAG(FWTS_TAG_NONE,	 		""),
> -	FWTS_TAG(FWTS_TAG_ERROR_CRITICAL,	"error-critical"),
> -	FWTS_TAG(FWTS_TAG_ERROR_HIGH,		"error-high"),
> -	FWTS_TAG(FWTS_TAG_ERROR_MEDIUM,		"error-medium"),
> -	FWTS_TAG(FWTS_TAG_ERROR_LOW,		"error-low"),
> -	FWTS_TAG(FWTS_TAG_BIOS,			"bios"),
> -	FWTS_TAG(FWTS_TAG_BIOS_THERMAL,		"bios-thermal"),
> -	FWTS_TAG(FWTS_TAG_BIOS_IRQ,		"bios-irq"),
> -	FWTS_TAG(FWTS_TAG_BIOS_AMD_POWERNOW,	"bios-amd-powernow"),
> -	FWTS_TAG(FWTS_TAG_BIOS_MMCONFIG,	"bios-mmconfig"),
> -	FWTS_TAG(FWTS_TAG_BIOS_DMI,		"bios-dmi"),
> -	FWTS_TAG(FWTS_TAG_ACPI,			"acpi"),
> -	FWTS_TAG(FWTS_TAG_ACPI_IO_PORT,		"acpi-io-port"),
> -	FWTS_TAG(FWTS_TAG_ACPI_INVALID_TABLE,	"acpi-invalid-table"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BUFFER_OVERFLOW,	"acpi-buffer-overflow"),
> -	FWTS_TAG(FWTS_TAG_ACPI_AML_OPCODE,	"acpi-aml-opcode"),
> -	FWTS_TAG(FWTS_TAG_ACPI_NAMESPACE_LOOKUP,"acpi-namespace-lookup"),
> -	FWTS_TAG(FWTS_TAG_ACPI_PCI_EXPRESS,	"acpi-pci-express"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BAD_RESULT,	"acpi-bad-result"),
> -	FWTS_TAG(FWTS_TAG_ACPI_NO_HANDLER,	"acpi-no-handler"),
> -	FWTS_TAG(FWTS_TAG_ACPI_PACKAGE_LIST,	"acpi-package-list"),
> -	FWTS_TAG(FWTS_TAG_ACPI_PARSE_EXEC_FAIL,	"acpi-parse-exec-fail"),
> -	FWTS_TAG(FWTS_TAG_ACPI_EVAL,		"acpi-eval"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BAD_LENGTH,	"acpi-bad-length"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BAD_ADDRESS,	"acpi-bad-address"),
> -	FWTS_TAG(FWTS_TAG_ACPI_METHOD_RETURN,	"acpi-method-return"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BRIGHTNESS,	"acpi-brightness"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BUTTON,		"acpi-button"),
> -	FWTS_TAG(FWTS_TAG_ACPI_EVENT,		"acpi-event"),
> -	FWTS_TAG(FWTS_TAG_ACPI_PARAMETER,	"acpi-parameter"),
> -	FWTS_TAG(FWTS_TAG_ACPI_THROTTLING,	"acpi-throttling"),
> -	FWTS_TAG(FWTS_TAG_ACPI_EXCEPTION,	"acpi-exception"),
> -	FWTS_TAG(FWTS_TAG_ACPI_PACKAGE,		"acpi-package"),
> -	FWTS_TAG(FWTS_TAG_ACPI_APIC,		"acpi-apic"),
> -	FWTS_TAG(FWTS_TAG_ACPI_DISPLAY,		"acpi-display"),
> -	FWTS_TAG(FWTS_TAG_ACPI_MULTIPLE_FACS,	"acpi-multiple-facs"),
> -	FWTS_TAG(FWTS_TAG_ACPI_POINTER_MISMATCH,"acpi-pointer-mismatch"),
> -	FWTS_TAG(FWTS_TAG_ACPI_TABLE_CHECKSUM,	"acpi-table-checksum"),
> -	FWTS_TAG(FWTS_TAG_ACPI_HOTPLUG,		"acpi-hotplug"),
> -	FWTS_TAG(FWTS_TAG_ACPI_RSDP,		"acpi-rsdp"),
> -	FWTS_TAG(FWTS_TAG_ACPI_MUTEX,		"acpi-mutex"),
> -	FWTS_TAG(FWTS_TAG_ACPI_THERMAL,		"acpi-thermal"),
> -	FWTS_TAG(FWTS_TAG_ACPI_LID,		"acpi-lid"),
> -	FWTS_TAG(FWTS_TAG_ACPI_METHOD,		"acpi-method"),
> -	FWTS_TAG(FWTS_TAG_EMBEDDED_CONTROLLER,	"embedded-controller"),
> -	FWTS_TAG(FWTS_TAG_POWER_MANAGEMENT,	"power-management"),
> -	FWTS_TAG(FWTS_TAG_WMI,			"wmi"),
> -	{ 0, NULL, NULL }
> -};
> -
> -/*
> - *  fwts_tag_id_str_to_tag()
> - *	given a tag string, return the tag
> - */
> -fwts_tag fwts_tag_id_str_to_tag(const char *tag)
> -{
> -	int i;
> -
> -	for (i=0; fwts_tags[i].tag_id != NULL; i++)
> -		if (strcmp(tag, fwts_tags[i].tag_id) == 0)
> -			return fwts_tags[i].tag;
> -	return FWTS_TAG_NONE;
> -}
> -
> -/*
> - *  fwts_tag_to_str()
> - *	given a tag, return the human readable tag name
> - */
> -const char *fwts_tag_to_str(const fwts_tag tag)
> -{
> -	int i;
> -	static const char *none = "";
> -
> -	for (i=0; fwts_tags[i].tag_id != NULL; i++)
> -		if (fwts_tags[i].tag == tag)
> -			return fwts_tags[i].tag_str;
> -	return none;
> -}
> -
> -/*
> - *  fwts_tag_compare()
> - *	callback to enable tag name sorting
> - */
> -static int fwts_tag_compare(void *data1, void *data2)
> -{
> -	return strcmp((char *)data1, (char*)data2);
> -}
> -
> -/*
> - *  fwts_tag_add()
> - *	add a tag name to a list of tag names, ordered alphabetically
> - * 	tag is added if it does already exist in the tag list
> - */
> -void fwts_tag_add(fwts_list *taglist, const char *tag)
> -{
> -	fwts_list_link	*item;
> -	char *str;
> -
> -	/* Exists already? then don't bother */
> -	fwts_list_foreach(item, taglist)
> -		if (strcmp(fwts_list_data(char *,item), tag) == 0)
> -			return;
> -
> -	str = strdup(tag);
> -	if (str)
> -		fwts_list_add_ordered(taglist, str, fwts_tag_compare);
> -}
> -
> -/*
> - *  fwts_tag_list_to_str()
> - *	given a list of tag names return a space delimited string
> - *	containing the the tag names
> - */
> -char *fwts_tag_list_to_str(fwts_list *taglist)
> -{
> -	fwts_list_link	*item;
> -	char *str = NULL;
> -	size_t len = 0;
> -
> -	fwts_list_foreach(item, taglist) {
> -		char *tag = fwts_list_data(char *, item);
> -		size_t taglen = strlen(tag);
> -		len += taglen + 1;
> -
> -		if (str) {
> -			if ((str = realloc(str, len)) == NULL)
> -				return NULL;
> -			strcat(str, " ");
> -			strcat(str, tag);
> -		} else {
> -			if ((str = malloc(len)) == NULL)
> -				return NULL;
> -			strcpy(str, tag);
> -		}
> -	}
> -	return str;
> -}
> -
> -/*
> - *  fwts_tag_report()
> - *	report to the log the tags found in the taglist
> - */
> -void fwts_tag_report(fwts_framework *fw, const fwts_log_field field, fwts_list *taglist)
> -{
> -	if ((taglist != NULL) && (fwts_list_len(taglist) > 0)) {
> -		char *tags = fwts_tag_list_to_str(taglist);
> -		if (tags) {
> -			fwts_log_printf(fw->results, field | LOG_VERBATUM, LOG_LEVEL_NONE, "", "", "", "Tags: %s", tags);
> -			free(tags);
> -		}
> -	}
> -}
> -
> -/*
> - *  fwts_tag_failed()
> - *	add to the tag lists the tag:
> - *	per test (this is emptied at end of each test)
> - * 	all tests (this is total for all tests run)
> - */
> -void fwts_tag_failed(fwts_framework *fw, const fwts_tag tag)
> -{
> -	const char *text = fwts_tag_to_str(tag);
> -
> -	if (*text) {
> -		fwts_tag_add(&fw->test_taglist, text);
> -		fwts_tag_add(&fw->total_taglist, text);
> -	}
> -}
> diff --git a/src/pci/crs/crs.c b/src/pci/crs/crs.c
> index 9b48ed4..b7f6165 100644
> --- a/src/pci/crs/crs.c
> +++ b/src/pci/crs/crs.c
> @@ -72,15 +72,12 @@ static int crs_test1(fwts_framework *fw)
>   					"The kernel could not determine the BIOS age "
>   					"and has assumed that your BIOS is too old to correctly "
>   					"specify the host bridge MMIO aperture using _CRS.");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   				fwts_log_advice(fw, "You can override this by booting with \"pci=use_crs\".");
> -
>   			} else if (year < 2008) {
>   				fwts_passed(fw,
>   					"The kernel has detected an old BIOS (%d/%d/%d) "
>   					"and has assumed that your BIOS is too old to correctly "
>   					"specify the host bridge MMIO aperture using _CRS.", mon, day, year);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   				fwts_log_advice(fw, "You can override this by booting with \"pci=use_crs\".");
>   			} else {
>   				fwts_failed(fw, LOG_LEVEL_MEDIUM,
> @@ -88,7 +85,6 @@ static int crs_test1(fwts_framework *fw)
>   					"The kernel is ignoring host bridge windows from ACPI for some unknown reason. "
>   					"pci=nocrs has not been used as a boot parameter and the BIOS may be recent enough "
>   					"to support this (%d/%d/%d)", mon, day, year);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			}
>   		}
>   	} else if (fwts_klog_regex_find(fw, klog, "PCI: Using host bridge windows from ACPI;") > 0) {
> @@ -97,12 +93,10 @@ static int crs_test1(fwts_framework *fw)
>   				fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   					"BIOSNoReleaseDate",
>   					"The BIOS does not seem to have release date, hence pci=use_crs was required.");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			} else if (year < 2008) {
>   				fwts_passed(fw,
>   					"The BIOS is relatively old (%d/%d/%d) and hence pci=use_crs was required to "
>   					"enable host bridge windows _CRS settings from ACPI.", mon, day, year);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			} else {
>   				fwts_failed(fw, LOG_LEVEL_LOW,
>   					"BIOSSupportBridgeWindows",
> @@ -110,7 +104,6 @@ static int crs_test1(fwts_framework *fw)
>   					"the BIOS is new enough to support automatic bridge windows configuring using _CRS from ACPI. "
>   					"However, the workaround may be necessary because _CRS is incorrect or not implemented in the "
>   					"DSDT.");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			}
>   		}
>   		else {
> diff --git a/src/pci/maxreadreq/maxreadreq.c b/src/pci/maxreadreq/maxreadreq.c
> index 7a06cec..2713224 100644
> --- a/src/pci/maxreadreq/maxreadreq.c
> +++ b/src/pci/maxreadreq/maxreadreq.c
> @@ -129,7 +129,6 @@ static int maxreadreq_test1(fwts_framework *fw)
>   			"allow one to override the firmware settings. Where possible, this BIOS "
>   			"configuration setting is worth increasing it a little more for better "
>   			"performance at a small reduction of bus sharing.");
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   	} else
>   		fwts_passed(fw, "All devices have MaxReadReq set > 128.");
>
>

Acked-by: Ivan Hu <ivan.hu@canonical.com>
Alex Hung - Dec. 23, 2013, 12:03 p.m.
On 12/17/2013 10:21 PM, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
>
> fwts launchpad tags have never been used and are an overhead
> that is effectivelty redundant.  So, rather than keep on maintaining
> this, remove the tagging from the fwts lib and the fwts tests.
>
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ---
>   src/acpi/apicinstance/apicinstance.c |   1 -
>   src/acpi/checksum/checksum.c         |   2 -
>   src/acpi/dmar/dmar.c                 |   1 -
>   src/acpi/fadt/fadt.c                 |  13 +--
>   src/acpi/lid/lid.c                   |  16 ++-
>   src/acpi/mcfg/mcfg.c                 |   6 --
>   src/acpi/method/method.c             |  90 ++--------------
>   src/acpi/powerbutton/powerbutton.c   |   5 +-
>   src/acpi/s3/s3.c                     |   4 -
>   src/acpi/s3power/s3power.c           |   7 +-
>   src/acpi/s4/s4.c                     |   8 --
>   src/acpi/wakealarm/wakealarm.c       |   5 -
>   src/apic/apicedge/apicedge.c         |  12 +--
>   src/bios/bios32/bios32.c             |  24 ++---
>   src/bios/ebda_region/ebda_region.c   |   4 +-
>   src/bios/mtrr/mtrr.c                 |  12 +--
>   src/bios/os2gap/os2gap.c             |   1 -
>   src/bios/pciirq/pciirq.c             |   4 +-
>   src/bios/pnp/pnp.c                   |   4 +-
>   src/lib/include/fwts.h               |   1 -
>   src/lib/include/fwts_framework.h     |   7 +-
>   src/lib/include/fwts_klog.h          |   1 -
>   src/lib/include/fwts_log.h           |   3 -
>   src/lib/include/fwts_tag.h           |  83 --------------
>   src/lib/src/Makefile.am              |   1 -
>   src/lib/src/fwts_framework.c         |  57 +++-------
>   src/lib/src/fwts_klog.c              |   5 -
>   src/lib/src/fwts_log.c               |   5 -
>   src/lib/src/fwts_tag.c               | 202 -----------------------------------
>   src/pci/crs/crs.c                    |   7 --
>   src/pci/maxreadreq/maxreadreq.c      |   1 -
>   31 files changed, 53 insertions(+), 539 deletions(-)
>   delete mode 100644 src/lib/include/fwts_tag.h
>   delete mode 100644 src/lib/src/fwts_tag.c
>
> diff --git a/src/acpi/apicinstance/apicinstance.c b/src/acpi/apicinstance/apicinstance.c
> index 1c262b4..5949879 100644
> --- a/src/acpi/apicinstance/apicinstance.c
> +++ b/src/acpi/apicinstance/apicinstance.c
> @@ -61,7 +61,6 @@ static int apicinstance_test1(fwts_framework *fw)
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "MultipleAPICMADT",
>   			"Found %d APIC/MADT tables, the kernel expects just one.",
>   			count);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		snprintf(buffer, sizeof(buffer), " (or up to %d)", count);
>   		fwts_log_advice(fw,
>   			"If you find any APIC issues, perhaps try using "
> diff --git a/src/acpi/checksum/checksum.c b/src/acpi/checksum/checksum.c
> index 3eb3f74..0138430 100644
> --- a/src/acpi/checksum/checksum.c
> +++ b/src/acpi/checksum/checksum.c
> @@ -133,8 +133,6 @@ static int checksum_scan_tables(fwts_framework *fw)
>   				"error and still load it. This is not a "
>   				"critical issue, but should be fixed if "
>   				"possible to avoid the warning messages.");
> -
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_TABLE_CHECKSUM);
>   		}
>   	}
>   	return FWTS_OK;
> diff --git a/src/acpi/dmar/dmar.c b/src/acpi/dmar/dmar.c
> index 880ba88..d6a6d28 100644
> --- a/src/acpi/dmar/dmar.c
> +++ b/src/acpi/dmar/dmar.c
> @@ -264,7 +264,6 @@ static int dmar_acpi_table_check(fwts_framework *fw)
>   	if (table->length <= DMAR_HEADER_SIZE) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidDMAR",
>   			"Invalid DMAR ACPI table.");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		return FWTS_ERROR;
>   	}
>
> diff --git a/src/acpi/fadt/fadt.c b/src/acpi/fadt/fadt.c
> index 9807d56..70ec5e9 100644
> --- a/src/acpi/fadt/fadt.c
> +++ b/src/acpi/fadt/fadt.c
> @@ -75,20 +75,16 @@ static int fadt_test1(fwts_framework *fw)
>   	if ((fadt->header.revision > 1) || (fadt->header.length >= 244)) {
>   		/*  Sanity check sizes with extended address variants */
>   		fwts_log_info(fw, "FADT is greater than ACPI version 1.0");
> -		if ((uint64_t)port != fadt->x_pm1a_cnt_blk.address) {
> +		if ((uint64_t)port != fadt->x_pm1a_cnt_blk.address)
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"FADTPM1CNTAddrMismatch",
>   				"32 and 64 bit versions of FADT pm1_cnt address do not match (0x%8.8x vs 0x%16.16" PRIx64 ").",
>   				port, fadt->x_pm1a_cnt_blk.address);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_BAD_ADDRESS);
> -		}
> -		if (width != fadt->x_pm1a_cnt_blk.register_bit_width) {
> +		if (width != fadt->x_pm1a_cnt_blk.register_bit_width)
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"FADTPM1CNTSizeMismatch",
>   				"32 and 64 bit versions of FADT pm1_cnt size do not match (0x%x vs 0x%x).",
>   				width, fadt->x_pm1a_cnt_blk.register_bit_width);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_BAD_ADDRESS);
> -		}
>
>   		port = fadt->x_pm1a_cnt_blk.address;
>   		width = fadt->x_pm1a_cnt_blk.register_bit_width;
> @@ -129,7 +125,6 @@ static int fadt_test1(fwts_framework *fw)
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "FADTPM1AInvalidWidth",
>   			"FADT pm1a register has invalid bit width of %d.",
>   			width);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_BAD_LENGTH);
>   		return FWTS_OK;
>   	}
>
> @@ -140,11 +135,9 @@ static int fadt_test1(fwts_framework *fw)
>
>   	if (val32 & 0x01)
>   		fwts_passed(fw, "SCI_EN bit in PM1a Control Register Block is enabled.");
> -	else {
> +	else
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "SCI_ENNotEnabled",
>   			"SCI_EN bit in PM1a Control Register Block is not enabled.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
> -	}
>
>   	return FWTS_OK;
>   }
> diff --git a/src/acpi/lid/lid.c b/src/acpi/lid/lid.c
> index 65fdc8a..6948f41 100644
> --- a/src/acpi/lid/lid.c
> +++ b/src/acpi/lid/lid.c
> @@ -70,11 +70,10 @@ static int lid_test1(fwts_framework *fw)
>
>   	lid_check_field_poll(fw, FWTS_BUTTON_LID_OPENED, &matching, &not_matching);
>
> -	if ((matching == 0) || (not_matching > 0)) {
> +	if ((matching == 0) || (not_matching > 0))
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "LidNotOpen",
>   			"Detected a closed LID state.");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_LID);
> -	} else
> +	else
>   		fwts_passed(fw, "Detected open LID state.");
>
>   	return FWTS_OK;
> @@ -141,18 +140,15 @@ static int lid_test_state(fwts_framework *fw, int button)
>   	fwts_gpe_free(gpes_start, gpe_count);
>   	fwts_gpe_free(gpes_end, gpe_count);
>
> -	if (events == 0) {
> +	if (events == 0)
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "NoLidEvents",
>   			"Did not detect any ACPI LID events while waiting for to LID %s.", state);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_LID);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_EVENT);
> -	} else {
> +	else {
>   		fwts_passed(fw, "Detected ACPI LID events while waiting for LID to %s.", state);
> -		if ((matching == 0) || (not_matching > 0)) {
> +		if ((matching == 0) || (not_matching > 0))
>   			fwts_failed(fw, LOG_LEVEL_HIGH, "NoLidState",
>   				"Could not detect lid %s state.", state);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_LID);
> -		} else
> +		else
>   			fwts_passed(fw, "Detected lid %s state.", state);
>   	}
>
> diff --git a/src/acpi/mcfg/mcfg.c b/src/acpi/mcfg/mcfg.c
> index a4d22a6..85d0bb8 100644
> --- a/src/acpi/mcfg/mcfg.c
> +++ b/src/acpi/mcfg/mcfg.c
> @@ -151,7 +151,6 @@ static int mcfg_test1(fwts_framework *fw)
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidSize",
>   			"Invalid MCFG ACPI table size: got %zd bytes expecting more",
>   			mcfg_size + sizeof(fwts_acpi_table_mcfg));
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		fwts_advice(fw,
>   			"MCFG table must be least %zd bytes (header size) with "
>   			"multiples of %zd bytes for each MCFG entry.",
> @@ -170,7 +169,6 @@ static int mcfg_test1(fwts_framework *fw)
>   	if (mcfg_size != (ssize_t)(nr * sizeof(fwts_acpi_mcfg_configuration))) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidSize2",
>   			"MCFG table is not a multiple of record size");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		return FWTS_ERROR;
>   	}
>
> @@ -181,7 +179,6 @@ static int mcfg_test1(fwts_framework *fw)
>   	if (mcfg == NULL) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidTable",
>   			"Invalid MCFG ACPI table");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		return FWTS_ERROR;
>   	}
>
> @@ -204,8 +201,6 @@ static int mcfg_test1(fwts_framework *fw)
>   				"MCFG MMIO config space at 0x%" PRIx64
>   				" is not reserved in the memory map table",
>   				config->base_address);
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -
>   			fwts_advice(fw,
>   				"The PCI Express specification states that the "
>   				"PCI Express configuration space should "
> @@ -238,7 +233,6 @@ static int mcfg_test2(fwts_framework *fw)
>   	if (mcfg == NULL) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidTable",
>   			"Invalid MCFG ACPI table");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
>   		return FWTS_ERROR;
>   	}
>
> diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
> index e6d925d..a7e81ef 100644
> --- a/src/acpi/method/method.c
> +++ b/src/acpi/method/method.c
> @@ -333,7 +333,6 @@ static int method_package_count_min(
>   			" element%s, got %" PRIu32 " element%s instead.",
>   			name, min, min == 1 ? "" : "s",
>   			obj->Package.Count, obj->Package.Count == 1 ? "" : "s");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return FWTS_ERROR;
>   	}
>   	return FWTS_OK;
> @@ -359,7 +358,6 @@ static int method_package_count_equal(
>   			" element%s, got %" PRIu32 " element%s instead.",
>   			name, count, count == 1 ? "" : "s",
>   			obj->Package.Count, obj->Package.Count == 1 ? "" : "s");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return FWTS_ERROR;
>   	}
>   	return FWTS_OK;
> @@ -448,7 +446,6 @@ static void method_evaluate_found_method(
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "AMLLocksAcquired",
>   			"%s left %d locks in an acquired state.",
>   			name, sem_acquired - sem_released);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_MUTEX);
>   		fwts_advice(fw,
>   			"Locks left in an acquired state generally indicates "
>   			"that the AML code is not releasing a lock. This can "
> @@ -559,7 +556,6 @@ static int method_name_check(fwts_framework *fw)
>   						"be corrected.",
>   						fwts_list_data(char *, item),
>   						*ptr);
> -					fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD);
>   					failed = true;
>   					break;
>   				}
> @@ -685,7 +681,6 @@ static void method_test_NULL_return(
>
>   	if (buf && buf->Length && buf->Pointer) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodShouldReturnNothing", "%s returned values, but was expected to return nothing.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		fwts_log_info(fw, "Object returned:");
>   		fwts_acpi_object_dump(fw, obj);
>   		fwts_advice(fw,
> @@ -718,7 +713,6 @@ static void method_test_passed_failed_return(
>   				"MethodReturnZeroOrOne",
>   				"%s returned 0x%8.8" PRIx32 ", should return 1 "
>   				"(success) or 0 (failed).", method, val);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			fwts_advice(fw,
>   				"Method %s should be returning the correct "
>   				"1/0 success/failed return values. "
> @@ -754,7 +748,6 @@ static void method_test_polling_return(
>   				"%s returned a value %f seconds > (1 hour) "
>   				"which is probably incorrect.",
>   				method, (float)obj->Integer.Value / 10.0);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			fwts_advice(fw,
>   				"The method is returning a polling interval "
>   				"which is very long and hence most probably "
> @@ -817,7 +810,6 @@ static int method_package_elements_all_type(
>   				name, i,
>   				method_type_name(type),
>   				method_type_name(obj->Package.Elements[i].Type));
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   	}
> @@ -859,7 +851,6 @@ static int method_package_elements_type(
>   				name, i, info[i].name,
>   				method_type_name(info[i].type),
>   				method_type_name(obj->Package.Elements[i].Type));
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   	}
> @@ -991,7 +982,6 @@ static void method_test_HID_return(
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"Method_HIDNullString",
>   				"%s returned a NULL string.", name);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		}
>   		break;
>   	case ACPI_TYPE_INTEGER:
> @@ -1011,7 +1001,6 @@ static void method_test_HID_return(
>   	default:
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_HIDBadReturnType",
>   			"%s did not return a string or an integer.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		break;
>   	}
>   }
> @@ -1098,12 +1087,10 @@ static void method_test_SUB_return(
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"Method_SUBNullString",
>   				"%s returned a NULL string.", name);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		}
>   	else {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UIDBadReturnType",
>   			"Method _SUB did not return a string or an integer.");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   	}
>   }
>
> @@ -1141,12 +1128,10 @@ static void method_test_UID_return(
>   			fwts_passed(fw,
>   				"%s returned a string '%s' as expected.",
>   				name, obj->String.Pointer);
> -		else {
> +		else
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"Method_UIDNullString",
>   				"%s returned a NULL string.", name);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> -		}
>   		break;
>   	case ACPI_TYPE_INTEGER:
>   		method_passed_sane_uint64(fw, name, obj->Integer.Value);
> @@ -1154,7 +1139,6 @@ static void method_test_UID_return(
>   	default:
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UIDBadReturnType",
>   			"Method %s did not return a string or an integer.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		break;
>   	}
>   }
> @@ -1841,8 +1825,6 @@ static void method_test_CRS_return(
>
>   	if (passed)
>   		fwts_passed(fw, "%s (%s) looks sane.", name, tag);
> -	else
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   }
>
>   static int method_test_CRS(fwts_framework *fw)
> @@ -2122,7 +2104,6 @@ static void method_test_SEG_return(
>   			"upper 16 reserved bits are set when they "
>   			"should in fact be zero.",
>   			name, obj->Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   	} else
>   		method_passed_sane_uint64(fw, name, obj->Integer.Value);
>   }
> @@ -2308,7 +2289,6 @@ static void method_test_Sx__return(
>   			"integers, and %s only returned %" PRIu32
>   			" elements in the package.",
>   			name, obj->Package.Count);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -2328,7 +2308,6 @@ static void method_test_Sx__return(
>   			"expect. So, while this is conforming to the ACPI "
>   			"specification it will in fact not work in the "
>   			"Linux kernel.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -2339,7 +2318,6 @@ static void method_test_Sx__return(
>   			"Method_SxElementType",
>   			"%s returned a package that did not contain "
>   			"an integer.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -2348,7 +2326,6 @@ static void method_test_Sx__return(
>   			"Method_SxElementValue",
>   			"%s package element 0 had upper 24 bits "
>   			"of bits that were non-zero.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>
> @@ -2357,7 +2334,6 @@ static void method_test_Sx__return(
>   			"Method_SxElementValue",
>   			"%s package element 1 had upper 24 bits "
>   			"of bits that were non-zero.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>
> @@ -2483,7 +2459,6 @@ static void method_test_CSD_return(
>   				"%s sub-package %" PRIu32 " was expected to "
>   				"have 5 elements, got %" PRIu32 " elements instead.",
>   				name, i, pkg->Package.Count);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   			continue;
>   		}
> @@ -2496,7 +2471,6 @@ static void method_test_CSD_return(
>   					" element %" PRIu32 " is not "
>   					"an integer.",
>   					name, i, j);
> -				fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   				elements_ok = false;
>   			}
>   		}
> @@ -2514,7 +2488,6 @@ static void method_test_CSD_return(
>   				"was expected to have value 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[0].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 1 should contain zero */
> @@ -2526,7 +2499,6 @@ static void method_test_CSD_return(
>   				"was 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[1].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 3 should contain 0xfc..0xfe */
> @@ -2541,7 +2513,6 @@ static void method_test_CSD_return(
>   				"was 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[3].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 4 number of processors, skip check */
> @@ -2599,7 +2570,6 @@ static void method_test_CST_return(
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_CSTElement0NotInteger",
>   			"%s should return package with element zero being an integer "
>   			"count of the number of C state sub-packages.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -2611,7 +2581,6 @@ static void method_test_CST_return(
>   			"reports it has %" PRIu64 " C states.",
>   			name, obj->Package.Count - 1,
>   			obj->Package.Elements[0].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -2631,7 +2600,6 @@ static void method_test_CST_return(
>   				"Method_CSTElementType",
>   				"%s package element %" PRIu32 " was not a package.",
>   				name, i);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			cst_elements_ok[i] = false;
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
> @@ -2795,7 +2763,6 @@ static void method_test_PSS_return(
>   				"Method_PSSElementType",
>   				"%s package element %" PRIu32
>   				" was not a package.", name, i);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
>   		}
> @@ -2808,7 +2775,6 @@ static void method_test_PSS_return(
>   				" was expected to "
>   				"have 6 elements, got %" PRIu32 " elements instead.",
>   				name, i, obj->Package.Count);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
>   		}
> @@ -2988,7 +2954,6 @@ static void method_test_TSD_return(
>   				"Method_TSDElementType",
>   				"%s package element %" PRIu32
>   				" was not a package.", name, i);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
>   		}
> @@ -3003,7 +2968,6 @@ static void method_test_TSD_return(
>   				"%s sub-package %" PRIu32 " was expected to "
>   				"have 5 elements, got %" PRIu32 " elements instead.",
>   				name, i, pkg->Package.Count);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   			continue;
>   		}
> @@ -3015,7 +2979,6 @@ static void method_test_TSD_return(
>   					"%s sub-package %" PRIu32
>   					" element %" PRIu32 " is not "
>   					"an integer.", name, i, j);
> -				fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   				elements_ok = false;
>   			}
>   		}
> @@ -3034,7 +2997,6 @@ static void method_test_TSD_return(
>   				"was expected to have value 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[0].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 1 should contain zero */
> @@ -3047,7 +3009,6 @@ static void method_test_TSD_return(
>   				"was 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[1].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 3 should contain 0xfc..0xfe */
> @@ -3063,7 +3024,6 @@ static void method_test_TSD_return(
>   				"was 0x%" PRIx64 ".",
>   				name, i,
>   				pkg->Package.Elements[3].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Element 4 number of processors, skip check */
> @@ -3118,7 +3078,6 @@ static void method_test_TSS_return(
>   				"Method_TSSElementType",
>   				"%s package element %" PRIu32
>   				" was not a package.", name, i);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			tss_elements_ok[i] = false;
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
> @@ -3135,7 +3094,6 @@ static void method_test_TSS_return(
>   				" was expected to have 5 elements, "
>   				"got %" PRIu32" elements instead.",
>   				name, i, pkg->Package.Count);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			tss_elements_ok[i] = false;
>   			failed = true;
>   			continue;	/* Skip processing sub-package */
> @@ -3148,7 +3106,6 @@ static void method_test_TSS_return(
>   					"%s sub-package %" PRIu32
>   					" element %" PRIu32 " is not "
>   					"an integer.", name, i, j);
> -				fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   				tss_elements_ok[i] = false;
>   			}
>   		}
> @@ -3170,7 +3127,6 @@ static void method_test_TSS_return(
>   				"was %" PRIu64 ".",
>   				name, i,
>   				pkg->Package.Elements[0].Integer.Value);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			failed = true;
>   		}
>   		/* Skip checking elements 1..4 */
> @@ -3296,15 +3252,14 @@ static void method_test_GCP_return(
>   	if (method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK)
>   		return;
>
> -	if (obj->Integer.Value & ~0xf) {
> +	if (obj->Integer.Value & ~0xf)
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   			"Method_GCPReturn",
>   			"%s returned %" PRId64 ", should be between 0 and 15, "
>   			"one or more of the reserved bits 4..31 seem "
>   			"to be set.",
>   			name, obj->Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> -	} else
> +	else
>   		method_passed_sane_uint64(fw, name, obj->Integer.Value);
>   }
>
> @@ -3332,7 +3287,6 @@ static void method_test_GRT_return(
>   			"%s should return a buffer of 16 bytes, but "
>   			"instead just returned %" PRIu32,
>   			name, obj->Buffer.Length);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		return;
>   	}
>
> @@ -3361,15 +3315,14 @@ static void method_test_GWS_return(
>   	if (method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK)
>   		return;
>
> -	if (obj->Integer.Value & ~0x3) {
> +	if (obj->Integer.Value & ~0x3)
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   			"Method_GWSReturn",
>   			"%s returned %" PRIu64 ", should be between 0 and 3, "
>   			"one or more of the reserved bits 2..31 seem "
>   			"to be set.",
>   			name, obj->Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> -	} else
> +	else
>   		method_passed_sane_uint64(fw, name, obj->Integer.Value);
>   }
>
> @@ -3466,7 +3419,6 @@ static void method_test_SBS_return(
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_SBSReturn",
>   			"%s returned %" PRIu64 ", should be between 0 and 4.",
>   			name, obj->Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		fwts_advice(fw,
>   			"Smart Battery %s is incorrectly informing "
>   			"the OS about the smart battery "
> @@ -3545,7 +3497,6 @@ static void method_test_BIF_return(
>   			"%s: Expected Power Unit (Element 0) to be "
>   			"0 (mWh) or 1 (mAh), got 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[0].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #ifdef FWTS_METHOD_PEDANDTIC
> @@ -3560,7 +3511,6 @@ static void method_test_BIF_return(
>   			"%s: Design Capacity (Element 1) is "
>   			"unknown: 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[1].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Last Full Charge Capacity */
> @@ -3570,7 +3520,6 @@ static void method_test_BIF_return(
>   			"%s: Last Full Charge Capacity (Element 2) "
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[2].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #endif
> @@ -3582,7 +3531,6 @@ static void method_test_BIF_return(
>   			"(Element 3) to be 0 (Primary) or 1 "
>   			"(Secondary), got 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[3].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #ifdef FWTS_METHOD_PEDANDTIC
> @@ -3597,7 +3545,6 @@ static void method_test_BIF_return(
>   			"%s: Design Voltage (Element 4) is "
>   			"unknown: 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[4].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Design capacity warning */
> @@ -3607,7 +3554,6 @@ static void method_test_BIF_return(
>   			"%s: Design Capacity Warning (Element 5) "
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[5].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Design capacity low */
> @@ -3617,7 +3563,6 @@ static void method_test_BIF_return(
>   			"%s: Design Capacity Warning (Element 6) "
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[6].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #endif
> @@ -3690,7 +3635,6 @@ static void method_test_BIX_return(
>   			"0 (mWh) or 1 (mAh), got 0x%8.8" PRIx64 ".",
>   			name, elements[1].name,
>   			obj->Package.Elements[1].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #ifdef FWTS_METHOD_PEDANDTIC
> @@ -3706,7 +3650,6 @@ static void method_test_BIX_return(
>   			"unknown: 0x%8.8" PRIx64 ".",
>   			name, elements[2].name,
>   			obj->Package.Elements[2].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Last Full Charge Capacity */
> @@ -3717,7 +3660,6 @@ static void method_test_BIX_return(
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, elements[3].name,
>   			obj->Package.Elements[3].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #endif
> @@ -3730,7 +3672,6 @@ static void method_test_BIX_return(
>   			"(Secondary), got 0x%8.8" PRIx64 ".",
>   			name, elements[4].name,
>   			obj->Package.Elements[4].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #ifdef FWTS_METHOD_PEDANDTIC
> @@ -3746,7 +3687,6 @@ static void method_test_BIX_return(
>   			"0x%8.8" PRIx64 ".",
>   			name, elements[5].name,
>   			obj->Package.Elements[5].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Design capacity warning */
> @@ -3757,7 +3697,6 @@ static void method_test_BIX_return(
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, elements[6].name,
>   			obj->Package.Elements[6].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Design capacity low */
> @@ -3768,7 +3707,6 @@ static void method_test_BIX_return(
>   			"is unknown: 0x%8.8" PRIx64 ".",
>   			name, elements[7].name,
>   			obj->Package.Elements[7].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Cycle Count */
> @@ -3777,7 +3715,6 @@ static void method_test_BIX_return(
>   			"%s: %s (Element 8) is unknown: "
>   			"0x%8.8" PRIx64 ".", Elements[8].name,
>   			name, obj->Package.Elements[8].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   #endif
> @@ -3846,7 +3783,6 @@ static void method_test_BST_return(
>   			"%s: Expected Battery State (Element 0) to "
>   			"be 0..7, got 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[0].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Ensure bits 0 (discharging) and 1 (charging) are not both set, see 10.2.2.6 */
> @@ -3857,7 +3793,6 @@ static void method_test_BST_return(
>   			"indicating both charging and discharginng "
>   			"which is not allowed. Got value 0x%8.8" PRIx64 ".",
>   			name, obj->Package.Elements[0].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>   	/* Battery Present Rate - cannot check, pulled from EC */
> @@ -4003,7 +3938,6 @@ static void method_test_PSR_return(
>   			"%s returned 0x%8.8" PRIx64 ", expected 0 "
>   			"(offline) or 1 (online)",
>   			name, obj->Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   	} else
>   		method_passed_sane_uint64(fw, name, obj->Integer.Value);
>   }
> @@ -4202,7 +4136,6 @@ static void method_test_THERM_return(
>   				method,
>   				obj->Integer.Value,
>   				(float)((uint64_t)obj->Integer.Value) / 10.0);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   			fwts_advice(fw,
>   				"The value returned was probably a "
>   				"hard-coded thermal value which is "
> @@ -4562,13 +4495,12 @@ static void method_test_DOD_return(
>   		}
>   	}
>
> -	if (failed) {
> +	if (failed)
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   			"Method_DODNoPackage",
>   			"Method _DOD did not return a package of "
>   			"%" PRIu32 " integers.", obj->Package.Count);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> -	} else
> +	else
>   		method_passed_sane(fw, name, "package");
>   }
>
> @@ -4672,7 +4604,6 @@ static void method_test_BCL_return(
>   			"battery power (%" PRIu64 ").",
>   			obj->Package.Elements[0].Integer.Value,
>   			obj->Package.Elements[1].Integer.Value);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>
> @@ -4698,7 +4629,6 @@ static void method_test_BCL_return(
>   			"level are not in ascending "
>   			"order which should be fixed "
>   			"in the firmware.");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		failed = true;
>   	}
>
> @@ -4781,14 +4711,13 @@ static void method_test_DDC_return(
>
>   	switch (obj->Type) {
>   	case ACPI_TYPE_BUFFER:
> -		if (requested != obj->Buffer.Length) {
> +		if (requested != obj->Buffer.Length)
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"Method_DDCElementCount",
>   				"%s returned a buffer of %" PRIu32 " items, "
>   				"expected %" PRIu32 ".",
>   				name, obj->Buffer.Length, requested);
> -			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
> -		} else
> +		else
>   			fwts_passed(fw,
>   				"Method %s returned a buffer of %d items "
>   				"as expected.",
> @@ -4804,7 +4733,6 @@ static void method_test_DDC_return(
>   	default:
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_DDCBadReturnType",
>   			"%s did not return a buffer or an integer.", name);
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
>   		break;
>   	}
>   }
> diff --git a/src/acpi/powerbutton/powerbutton.c b/src/acpi/powerbutton/powerbutton.c
> index 7820f65..5a12614 100644
> --- a/src/acpi/powerbutton/powerbutton.c
> +++ b/src/acpi/powerbutton/powerbutton.c
> @@ -56,11 +56,10 @@ static int power_button_test1(fwts_framework *fw)
>   		}
>   		fwts_printf(fw, "Waiting %2.2d/20\r", 20-i);
>   	}
> -	if (matching == 0) {
> +	if (matching == 0)
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "NoPowerButtonEvents",
>   			"Did not detect any ACPI power buttons events while waiting for power button to be pressed.");
> -		fwts_tag_failed(fw, FWTS_TAG_ACPI_EVENT);
> -	} else  {
> +	else  {
>   		char button[4096];
>   		memset(button, 0, sizeof(button));
>   		sscanf(buffer, "%*s %s", button);
> diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c
> index 45f62f7..27a5af0 100644
> --- a/src/acpi/s3/s3.c
> +++ b/src/acpi/s3/s3.c
> @@ -147,7 +147,6 @@ static int s3_do_suspend_resume(fwts_framework *fw,
>   		(*pm_errors)++;
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "ShortSuspend",
>   			"Unexpected: S3 slept for %d seconds, less than the expected %d seconds.", duration, delay);
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	}
>   	fwts_progress_message(fw, percent, "(Checking for errors)");
>   	if (duration > (delay*2)) {
> @@ -174,19 +173,16 @@ static int s3_do_suspend_resume(fwts_framework *fw,
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedPreS3",
>   			"pm-action failed before trying to put the system "
>   			"in the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	} else if (status == 128) {
>   		(*pm_errors)++;
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionPowerStateS3",
>   			"pm-action tried to put the machine in the requested "
>   			"power state but failed.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	} else if (status > 128) {
>   		(*pm_errors)++;
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedS3",
>   			"pm-action encountered an error and also failed to "
>   			"enter the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	}
>
>   	return FWTS_OK;
> diff --git a/src/acpi/s3power/s3power.c b/src/acpi/s3power/s3power.c
> index 6c6213a..75d660d 100644
> --- a/src/acpi/s3power/s3power.c
> +++ b/src/acpi/s3power/s3power.c
> @@ -203,12 +203,10 @@ static int s3power_test(fwts_framework *fw)
>   	duration = (int)(t_end - t_start);
>   	fwts_log_info(fw, "pm-suspend returned %d after %d seconds.", status, duration);
>
> -	if (duration < s3power_sleep_delay) {
> +	if (duration < s3power_sleep_delay)
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "ShortSuspend",
>   			"Unexpected: S3 slept for %d seconds, less than the expected %d seconds.",
>   			duration, s3power_sleep_delay);
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
> -	}
>   	if (duration > (s3power_sleep_delay*2))
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "LongSuspend",
>   			"Unexpected: S3 much longer than expected (%d seconds).", duration);
> @@ -218,17 +216,14 @@ static int s3power_test(fwts_framework *fw)
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionFailedPreS3",
>   			"pm-action failed before trying to put the system "
>   			"in the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	} else if (status == 128) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionPowerStateS3",
>   			"pm-action tried to put the machine in the requested "
>   			"power state but failed.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	} else if (status > 128) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionFailedS3",
>   			"pm-action encountered an error and also failed to "
>   			"enter the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   	}
>
>   	return FWTS_OK;
> diff --git a/src/acpi/s4/s4.c b/src/acpi/s4/s4.c
> index 9f07bcf..d9ddd6b 100644
> --- a/src/acpi/s4/s4.c
> +++ b/src/acpi/s4/s4.c
> @@ -180,33 +180,28 @@ static int s4_hibernate(fwts_framework *fw,
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedPreS4",
>   			"pm-action failed before trying to put the system "
>   			"in the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	} else if (status == 128) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionPowerStateS4",
>   			"pm-action tried to put the machine in the requested "
>   			"power state but failed.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	} else if (status > 128) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedS4",
>   			"pm-action encountered an error and also failed to "
>   			"enter the requested power saving state.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	}
>
>   	if (fwts_klog_regex_find(fw, klog, "Freezing user space processes.*done") < 1) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "UserSpaceTaskFreeze",
>   			"Failed to freeze user space processes.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	}
>
>   	if (fwts_klog_regex_find(fw, klog, "Freezing remaining freezable tasks.*done") < 1) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "KernelTaskFreeze",
>   			"Failed to freeze remaining non-user space processes.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	}
>
> @@ -214,14 +209,12 @@ static int s4_hibernate(fwts_framework *fw,
>   	    (fwts_klog_regex_find(fw, klog, "PM: late freeze of devices complete") < 1)) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "DeviceFreeze",
>   			"Failed to freeze devices.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	}
>
>   	if (fwts_klog_regex_find(fw, klog, "PM: Allocated.*kbytes") < 1) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "HibernateImageAlloc",
>   			"Failed to allocate memory for hibernate image.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		*failed_alloc_image = 1;
>   		(*pm_errors)++;
>   	}
> @@ -229,7 +222,6 @@ static int s4_hibernate(fwts_framework *fw,
>   	if (fwts_klog_regex_find(fw, klog, "PM: Image restored successfully") < 1) {
>   		fwts_failed(fw, LOG_LEVEL_HIGH, "HibernateImageRestore",
>   			"Failed to restore hibernate image.");
> -		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
>   		(*pm_errors)++;
>   	}
>
> diff --git a/src/acpi/wakealarm/wakealarm.c b/src/acpi/wakealarm/wakealarm.c
> index dd92861..0243a5e 100644
> --- a/src/acpi/wakealarm/wakealarm.c
> +++ b/src/acpi/wakealarm/wakealarm.c
> @@ -56,7 +56,6 @@ static int wakealarm_test2(fwts_framework *fw)
>   	if (fwts_wakealarm_trigger(fw, 1)) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotTriggeredTest2",
>   			"RTC wakealarm did not trigger.");
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   		return FWTS_OK;
>   	}
>
> @@ -75,7 +74,6 @@ static int wakealarm_test3(fwts_framework *fw)
>   	if (ret < 0) {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotTriggeredTest3",
>   			"Failed to trigger and fire wakealarm.");
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   		return FWTS_ERROR;	/* Really went wrong */
>   	}
>   	if (ret == 0)
> @@ -83,7 +81,6 @@ static int wakealarm_test3(fwts_framework *fw)
>   	else {
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotFiredTest3",
>   			"RTC wakealarm was triggered but did not fire.");
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   	}
>
>   	return FWTS_OK;
> @@ -101,14 +98,12 @@ static int wakealarm_test4(fwts_framework *fw)
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"WakeAlarmNotTriggeredTest4",
>   				"Failed to trigger and fire wakealarm.");
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			return FWTS_ERROR;	/* Really went wrong */
>   		}
>   		if (ret != 0) {
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"WakeAlarmNotFiredTest4",
>   				"RTC wakealarm was triggered but did not fire.");
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			failed++;
>   		}
>   		fwts_progress(fw, 25 * i);
> diff --git a/src/apic/apicedge/apicedge.c b/src/apic/apicedge/apicedge.c
> index c679959..de2ca8b 100644
> --- a/src/apic/apicedge/apicedge.c
> +++ b/src/apic/apicedge/apicedge.c
> @@ -76,26 +76,20 @@ static int apicedge_test1(fwts_framework *fw)
>   			edge = 0;
>
>   		if (strstr(line,"acpi")) {
> -			if (edge == 1) {
> +			if (edge == 1)
>   				fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   					"ACPIIRQEdgeTrig",
>   					"ACPI Interrupt is incorrectly edge triggered.");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS_IRQ);
> -			}
>   			continue;
>   		}
> -		if ((irq < 15) && (edge == 0)) {
> +		if ((irq < 15) && (edge == 0))
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"LegacyIRQLevelTrig",
>   				"Legacy interrupt %i is incorrectly level triggered.", irq);
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS_IRQ);
> -		}
> -		if ((irq < 15) && (edge == -1)) {
> +		if ((irq < 15) && (edge == -1))
>   			fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   				"NonLegacyIRQLevelTrig",
>   				"Non-Legacy interrupt %i is incorrectly level triggered.", irq);
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS_IRQ);
> -		}
>   	}
>   	fclose(file);
>
> diff --git a/src/bios/bios32/bios32.c b/src/bios/bios32/bios32.c
> index aedac87..57d219f 100644
> --- a/src/bios/bios32/bios32.c
> +++ b/src/bios/bios32/bios32.c
> @@ -87,51 +87,47 @@ static int bios32_test1(fwts_framework *fw)
>   				bios32->checksum);
>   			fwts_log_nl(fw);
>
> -			if (bios32->entry_point >= 0x100000) {
> +			if (bios32->entry_point >= 0x100000)
>   				fwts_failed(fw, LOG_LEVEL_HIGH,
>   					"BIOS32SrvDirEntryPointHighMem",
>   					"Service Directory Entry Point 0x%8.8" PRIx32
>   					" is in high memory and cannot be used "
>   					"by the kernel.",
>   					bios32->entry_point);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -			} else
> +			else
>   				fwts_passed(fw, "Service Directory Entry Point "
>   					"0x%8.8x is not in high memory.",
>   					bios32->entry_point);
>
> -			if (bios32->length != 1) {
> +			if (bios32->length != 1)
>   				fwts_failed(fw, LOG_LEVEL_HIGH,
>   					"BIOS32SrvDirEntryLength",
>   					"Service Directory Length is 0x%8.8" PRIx8
>   					", expected 1 (1 x 16 bytes).",
>   					bios32->length);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -			} else
> +			else
>   				fwts_passed(fw,
>   					"Service Directory Length is 1 "
>   					"(1 x 16 bytes) as expected.");
>
> -			if (bios32->revision_level != 0) {
> +			if (bios32->revision_level != 0)
>   				fwts_failed(fw, LOG_LEVEL_HIGH,
>   					"BIOS32SrvDirRevision",
>   					"Service Directory Revision is 0x%2.2" PRIx8
>   					", only version 0 is supported by the "
>   					"kernel.",
>   					bios32->revision_level);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -			} else
> +			else
>   				fwts_passed(fw,
>   					"Service Directory Revision is 0x%2.2" PRIx8
>   					" and is supported by the kernel.",
>   					bios32->revision_level);
>
> -			if (fwts_checksum(mem + i, 16) != 0) {
> +			if (fwts_checksum(mem + i, 16) != 0)
>   				fwts_failed(fw, LOG_LEVEL_HIGH,
>   					"BIOS32SrvDirCheckSum",
>   					"Service Directory checksum failed.");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -			} else
> +			else
>   				fwts_passed(fw,
>   					"Service Directory checksum passed.");
>   			found++;
> @@ -140,13 +136,11 @@ static int bios32_test1(fwts_framework *fw)
>
>   	if (found == 0)
>   		fwts_log_info(fw, "Could not find BIOS32 Service Directory.");
> -	else if (found > 1) {
> +	else if (found > 1)
>   		fwts_failed(fw, LOG_LEVEL_HIGH,
>   			"BIOS32MultipleSrvDirInstances",
>   			"Found %d instances of BIOS32 Service Directory, "
>   			"there should only be 1.", found);
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -	}
>
>           (void)fwts_munmap(mem, BIOS32_SD_REGION_SIZE);
>
> diff --git a/src/bios/ebda_region/ebda_region.c b/src/bios/ebda_region/ebda_region.c
> index af8a0e6..f82333e 100644
> --- a/src/bios/ebda_region/ebda_region.c
> +++ b/src/bios/ebda_region/ebda_region.c
> @@ -90,13 +90,11 @@ static int ebda_test1(fwts_framework *fw)
>   			memory_map_name,
>   			entry->start_address,
>   			entry->end_address);
> -	} else {
> +	} else
>   		fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   			"EBDAMappedNotReserved",
>   			"EBDA region mapped at 0x%lx but not reserved in the %s table.",
>   			ebda_addr, memory_map_name);
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -	}
>   		
>   	return FWTS_OK;
>   }
> diff --git a/src/bios/mtrr/mtrr.c b/src/bios/mtrr/mtrr.c
> index 4bcdf3a..b604950 100644
> --- a/src/bios/mtrr/mtrr.c
> +++ b/src/bios/mtrr/mtrr.c
> @@ -384,7 +384,6 @@ static int validate_iomem(fwts_framework *fw)
>   				"has incorrect attribute%s.",
>   				start, end,
>   				c2, cache_to_string(type & type_mustnot));
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			if (type_must == UNCACHED)
>   				skiperror = true;
>   		}
> @@ -402,7 +401,6 @@ static int validate_iomem(fwts_framework *fw)
>   				start, end,
>   				c2,
>   				cache_to_string( (type & type_must) ^ type_must));
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   		}
>
>   	}
> @@ -487,17 +485,14 @@ static int mtrr_test2(fwts_framework *fw)
>
>   		if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent fixed MTRR settings") > 0) {
>   			fwts_log_info(fw, "Detected CPUs with inconsistent fixed MTRR settings which the kernel fixed.");
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			failed = true;
>   		}
>   		if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent variable MTRR settings") > 0) {
>   			fwts_log_info(fw, "Detected CPUs with inconsistent variable MTRR settings which the kernel fixed.");
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			failed = true;
>   		}
>   		if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent MTRRdefType") > 0) {
>   			fwts_log_info(fw, "Detected CPUs with inconsistent variable MTRR settings which the kernel fixed.");
> -			fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			failed = true;
>   		}
>
> @@ -519,7 +514,7 @@ static int mtrr_test3(fwts_framework *fw)
>   {
>   	if (strstr(fwts_cpuinfo->vendor_id, "AMD")) {
>   		if (klog != NULL) {
> -			if (fwts_klog_regex_find(fw, klog, "SYSCFG[MtrrFixDramModEn] not cleared by BIOS, clearing this bit") > 0) {
> +			if (fwts_klog_regex_find(fw, klog, "SYSCFG[MtrrFixDramModEn] not cleared by BIOS, clearing this bit") > 0)
>   				fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   					"MTRRFixDramModEnBit",
>   					"The BIOS is expected to clear MtrrFixDramModEn bit, see for example "
> @@ -528,11 +523,8 @@ static int mtrr_test3(fwts_framework *fw)
>    					"\"13.2.1.2 SYSCFG Register\": \"The MtrrFixDramModEn bit should be set "
>    					"to 1 during BIOS initialization of the fixed MTRRs, then cleared to "
>    					"0 for operation.\"");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -			}
> -			else {
> +			else
>   				fwts_passed(fw, "No MtrrFixDramModEn error detected.");
> -			}
>   		}
>   	} else
>   		fwts_skipped(fw, "CPU is not an AMD, cannot test.");
> diff --git a/src/bios/os2gap/os2gap.c b/src/bios/os2gap/os2gap.c
> index 40773f1..de16bf3 100644
> --- a/src/bios/os2gap/os2gap.c
> +++ b/src/bios/os2gap/os2gap.c
> @@ -57,7 +57,6 @@ static int os2gap_test1(fwts_framework *fw)
>   			OS2_GAP_SIZE / 1024,
>   			(void*)OS2_GAP_ADDRESS,
>   			(void*)(OS2_GAP_ADDRESS + OS2_GAP_SIZE));
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   		fwts_log_nl(fw);
>   		fwts_memory_map_table_dump(fw, os2gap_memory_map_info);
>   	} else
> diff --git a/src/bios/pciirq/pciirq.c b/src/bios/pciirq/pciirq.c
> index 5df0e37..b00214f 100644
> --- a/src/bios/pciirq/pciirq.c
> +++ b/src/bios/pciirq/pciirq.c
> @@ -230,12 +230,10 @@ static int pciirq_test1(fwts_framework *fw)
>   			"Could not find PCI IRQ Routing Table. Since this table "
>   			"is for legacy BIOS systems which don't have ACPI support "
>   			"this is generally not a problem.");
> -	} else if (found > 1) {
> +	} else if (found > 1)
>   		fwts_failed(fw, LOG_LEVEL_HIGH,
>   			"PCIIRQMultipleTables",
>   			"Found %d instances of PCI Routing Tables, there should only be 1.", found);
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -	}
>
>           (void)fwts_munmap(mem, PCIIRQ_REGION_SIZE);
>
> diff --git a/src/bios/pnp/pnp.c b/src/bios/pnp/pnp.c
> index 65a16d1..34a0a34 100644
> --- a/src/bios/pnp/pnp.c
> +++ b/src/bios/pnp/pnp.c
> @@ -167,12 +167,10 @@ static int pnp_test1(fwts_framework *fw)
>   		fwts_log_info(fw,
>   			"Could not find PnP BIOS Support Installation Check structure. "
>   			"This is not necessarily a failure.");
> -	else if (found > 1) {
> +	else if (found > 1)
>   		fwts_failed(fw, LOG_LEVEL_HIGH,
>   			"PNPMultipleTables",
>   			"Found %d instances of PCI Routing Tables, there should only be 1.", found);
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
> -	}
>
>           (void)fwts_munmap(mem, PNP_REGION_SIZE);
>
> diff --git a/src/lib/include/fwts.h b/src/lib/include/fwts.h
> index c29e7f2..d27d2dc 100644
> --- a/src/lib/include/fwts.h
> +++ b/src/lib/include/fwts.h
> @@ -30,7 +30,6 @@
>
>   #include "fwts_version.h"
>   #include "fwts_types.h"
> -#include "fwts_tag.h"
>   #include "fwts_binpaths.h"
>   #include "fwts_framework.h"
>   #include "fwts_log.h"
> diff --git a/src/lib/include/fwts_framework.h b/src/lib/include/fwts_framework.h
> index 1e5171c..5278dfb 100644
> --- a/src/lib/include/fwts_framework.h
> +++ b/src/lib/include/fwts_framework.h
> @@ -50,9 +50,7 @@ typedef enum {
>   	FWTS_FLAG_TEST_ACPI			= 0x04000000,
>   	FWTS_FLAG_UTILS				= 0x08000000,
>   	FWTS_FLAG_QUIET				= 0x10000000,
> -	FWTS_FLAG_LP_TAGS			= 0x20000000,
> -	FWTS_FLAG_LP_TAGS_LOG			= 0x40000000,
> -	FWTS_FLAG_SHOW_TESTS_FULL		= 0x80000000,
> +	FWTS_FLAG_SHOW_TESTS_FULL		= 0x20000000,
>   } fwts_framework_flags;
>
>   #define FWTS_FLAG_TEST_MASK		\
> @@ -132,9 +130,6 @@ typedef struct {
>   	bool print_summary;			/* Print summary of results at end of test runs */
>   	fwts_log_level failed_level;		/* Bit mask of failed levels in test run */
>
> -	fwts_list test_taglist;			/* List of tags found when running all minor tests */
> -	fwts_list total_taglist;		/* List of tags found when running all tests */
> -
>   	int firmware_type;			/* Type of firmware */
>   	bool show_progress;			/* Show progress while running current test */
>
> diff --git a/src/lib/include/fwts_klog.h b/src/lib/include/fwts_klog.h
> index ef23750..fe8f520 100644
> --- a/src/lib/include/fwts_klog.h
> +++ b/src/lib/include/fwts_klog.h
> @@ -40,7 +40,6 @@ typedef enum {
>   typedef struct {
>   	fwts_compare_mode compare_mode;
>   	fwts_log_level level;
> -	fwts_tag tag;
>           const char *pattern;
>   	const char *advice;
>   	char *label;
> diff --git a/src/lib/include/fwts_log.h b/src/lib/include/fwts_log.h
> index e760efa..b9f378a 100644
> --- a/src/lib/include/fwts_log.h
> +++ b/src/lib/include/fwts_log.h
> @@ -184,9 +184,6 @@ static inline int fwts_log_type_count(fwts_log_type type)
>   #define fwts_log_heading(fw, fmt, args...)	\
>   	fwts_log_printf(fw->results, LOG_HEADING, LOG_LEVEL_NONE, "", "", "", fmt, ## args)
>
> -#define fwts_log_tag(fw, fmt, args...)	\
> -	fwts_log_printf(fw->results, LOG_TAG | LOG_VERBATUM, LOG_LEVEL_NONE, "", "", "", fmt, ## args)
> -
>   #define fwts_log_nl(fw) \
>   	fwts_log_printf(fw->results, LOG_NEWLINE, LOG_LEVEL_NONE, "", "", "", "%s", "")
>
> diff --git a/src/lib/include/fwts_tag.h b/src/lib/include/fwts_tag.h
> deleted file mode 100644
> index b7d00a4..0000000
> --- a/src/lib/include/fwts_tag.h
> +++ /dev/null
> @@ -1,83 +0,0 @@
> -/*
> - * Copyright (C) 2010-2013 Canonical
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * as published by the Free Software Foundation; either version 2
> - * of the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - */
> -
> -#ifndef __FWTS_TAG__
> -#define __FWTS_TAG__
> -
> -#include "fwts_list.h"
> -#include "fwts_framework.h"
> -
> -typedef enum {
> -	FWTS_TAG_NONE = 1,
> -	FWTS_TAG_ERROR_CRITICAL,
> -	FWTS_TAG_ERROR_HIGH,
> -	FWTS_TAG_ERROR_MEDIUM,
> -	FWTS_TAG_ERROR_LOW,
> -	FWTS_TAG_BIOS,
> -	FWTS_TAG_BIOS_THERMAL,
> -	FWTS_TAG_BIOS_IRQ,
> -	FWTS_TAG_BIOS_AMD_POWERNOW,
> -	FWTS_TAG_BIOS_MMCONFIG,
> -	FWTS_TAG_BIOS_DMI,
> -	FWTS_TAG_ACPI,
> -	FWTS_TAG_ACPI_IO_PORT,
> -	FWTS_TAG_ACPI_INVALID_TABLE,
> -	FWTS_TAG_ACPI_BUFFER_OVERFLOW,
> -	FWTS_TAG_ACPI_AML_OPCODE,
> -	FWTS_TAG_ACPI_NAMESPACE_LOOKUP,
> -	FWTS_TAG_ACPI_PCI_EXPRESS,
> -	FWTS_TAG_ACPI_BAD_RESULT,
> -	FWTS_TAG_ACPI_NO_HANDLER,
> -	FWTS_TAG_ACPI_PACKAGE_LIST,
> -	FWTS_TAG_ACPI_PARSE_EXEC_FAIL,
> -	FWTS_TAG_ACPI_EVAL,
> -	FWTS_TAG_ACPI_BAD_LENGTH,
> -	FWTS_TAG_ACPI_BAD_ADDRESS,
> -	FWTS_TAG_ACPI_METHOD_RETURN,
> -	FWTS_TAG_ACPI_BRIGHTNESS,
> -	FWTS_TAG_ACPI_BUTTON,
> -	FWTS_TAG_ACPI_EVENT,
> -	FWTS_TAG_ACPI_PARAMETER,
> -	FWTS_TAG_ACPI_THROTTLING,
> -	FWTS_TAG_ACPI_EXCEPTION,
> -	FWTS_TAG_ACPI_PACKAGE,
> -	FWTS_TAG_ACPI_APIC,
> -	FWTS_TAG_ACPI_DISPLAY,
> -	FWTS_TAG_ACPI_MULTIPLE_FACS,
> -	FWTS_TAG_ACPI_POINTER_MISMATCH,
> -	FWTS_TAG_ACPI_TABLE_CHECKSUM,
> -	FWTS_TAG_ACPI_HOTPLUG,
> -	FWTS_TAG_ACPI_RSDP,
> -	FWTS_TAG_ACPI_MUTEX,
> -	FWTS_TAG_ACPI_THERMAL,
> -	FWTS_TAG_ACPI_LID,
> -	FWTS_TAG_ACPI_METHOD,
> -	FWTS_TAG_EMBEDDED_CONTROLLER,
> -	FWTS_TAG_POWER_MANAGEMENT,
> -	FWTS_TAG_WMI,
> -} fwts_tag;
> -
> -fwts_tag fwts_tag_id_str_to_tag(const char *tag);
> -const char *fwts_tag_to_str(const fwts_tag tag);
> -void fwts_tag_add(fwts_list *taglist, const char *tag);
> -char *fwts_tag_list_to_str(fwts_list *taglist);
> -void fwts_tag_report(fwts_framework *fw, const fwts_log_field field, fwts_list *taglist);
> -void fwts_tag_failed(fwts_framework *fw, const fwts_tag tag);
> -
> -#endif
> diff --git a/src/lib/src/Makefile.am b/src/lib/src/Makefile.am
> index 4760a6f..d708f34 100644
> --- a/src/lib/src/Makefile.am
> +++ b/src/lib/src/Makefile.am
> @@ -65,7 +65,6 @@ libfwts_la_SOURCES = 		\
>   	fwts_smbios.c 		\
>   	fwts_stringextras.c 	\
>   	fwts_summary.c 		\
> -	fwts_tag.c 		\
>   	fwts_text_list.c 	\
>   	fwts_tty.c 		\
>   	fwts_uefi.c 		\
> diff --git a/src/lib/src/fwts_framework.c b/src/lib/src/fwts_framework.c
> index 92aa74d..0cf0f2c 100644
> --- a/src/lib/src/fwts_framework.c
> +++ b/src/lib/src/fwts_framework.c
> @@ -70,11 +70,9 @@ static fwts_option fwts_framework_options[] = {
>   	{ "skip-test", 		"S:", 1, "Skip listed tests, e.g. --skip-test=s3,nx,method" },
>   	{ "quiet", 		"q",  0, "Run quietly." },
>   	{ "dumpfile", 		"",   1, "Load ACPI tables using file generated by acpidump, e.g. --dumpfile=acpidump.dat" },
> -	{ "lp-tags", 		"",   0, "Output just LaunchPad bug tags." },
>   	{ "show-tests-full", 	"",   0, "Show available tests including all minor tests." },
>   	{ "utils", 		"u",  0, "Run Utility 'tests'." },
>   	{ "json-data-path", 	"j:", 1, "Specify path to fwts json data files - default is /usr/share/fwts." },
> -	{ "lp-tags-log", 	"",   0, "Output LaunchPad bug tags in results log." },
>   	{ "disassemble-aml", 	"",   0, "Disassemble AML from DSDT and SSDT tables." },
>   	{ "log-type",		"",   1, "Specify log type (plaintext, json, html or xml)." },
>   	{ "unsafe",		"U",  0, "Unsafe tests (tests that can potentially cause kernel oopses)." },
> @@ -452,8 +450,7 @@ static int fwts_framework_test_summary(fwts_framework *fw)
>   			printf("%s\n", fwts_log_field_to_str_upper(LOG_PASSED));
>   	}
>
> -	if (!(fw->flags & FWTS_FLAG_LP_TAGS))
> -		fwts_log_newline(fw->results);
> +	fwts_log_newline(fw->results);
>
>   	return FWTS_OK;
>   }
> @@ -475,7 +472,6 @@ static int fwts_framework_run_test(fwts_framework *fw, fwts_framework_test *test
>
>   	fw->current_major_test = test;
>   	fw->current_minor_test_name = "";
> -	fwts_list_init(&fw->test_taglist);
>
>   	test->was_run = true;
>   	fw->total_run++;
> @@ -597,15 +593,7 @@ static int fwts_framework_run_test(fwts_framework *fw, fwts_framework_test *test
>   	if (test->ops->deinit)
>   		test->ops->deinit(fw);
>
> -	if (fw->flags & FWTS_FLAG_LP_TAGS_LOG) {
> -		fwts_log_section_begin(fw->results, "tags");
> -		fwts_tag_report(fw, LOG_TAG, &fw->test_taglist);
> -		fwts_log_section_end(fw->results);
> -	}
> -
>   done:
> -	fwts_list_free_items(&fw->test_taglist, free);
> -
>   	if (!(test->flags & FWTS_FLAG_UTILS)) {
>   		fwts_log_section_begin(fw->results, "results");
>   		fwts_framework_test_summary(fw);
> @@ -872,8 +860,7 @@ static void fwts_framework_heading_info(
>
>   		fwts_log_info(fw, "Running tests: %s.",
>   			fwts_list_len(tests_to_run) == 0 ? "None" : tests);
> -		if (!(fw->flags & FWTS_FLAG_LP_TAGS))
> -			fwts_log_newline(fw->results);
> +		fwts_log_newline(fw->results);
>   		free(tests);
>   	}
>   }
> @@ -1094,52 +1081,44 @@ int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
>   		case 25: /* --dumpfile */
>   			fwts_framework_strdup(&fw->acpi_table_acpidump_file, optarg);
>   			break;
> -		case 26: /* --lp-tags */
> -			fw->flags |= FWTS_FLAG_LP_TAGS;
> -			fwts_log_filter_unset_field(~0);
> -			fwts_log_filter_set_field(LOG_TAG);
> -			break;
> -		case 27: /* --show-tests-full */
> +		case 26: /* --show-tests-full */
>   			fw->flags |= FWTS_FLAG_SHOW_TESTS_FULL;
>   			break;
> -		case 28: /* --utils */
> +		case 27: /* --utils */
>   			fw->flags |= FWTS_FLAG_UTILS;
>   			break;
> -		case 29: /* --json-data-path */
> +		case 28: /* --json-data-path */
>   			fwts_framework_strdup(&fw->json_data_path, optarg);
>   			break;
> -		case 30: /* --lp-tags-log */
> -			fw->flags |= FWTS_FLAG_LP_TAGS_LOG;
> -			break;
> -		case 31: /* --disassemble-aml */
> +		case 29: /* --disassemble-aml */
>   			fwts_iasl_disassemble_all_to_file(fw);
>   			return FWTS_COMPLETE;
> -		case 32: /* --log-type */
> +		case 30: /* --log-type */
>   			if (fwts_framework_log_type_parse(fw, optarg) != FWTS_OK)
>   				return FWTS_ERROR;
>   			break;
> -		case 33: /* --unsafe */
> +		case 31: /* --unsafe */
>   			fw->flags |= FWTS_FLAG_UNSAFE;
>   			break;
> -		case 34: /* --filter-error-discard */
> +		case 32: /* --filter-error-discard */
>   			if (fwts_framework_filter_error_parse(optarg, &fw->errors_filter_discard) != FWTS_OK)
>   				return FWTS_ERROR;
>   			break;
> -		case 35: /* --filter-error-keep */
> +		case 33: /* --filter-error-keep */
>   			if (fwts_framework_filter_error_parse(optarg, &fw->errors_filter_keep) != FWTS_OK)
>   				return FWTS_ERROR;
>   			break;
> -		case 36: /* --acpica-debug */
> +		case 34: /* --acpica-debug */
>   			fw->flags |= FWTS_FLAG_ACPICA_DEBUG;
>   			break;
> -		case 37: /* --acpica */
> +		case 35: /* --acpica */
>   			if (fwts_framework_acpica_parse(fw, optarg) != FWTS_OK)
>   				return FWTS_ERROR;
>   			break;
> -		case 38: /* --uefi */
> +		case 36: /* --uefi */
>   			fw->flags |= FWTS_FLAG_TEST_UEFI;
>   			break;
> -		case 39: /* --rsdp */
> +		case 37: /* --rsdp */
>   			fw->rsdp = (void *)strtoul(optarg, NULL, 0);
>   			break;
>   		}
> @@ -1176,7 +1155,6 @@ int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
>   		fwts_framework_strdup(&fw->klog, optarg);
>   		break;
>   	case 'l': /* --lp-flags */
> -		fw->flags |= FWTS_FLAG_LP_TAGS;
>   		break;
>   	case 'p': /* --show-progress */
>   		fw->flags = (fw->flags &
> @@ -1252,7 +1230,6 @@ int fwts_framework_args(const int argc, char **argv)
>   		    FWTS_FLAG_SHOW_PROGRESS;
>   	fw->log_type = LOG_TYPE_PLAINTEXT;
>
> -	fwts_list_init(&fw->total_taglist);
>   	fwts_list_init(&fw->errors_filter_keep);
>   	fwts_list_init(&fw->errors_filter_discard);
>
> @@ -1383,17 +1360,12 @@ int fwts_framework_args(const int argc, char **argv)
>   		fwts_log_section_begin(fw->results, "summary");
>   		fwts_log_set_owner(fw->results, "summary");
>   		fwts_log_nl(fw);
> -		if (fw->flags & FWTS_FLAG_LP_TAGS_LOG)
> -			fwts_tag_report(fw, LOG_SUMMARY, &fw->total_taglist);
>   		fwts_framework_total_summary(fw);
>   		fwts_log_nl(fw);
>   		fwts_summary_report(fw, &fwts_framework_test_list);
>   		fwts_log_section_end(fw->results);
>   	}
>
> -	if (fw->flags & FWTS_FLAG_LP_TAGS)
> -		fwts_tag_report(fw, LOG_TAG | LOG_NO_FIELDS, &fw->total_taglist);
> -
>   tidy:
>   	fwts_list_free_items(&tests_to_skip, NULL);
>   	fwts_list_free_items(&tests_to_run, NULL);
> @@ -1410,7 +1382,6 @@ tidy_close:
>
>   	fwts_list_free_items(&fw->errors_filter_discard, NULL);
>   	fwts_list_free_items(&fw->errors_filter_keep, NULL);
> -	fwts_list_free_items(&fw->total_taglist, free);
>   	fwts_list_free_items(&fwts_framework_test_list, free);
>
>   	/* Failed tests flagged an error */
> diff --git a/src/lib/src/fwts_klog.c b/src/lib/src/fwts_klog.c
> index 8d3d874..9ae93d6 100644
> --- a/src/lib/src/fwts_klog.c
> +++ b/src/lib/src/fwts_klog.c
> @@ -252,7 +252,6 @@ void fwts_klog_scan_patterns(fwts_framework *fw,
>   			if (pattern->level == LOG_LEVEL_INFO)
>   				fwts_log_info(fw, "Kernel message: %s", line);
>   			else {
> -				fwts_tag_failed(fw, pattern->tag);
>   				fwts_failed(fw, pattern->level, pattern->label,
>   					"%s Kernel message: %s", fwts_log_level_to_str(pattern->level), line);
>   				fwts_error_inc(fw, pattern->label, errors);
> @@ -376,10 +375,6 @@ static int fwts_klog_check(fwts_framework *fw,
>   			goto fail;
>   		patterns[i].level   = fwts_log_str_to_level(str);
>
> -		if ((str = fwts_json_str(fw, table, i, obj, "tag", true)) == NULL)
> -			goto fail;
> -		patterns[i].tag     = fwts_tag_id_str_to_tag(str);
> -
>   		if ((patterns[i].pattern = fwts_json_str(fw, table, i, obj, "pattern", true)) == NULL)
>   			goto fail;
>
> diff --git a/src/lib/src/fwts_log.c b/src/lib/src/fwts_log.c
> index 693b943..54e8215 100644
> --- a/src/lib/src/fwts_log.c
> +++ b/src/lib/src/fwts_log.c
> @@ -75,8 +75,6 @@ char *fwts_log_field_to_str(const fwts_log_field field)
>   		return "ADV";
>   	case LOG_HEADING:
>   		return "HED";
> -	case LOG_TAG:
> -		return "TAG";
>   	case LOG_PASSED:
>   		return "PAS";
>   	case LOG_FAILED:
> @@ -119,8 +117,6 @@ char *fwts_log_field_to_str_full(const fwts_log_field field)
>   		return "Advice";
>   	case LOG_HEADING:
>   		return "Heading";
> -	case LOG_TAG:
> -		return "Tag";
>   	case LOG_PASSED:
>   		return "Passed";
>   	case LOG_FAILED:
> @@ -239,7 +235,6 @@ fwts_log_field fwts_log_str_to_field(const char *text)
>   		{ "SEP", LOG_SEPARATOR },
>   		{ "ADV", LOG_ADVICE },
>   		{ "HED", LOG_HEADING },
> -		{ "TAG", LOG_TAG },
>   		{ "ALL", ~0 },
>   		{ NULL, 0 }
>   	};
> diff --git a/src/lib/src/fwts_tag.c b/src/lib/src/fwts_tag.c
> deleted file mode 100644
> index 958a3c2..0000000
> --- a/src/lib/src/fwts_tag.c
> +++ /dev/null
> @@ -1,202 +0,0 @@
> -/*
> - * Copyright (C) 2010-2013 Canonical
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * as published by the Free Software Foundation; either version 2
> - * of the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> - *
> - */
> -
> -#include <stdlib.h>
> -#include <string.h>
> -
> -#include "fwts.h"
> -
> -typedef struct {
> -	const fwts_tag	tag;
> -	const char	*tag_id;
> -	const char 	*tag_str;
> -} fwts_tag_info;
> -
> -#define FWTS_TAG(tag, str)	\
> -	{ tag, #tag, str }
> -
> -static fwts_tag_info fwts_tags[] = {
> -	FWTS_TAG(FWTS_TAG_NONE,	 		""),
> -	FWTS_TAG(FWTS_TAG_ERROR_CRITICAL,	"error-critical"),
> -	FWTS_TAG(FWTS_TAG_ERROR_HIGH,		"error-high"),
> -	FWTS_TAG(FWTS_TAG_ERROR_MEDIUM,		"error-medium"),
> -	FWTS_TAG(FWTS_TAG_ERROR_LOW,		"error-low"),
> -	FWTS_TAG(FWTS_TAG_BIOS,			"bios"),
> -	FWTS_TAG(FWTS_TAG_BIOS_THERMAL,		"bios-thermal"),
> -	FWTS_TAG(FWTS_TAG_BIOS_IRQ,		"bios-irq"),
> -	FWTS_TAG(FWTS_TAG_BIOS_AMD_POWERNOW,	"bios-amd-powernow"),
> -	FWTS_TAG(FWTS_TAG_BIOS_MMCONFIG,	"bios-mmconfig"),
> -	FWTS_TAG(FWTS_TAG_BIOS_DMI,		"bios-dmi"),
> -	FWTS_TAG(FWTS_TAG_ACPI,			"acpi"),
> -	FWTS_TAG(FWTS_TAG_ACPI_IO_PORT,		"acpi-io-port"),
> -	FWTS_TAG(FWTS_TAG_ACPI_INVALID_TABLE,	"acpi-invalid-table"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BUFFER_OVERFLOW,	"acpi-buffer-overflow"),
> -	FWTS_TAG(FWTS_TAG_ACPI_AML_OPCODE,	"acpi-aml-opcode"),
> -	FWTS_TAG(FWTS_TAG_ACPI_NAMESPACE_LOOKUP,"acpi-namespace-lookup"),
> -	FWTS_TAG(FWTS_TAG_ACPI_PCI_EXPRESS,	"acpi-pci-express"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BAD_RESULT,	"acpi-bad-result"),
> -	FWTS_TAG(FWTS_TAG_ACPI_NO_HANDLER,	"acpi-no-handler"),
> -	FWTS_TAG(FWTS_TAG_ACPI_PACKAGE_LIST,	"acpi-package-list"),
> -	FWTS_TAG(FWTS_TAG_ACPI_PARSE_EXEC_FAIL,	"acpi-parse-exec-fail"),
> -	FWTS_TAG(FWTS_TAG_ACPI_EVAL,		"acpi-eval"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BAD_LENGTH,	"acpi-bad-length"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BAD_ADDRESS,	"acpi-bad-address"),
> -	FWTS_TAG(FWTS_TAG_ACPI_METHOD_RETURN,	"acpi-method-return"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BRIGHTNESS,	"acpi-brightness"),
> -	FWTS_TAG(FWTS_TAG_ACPI_BUTTON,		"acpi-button"),
> -	FWTS_TAG(FWTS_TAG_ACPI_EVENT,		"acpi-event"),
> -	FWTS_TAG(FWTS_TAG_ACPI_PARAMETER,	"acpi-parameter"),
> -	FWTS_TAG(FWTS_TAG_ACPI_THROTTLING,	"acpi-throttling"),
> -	FWTS_TAG(FWTS_TAG_ACPI_EXCEPTION,	"acpi-exception"),
> -	FWTS_TAG(FWTS_TAG_ACPI_PACKAGE,		"acpi-package"),
> -	FWTS_TAG(FWTS_TAG_ACPI_APIC,		"acpi-apic"),
> -	FWTS_TAG(FWTS_TAG_ACPI_DISPLAY,		"acpi-display"),
> -	FWTS_TAG(FWTS_TAG_ACPI_MULTIPLE_FACS,	"acpi-multiple-facs"),
> -	FWTS_TAG(FWTS_TAG_ACPI_POINTER_MISMATCH,"acpi-pointer-mismatch"),
> -	FWTS_TAG(FWTS_TAG_ACPI_TABLE_CHECKSUM,	"acpi-table-checksum"),
> -	FWTS_TAG(FWTS_TAG_ACPI_HOTPLUG,		"acpi-hotplug"),
> -	FWTS_TAG(FWTS_TAG_ACPI_RSDP,		"acpi-rsdp"),
> -	FWTS_TAG(FWTS_TAG_ACPI_MUTEX,		"acpi-mutex"),
> -	FWTS_TAG(FWTS_TAG_ACPI_THERMAL,		"acpi-thermal"),
> -	FWTS_TAG(FWTS_TAG_ACPI_LID,		"acpi-lid"),
> -	FWTS_TAG(FWTS_TAG_ACPI_METHOD,		"acpi-method"),
> -	FWTS_TAG(FWTS_TAG_EMBEDDED_CONTROLLER,	"embedded-controller"),
> -	FWTS_TAG(FWTS_TAG_POWER_MANAGEMENT,	"power-management"),
> -	FWTS_TAG(FWTS_TAG_WMI,			"wmi"),
> -	{ 0, NULL, NULL }
> -};
> -
> -/*
> - *  fwts_tag_id_str_to_tag()
> - *	given a tag string, return the tag
> - */
> -fwts_tag fwts_tag_id_str_to_tag(const char *tag)
> -{
> -	int i;
> -
> -	for (i=0; fwts_tags[i].tag_id != NULL; i++)
> -		if (strcmp(tag, fwts_tags[i].tag_id) == 0)
> -			return fwts_tags[i].tag;
> -	return FWTS_TAG_NONE;
> -}
> -
> -/*
> - *  fwts_tag_to_str()
> - *	given a tag, return the human readable tag name
> - */
> -const char *fwts_tag_to_str(const fwts_tag tag)
> -{
> -	int i;
> -	static const char *none = "";
> -
> -	for (i=0; fwts_tags[i].tag_id != NULL; i++)
> -		if (fwts_tags[i].tag == tag)
> -			return fwts_tags[i].tag_str;
> -	return none;
> -}
> -
> -/*
> - *  fwts_tag_compare()
> - *	callback to enable tag name sorting
> - */
> -static int fwts_tag_compare(void *data1, void *data2)
> -{
> -	return strcmp((char *)data1, (char*)data2);
> -}
> -
> -/*
> - *  fwts_tag_add()
> - *	add a tag name to a list of tag names, ordered alphabetically
> - * 	tag is added if it does already exist in the tag list
> - */
> -void fwts_tag_add(fwts_list *taglist, const char *tag)
> -{
> -	fwts_list_link	*item;
> -	char *str;
> -
> -	/* Exists already? then don't bother */
> -	fwts_list_foreach(item, taglist)
> -		if (strcmp(fwts_list_data(char *,item), tag) == 0)
> -			return;
> -
> -	str = strdup(tag);
> -	if (str)
> -		fwts_list_add_ordered(taglist, str, fwts_tag_compare);
> -}
> -
> -/*
> - *  fwts_tag_list_to_str()
> - *	given a list of tag names return a space delimited string
> - *	containing the the tag names
> - */
> -char *fwts_tag_list_to_str(fwts_list *taglist)
> -{
> -	fwts_list_link	*item;
> -	char *str = NULL;
> -	size_t len = 0;
> -
> -	fwts_list_foreach(item, taglist) {
> -		char *tag = fwts_list_data(char *, item);
> -		size_t taglen = strlen(tag);
> -		len += taglen + 1;
> -
> -		if (str) {
> -			if ((str = realloc(str, len)) == NULL)
> -				return NULL;
> -			strcat(str, " ");
> -			strcat(str, tag);
> -		} else {
> -			if ((str = malloc(len)) == NULL)
> -				return NULL;
> -			strcpy(str, tag);
> -		}
> -	}
> -	return str;
> -}
> -
> -/*
> - *  fwts_tag_report()
> - *	report to the log the tags found in the taglist
> - */
> -void fwts_tag_report(fwts_framework *fw, const fwts_log_field field, fwts_list *taglist)
> -{
> -	if ((taglist != NULL) && (fwts_list_len(taglist) > 0)) {
> -		char *tags = fwts_tag_list_to_str(taglist);
> -		if (tags) {
> -			fwts_log_printf(fw->results, field | LOG_VERBATUM, LOG_LEVEL_NONE, "", "", "", "Tags: %s", tags);
> -			free(tags);
> -		}
> -	}
> -}
> -
> -/*
> - *  fwts_tag_failed()
> - *	add to the tag lists the tag:
> - *	per test (this is emptied at end of each test)
> - * 	all tests (this is total for all tests run)
> - */
> -void fwts_tag_failed(fwts_framework *fw, const fwts_tag tag)
> -{
> -	const char *text = fwts_tag_to_str(tag);
> -
> -	if (*text) {
> -		fwts_tag_add(&fw->test_taglist, text);
> -		fwts_tag_add(&fw->total_taglist, text);
> -	}
> -}
> diff --git a/src/pci/crs/crs.c b/src/pci/crs/crs.c
> index 9b48ed4..b7f6165 100644
> --- a/src/pci/crs/crs.c
> +++ b/src/pci/crs/crs.c
> @@ -72,15 +72,12 @@ static int crs_test1(fwts_framework *fw)
>   					"The kernel could not determine the BIOS age "
>   					"and has assumed that your BIOS is too old to correctly "
>   					"specify the host bridge MMIO aperture using _CRS.");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   				fwts_log_advice(fw, "You can override this by booting with \"pci=use_crs\".");
> -
>   			} else if (year < 2008) {
>   				fwts_passed(fw,
>   					"The kernel has detected an old BIOS (%d/%d/%d) "
>   					"and has assumed that your BIOS is too old to correctly "
>   					"specify the host bridge MMIO aperture using _CRS.", mon, day, year);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   				fwts_log_advice(fw, "You can override this by booting with \"pci=use_crs\".");
>   			} else {
>   				fwts_failed(fw, LOG_LEVEL_MEDIUM,
> @@ -88,7 +85,6 @@ static int crs_test1(fwts_framework *fw)
>   					"The kernel is ignoring host bridge windows from ACPI for some unknown reason. "
>   					"pci=nocrs has not been used as a boot parameter and the BIOS may be recent enough "
>   					"to support this (%d/%d/%d)", mon, day, year);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			}
>   		}
>   	} else if (fwts_klog_regex_find(fw, klog, "PCI: Using host bridge windows from ACPI;") > 0) {
> @@ -97,12 +93,10 @@ static int crs_test1(fwts_framework *fw)
>   				fwts_failed(fw, LOG_LEVEL_MEDIUM,
>   					"BIOSNoReleaseDate",
>   					"The BIOS does not seem to have release date, hence pci=use_crs was required.");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			} else if (year < 2008) {
>   				fwts_passed(fw,
>   					"The BIOS is relatively old (%d/%d/%d) and hence pci=use_crs was required to "
>   					"enable host bridge windows _CRS settings from ACPI.", mon, day, year);
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			} else {
>   				fwts_failed(fw, LOG_LEVEL_LOW,
>   					"BIOSSupportBridgeWindows",
> @@ -110,7 +104,6 @@ static int crs_test1(fwts_framework *fw)
>   					"the BIOS is new enough to support automatic bridge windows configuring using _CRS from ACPI. "
>   					"However, the workaround may be necessary because _CRS is incorrect or not implemented in the "
>   					"DSDT.");
> -				fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   			}
>   		}
>   		else {
> diff --git a/src/pci/maxreadreq/maxreadreq.c b/src/pci/maxreadreq/maxreadreq.c
> index 7a06cec..2713224 100644
> --- a/src/pci/maxreadreq/maxreadreq.c
> +++ b/src/pci/maxreadreq/maxreadreq.c
> @@ -129,7 +129,6 @@ static int maxreadreq_test1(fwts_framework *fw)
>   			"allow one to override the firmware settings. Where possible, this BIOS "
>   			"configuration setting is worth increasing it a little more for better "
>   			"performance at a small reduction of bus sharing.");
> -		fwts_tag_failed(fw, FWTS_TAG_BIOS);
>   	} else
>   		fwts_passed(fw, "All devices have MaxReadReq set > 128.");
>
>

Acked-by: Alex Hung <alex.hung@canonical.com>

Patch

diff --git a/src/acpi/apicinstance/apicinstance.c b/src/acpi/apicinstance/apicinstance.c
index 1c262b4..5949879 100644
--- a/src/acpi/apicinstance/apicinstance.c
+++ b/src/acpi/apicinstance/apicinstance.c
@@ -61,7 +61,6 @@  static int apicinstance_test1(fwts_framework *fw)
 		fwts_failed(fw, LOG_LEVEL_HIGH, "MultipleAPICMADT",
 			"Found %d APIC/MADT tables, the kernel expects just one.",
 			count);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
 		snprintf(buffer, sizeof(buffer), " (or up to %d)", count);
 		fwts_log_advice(fw,
 			"If you find any APIC issues, perhaps try using "
diff --git a/src/acpi/checksum/checksum.c b/src/acpi/checksum/checksum.c
index 3eb3f74..0138430 100644
--- a/src/acpi/checksum/checksum.c
+++ b/src/acpi/checksum/checksum.c
@@ -133,8 +133,6 @@  static int checksum_scan_tables(fwts_framework *fw)
 				"error and still load it. This is not a "
 				"critical issue, but should be fixed if "
 				"possible to avoid the warning messages.");
-
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_TABLE_CHECKSUM);
 		}
 	}
 	return FWTS_OK;
diff --git a/src/acpi/dmar/dmar.c b/src/acpi/dmar/dmar.c
index 880ba88..d6a6d28 100644
--- a/src/acpi/dmar/dmar.c
+++ b/src/acpi/dmar/dmar.c
@@ -264,7 +264,6 @@  static int dmar_acpi_table_check(fwts_framework *fw)
 	if (table->length <= DMAR_HEADER_SIZE) {
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "InvalidDMAR",
 			"Invalid DMAR ACPI table.");
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
 		return FWTS_ERROR;
 	}
 
diff --git a/src/acpi/fadt/fadt.c b/src/acpi/fadt/fadt.c
index 9807d56..70ec5e9 100644
--- a/src/acpi/fadt/fadt.c
+++ b/src/acpi/fadt/fadt.c
@@ -75,20 +75,16 @@  static int fadt_test1(fwts_framework *fw)
 	if ((fadt->header.revision > 1) || (fadt->header.length >= 244)) {
 		/*  Sanity check sizes with extended address variants */
 		fwts_log_info(fw, "FADT is greater than ACPI version 1.0");
-		if ((uint64_t)port != fadt->x_pm1a_cnt_blk.address) {
+		if ((uint64_t)port != fadt->x_pm1a_cnt_blk.address)
 			fwts_failed(fw, LOG_LEVEL_MEDIUM,
 				"FADTPM1CNTAddrMismatch",
 				"32 and 64 bit versions of FADT pm1_cnt address do not match (0x%8.8x vs 0x%16.16" PRIx64 ").",
 				port, fadt->x_pm1a_cnt_blk.address);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_BAD_ADDRESS);
-		}
-		if (width != fadt->x_pm1a_cnt_blk.register_bit_width) {
+		if (width != fadt->x_pm1a_cnt_blk.register_bit_width)
 			fwts_failed(fw, LOG_LEVEL_MEDIUM,
 				"FADTPM1CNTSizeMismatch",
 				"32 and 64 bit versions of FADT pm1_cnt size do not match (0x%x vs 0x%x).",
 				width, fadt->x_pm1a_cnt_blk.register_bit_width);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_BAD_ADDRESS);
-		}
 
 		port = fadt->x_pm1a_cnt_blk.address;
 		width = fadt->x_pm1a_cnt_blk.register_bit_width;
@@ -129,7 +125,6 @@  static int fadt_test1(fwts_framework *fw)
 		fwts_failed(fw, LOG_LEVEL_HIGH, "FADTPM1AInvalidWidth",
 			"FADT pm1a register has invalid bit width of %d.",
 			width);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_BAD_LENGTH);
 		return FWTS_OK;
 	}
 
@@ -140,11 +135,9 @@  static int fadt_test1(fwts_framework *fw)
 
 	if (val32 & 0x01)
 		fwts_passed(fw, "SCI_EN bit in PM1a Control Register Block is enabled.");
-	else {
+	else
 		fwts_failed(fw, LOG_LEVEL_HIGH, "SCI_ENNotEnabled",
 			"SCI_EN bit in PM1a Control Register Block is not enabled.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
-	}
 
 	return FWTS_OK;
 }
diff --git a/src/acpi/lid/lid.c b/src/acpi/lid/lid.c
index 65fdc8a..6948f41 100644
--- a/src/acpi/lid/lid.c
+++ b/src/acpi/lid/lid.c
@@ -70,11 +70,10 @@  static int lid_test1(fwts_framework *fw)
 
 	lid_check_field_poll(fw, FWTS_BUTTON_LID_OPENED, &matching, &not_matching);
 
-	if ((matching == 0) || (not_matching > 0)) {
+	if ((matching == 0) || (not_matching > 0))
 		fwts_failed(fw, LOG_LEVEL_HIGH, "LidNotOpen",
 			"Detected a closed LID state.");
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_LID);
-	} else
+	else
 		fwts_passed(fw, "Detected open LID state.");
 
 	return FWTS_OK;
@@ -141,18 +140,15 @@  static int lid_test_state(fwts_framework *fw, int button)
 	fwts_gpe_free(gpes_start, gpe_count);
 	fwts_gpe_free(gpes_end, gpe_count);
 
-	if (events == 0) {
+	if (events == 0)
 		fwts_failed(fw, LOG_LEVEL_HIGH, "NoLidEvents",
 			"Did not detect any ACPI LID events while waiting for to LID %s.", state);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_LID);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_EVENT);
-	} else {
+	else {
 		fwts_passed(fw, "Detected ACPI LID events while waiting for LID to %s.", state);
-		if ((matching == 0) || (not_matching > 0)) {
+		if ((matching == 0) || (not_matching > 0))
 			fwts_failed(fw, LOG_LEVEL_HIGH, "NoLidState",
 				"Could not detect lid %s state.", state);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_LID);
-		} else
+		else
 			fwts_passed(fw, "Detected lid %s state.", state);
 	}
 
diff --git a/src/acpi/mcfg/mcfg.c b/src/acpi/mcfg/mcfg.c
index a4d22a6..85d0bb8 100644
--- a/src/acpi/mcfg/mcfg.c
+++ b/src/acpi/mcfg/mcfg.c
@@ -151,7 +151,6 @@  static int mcfg_test1(fwts_framework *fw)
 		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidSize",
 			"Invalid MCFG ACPI table size: got %zd bytes expecting more",
 			mcfg_size + sizeof(fwts_acpi_table_mcfg));
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
 		fwts_advice(fw,
 			"MCFG table must be least %zd bytes (header size) with "
 			"multiples of %zd bytes for each MCFG entry.",
@@ -170,7 +169,6 @@  static int mcfg_test1(fwts_framework *fw)
 	if (mcfg_size != (ssize_t)(nr * sizeof(fwts_acpi_mcfg_configuration))) {
 		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidSize2",
 			"MCFG table is not a multiple of record size");
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
 		return FWTS_ERROR;
 	}
 
@@ -181,7 +179,6 @@  static int mcfg_test1(fwts_framework *fw)
 	if (mcfg == NULL) {
 		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidTable",
 			"Invalid MCFG ACPI table");
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
 		return FWTS_ERROR;
 	}
 
@@ -204,8 +201,6 @@  static int mcfg_test1(fwts_framework *fw)
 				"MCFG MMIO config space at 0x%" PRIx64
 				" is not reserved in the memory map table",
 				config->base_address);
-			fwts_tag_failed(fw, FWTS_TAG_BIOS);
-
 			fwts_advice(fw,
 				"The PCI Express specification states that the "
 				"PCI Express configuration space should "
@@ -238,7 +233,6 @@  static int mcfg_test2(fwts_framework *fw)
 	if (mcfg == NULL) {
 		fwts_failed(fw, LOG_LEVEL_HIGH, "MCFGInvalidTable",
 			"Invalid MCFG ACPI table");
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_INVALID_TABLE);
 		return FWTS_ERROR;
 	}
 
diff --git a/src/acpi/method/method.c b/src/acpi/method/method.c
index e6d925d..a7e81ef 100644
--- a/src/acpi/method/method.c
+++ b/src/acpi/method/method.c
@@ -333,7 +333,6 @@  static int method_package_count_min(
 			" element%s, got %" PRIu32 " element%s instead.",
 			name, min, min == 1 ? "" : "s",
 			obj->Package.Count, obj->Package.Count == 1 ? "" : "s");
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		return FWTS_ERROR;
 	}
 	return FWTS_OK;
@@ -359,7 +358,6 @@  static int method_package_count_equal(
 			" element%s, got %" PRIu32 " element%s instead.",
 			name, count, count == 1 ? "" : "s",
 			obj->Package.Count, obj->Package.Count == 1 ? "" : "s");
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		return FWTS_ERROR;
 	}
 	return FWTS_OK;
@@ -448,7 +446,6 @@  static void method_evaluate_found_method(
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "AMLLocksAcquired",
 			"%s left %d locks in an acquired state.",
 			name, sem_acquired - sem_released);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_MUTEX);
 		fwts_advice(fw,
 			"Locks left in an acquired state generally indicates "
 			"that the AML code is not releasing a lock. This can "
@@ -559,7 +556,6 @@  static int method_name_check(fwts_framework *fw)
 						"be corrected.",
 						fwts_list_data(char *, item),
 						*ptr);
-					fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD);
 					failed = true;
 					break;
 				}
@@ -685,7 +681,6 @@  static void method_test_NULL_return(
 
 	if (buf && buf->Length && buf->Pointer) {
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "MethodShouldReturnNothing", "%s returned values, but was expected to return nothing.", name);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		fwts_log_info(fw, "Object returned:");
 		fwts_acpi_object_dump(fw, obj);
 		fwts_advice(fw,
@@ -718,7 +713,6 @@  static void method_test_passed_failed_return(
 				"MethodReturnZeroOrOne",
 				"%s returned 0x%8.8" PRIx32 ", should return 1 "
 				"(success) or 0 (failed).", method, val);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			fwts_advice(fw,
 				"Method %s should be returning the correct "
 				"1/0 success/failed return values. "
@@ -754,7 +748,6 @@  static void method_test_polling_return(
 				"%s returned a value %f seconds > (1 hour) "
 				"which is probably incorrect.",
 				method, (float)obj->Integer.Value / 10.0);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			fwts_advice(fw,
 				"The method is returning a polling interval "
 				"which is very long and hence most probably "
@@ -817,7 +810,6 @@  static int method_package_elements_all_type(
 				name, i,
 				method_type_name(type),
 				method_type_name(obj->Package.Elements[i].Type));
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 		}
 	}
@@ -859,7 +851,6 @@  static int method_package_elements_type(
 				name, i, info[i].name,
 				method_type_name(info[i].type),
 				method_type_name(obj->Package.Elements[i].Type));
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 		}
 	}
@@ -991,7 +982,6 @@  static void method_test_HID_return(
 			fwts_failed(fw, LOG_LEVEL_MEDIUM,
 				"Method_HIDNullString",
 				"%s returned a NULL string.", name);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		}
 		break;
 	case ACPI_TYPE_INTEGER:
@@ -1011,7 +1001,6 @@  static void method_test_HID_return(
 	default:
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_HIDBadReturnType",
 			"%s did not return a string or an integer.", name);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		break;
 	}
 }
@@ -1098,12 +1087,10 @@  static void method_test_SUB_return(
 			fwts_failed(fw, LOG_LEVEL_MEDIUM,
 				"Method_SUBNullString",
 				"%s returned a NULL string.", name);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		}
 	else {
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UIDBadReturnType",
 			"Method _SUB did not return a string or an integer.");
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 	}
 }
 
@@ -1141,12 +1128,10 @@  static void method_test_UID_return(
 			fwts_passed(fw,
 				"%s returned a string '%s' as expected.",
 				name, obj->String.Pointer);
-		else {
+		else
 			fwts_failed(fw, LOG_LEVEL_MEDIUM,
 				"Method_UIDNullString",
 				"%s returned a NULL string.", name);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
-		}
 		break;
 	case ACPI_TYPE_INTEGER:
 		method_passed_sane_uint64(fw, name, obj->Integer.Value);
@@ -1154,7 +1139,6 @@  static void method_test_UID_return(
 	default:
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_UIDBadReturnType",
 			"Method %s did not return a string or an integer.", name);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		break;
 	}
 }
@@ -1841,8 +1825,6 @@  static void method_test_CRS_return(
 
 	if (passed)
 		fwts_passed(fw, "%s (%s) looks sane.", name, tag);
-	else
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 }
 
 static int method_test_CRS(fwts_framework *fw)
@@ -2122,7 +2104,6 @@  static void method_test_SEG_return(
 			"upper 16 reserved bits are set when they "
 			"should in fact be zero.",
 			name, obj->Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 	} else
 		method_passed_sane_uint64(fw, name, obj->Integer.Value);
 }
@@ -2308,7 +2289,6 @@  static void method_test_Sx__return(
 			"integers, and %s only returned %" PRIu32
 			" elements in the package.",
 			name, obj->Package.Count);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		return;
 	}
 
@@ -2328,7 +2308,6 @@  static void method_test_Sx__return(
 			"expect. So, while this is conforming to the ACPI "
 			"specification it will in fact not work in the "
 			"Linux kernel.", name);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		return;
 	}
 
@@ -2339,7 +2318,6 @@  static void method_test_Sx__return(
 			"Method_SxElementType",
 			"%s returned a package that did not contain "
 			"an integer.", name);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		return;
 	}
 
@@ -2348,7 +2326,6 @@  static void method_test_Sx__return(
 			"Method_SxElementValue",
 			"%s package element 0 had upper 24 bits "
 			"of bits that were non-zero.", name);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 
@@ -2357,7 +2334,6 @@  static void method_test_Sx__return(
 			"Method_SxElementValue",
 			"%s package element 1 had upper 24 bits "
 			"of bits that were non-zero.", name);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 
@@ -2483,7 +2459,6 @@  static void method_test_CSD_return(
 				"%s sub-package %" PRIu32 " was expected to "
 				"have 5 elements, got %" PRIu32 " elements instead.",
 				name, i, pkg->Package.Count);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 			continue;
 		}
@@ -2496,7 +2471,6 @@  static void method_test_CSD_return(
 					" element %" PRIu32 " is not "
 					"an integer.",
 					name, i, j);
-				fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 				elements_ok = false;
 			}
 		}
@@ -2514,7 +2488,6 @@  static void method_test_CSD_return(
 				"was expected to have value 0x%" PRIx64 ".",
 				name, i,
 				pkg->Package.Elements[0].Integer.Value);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 		}
 		/* Element 1 should contain zero */
@@ -2526,7 +2499,6 @@  static void method_test_CSD_return(
 				"was 0x%" PRIx64 ".",
 				name, i,
 				pkg->Package.Elements[1].Integer.Value);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 		}
 		/* Element 3 should contain 0xfc..0xfe */
@@ -2541,7 +2513,6 @@  static void method_test_CSD_return(
 				"was 0x%" PRIx64 ".",
 				name, i,
 				pkg->Package.Elements[3].Integer.Value);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 		}
 		/* Element 4 number of processors, skip check */
@@ -2599,7 +2570,6 @@  static void method_test_CST_return(
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_CSTElement0NotInteger",
 			"%s should return package with element zero being an integer "
 			"count of the number of C state sub-packages.", name);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		return;
 	}
 
@@ -2611,7 +2581,6 @@  static void method_test_CST_return(
 			"reports it has %" PRIu64 " C states.",
 			name, obj->Package.Count - 1,
 			obj->Package.Elements[0].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		return;
 	}
 
@@ -2631,7 +2600,6 @@  static void method_test_CST_return(
 				"Method_CSTElementType",
 				"%s package element %" PRIu32 " was not a package.",
 				name, i);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			cst_elements_ok[i] = false;
 			failed = true;
 			continue;	/* Skip processing sub-package */
@@ -2795,7 +2763,6 @@  static void method_test_PSS_return(
 				"Method_PSSElementType",
 				"%s package element %" PRIu32
 				" was not a package.", name, i);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 			continue;	/* Skip processing sub-package */
 		}
@@ -2808,7 +2775,6 @@  static void method_test_PSS_return(
 				" was expected to "
 				"have 6 elements, got %" PRIu32 " elements instead.",
 				name, i, obj->Package.Count);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 			continue;	/* Skip processing sub-package */
 		}
@@ -2988,7 +2954,6 @@  static void method_test_TSD_return(
 				"Method_TSDElementType",
 				"%s package element %" PRIu32
 				" was not a package.", name, i);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 			continue;	/* Skip processing sub-package */
 		}
@@ -3003,7 +2968,6 @@  static void method_test_TSD_return(
 				"%s sub-package %" PRIu32 " was expected to "
 				"have 5 elements, got %" PRIu32 " elements instead.",
 				name, i, pkg->Package.Count);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 			continue;
 		}
@@ -3015,7 +2979,6 @@  static void method_test_TSD_return(
 					"%s sub-package %" PRIu32
 					" element %" PRIu32 " is not "
 					"an integer.", name, i, j);
-				fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 				elements_ok = false;
 			}
 		}
@@ -3034,7 +2997,6 @@  static void method_test_TSD_return(
 				"was expected to have value 0x%" PRIx64 ".",
 				name, i,
 				pkg->Package.Elements[0].Integer.Value);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 		}
 		/* Element 1 should contain zero */
@@ -3047,7 +3009,6 @@  static void method_test_TSD_return(
 				"was 0x%" PRIx64 ".",
 				name, i,
 				pkg->Package.Elements[1].Integer.Value);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 		}
 		/* Element 3 should contain 0xfc..0xfe */
@@ -3063,7 +3024,6 @@  static void method_test_TSD_return(
 				"was 0x%" PRIx64 ".",
 				name, i,
 				pkg->Package.Elements[3].Integer.Value);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 		}
 		/* Element 4 number of processors, skip check */
@@ -3118,7 +3078,6 @@  static void method_test_TSS_return(
 				"Method_TSSElementType",
 				"%s package element %" PRIu32
 				" was not a package.", name, i);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			tss_elements_ok[i] = false;
 			failed = true;
 			continue;	/* Skip processing sub-package */
@@ -3135,7 +3094,6 @@  static void method_test_TSS_return(
 				" was expected to have 5 elements, "
 				"got %" PRIu32" elements instead.",
 				name, i, pkg->Package.Count);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			tss_elements_ok[i] = false;
 			failed = true;
 			continue;	/* Skip processing sub-package */
@@ -3148,7 +3106,6 @@  static void method_test_TSS_return(
 					"%s sub-package %" PRIu32
 					" element %" PRIu32 " is not "
 					"an integer.", name, i, j);
-				fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 				tss_elements_ok[i] = false;
 			}
 		}
@@ -3170,7 +3127,6 @@  static void method_test_TSS_return(
 				"was %" PRIu64 ".",
 				name, i,
 				pkg->Package.Elements[0].Integer.Value);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			failed = true;
 		}
 		/* Skip checking elements 1..4 */
@@ -3296,15 +3252,14 @@  static void method_test_GCP_return(
 	if (method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK)
 		return;
 
-	if (obj->Integer.Value & ~0xf) {
+	if (obj->Integer.Value & ~0xf)
 		fwts_failed(fw, LOG_LEVEL_MEDIUM,
 			"Method_GCPReturn",
 			"%s returned %" PRId64 ", should be between 0 and 15, "
 			"one or more of the reserved bits 4..31 seem "
 			"to be set.",
 			name, obj->Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
-	} else
+	else
 		method_passed_sane_uint64(fw, name, obj->Integer.Value);
 }
 
@@ -3332,7 +3287,6 @@  static void method_test_GRT_return(
 			"%s should return a buffer of 16 bytes, but "
 			"instead just returned %" PRIu32,
 			name, obj->Buffer.Length);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		return;
 	}
 
@@ -3361,15 +3315,14 @@  static void method_test_GWS_return(
 	if (method_check_type(fw, name, buf, ACPI_TYPE_INTEGER) != FWTS_OK)
 		return;
 
-	if (obj->Integer.Value & ~0x3) {
+	if (obj->Integer.Value & ~0x3)
 		fwts_failed(fw, LOG_LEVEL_MEDIUM,
 			"Method_GWSReturn",
 			"%s returned %" PRIu64 ", should be between 0 and 3, "
 			"one or more of the reserved bits 2..31 seem "
 			"to be set.",
 			name, obj->Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
-	} else
+	else
 		method_passed_sane_uint64(fw, name, obj->Integer.Value);
 }
 
@@ -3466,7 +3419,6 @@  static void method_test_SBS_return(
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_SBSReturn",
 			"%s returned %" PRIu64 ", should be between 0 and 4.",
 			name, obj->Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		fwts_advice(fw,
 			"Smart Battery %s is incorrectly informing "
 			"the OS about the smart battery "
@@ -3545,7 +3497,6 @@  static void method_test_BIF_return(
 			"%s: Expected Power Unit (Element 0) to be "
 			"0 (mWh) or 1 (mAh), got 0x%8.8" PRIx64 ".",
 			name, obj->Package.Elements[0].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 #ifdef FWTS_METHOD_PEDANDTIC
@@ -3560,7 +3511,6 @@  static void method_test_BIF_return(
 			"%s: Design Capacity (Element 1) is "
 			"unknown: 0x%8.8" PRIx64 ".",
 			name, obj->Package.Elements[1].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 	/* Last Full Charge Capacity */
@@ -3570,7 +3520,6 @@  static void method_test_BIF_return(
 			"%s: Last Full Charge Capacity (Element 2) "
 			"is unknown: 0x%8.8" PRIx64 ".",
 			name, obj->Package.Elements[2].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 #endif
@@ -3582,7 +3531,6 @@  static void method_test_BIF_return(
 			"(Element 3) to be 0 (Primary) or 1 "
 			"(Secondary), got 0x%8.8" PRIx64 ".",
 			name, obj->Package.Elements[3].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 #ifdef FWTS_METHOD_PEDANDTIC
@@ -3597,7 +3545,6 @@  static void method_test_BIF_return(
 			"%s: Design Voltage (Element 4) is "
 			"unknown: 0x%8.8" PRIx64 ".",
 			name, obj->Package.Elements[4].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 	/* Design capacity warning */
@@ -3607,7 +3554,6 @@  static void method_test_BIF_return(
 			"%s: Design Capacity Warning (Element 5) "
 			"is unknown: 0x%8.8" PRIx64 ".",
 			name, obj->Package.Elements[5].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 	/* Design capacity low */
@@ -3617,7 +3563,6 @@  static void method_test_BIF_return(
 			"%s: Design Capacity Warning (Element 6) "
 			"is unknown: 0x%8.8" PRIx64 ".",
 			name, obj->Package.Elements[6].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 #endif
@@ -3690,7 +3635,6 @@  static void method_test_BIX_return(
 			"0 (mWh) or 1 (mAh), got 0x%8.8" PRIx64 ".",
 			name, elements[1].name,
 			obj->Package.Elements[1].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 #ifdef FWTS_METHOD_PEDANDTIC
@@ -3706,7 +3650,6 @@  static void method_test_BIX_return(
 			"unknown: 0x%8.8" PRIx64 ".",
 			name, elements[2].name,
 			obj->Package.Elements[2].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 	/* Last Full Charge Capacity */
@@ -3717,7 +3660,6 @@  static void method_test_BIX_return(
 			"is unknown: 0x%8.8" PRIx64 ".",
 			name, elements[3].name,
 			obj->Package.Elements[3].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 #endif
@@ -3730,7 +3672,6 @@  static void method_test_BIX_return(
 			"(Secondary), got 0x%8.8" PRIx64 ".",
 			name, elements[4].name,
 			obj->Package.Elements[4].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 #ifdef FWTS_METHOD_PEDANDTIC
@@ -3746,7 +3687,6 @@  static void method_test_BIX_return(
 			"0x%8.8" PRIx64 ".",
 			name, elements[5].name,
 			obj->Package.Elements[5].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 	/* Design capacity warning */
@@ -3757,7 +3697,6 @@  static void method_test_BIX_return(
 			"is unknown: 0x%8.8" PRIx64 ".",
 			name, elements[6].name,
 			obj->Package.Elements[6].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 	/* Design capacity low */
@@ -3768,7 +3707,6 @@  static void method_test_BIX_return(
 			"is unknown: 0x%8.8" PRIx64 ".",
 			name, elements[7].name,
 			obj->Package.Elements[7].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 	/* Cycle Count */
@@ -3777,7 +3715,6 @@  static void method_test_BIX_return(
 			"%s: %s (Element 8) is unknown: "
 			"0x%8.8" PRIx64 ".", Elements[8].name,
 			name, obj->Package.Elements[8].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 #endif
@@ -3846,7 +3783,6 @@  static void method_test_BST_return(
 			"%s: Expected Battery State (Element 0) to "
 			"be 0..7, got 0x%8.8" PRIx64 ".",
 			name, obj->Package.Elements[0].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 	/* Ensure bits 0 (discharging) and 1 (charging) are not both set, see 10.2.2.6 */
@@ -3857,7 +3793,6 @@  static void method_test_BST_return(
 			"indicating both charging and discharginng "
 			"which is not allowed. Got value 0x%8.8" PRIx64 ".",
 			name, obj->Package.Elements[0].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 	/* Battery Present Rate - cannot check, pulled from EC */
@@ -4003,7 +3938,6 @@  static void method_test_PSR_return(
 			"%s returned 0x%8.8" PRIx64 ", expected 0 "
 			"(offline) or 1 (online)",
 			name, obj->Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 	} else
 		method_passed_sane_uint64(fw, name, obj->Integer.Value);
 }
@@ -4202,7 +4136,6 @@  static void method_test_THERM_return(
 				method,
 				obj->Integer.Value,
 				(float)((uint64_t)obj->Integer.Value) / 10.0);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 			fwts_advice(fw,
 				"The value returned was probably a "
 				"hard-coded thermal value which is "
@@ -4562,13 +4495,12 @@  static void method_test_DOD_return(
 		}
 	}
 
-	if (failed) {
+	if (failed)
 		fwts_failed(fw, LOG_LEVEL_MEDIUM,
 			"Method_DODNoPackage",
 			"Method _DOD did not return a package of "
 			"%" PRIu32 " integers.", obj->Package.Count);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
-	} else
+	else
 		method_passed_sane(fw, name, "package");
 }
 
@@ -4672,7 +4604,6 @@  static void method_test_BCL_return(
 			"battery power (%" PRIu64 ").",
 			obj->Package.Elements[0].Integer.Value,
 			obj->Package.Elements[1].Integer.Value);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 
@@ -4698,7 +4629,6 @@  static void method_test_BCL_return(
 			"level are not in ascending "
 			"order which should be fixed "
 			"in the firmware.");
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		failed = true;
 	}
 
@@ -4781,14 +4711,13 @@  static void method_test_DDC_return(
 
 	switch (obj->Type) {
 	case ACPI_TYPE_BUFFER:
-		if (requested != obj->Buffer.Length) {
+		if (requested != obj->Buffer.Length)
 			fwts_failed(fw, LOG_LEVEL_MEDIUM,
 				"Method_DDCElementCount",
 				"%s returned a buffer of %" PRIu32 " items, "
 				"expected %" PRIu32 ".",
 				name, obj->Buffer.Length, requested);
-			fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
-		} else
+		else
 			fwts_passed(fw,
 				"Method %s returned a buffer of %d items "
 				"as expected.",
@@ -4804,7 +4733,6 @@  static void method_test_DDC_return(
 	default:
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "Method_DDCBadReturnType",
 			"%s did not return a buffer or an integer.", name);
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_METHOD_RETURN);
 		break;
 	}
 }
diff --git a/src/acpi/powerbutton/powerbutton.c b/src/acpi/powerbutton/powerbutton.c
index 7820f65..5a12614 100644
--- a/src/acpi/powerbutton/powerbutton.c
+++ b/src/acpi/powerbutton/powerbutton.c
@@ -56,11 +56,10 @@  static int power_button_test1(fwts_framework *fw)
 		}
 		fwts_printf(fw, "Waiting %2.2d/20\r", 20-i);
 	}
-	if (matching == 0) {
+	if (matching == 0)
 		fwts_failed(fw, LOG_LEVEL_HIGH, "NoPowerButtonEvents",
 			"Did not detect any ACPI power buttons events while waiting for power button to be pressed.");
-		fwts_tag_failed(fw, FWTS_TAG_ACPI_EVENT);
-	} else  {
+	else  {
 		char button[4096];
 		memset(button, 0, sizeof(button));
 		sscanf(buffer, "%*s %s", button);
diff --git a/src/acpi/s3/s3.c b/src/acpi/s3/s3.c
index 45f62f7..27a5af0 100644
--- a/src/acpi/s3/s3.c
+++ b/src/acpi/s3/s3.c
@@ -147,7 +147,6 @@  static int s3_do_suspend_resume(fwts_framework *fw,
 		(*pm_errors)++;
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "ShortSuspend",
 			"Unexpected: S3 slept for %d seconds, less than the expected %d seconds.", duration, delay);
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 	}
 	fwts_progress_message(fw, percent, "(Checking for errors)");
 	if (duration > (delay*2)) {
@@ -174,19 +173,16 @@  static int s3_do_suspend_resume(fwts_framework *fw,
 		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedPreS3",
 			"pm-action failed before trying to put the system "
 			"in the requested power saving state.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 	} else if (status == 128) {
 		(*pm_errors)++;
 		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionPowerStateS3",
 			"pm-action tried to put the machine in the requested "
 			"power state but failed.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 	} else if (status > 128) {
 		(*pm_errors)++;
 		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedS3",
 			"pm-action encountered an error and also failed to "
 			"enter the requested power saving state.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 	}
 
 	return FWTS_OK;
diff --git a/src/acpi/s3power/s3power.c b/src/acpi/s3power/s3power.c
index 6c6213a..75d660d 100644
--- a/src/acpi/s3power/s3power.c
+++ b/src/acpi/s3power/s3power.c
@@ -203,12 +203,10 @@  static int s3power_test(fwts_framework *fw)
 	duration = (int)(t_end - t_start);
 	fwts_log_info(fw, "pm-suspend returned %d after %d seconds.", status, duration);
 
-	if (duration < s3power_sleep_delay) {
+	if (duration < s3power_sleep_delay)
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "ShortSuspend",
 			"Unexpected: S3 slept for %d seconds, less than the expected %d seconds.",
 			duration, s3power_sleep_delay);
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
-	}
 	if (duration > (s3power_sleep_delay*2))
 		fwts_failed(fw, LOG_LEVEL_HIGH, "LongSuspend",
 			"Unexpected: S3 much longer than expected (%d seconds).", duration);
@@ -218,17 +216,14 @@  static int s3power_test(fwts_framework *fw)
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionFailedPreS3",
 			"pm-action failed before trying to put the system "
 			"in the requested power saving state.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 	} else if (status == 128) {
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionPowerStateS3",
 			"pm-action tried to put the machine in the requested "
 			"power state but failed.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 	} else if (status > 128) {
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "PMActionFailedS3",
 			"pm-action encountered an error and also failed to "
 			"enter the requested power saving state.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 	}
 
 	return FWTS_OK;
diff --git a/src/acpi/s4/s4.c b/src/acpi/s4/s4.c
index 9f07bcf..d9ddd6b 100644
--- a/src/acpi/s4/s4.c
+++ b/src/acpi/s4/s4.c
@@ -180,33 +180,28 @@  static int s4_hibernate(fwts_framework *fw,
 		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedPreS4",
 			"pm-action failed before trying to put the system "
 			"in the requested power saving state.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 		(*pm_errors)++;
 	} else if (status == 128) {
 		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionPowerStateS4",
 			"pm-action tried to put the machine in the requested "
 			"power state but failed.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 		(*pm_errors)++;
 	} else if (status > 128) {
 		fwts_failed(fw, LOG_LEVEL_HIGH, "PMActionFailedS4",
 			"pm-action encountered an error and also failed to "
 			"enter the requested power saving state.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 		(*pm_errors)++;
 	}
 
 	if (fwts_klog_regex_find(fw, klog, "Freezing user space processes.*done") < 1) {
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UserSpaceTaskFreeze",
 			"Failed to freeze user space processes.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 		(*pm_errors)++;
 	}
 
 	if (fwts_klog_regex_find(fw, klog, "Freezing remaining freezable tasks.*done") < 1) {
 		fwts_failed(fw, LOG_LEVEL_HIGH, "KernelTaskFreeze",
 			"Failed to freeze remaining non-user space processes.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 		(*pm_errors)++;
 	}
 
@@ -214,14 +209,12 @@  static int s4_hibernate(fwts_framework *fw,
 	    (fwts_klog_regex_find(fw, klog, "PM: late freeze of devices complete") < 1)) {
 		fwts_failed(fw, LOG_LEVEL_HIGH, "DeviceFreeze",
 			"Failed to freeze devices.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 		(*pm_errors)++;
 	}
 
 	if (fwts_klog_regex_find(fw, klog, "PM: Allocated.*kbytes") < 1) {
 		fwts_failed(fw, LOG_LEVEL_HIGH, "HibernateImageAlloc",
 			"Failed to allocate memory for hibernate image.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 		*failed_alloc_image = 1;
 		(*pm_errors)++;
 	}
@@ -229,7 +222,6 @@  static int s4_hibernate(fwts_framework *fw,
 	if (fwts_klog_regex_find(fw, klog, "PM: Image restored successfully") < 1) {
 		fwts_failed(fw, LOG_LEVEL_HIGH, "HibernateImageRestore",
 			"Failed to restore hibernate image.");
-		fwts_tag_failed(fw, FWTS_TAG_POWER_MANAGEMENT);
 		(*pm_errors)++;
 	}
 
diff --git a/src/acpi/wakealarm/wakealarm.c b/src/acpi/wakealarm/wakealarm.c
index dd92861..0243a5e 100644
--- a/src/acpi/wakealarm/wakealarm.c
+++ b/src/acpi/wakealarm/wakealarm.c
@@ -56,7 +56,6 @@  static int wakealarm_test2(fwts_framework *fw)
 	if (fwts_wakealarm_trigger(fw, 1)) {
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotTriggeredTest2",
 			"RTC wakealarm did not trigger.");
-		fwts_tag_failed(fw, FWTS_TAG_BIOS);
 		return FWTS_OK;
 	}
 
@@ -75,7 +74,6 @@  static int wakealarm_test3(fwts_framework *fw)
 	if (ret < 0) {
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotTriggeredTest3",
 			"Failed to trigger and fire wakealarm.");
-		fwts_tag_failed(fw, FWTS_TAG_BIOS);
 		return FWTS_ERROR;	/* Really went wrong */
 	}
 	if (ret == 0)
@@ -83,7 +81,6 @@  static int wakealarm_test3(fwts_framework *fw)
 	else {
 		fwts_failed(fw, LOG_LEVEL_MEDIUM, "WakeAlarmNotFiredTest3",
 			"RTC wakealarm was triggered but did not fire.");
-		fwts_tag_failed(fw, FWTS_TAG_BIOS);
 	}
 
 	return FWTS_OK;
@@ -101,14 +98,12 @@  static int wakealarm_test4(fwts_framework *fw)
 			fwts_failed(fw, LOG_LEVEL_MEDIUM,
 				"WakeAlarmNotTriggeredTest4",
 				"Failed to trigger and fire wakealarm.");
-			fwts_tag_failed(fw, FWTS_TAG_BIOS);
 			return FWTS_ERROR;	/* Really went wrong */
 		}
 		if (ret != 0) {
 			fwts_failed(fw, LOG_LEVEL_MEDIUM,
 				"WakeAlarmNotFiredTest4",
 				"RTC wakealarm was triggered but did not fire.");
-			fwts_tag_failed(fw, FWTS_TAG_BIOS);
 			failed++;
 		}
 		fwts_progress(fw, 25 * i);
diff --git a/src/apic/apicedge/apicedge.c b/src/apic/apicedge/apicedge.c
index c679959..de2ca8b 100644
--- a/src/apic/apicedge/apicedge.c
+++ b/src/apic/apicedge/apicedge.c
@@ -76,26 +76,20 @@  static int apicedge_test1(fwts_framework *fw)
 			edge = 0;
 
 		if (strstr(line,"acpi")) {
-			if (edge == 1) {
+			if (edge == 1)
 				fwts_failed(fw, LOG_LEVEL_MEDIUM,
 					"ACPIIRQEdgeTrig",
 					"ACPI Interrupt is incorrectly edge triggered.");
-				fwts_tag_failed(fw, FWTS_TAG_BIOS_IRQ);
-			}
 			continue;
 		}
-		if ((irq < 15) && (edge == 0)) {
+		if ((irq < 15) && (edge == 0))
 			fwts_failed(fw, LOG_LEVEL_MEDIUM,
 				"LegacyIRQLevelTrig",
 				"Legacy interrupt %i is incorrectly level triggered.", irq);
-			fwts_tag_failed(fw, FWTS_TAG_BIOS_IRQ);
-		}
-		if ((irq < 15) && (edge == -1)) {
+		if ((irq < 15) && (edge == -1))
 			fwts_failed(fw, LOG_LEVEL_MEDIUM,
 				"NonLegacyIRQLevelTrig",
 				"Non-Legacy interrupt %i is incorrectly level triggered.", irq);
-			fwts_tag_failed(fw, FWTS_TAG_BIOS_IRQ);
-		}
 	}
 	fclose(file);
 
diff --git a/src/bios/bios32/bios32.c b/src/bios/bios32/bios32.c
index aedac87..57d219f 100644
--- a/src/bios/bios32/bios32.c
+++ b/src/bios/bios32/bios32.c
@@ -87,51 +87,47 @@  static int bios32_test1(fwts_framework *fw)
 				bios32->checksum);
 			fwts_log_nl(fw);
 
-			if (bios32->entry_point >= 0x100000) {
+			if (bios32->entry_point >= 0x100000)
 				fwts_failed(fw, LOG_LEVEL_HIGH,
 					"BIOS32SrvDirEntryPointHighMem",
 					"Service Directory Entry Point 0x%8.8" PRIx32
 					" is in high memory and cannot be used "
 					"by the kernel.",
 					bios32->entry_point);
-				fwts_tag_failed(fw, FWTS_TAG_BIOS);
-			} else
+			else
 				fwts_passed(fw, "Service Directory Entry Point "
 					"0x%8.8x is not in high memory.",
 					bios32->entry_point);
 
-			if (bios32->length != 1) {
+			if (bios32->length != 1)
 				fwts_failed(fw, LOG_LEVEL_HIGH,
 					"BIOS32SrvDirEntryLength",
 					"Service Directory Length is 0x%8.8" PRIx8
 					", expected 1 (1 x 16 bytes).",
 					bios32->length);
-				fwts_tag_failed(fw, FWTS_TAG_BIOS);
-			} else
+			else
 				fwts_passed(fw,
 					"Service Directory Length is 1 "
 					"(1 x 16 bytes) as expected.");
 
-			if (bios32->revision_level != 0) {
+			if (bios32->revision_level != 0)
 				fwts_failed(fw, LOG_LEVEL_HIGH,
 					"BIOS32SrvDirRevision",
 					"Service Directory Revision is 0x%2.2" PRIx8
 					", only version 0 is supported by the "
 					"kernel.",
 					bios32->revision_level);
-				fwts_tag_failed(fw, FWTS_TAG_BIOS);
-			} else
+			else
 				fwts_passed(fw,
 					"Service Directory Revision is 0x%2.2" PRIx8
 					" and is supported by the kernel.",
 					bios32->revision_level);
 
-			if (fwts_checksum(mem + i, 16) != 0) {
+			if (fwts_checksum(mem + i, 16) != 0)
 				fwts_failed(fw, LOG_LEVEL_HIGH,
 					"BIOS32SrvDirCheckSum",
 					"Service Directory checksum failed.");
-				fwts_tag_failed(fw, FWTS_TAG_BIOS);
-			} else
+			else
 				fwts_passed(fw,
 					"Service Directory checksum passed.");
 			found++;
@@ -140,13 +136,11 @@  static int bios32_test1(fwts_framework *fw)
 
 	if (found == 0)
 		fwts_log_info(fw, "Could not find BIOS32 Service Directory.");
-	else if (found > 1) {
+	else if (found > 1)
 		fwts_failed(fw, LOG_LEVEL_HIGH,
 			"BIOS32MultipleSrvDirInstances",
 			"Found %d instances of BIOS32 Service Directory, "
 			"there should only be 1.", found);
-		fwts_tag_failed(fw, FWTS_TAG_BIOS);
-	}
 
         (void)fwts_munmap(mem, BIOS32_SD_REGION_SIZE);
 
diff --git a/src/bios/ebda_region/ebda_region.c b/src/bios/ebda_region/ebda_region.c
index af8a0e6..f82333e 100644
--- a/src/bios/ebda_region/ebda_region.c
+++ b/src/bios/ebda_region/ebda_region.c
@@ -90,13 +90,11 @@  static int ebda_test1(fwts_framework *fw)
 			memory_map_name,
 			entry->start_address,
 			entry->end_address);
-	} else {
+	} else
 		fwts_failed(fw, LOG_LEVEL_MEDIUM,
 			"EBDAMappedNotReserved",
 			"EBDA region mapped at 0x%lx but not reserved in the %s table.",
 			ebda_addr, memory_map_name);
-		fwts_tag_failed(fw, FWTS_TAG_BIOS);
-	}
 		
 	return FWTS_OK;
 }
diff --git a/src/bios/mtrr/mtrr.c b/src/bios/mtrr/mtrr.c
index 4bcdf3a..b604950 100644
--- a/src/bios/mtrr/mtrr.c
+++ b/src/bios/mtrr/mtrr.c
@@ -384,7 +384,6 @@  static int validate_iomem(fwts_framework *fw)
 				"has incorrect attribute%s.",
 				start, end,
 				c2, cache_to_string(type & type_mustnot));
-			fwts_tag_failed(fw, FWTS_TAG_BIOS);
 			if (type_must == UNCACHED)
 				skiperror = true;
 		}
@@ -402,7 +401,6 @@  static int validate_iomem(fwts_framework *fw)
 				start, end,
 				c2,
 				cache_to_string( (type & type_must) ^ type_must));
-			fwts_tag_failed(fw, FWTS_TAG_BIOS);
 		}
 
 	}
@@ -487,17 +485,14 @@  static int mtrr_test2(fwts_framework *fw)
 
 		if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent fixed MTRR settings") > 0) {
 			fwts_log_info(fw, "Detected CPUs with inconsistent fixed MTRR settings which the kernel fixed.");
-			fwts_tag_failed(fw, FWTS_TAG_BIOS);
 			failed = true;
 		}
 		if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent variable MTRR settings") > 0) {
 			fwts_log_info(fw, "Detected CPUs with inconsistent variable MTRR settings which the kernel fixed.");
-			fwts_tag_failed(fw, FWTS_TAG_BIOS);
 			failed = true;
 		}
 		if (fwts_klog_regex_find(fw, klog, "mtrr: your CPUs had inconsistent MTRRdefType") > 0) {
 			fwts_log_info(fw, "Detected CPUs with inconsistent variable MTRR settings which the kernel fixed.");
-			fwts_tag_failed(fw, FWTS_TAG_BIOS);
 			failed = true;
 		}
 
@@ -519,7 +514,7 @@  static int mtrr_test3(fwts_framework *fw)
 {
 	if (strstr(fwts_cpuinfo->vendor_id, "AMD")) {
 		if (klog != NULL) {
-			if (fwts_klog_regex_find(fw, klog, "SYSCFG[MtrrFixDramModEn] not cleared by BIOS, clearing this bit") > 0) {
+			if (fwts_klog_regex_find(fw, klog, "SYSCFG[MtrrFixDramModEn] not cleared by BIOS, clearing this bit") > 0)
 				fwts_failed(fw, LOG_LEVEL_MEDIUM,
 					"MTRRFixDramModEnBit",
 					"The BIOS is expected to clear MtrrFixDramModEn bit, see for example "
@@ -528,11 +523,8 @@  static int mtrr_test3(fwts_framework *fw)
  					"\"13.2.1.2 SYSCFG Register\": \"The MtrrFixDramModEn bit should be set "
  					"to 1 during BIOS initialization of the fixed MTRRs, then cleared to "
  					"0 for operation.\"");
-				fwts_tag_failed(fw, FWTS_TAG_BIOS);
-			}
-			else {
+			else
 				fwts_passed(fw, "No MtrrFixDramModEn error detected.");
-			}
 		}
 	} else
 		fwts_skipped(fw, "CPU is not an AMD, cannot test.");
diff --git a/src/bios/os2gap/os2gap.c b/src/bios/os2gap/os2gap.c
index 40773f1..de16bf3 100644
--- a/src/bios/os2gap/os2gap.c
+++ b/src/bios/os2gap/os2gap.c
@@ -57,7 +57,6 @@  static int os2gap_test1(fwts_framework *fw)
 			OS2_GAP_SIZE / 1024,
 			(void*)OS2_GAP_ADDRESS,
 			(void*)(OS2_GAP_ADDRESS + OS2_GAP_SIZE));
-		fwts_tag_failed(fw, FWTS_TAG_BIOS);
 		fwts_log_nl(fw);
 		fwts_memory_map_table_dump(fw, os2gap_memory_map_info);
 	} else
diff --git a/src/bios/pciirq/pciirq.c b/src/bios/pciirq/pciirq.c
index 5df0e37..b00214f 100644
--- a/src/bios/pciirq/pciirq.c
+++ b/src/bios/pciirq/pciirq.c
@@ -230,12 +230,10 @@  static int pciirq_test1(fwts_framework *fw)
 			"Could not find PCI IRQ Routing Table. Since this table "
 			"is for legacy BIOS systems which don't have ACPI support "
 			"this is generally not a problem.");
-	} else if (found > 1) {
+	} else if (found > 1)
 		fwts_failed(fw, LOG_LEVEL_HIGH,
 			"PCIIRQMultipleTables",
 			"Found %d instances of PCI Routing Tables, there should only be 1.", found);
-		fwts_tag_failed(fw, FWTS_TAG_BIOS);
-	}
 
         (void)fwts_munmap(mem, PCIIRQ_REGION_SIZE);
 
diff --git a/src/bios/pnp/pnp.c b/src/bios/pnp/pnp.c
index 65a16d1..34a0a34 100644
--- a/src/bios/pnp/pnp.c
+++ b/src/bios/pnp/pnp.c
@@ -167,12 +167,10 @@  static int pnp_test1(fwts_framework *fw)
 		fwts_log_info(fw,
 			"Could not find PnP BIOS Support Installation Check structure. "
 			"This is not necessarily a failure.");
-	else if (found > 1) {
+	else if (found > 1)
 		fwts_failed(fw, LOG_LEVEL_HIGH,
 			"PNPMultipleTables",
 			"Found %d instances of PCI Routing Tables, there should only be 1.", found);
-		fwts_tag_failed(fw, FWTS_TAG_BIOS);
-	}
 
         (void)fwts_munmap(mem, PNP_REGION_SIZE);
 
diff --git a/src/lib/include/fwts.h b/src/lib/include/fwts.h
index c29e7f2..d27d2dc 100644
--- a/src/lib/include/fwts.h
+++ b/src/lib/include/fwts.h
@@ -30,7 +30,6 @@ 
 
 #include "fwts_version.h"
 #include "fwts_types.h"
-#include "fwts_tag.h"
 #include "fwts_binpaths.h"
 #include "fwts_framework.h"
 #include "fwts_log.h"
diff --git a/src/lib/include/fwts_framework.h b/src/lib/include/fwts_framework.h
index 1e5171c..5278dfb 100644
--- a/src/lib/include/fwts_framework.h
+++ b/src/lib/include/fwts_framework.h
@@ -50,9 +50,7 @@  typedef enum {
 	FWTS_FLAG_TEST_ACPI			= 0x04000000,
 	FWTS_FLAG_UTILS				= 0x08000000,
 	FWTS_FLAG_QUIET				= 0x10000000,
-	FWTS_FLAG_LP_TAGS			= 0x20000000,
-	FWTS_FLAG_LP_TAGS_LOG			= 0x40000000,
-	FWTS_FLAG_SHOW_TESTS_FULL		= 0x80000000,
+	FWTS_FLAG_SHOW_TESTS_FULL		= 0x20000000,
 } fwts_framework_flags;
 
 #define FWTS_FLAG_TEST_MASK		\
@@ -132,9 +130,6 @@  typedef struct {
 	bool print_summary;			/* Print summary of results at end of test runs */
 	fwts_log_level failed_level;		/* Bit mask of failed levels in test run */
 
-	fwts_list test_taglist;			/* List of tags found when running all minor tests */
-	fwts_list total_taglist;		/* List of tags found when running all tests */
-
 	int firmware_type;			/* Type of firmware */
 	bool show_progress;			/* Show progress while running current test */
 
diff --git a/src/lib/include/fwts_klog.h b/src/lib/include/fwts_klog.h
index ef23750..fe8f520 100644
--- a/src/lib/include/fwts_klog.h
+++ b/src/lib/include/fwts_klog.h
@@ -40,7 +40,6 @@  typedef enum {
 typedef struct {
 	fwts_compare_mode compare_mode;
 	fwts_log_level level;
-	fwts_tag tag;
         const char *pattern;
 	const char *advice;
 	char *label;
diff --git a/src/lib/include/fwts_log.h b/src/lib/include/fwts_log.h
index e760efa..b9f378a 100644
--- a/src/lib/include/fwts_log.h
+++ b/src/lib/include/fwts_log.h
@@ -184,9 +184,6 @@  static inline int fwts_log_type_count(fwts_log_type type)
 #define fwts_log_heading(fw, fmt, args...)	\
 	fwts_log_printf(fw->results, LOG_HEADING, LOG_LEVEL_NONE, "", "", "", fmt, ## args)
 
-#define fwts_log_tag(fw, fmt, args...)	\
-	fwts_log_printf(fw->results, LOG_TAG | LOG_VERBATUM, LOG_LEVEL_NONE, "", "", "", fmt, ## args)
-
 #define fwts_log_nl(fw) \
 	fwts_log_printf(fw->results, LOG_NEWLINE, LOG_LEVEL_NONE, "", "", "", "%s", "")
 
diff --git a/src/lib/include/fwts_tag.h b/src/lib/include/fwts_tag.h
deleted file mode 100644
index b7d00a4..0000000
--- a/src/lib/include/fwts_tag.h
+++ /dev/null
@@ -1,83 +0,0 @@ 
-/*
- * Copyright (C) 2010-2013 Canonical
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef __FWTS_TAG__
-#define __FWTS_TAG__
-
-#include "fwts_list.h"
-#include "fwts_framework.h"
-
-typedef enum {
-	FWTS_TAG_NONE = 1,
-	FWTS_TAG_ERROR_CRITICAL,
-	FWTS_TAG_ERROR_HIGH,
-	FWTS_TAG_ERROR_MEDIUM,
-	FWTS_TAG_ERROR_LOW,
-	FWTS_TAG_BIOS,
-	FWTS_TAG_BIOS_THERMAL,
-	FWTS_TAG_BIOS_IRQ,
-	FWTS_TAG_BIOS_AMD_POWERNOW,
-	FWTS_TAG_BIOS_MMCONFIG,
-	FWTS_TAG_BIOS_DMI,
-	FWTS_TAG_ACPI,
-	FWTS_TAG_ACPI_IO_PORT,
-	FWTS_TAG_ACPI_INVALID_TABLE,
-	FWTS_TAG_ACPI_BUFFER_OVERFLOW,
-	FWTS_TAG_ACPI_AML_OPCODE,
-	FWTS_TAG_ACPI_NAMESPACE_LOOKUP,
-	FWTS_TAG_ACPI_PCI_EXPRESS,
-	FWTS_TAG_ACPI_BAD_RESULT,
-	FWTS_TAG_ACPI_NO_HANDLER,
-	FWTS_TAG_ACPI_PACKAGE_LIST,
-	FWTS_TAG_ACPI_PARSE_EXEC_FAIL,
-	FWTS_TAG_ACPI_EVAL,
-	FWTS_TAG_ACPI_BAD_LENGTH,
-	FWTS_TAG_ACPI_BAD_ADDRESS,
-	FWTS_TAG_ACPI_METHOD_RETURN,
-	FWTS_TAG_ACPI_BRIGHTNESS,
-	FWTS_TAG_ACPI_BUTTON,
-	FWTS_TAG_ACPI_EVENT,
-	FWTS_TAG_ACPI_PARAMETER,
-	FWTS_TAG_ACPI_THROTTLING,
-	FWTS_TAG_ACPI_EXCEPTION,
-	FWTS_TAG_ACPI_PACKAGE,
-	FWTS_TAG_ACPI_APIC,
-	FWTS_TAG_ACPI_DISPLAY,
-	FWTS_TAG_ACPI_MULTIPLE_FACS,
-	FWTS_TAG_ACPI_POINTER_MISMATCH,
-	FWTS_TAG_ACPI_TABLE_CHECKSUM,
-	FWTS_TAG_ACPI_HOTPLUG,
-	FWTS_TAG_ACPI_RSDP,
-	FWTS_TAG_ACPI_MUTEX,
-	FWTS_TAG_ACPI_THERMAL,
-	FWTS_TAG_ACPI_LID,
-	FWTS_TAG_ACPI_METHOD,
-	FWTS_TAG_EMBEDDED_CONTROLLER,
-	FWTS_TAG_POWER_MANAGEMENT,
-	FWTS_TAG_WMI,
-} fwts_tag;
-
-fwts_tag fwts_tag_id_str_to_tag(const char *tag);
-const char *fwts_tag_to_str(const fwts_tag tag);
-void fwts_tag_add(fwts_list *taglist, const char *tag);
-char *fwts_tag_list_to_str(fwts_list *taglist);
-void fwts_tag_report(fwts_framework *fw, const fwts_log_field field, fwts_list *taglist);
-void fwts_tag_failed(fwts_framework *fw, const fwts_tag tag);
-
-#endif
diff --git a/src/lib/src/Makefile.am b/src/lib/src/Makefile.am
index 4760a6f..d708f34 100644
--- a/src/lib/src/Makefile.am
+++ b/src/lib/src/Makefile.am
@@ -65,7 +65,6 @@  libfwts_la_SOURCES = 		\
 	fwts_smbios.c 		\
 	fwts_stringextras.c 	\
 	fwts_summary.c 		\
-	fwts_tag.c 		\
 	fwts_text_list.c 	\
 	fwts_tty.c 		\
 	fwts_uefi.c 		\
diff --git a/src/lib/src/fwts_framework.c b/src/lib/src/fwts_framework.c
index 92aa74d..0cf0f2c 100644
--- a/src/lib/src/fwts_framework.c
+++ b/src/lib/src/fwts_framework.c
@@ -70,11 +70,9 @@  static fwts_option fwts_framework_options[] = {
 	{ "skip-test", 		"S:", 1, "Skip listed tests, e.g. --skip-test=s3,nx,method" },
 	{ "quiet", 		"q",  0, "Run quietly." },
 	{ "dumpfile", 		"",   1, "Load ACPI tables using file generated by acpidump, e.g. --dumpfile=acpidump.dat" },
-	{ "lp-tags", 		"",   0, "Output just LaunchPad bug tags." },
 	{ "show-tests-full", 	"",   0, "Show available tests including all minor tests." },
 	{ "utils", 		"u",  0, "Run Utility 'tests'." },
 	{ "json-data-path", 	"j:", 1, "Specify path to fwts json data files - default is /usr/share/fwts." },
-	{ "lp-tags-log", 	"",   0, "Output LaunchPad bug tags in results log." },
 	{ "disassemble-aml", 	"",   0, "Disassemble AML from DSDT and SSDT tables." },
 	{ "log-type",		"",   1, "Specify log type (plaintext, json, html or xml)." },
 	{ "unsafe",		"U",  0, "Unsafe tests (tests that can potentially cause kernel oopses)." },
@@ -452,8 +450,7 @@  static int fwts_framework_test_summary(fwts_framework *fw)
 			printf("%s\n", fwts_log_field_to_str_upper(LOG_PASSED));
 	}
 
-	if (!(fw->flags & FWTS_FLAG_LP_TAGS))
-		fwts_log_newline(fw->results);
+	fwts_log_newline(fw->results);
 
 	return FWTS_OK;
 }
@@ -475,7 +472,6 @@  static int fwts_framework_run_test(fwts_framework *fw, fwts_framework_test *test
 
 	fw->current_major_test = test;
 	fw->current_minor_test_name = "";
-	fwts_list_init(&fw->test_taglist);
 
 	test->was_run = true;
 	fw->total_run++;
@@ -597,15 +593,7 @@  static int fwts_framework_run_test(fwts_framework *fw, fwts_framework_test *test
 	if (test->ops->deinit)
 		test->ops->deinit(fw);
 
-	if (fw->flags & FWTS_FLAG_LP_TAGS_LOG) {
-		fwts_log_section_begin(fw->results, "tags");
-		fwts_tag_report(fw, LOG_TAG, &fw->test_taglist);
-		fwts_log_section_end(fw->results);
-	}
-
 done:
-	fwts_list_free_items(&fw->test_taglist, free);
-
 	if (!(test->flags & FWTS_FLAG_UTILS)) {
 		fwts_log_section_begin(fw->results, "results");
 		fwts_framework_test_summary(fw);
@@ -872,8 +860,7 @@  static void fwts_framework_heading_info(
 
 		fwts_log_info(fw, "Running tests: %s.",
 			fwts_list_len(tests_to_run) == 0 ? "None" : tests);
-		if (!(fw->flags & FWTS_FLAG_LP_TAGS))
-			fwts_log_newline(fw->results);
+		fwts_log_newline(fw->results);
 		free(tests);
 	}
 }
@@ -1094,52 +1081,44 @@  int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
 		case 25: /* --dumpfile */
 			fwts_framework_strdup(&fw->acpi_table_acpidump_file, optarg);
 			break;
-		case 26: /* --lp-tags */
-			fw->flags |= FWTS_FLAG_LP_TAGS;
-			fwts_log_filter_unset_field(~0);
-			fwts_log_filter_set_field(LOG_TAG);
-			break;
-		case 27: /* --show-tests-full */
+		case 26: /* --show-tests-full */
 			fw->flags |= FWTS_FLAG_SHOW_TESTS_FULL;
 			break;
-		case 28: /* --utils */
+		case 27: /* --utils */
 			fw->flags |= FWTS_FLAG_UTILS;
 			break;
-		case 29: /* --json-data-path */
+		case 28: /* --json-data-path */
 			fwts_framework_strdup(&fw->json_data_path, optarg);
 			break;
-		case 30: /* --lp-tags-log */
-			fw->flags |= FWTS_FLAG_LP_TAGS_LOG;
-			break;
-		case 31: /* --disassemble-aml */
+		case 29: /* --disassemble-aml */
 			fwts_iasl_disassemble_all_to_file(fw);
 			return FWTS_COMPLETE;
-		case 32: /* --log-type */
+		case 30: /* --log-type */
 			if (fwts_framework_log_type_parse(fw, optarg) != FWTS_OK)
 				return FWTS_ERROR;
 			break;
-		case 33: /* --unsafe */
+		case 31: /* --unsafe */
 			fw->flags |= FWTS_FLAG_UNSAFE;
 			break;
-		case 34: /* --filter-error-discard */
+		case 32: /* --filter-error-discard */
 			if (fwts_framework_filter_error_parse(optarg, &fw->errors_filter_discard) != FWTS_OK)
 				return FWTS_ERROR;
 			break;
-		case 35: /* --filter-error-keep */
+		case 33: /* --filter-error-keep */
 			if (fwts_framework_filter_error_parse(optarg, &fw->errors_filter_keep) != FWTS_OK)
 				return FWTS_ERROR;
 			break;
-		case 36: /* --acpica-debug */
+		case 34: /* --acpica-debug */
 			fw->flags |= FWTS_FLAG_ACPICA_DEBUG;
 			break;
-		case 37: /* --acpica */
+		case 35: /* --acpica */
 			if (fwts_framework_acpica_parse(fw, optarg) != FWTS_OK)
 				return FWTS_ERROR;
 			break;
-		case 38: /* --uefi */
+		case 36: /* --uefi */
 			fw->flags |= FWTS_FLAG_TEST_UEFI;
 			break;
-		case 39: /* --rsdp */
+		case 37: /* --rsdp */
 			fw->rsdp = (void *)strtoul(optarg, NULL, 0);
 			break;
 		}
@@ -1176,7 +1155,6 @@  int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
 		fwts_framework_strdup(&fw->klog, optarg);
 		break;
 	case 'l': /* --lp-flags */
-		fw->flags |= FWTS_FLAG_LP_TAGS;
 		break;
 	case 'p': /* --show-progress */
 		fw->flags = (fw->flags &
@@ -1252,7 +1230,6 @@  int fwts_framework_args(const int argc, char **argv)
 		    FWTS_FLAG_SHOW_PROGRESS;
 	fw->log_type = LOG_TYPE_PLAINTEXT;
 
-	fwts_list_init(&fw->total_taglist);
 	fwts_list_init(&fw->errors_filter_keep);
 	fwts_list_init(&fw->errors_filter_discard);
 
@@ -1383,17 +1360,12 @@  int fwts_framework_args(const int argc, char **argv)
 		fwts_log_section_begin(fw->results, "summary");
 		fwts_log_set_owner(fw->results, "summary");
 		fwts_log_nl(fw);
-		if (fw->flags & FWTS_FLAG_LP_TAGS_LOG)
-			fwts_tag_report(fw, LOG_SUMMARY, &fw->total_taglist);
 		fwts_framework_total_summary(fw);
 		fwts_log_nl(fw);
 		fwts_summary_report(fw, &fwts_framework_test_list);
 		fwts_log_section_end(fw->results);
 	}
 
-	if (fw->flags & FWTS_FLAG_LP_TAGS)
-		fwts_tag_report(fw, LOG_TAG | LOG_NO_FIELDS, &fw->total_taglist);
-
 tidy:
 	fwts_list_free_items(&tests_to_skip, NULL);
 	fwts_list_free_items(&tests_to_run, NULL);
@@ -1410,7 +1382,6 @@  tidy_close:
 
 	fwts_list_free_items(&fw->errors_filter_discard, NULL);
 	fwts_list_free_items(&fw->errors_filter_keep, NULL);
-	fwts_list_free_items(&fw->total_taglist, free);
 	fwts_list_free_items(&fwts_framework_test_list, free);
 
 	/* Failed tests flagged an error */
diff --git a/src/lib/src/fwts_klog.c b/src/lib/src/fwts_klog.c
index 8d3d874..9ae93d6 100644
--- a/src/lib/src/fwts_klog.c
+++ b/src/lib/src/fwts_klog.c
@@ -252,7 +252,6 @@  void fwts_klog_scan_patterns(fwts_framework *fw,
 			if (pattern->level == LOG_LEVEL_INFO)
 				fwts_log_info(fw, "Kernel message: %s", line);
 			else {
-				fwts_tag_failed(fw, pattern->tag);
 				fwts_failed(fw, pattern->level, pattern->label,
 					"%s Kernel message: %s", fwts_log_level_to_str(pattern->level), line);
 				fwts_error_inc(fw, pattern->label, errors);
@@ -376,10 +375,6 @@  static int fwts_klog_check(fwts_framework *fw,
 			goto fail;
 		patterns[i].level   = fwts_log_str_to_level(str);
 
-		if ((str = fwts_json_str(fw, table, i, obj, "tag", true)) == NULL)
-			goto fail;
-		patterns[i].tag     = fwts_tag_id_str_to_tag(str);
-
 		if ((patterns[i].pattern = fwts_json_str(fw, table, i, obj, "pattern", true)) == NULL)
 			goto fail;
 
diff --git a/src/lib/src/fwts_log.c b/src/lib/src/fwts_log.c
index 693b943..54e8215 100644
--- a/src/lib/src/fwts_log.c
+++ b/src/lib/src/fwts_log.c
@@ -75,8 +75,6 @@  char *fwts_log_field_to_str(const fwts_log_field field)
 		return "ADV";
 	case LOG_HEADING:
 		return "HED";
-	case LOG_TAG:
-		return "TAG";
 	case LOG_PASSED:
 		return "PAS";
 	case LOG_FAILED:
@@ -119,8 +117,6 @@  char *fwts_log_field_to_str_full(const fwts_log_field field)
 		return "Advice";
 	case LOG_HEADING:
 		return "Heading";
-	case LOG_TAG:
-		return "Tag";
 	case LOG_PASSED:
 		return "Passed";
 	case LOG_FAILED:
@@ -239,7 +235,6 @@  fwts_log_field fwts_log_str_to_field(const char *text)
 		{ "SEP", LOG_SEPARATOR },
 		{ "ADV", LOG_ADVICE },
 		{ "HED", LOG_HEADING },
-		{ "TAG", LOG_TAG },
 		{ "ALL", ~0 },
 		{ NULL, 0 }
 	};
diff --git a/src/lib/src/fwts_tag.c b/src/lib/src/fwts_tag.c
deleted file mode 100644
index 958a3c2..0000000
--- a/src/lib/src/fwts_tag.c
+++ /dev/null
@@ -1,202 +0,0 @@ 
-/*
- * Copyright (C) 2010-2013 Canonical
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "fwts.h"
-
-typedef struct {
-	const fwts_tag	tag;
-	const char	*tag_id;
-	const char 	*tag_str;
-} fwts_tag_info;
-
-#define FWTS_TAG(tag, str)	\
-	{ tag, #tag, str }
-
-static fwts_tag_info fwts_tags[] = {
-	FWTS_TAG(FWTS_TAG_NONE,	 		""),
-	FWTS_TAG(FWTS_TAG_ERROR_CRITICAL,	"error-critical"),
-	FWTS_TAG(FWTS_TAG_ERROR_HIGH,		"error-high"),
-	FWTS_TAG(FWTS_TAG_ERROR_MEDIUM,		"error-medium"),
-	FWTS_TAG(FWTS_TAG_ERROR_LOW,		"error-low"),
-	FWTS_TAG(FWTS_TAG_BIOS,			"bios"),
-	FWTS_TAG(FWTS_TAG_BIOS_THERMAL,		"bios-thermal"),
-	FWTS_TAG(FWTS_TAG_BIOS_IRQ,		"bios-irq"),
-	FWTS_TAG(FWTS_TAG_BIOS_AMD_POWERNOW,	"bios-amd-powernow"),
-	FWTS_TAG(FWTS_TAG_BIOS_MMCONFIG,	"bios-mmconfig"),
-	FWTS_TAG(FWTS_TAG_BIOS_DMI,		"bios-dmi"),
-	FWTS_TAG(FWTS_TAG_ACPI,			"acpi"),
-	FWTS_TAG(FWTS_TAG_ACPI_IO_PORT,		"acpi-io-port"),
-	FWTS_TAG(FWTS_TAG_ACPI_INVALID_TABLE,	"acpi-invalid-table"),
-	FWTS_TAG(FWTS_TAG_ACPI_BUFFER_OVERFLOW,	"acpi-buffer-overflow"),
-	FWTS_TAG(FWTS_TAG_ACPI_AML_OPCODE,	"acpi-aml-opcode"),
-	FWTS_TAG(FWTS_TAG_ACPI_NAMESPACE_LOOKUP,"acpi-namespace-lookup"),
-	FWTS_TAG(FWTS_TAG_ACPI_PCI_EXPRESS,	"acpi-pci-express"),
-	FWTS_TAG(FWTS_TAG_ACPI_BAD_RESULT,	"acpi-bad-result"),
-	FWTS_TAG(FWTS_TAG_ACPI_NO_HANDLER,	"acpi-no-handler"),
-	FWTS_TAG(FWTS_TAG_ACPI_PACKAGE_LIST,	"acpi-package-list"),
-	FWTS_TAG(FWTS_TAG_ACPI_PARSE_EXEC_FAIL,	"acpi-parse-exec-fail"),
-	FWTS_TAG(FWTS_TAG_ACPI_EVAL,		"acpi-eval"),
-	FWTS_TAG(FWTS_TAG_ACPI_BAD_LENGTH,	"acpi-bad-length"),
-	FWTS_TAG(FWTS_TAG_ACPI_BAD_ADDRESS,	"acpi-bad-address"),
-	FWTS_TAG(FWTS_TAG_ACPI_METHOD_RETURN,	"acpi-method-return"),
-	FWTS_TAG(FWTS_TAG_ACPI_BRIGHTNESS,	"acpi-brightness"),
-	FWTS_TAG(FWTS_TAG_ACPI_BUTTON,		"acpi-button"),
-	FWTS_TAG(FWTS_TAG_ACPI_EVENT,		"acpi-event"),
-	FWTS_TAG(FWTS_TAG_ACPI_PARAMETER,	"acpi-parameter"),
-	FWTS_TAG(FWTS_TAG_ACPI_THROTTLING,	"acpi-throttling"),
-	FWTS_TAG(FWTS_TAG_ACPI_EXCEPTION,	"acpi-exception"),
-	FWTS_TAG(FWTS_TAG_ACPI_PACKAGE,		"acpi-package"),
-	FWTS_TAG(FWTS_TAG_ACPI_APIC,		"acpi-apic"),
-	FWTS_TAG(FWTS_TAG_ACPI_DISPLAY,		"acpi-display"),
-	FWTS_TAG(FWTS_TAG_ACPI_MULTIPLE_FACS,	"acpi-multiple-facs"),
-	FWTS_TAG(FWTS_TAG_ACPI_POINTER_MISMATCH,"acpi-pointer-mismatch"),
-	FWTS_TAG(FWTS_TAG_ACPI_TABLE_CHECKSUM,	"acpi-table-checksum"),
-	FWTS_TAG(FWTS_TAG_ACPI_HOTPLUG,		"acpi-hotplug"),
-	FWTS_TAG(FWTS_TAG_ACPI_RSDP,		"acpi-rsdp"),
-	FWTS_TAG(FWTS_TAG_ACPI_MUTEX,		"acpi-mutex"),
-	FWTS_TAG(FWTS_TAG_ACPI_THERMAL,		"acpi-thermal"),
-	FWTS_TAG(FWTS_TAG_ACPI_LID,		"acpi-lid"),
-	FWTS_TAG(FWTS_TAG_ACPI_METHOD,		"acpi-method"),
-	FWTS_TAG(FWTS_TAG_EMBEDDED_CONTROLLER,	"embedded-controller"),
-	FWTS_TAG(FWTS_TAG_POWER_MANAGEMENT,	"power-management"),
-	FWTS_TAG(FWTS_TAG_WMI,			"wmi"),
-	{ 0, NULL, NULL }
-};
-
-/*
- *  fwts_tag_id_str_to_tag()
- *	given a tag string, return the tag
- */
-fwts_tag fwts_tag_id_str_to_tag(const char *tag)
-{
-	int i;
-
-	for (i=0; fwts_tags[i].tag_id != NULL; i++)
-		if (strcmp(tag, fwts_tags[i].tag_id) == 0)
-			return fwts_tags[i].tag;
-	return FWTS_TAG_NONE;
-}
-
-/*
- *  fwts_tag_to_str()
- *	given a tag, return the human readable tag name
- */
-const char *fwts_tag_to_str(const fwts_tag tag)
-{
-	int i;
-	static const char *none = "";
-
-	for (i=0; fwts_tags[i].tag_id != NULL; i++)
-		if (fwts_tags[i].tag == tag)
-			return fwts_tags[i].tag_str;
-	return none;
-}
-
-/*
- *  fwts_tag_compare()
- *	callback to enable tag name sorting
- */
-static int fwts_tag_compare(void *data1, void *data2)
-{
-	return strcmp((char *)data1, (char*)data2);
-}
-
-/*
- *  fwts_tag_add()
- *	add a tag name to a list of tag names, ordered alphabetically
- * 	tag is added if it does already exist in the tag list
- */
-void fwts_tag_add(fwts_list *taglist, const char *tag)
-{
-	fwts_list_link	*item;
-	char *str;
-
-	/* Exists already? then don't bother */
-	fwts_list_foreach(item, taglist)
-		if (strcmp(fwts_list_data(char *,item), tag) == 0)
-			return;
-
-	str = strdup(tag);
-	if (str)
-		fwts_list_add_ordered(taglist, str, fwts_tag_compare);
-}
-
-/*
- *  fwts_tag_list_to_str()
- *	given a list of tag names return a space delimited string
- *	containing the the tag names
- */
-char *fwts_tag_list_to_str(fwts_list *taglist)
-{
-	fwts_list_link	*item;
-	char *str = NULL;
-	size_t len = 0;
-
-	fwts_list_foreach(item, taglist) {
-		char *tag = fwts_list_data(char *, item);
-		size_t taglen = strlen(tag);
-		len += taglen + 1;
-
-		if (str) {
-			if ((str = realloc(str, len)) == NULL)
-				return NULL;
-			strcat(str, " ");
-			strcat(str, tag);
-		} else {
-			if ((str = malloc(len)) == NULL)
-				return NULL;
-			strcpy(str, tag);
-		}
-	}
-	return str;
-}
-
-/*
- *  fwts_tag_report()
- *	report to the log the tags found in the taglist
- */
-void fwts_tag_report(fwts_framework *fw, const fwts_log_field field, fwts_list *taglist)
-{
-	if ((taglist != NULL) && (fwts_list_len(taglist) > 0)) {
-		char *tags = fwts_tag_list_to_str(taglist);
-		if (tags) {
-			fwts_log_printf(fw->results, field | LOG_VERBATUM, LOG_LEVEL_NONE, "", "", "", "Tags: %s", tags);
-			free(tags);
-		}
-	}
-}
-
-/*
- *  fwts_tag_failed()
- *	add to the tag lists the tag:
- *	per test (this is emptied at end of each test)
- * 	all tests (this is total for all tests run)
- */
-void fwts_tag_failed(fwts_framework *fw, const fwts_tag tag)
-{
-	const char *text = fwts_tag_to_str(tag);
-
-	if (*text) {
-		fwts_tag_add(&fw->test_taglist, text);
-		fwts_tag_add(&fw->total_taglist, text);
-	}
-}
diff --git a/src/pci/crs/crs.c b/src/pci/crs/crs.c
index 9b48ed4..b7f6165 100644
--- a/src/pci/crs/crs.c
+++ b/src/pci/crs/crs.c
@@ -72,15 +72,12 @@  static int crs_test1(fwts_framework *fw)
 					"The kernel could not determine the BIOS age "
 					"and has assumed that your BIOS is too old to correctly "
 					"specify the host bridge MMIO aperture using _CRS.");
-				fwts_tag_failed(fw, FWTS_TAG_BIOS);
 				fwts_log_advice(fw, "You can override this by booting with \"pci=use_crs\".");
-
 			} else if (year < 2008) {
 				fwts_passed(fw,
 					"The kernel has detected an old BIOS (%d/%d/%d) "
 					"and has assumed that your BIOS is too old to correctly "
 					"specify the host bridge MMIO aperture using _CRS.", mon, day, year);
-				fwts_tag_failed(fw, FWTS_TAG_BIOS);
 				fwts_log_advice(fw, "You can override this by booting with \"pci=use_crs\".");
 			} else {
 				fwts_failed(fw, LOG_LEVEL_MEDIUM,
@@ -88,7 +85,6 @@  static int crs_test1(fwts_framework *fw)
 					"The kernel is ignoring host bridge windows from ACPI for some unknown reason. "
 					"pci=nocrs has not been used as a boot parameter and the BIOS may be recent enough "
 					"to support this (%d/%d/%d)", mon, day, year);
-				fwts_tag_failed(fw, FWTS_TAG_BIOS);
 			}
 		}
 	} else if (fwts_klog_regex_find(fw, klog, "PCI: Using host bridge windows from ACPI;") > 0) {
@@ -97,12 +93,10 @@  static int crs_test1(fwts_framework *fw)
 				fwts_failed(fw, LOG_LEVEL_MEDIUM,
 					"BIOSNoReleaseDate",
 					"The BIOS does not seem to have release date, hence pci=use_crs was required.");
-				fwts_tag_failed(fw, FWTS_TAG_BIOS);
 			} else if (year < 2008) {
 				fwts_passed(fw,
 					"The BIOS is relatively old (%d/%d/%d) and hence pci=use_crs was required to "
 					"enable host bridge windows _CRS settings from ACPI.", mon, day, year);
-				fwts_tag_failed(fw, FWTS_TAG_BIOS);
 			} else {
 				fwts_failed(fw, LOG_LEVEL_LOW,
 					"BIOSSupportBridgeWindows",
@@ -110,7 +104,6 @@  static int crs_test1(fwts_framework *fw)
 					"the BIOS is new enough to support automatic bridge windows configuring using _CRS from ACPI. "
 					"However, the workaround may be necessary because _CRS is incorrect or not implemented in the "
 					"DSDT.");
-				fwts_tag_failed(fw, FWTS_TAG_BIOS);
 			}
 		}
 		else {
diff --git a/src/pci/maxreadreq/maxreadreq.c b/src/pci/maxreadreq/maxreadreq.c
index 7a06cec..2713224 100644
--- a/src/pci/maxreadreq/maxreadreq.c
+++ b/src/pci/maxreadreq/maxreadreq.c
@@ -129,7 +129,6 @@  static int maxreadreq_test1(fwts_framework *fw)
 			"allow one to override the firmware settings. Where possible, this BIOS "
 			"configuration setting is worth increasing it a little more for better "
 			"performance at a small reduction of bus sharing.");
-		fwts_tag_failed(fw, FWTS_TAG_BIOS);
 	} else
 		fwts_passed(fw, "All devices have MaxReadReq set > 128.");