diff --git a/cm_crowdin_sync.py b/cm_crowdin_sync.py
index dd65464..29423ef 100755
--- a/cm_crowdin_sync.py
+++ b/cm_crowdin_sync.py
@@ -78,14 +78,23 @@
 
     # Add all CAF additions to the list 'caf_additions'
     for z in names_cm_string:
-        if not z in names_base_string:
-            caf_additions.append('    ' + list_cm_string[names_cm_string.index(z)].toxml())
-    for z in names_cm_string_array:
-        if not z in names_base_string_array:
-            caf_additions.append('    ' + list_cm_string_array[names_cm_string_array.index(z)].toxml())
-    for z in names_cm_plurals:
-        if not z in names_base_plurals:
-            caf_additions.append('    ' + list_cm_plurals[names_cm_plurals.index(z)].toxml())
+        if z not in names_base_string:
+            for string_item in list_cm_string:
+                if string_item.attributes['name'].value == z:
+                    caf_additions.append('    ' + string_item.toxml())
+                    break
+    for y in names_cm_string_array:
+        if y not in names_base_string_array:
+            for string_array_item in list_cm_string_array:
+                if string_array_item.attributes['name'].value == y:
+                    caf_additions.append('    ' + string_array_item.toxml())
+                    break
+    for x in names_cm_plurals:
+        if x not in names_base_plurals:
+            for plurals_item in list_cm_plurals:
+                if plurals_item.attributes['name'].value == x:
+                    caf_additions.append('    ' + plurals_item.toxml())
+                    break
 
     # Done :-)
     return caf_additions
@@ -203,42 +212,42 @@
 except:
     sys.exit('You have not installed repo. Terminating.')
 
-#print('\nSTEP 1: Create cm_caf.xml')
+print('\nSTEP 1: Create cm_caf.xml')
 # Load caf.xml
-#print('Loading caf.xml')
-#xml = minidom.parse('caf.xml')
-#items = xml.getElementsByTagName('item')
+print('Loading caf.xml')
+xml = minidom.parse('caf.xml')
+items = xml.getElementsByTagName('item')
 
 # Store all created cm_caf.xml files in here.
 # Easier to remove them afterwards, as they cannot be committed
-#cm_caf = []
+cm_caf = []
 
-#for item in items:
-#    # Create tmp dir for download of AOSP base file
-#    path_to_values = item.attributes["path"].value
-#    subprocess.call(['mkdir', '-p', 'tmp/' + path_to_values])
-#    # Create cm_caf.xml - header
-#    f = codecs.open(path_to_values + '/cm_caf.xml', 'w', 'utf-8')
-#    f.write('<?xml version="1.0" encoding="utf-8"?>\n')
-#    f.write('<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">\n')
-#    # Create cm_caf.xml - contents
-#    # This means we also support multiple base files (e.g. checking if strings.xml and arrays.xml are changed)
-#    contents = []
-#    item_aosp = item.getElementsByTagName('aosp')
-#    for aosp_item in item_aosp:
-#        url = aosp_item.firstChild.nodeValue
-#        xml_file = aosp_item.attributes["file"].value
-#        path_to_base = 'tmp/' + path_to_values + '/' + xml_file
-#        path_to_cm = path_to_values + '/' + xml_file
-#        urlretrieve(url, path_to_base)
-#        contents = contents + get_caf_additions(path_to_base, path_to_cm)
-#    for addition in contents:
-#        f.write(addition + '\n')
-#    # Create cm_caf.xml - the end
-#    f.write('</resources>')
-#    f.close()
-#    cm_caf.append(path_to_values + '/cm_caf.xml')
-#    print('Created ' + path_to_values + '/cm_caf.xml')
+for item in items:
+    # Create tmp dir for download of AOSP base file
+    path_to_values = item.attributes["path"].value
+    subprocess.call(['mkdir', '-p', 'tmp/' + path_to_values])
+    # Create cm_caf.xml - header
+    f = codecs.open(path_to_values + '/cm_caf.xml', 'w', 'utf-8')
+    f.write('<?xml version="1.0" encoding="utf-8"?>\n')
+    f.write('<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">\n')
+    # Create cm_caf.xml - contents
+    # This means we also support multiple base files (e.g. checking if strings.xml and arrays.xml are changed)
+    contents = []
+    item_aosp = item.getElementsByTagName('aosp')
+    for aosp_item in item_aosp:
+        url = aosp_item.firstChild.nodeValue
+        xml_file = aosp_item.attributes["file"].value
+        path_to_base = 'tmp/' + path_to_values + '/' + xml_file
+        path_to_cm = path_to_values + '/' + xml_file
+        urlretrieve(url, path_to_base)
+        contents = contents + get_caf_additions(path_to_base, path_to_cm)
+    for addition in contents:
+        f.write(addition + '\n')
+    # Create cm_caf.xml - the end
+    f.write('</resources>')
+    f.close()
+    cm_caf.append(path_to_values + '/cm_caf.xml')
+    print('Created ' + path_to_values + '/cm_caf.xml')
 
 print('\nSTEP 2: Upload Crowdin source translations')
 # Execute 'crowdin-cli upload sources' and show output
@@ -248,15 +257,15 @@
 # Execute 'crowdin-cli download' and show output
 print(subprocess.check_output(['crowdin-cli', "download"]))
 
-#print('STEP 4A: Clean up of source cm_caf.xmls')
-## Remove all cm_caf.xml files, which you can find in the list 'cm_caf'
-#for cm_caf_file in cm_caf:
-#    print ('Removing ' + cm_caf_file)
-#    os.remove(cm_caf_file)
+print('STEP 4A: Clean up of source cm_caf.xmls')
+# Remove all cm_caf.xml files, which you can find in the list 'cm_caf'
+for cm_caf_file in cm_caf:
+    print ('Removing ' + cm_caf_file)
+    os.remove(cm_caf_file)
 
-#print('\nSTEP 4B: Clean up of temp dir')
-## We are done with cm_caf.xml files, so remove tmp/
-#shutil.rmtree(os.getcwd() + '/tmp')
+print('\nSTEP 4B: Clean up of temp dir')
+# We are done with cm_caf.xml files, so remove tmp/
+shutil.rmtree(os.getcwd() + '/tmp')
 
 print('\nSTEP 4C: Clean up of empty translations')
 # Some line of code that I found to find all XML files
