diff --git a/create_cm_caf_xml.py b/create_cm_caf_xml.py
new file mode 100755
index 0000000..f101d8c
--- /dev/null
+++ b/create_cm_caf_xml.py
@@ -0,0 +1,84 @@
+#!/usr/bin/python2
+#
+# create_cm_caf_xml.py
+#
+# Generates cm_caf.xml based on the strings that were added to
+# CM's *.xml compared to AOSP's *.xml
+
+from xml.dom import minidom
+
+def create_cm_caf_xml(strings_base, strings_cm, path):
+    # Load AOSP file and resources
+    xml_base = minidom.parse(strings_base)
+    list_base_string = xml_base.getElementsByTagName('string')
+    list_base_string_array = xml_base.getElementsByTagName('string-array')
+    list_base_plurals = xml_base.getElementsByTagName('plurals')
+
+    # Load CM file and resources
+    xml_cm = minidom.parse(strings_cm)
+    list_cm_string = xml_cm.getElementsByTagName('string')
+    list_cm_string_array = xml_cm.getElementsByTagName('string-array')
+    list_cm_plurals = xml_cm.getElementsByTagName('plurals')
+
+    # All names from CM
+    names_cm_string = []
+    names_cm_string_array = []
+    names_cm_plurals = []
+    # All names from AOSP
+    names_base_string = []
+    names_base_string_array = []
+    names_base_plurals = []
+
+    # Get all names from CM
+    for s in list_cm_string :
+        if not s.hasAttribute('translatable') and not s.hasAttribute('translate'):
+            names_cm_string.append(s.attributes['name'].value)
+    for s in list_cm_string_array :
+        if not s.hasAttribute('translatable') and not s.hasAttribute('translate'):
+            names_cm_string-array.append(s.attributes['name'].value)
+    for s in list_cm_plurals :
+        if not s.hasAttribute('translatable') and not s.hasAttribute('translate'):
+            names_cm_plurals.append(s.attributes['name'].value)
+
+    # Get all names from AOSP
+    for s in list_base_string :
+        if not s.hasAttribute('translatable') and not s.hasAttribute('translate'):
+            names_base_string.append(s.attributes['name'].value)
+    for s in list_base_string_array :
+        if not s.hasAttribute('translatable') and not s.hasAttribute('translate'):
+            names_base_string_array.append(s.attributes['name'].value)
+    for s in list_base_plurals :
+        if not s.hasAttribute('translatable') and not s.hasAttribute('translate'):
+            names_base_plurals.append(s.attributes['name'].value)
+
+    # Search for different names. If so, output the full line
+    t = 5
+
+    for z in names_cm_string:
+        if not z in names_base_string:
+            if t == 5:
+                f = open(path + '/cm_caf.xml','w')
+                f.write('<?xml version="1.0" encoding="utf-8"?>\n')
+                f.write('<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">\n')
+                t = 4
+            f.write(list_cm_string[names_cm_string.index(z)].toxml() + '\n')
+    for z in names_cm_string_array:
+        if not z in names_base_string_array:
+            if t == 5:
+                f = open(path + '/cm_caf.xml','w')
+                f.write('<?xml version="1.0" encoding="utf-8"?>\n')
+                f.write('<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">\n')
+                t = 4
+            f.write(list_cm_string_array[names_cm_string_array.index(z)].toxml() + '\n')
+    for z in names_cm_plurals:
+        if not z in names_base_plurals:
+            if t == 5:
+                f = open(path + '/cm_caf.xml','w')
+                f.write('<?xml version="1.0" encoding="utf-8"?>\n')
+                f.write('<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">\n')
+                t = 4
+            f.write(list_cm_plurals[names_cm_plurals.index(z)].toxml() + '\n')
+
+    if t == 4:
+        f.write('</resources>')
+        f.close()
