diff --git a/meta-phosphor/classes/obmc-xmlpatch.bbclass b/meta-phosphor/classes/obmc-xmlpatch.bbclass
new file mode 100644
index 0000000..9dc3750
--- /dev/null
+++ b/meta-phosphor/classes/obmc-xmlpatch.bbclass
@@ -0,0 +1,74 @@
+#This class applies patches to an XML file during do_patch().  The
+#patches themselves are specified in XML in a separate file that must
+#be in SRC_URI and end in .patch.xml.  The patch XML file must also
+#have a <targetFile> element that specifies the base name of the file
+#that needs to be patched.
+#
+#See patchxml.py for details on the XML patch format.
+#
+
+inherit pythonnative
+inherit obmc-phosphor-utils
+do_patch[depends] = "mrw-patch-native:do_populate_sysroot"
+
+
+def find_patch_files(d):
+    all_patches = listvar_to_list(d, 'SRC_URI')
+    xml_patches = filter(lambda x: x.endswith('.patch.xml') and
+                         x.startswith('file://'), all_patches)
+
+    return [x.lstrip('file://') for x in xml_patches]
+
+
+def apply_xml_patch(base_patch_name, d):
+    import xml.etree.ElementTree as et
+    import subprocess
+
+    patch_file = os.path.join(d.getVar("WORKDIR", True), base_patch_name)
+
+    if not os.path.exists(patch_file):
+        bb.fatal("Could not find patch file " + patch_file +
+                 " specified in SRC_URI")
+
+    patch_tree = et.parse(patch_file)
+    patch_root = patch_tree.getroot()
+    target_file_element = patch_root.find("targetFile")
+
+    if target_file_element is None:
+        bb.fatal("Could not find <targetFile> element in patch file "
+                 + patch_file)
+    else:
+        xml = target_file_element.text
+
+    xml = os.path.join(d.getVar("S", True), xml)
+
+    if not os.path.exists(xml):
+        bb.fatal("Could not find XML file to patch: " + xml)
+
+    print("Applying XML fixes found in " + patch_file + " to " + xml)
+
+    cmd = []
+    cmd.append(os.path.join(d.getVar("bindir", True), "obmc-mrw/patchxml.py"))
+    cmd.append("-x")
+    cmd.append(xml)
+    cmd.append("-p")
+    cmd.append(patch_file)
+    cmd.append("-o")
+    cmd.append(xml + ".patched")
+
+    try:
+        subprocess.check_call(cmd)
+    except subprocess.CalledProcessError as e:
+        bb.fatal("Failed patching XML:\n%s" % e.output)
+
+    os.rename(xml, xml + ".orig")
+    os.rename(xml + ".patched", xml)
+
+
+python xmlpatch_do_patch() {
+
+    for patch in find_patch_files(d):
+        apply_xml_patch(patch, d)
+}
+
+do_patch[postfuncs] += "xmlpatch_do_patch"
diff --git a/meta-phosphor/common/recipes-phosphor/mrw/mrw-native.bb b/meta-phosphor/common/recipes-phosphor/mrw/mrw-native.bb
index 3ce4c97..e06a682 100644
--- a/meta-phosphor/common/recipes-phosphor/mrw/mrw-native.bb
+++ b/meta-phosphor/common/recipes-phosphor/mrw/mrw-native.bb
@@ -5,6 +5,7 @@
 S = "${WORKDIR}/git"
 
 inherit obmc-phosphor-license
+inherit obmc-xmlpatch
 inherit native
 
 PHOSPHOR_MRW_URI ?= "http://missing-mrw-uri"
diff --git a/meta-phosphor/common/recipes-phosphor/mrw/mrw-patch-native.bb b/meta-phosphor/common/recipes-phosphor/mrw/mrw-patch-native.bb
new file mode 100644
index 0000000..694ece9
--- /dev/null
+++ b/meta-phosphor/common/recipes-phosphor/mrw/mrw-patch-native.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Phosphor machine readable workbook patching script"
+DESCRIPTION = "Retrieve the script that can patch the MRW XML"
+PR = "r1"
+
+S = "${WORKDIR}/git"
+
+inherit obmc-phosphor-license
+inherit native
+
+DEPENDS += "python-native python-lxml-native"
+
+SRC_URI += "git://github.com/openbmc/phosphor-mrw-tools"
+SRCREV = "ab015d7e2a2eb87eab2ca7d731ebcb7a873442e9"
+
+do_install() {
+    install -d ${bindir}/obmc-mrw
+    install -m 0755 patchxml.py ${bindir}/obmc-mrw
+}
