diff --git a/crowdin/extra_packages.xml b/crowdin/extra_packages.xml
index 54d8f55..4374935 100644
--- a/crowdin/extra_packages.xml
+++ b/crowdin/extra_packages.xml
@@ -28,8 +28,4 @@
   <project path="device/samsung/aries-common" name="CyanogenMod/android_device_samsung_aries-common" />
   <project path="device/samsung/galaxys2-common" name="CyanogenMod/android_device_samsung_galaxys2-common" />
   <project path="device/samsung/p1-common" name="CyanogenMod/android_device_samsung_p1-common" />
-
-  <!-- Website translations -->
-  <project path="website/getcm-translations" name="CyanogenMod/getcm-translations" revision="master" />
-  <project path="website/CMAccountWebsite" name="CyanogenMod/CMAccountWebsite" revision="master" />
 </manifest>
diff --git a/crowdin/js.xml b/crowdin/js.xml
deleted file mode 100644
index abaf149..0000000
--- a/crowdin/js.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 The CyanogenMod Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<js>
-    <project path="website/CMAccountWebsite/app/js/translations" source="en.js" />
-</js>
diff --git a/crowdin_sync.py b/crowdin_sync.py
index d5addc1..6daadf3 100755
--- a/crowdin_sync.py
+++ b/crowdin_sync.py
@@ -71,77 +71,6 @@
 
     print('Succesfully pushed commit for ' + name)
 
-def sync_js_translations(sync_type, path, lang=''):
-    # lang is necessary in download mode
-    if sync_type == 'download' and lang == '':
-        sys.exit('Invalid syntax. Language code is required in download mode.')
-
-    # Read source en.js file. This is necessary for both upload and download modes
-    with codecs.open(path + 'en.js', 'r', 'utf-8') as f:
-        content = f.readlines()
-
-    if sync_type == 'upload':
-        # Prepare XML file structure
-        doc = minidom.Document()
-        header = doc.createElement('resources')
-        file_write = codecs.open(path + 'en.xml', 'w', 'utf-8')
-    else:
-        # Open translation files
-        file_write = codecs.open(path + lang + '.js', 'w', 'utf-8')
-        xml_base = minidom.parse(path + lang + '.xml')
-        tags = xml_base.getElementsByTagName('string')
-
-    # Read each line of en.js
-    for a_line in content:
-        # Regex to determine string id
-        m = re.search(' (.*): [\'|\"]', a_line)
-        if m is not None:
-            for string_id in m.groups():
-                if string_id is not None:
-                    # Find string id
-                    string_id = string_id.replace(' ', '')
-                    m2 = re.search('\'(.*)\'|"(.*)"', a_line)
-                    # Find string contents
-                    for string_content in m2.groups():
-                        if string_content is not None:
-                            break
-                    if sync_type == 'upload':
-                        # In upload mode, create the appropriate string element.
-                        contents = doc.createElement('string')
-                        contents.attributes['name'] = string_id
-                        contents.appendChild(doc.createTextNode(string_content))
-                        header.appendChild(contents)
-                    else:
-                        # In download mode, check if string_id matches a name attribute in the translation XML file.
-                        # If it does, replace English text with the translation.
-                        # If it does not, English text will remain and will be added to the file to retain the file structure.
-                        for string in tags:
-                            if string.attributes['name'].value == string_id:
-                                a_line = a_line.replace(string_content.rstrip(), string.firstChild.nodeValue)
-                                break
-                    break
-        # In download mode do not write comments
-        if sync_type == 'download' and not '//' in a_line:
-            # Add language identifier (1)
-            if 'cmaccount.l10n.en' in a_line:
-                a_line = a_line.replace('l10n.en', 'l10n.' + lang)
-            # Add language identifier (2)
-            if 'l10n.add(\'en\'' in a_line:
-                a_line = a_line.replace('l10n.add(\'en\'', 'l10n.add(\'' + lang + '\'')
-            # Now write the line
-            file_write.write(a_line)
-
-    # Create XML file structure
-    if sync_type == 'upload':
-        header.appendChild(contents)
-        contents = header.toxml().replace('<string', '\n    <string').replace('</resources>', '\n</resources>')
-        file_write.write('<?xml version="1.0" encoding="utf-8"?>\n')
-        file_write.write('<!-- .JS CONVERTED TO .XML - DO NOT MERGE THIS FILE -->\n')
-        file_write.write(contents)
-
-    # Close file
-    file_write.close()
-
 ###################################################################################################
 
 print('Welcome to the CM Crowdin sync script!')
@@ -206,67 +135,39 @@
 else:
     print('Found: crowdin/extra_packages.xml')
 
-# Check for crowdin/js.xml
-if not os.path.isfile('crowdin/js.xml'):
-    sys.exit('You have no crowdin/js.xml. Terminating.')
-else:
-    print('Found: crowdin/js.xml')
-
 print('\nSTEP 0B: Define shared variables')
 
 # Variables regarding android/default.xml
 print('Loading: android/default.xml')
 xml_android = minidom.parse('android/default.xml')
 
-# Variables regarding crowdin/js.xml
-print('Loading: crowdin/js.xml')
-xml_js = minidom.parse('crowdin/js.xml')
-items_js = xml_js.getElementsByTagName('project')
-
 # Default branch
 default_branch = get_default_branch(xml_android)
 print('Default branch: ' + default_branch)
 
 ############################################## STEP 1 ##############################################
 
-print('\nSTEP 1: Upload Crowdin source translations (non-AOSP supported languages)')
+print('\nSTEP 1A: Upload Crowdin source translations (non-AOSP supported languages)')
 # Execute 'crowdin-cli upload sources' and show output
 print(subprocess.check_output(['crowdin-cli', '--config=crowdin/crowdin_aosp.yaml', '--identity=crowdin/config_aosp.yaml', 'upload', 'sources']))
 
-############################################## STEP 2 ##############################################
-
-# JS files cannot be translated easily on Crowdin. That's why they are uploaded as Android XML
-# files. At this time, the (English) JS source file is converted to an XML file, so Crowdin knows it
-# needs to download for it.
-#print('\nSTEP 2: Convert .js source translations to .xml')
-#
-#js_files = []
-#
-#for item in items_js:
-#    path = item.attributes['path'].value + '/'
-#    sync_js_translations('upload', path)
-#    print('Converted: ' + path + 'en.js to en.xml')
-#    js_files.append(path + 'en.js')
-
-############################################## STEP 3 ##############################################
-
-print('\nSTEP 3: Upload Crowdin source translations (AOSP supported languages)')
+print('\nSTEP 1B: Upload Crowdin source translations (AOSP supported languages)')
 # Execute 'crowdin-cli upload sources' and show output
 print(subprocess.check_output(['crowdin-cli', '--config=crowdin/crowdin_cm.yaml', '--identity=crowdin/config_cm.yaml', 'upload', 'sources']))
 
-############################################## STEP 4 ##############################################
+############################################## STEP 2 ##############################################
 
-print('\nSTEP 4A: Download Crowdin translations (AOSP supported languages)')
+print('\nSTEP 2A: Download Crowdin translations (AOSP supported languages)')
 # Execute 'crowdin-cli download' and show output
 print(subprocess.check_output(['crowdin-cli', '--config=crowdin/crowdin_cm.yaml', '--identity=crowdin/config_cm.yaml', 'download']))
 
-print('\nSTEP 4B: Download Crowdin translations (non-AOSP supported languages)')
+print('\nSTEP 2B: Download Crowdin translations (non-AOSP supported languages)')
 # Execute 'crowdin-cli download' and show output
 print(subprocess.check_output(['crowdin-cli', '--config=crowdin/crowdin_aosp.yaml', '--identity=crowdin/config_aosp.yaml', 'download']))
 
-############################################## STEP 5 ##############################################
+############################################## STEP 3 ##############################################
 
-print('\nSTEP 5: Remove useless empty translations')
+print('\nSTEP 3: Remove useless empty translations')
 # Some line of code that I found to find all XML files
 result = [os.path.join(dp, f) for dp, dn, filenames in os.walk(os.getcwd()) for f in filenames if os.path.splitext(f)[1] == '.xml']
 empty_contents = {'<resources/>', '<resources xmlns:android="http://schemas.android.com/apk/res/android"/>', '<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"/>', '<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"/>'}
@@ -277,34 +178,16 @@
             os.remove(xml_file)
             break
 
-#for js_file in js_files:
-#    print('Removing ' + js_file)
-#    os.remove(js_file)
+############################################## STEP 4 ##############################################
 
-############################################## STEP 6 ##############################################
-
-print('\nSTEP 6: Create a list of pushable translations')
+print('\nSTEP 4: Create a list of pushable translations')
 # Get all files that Crowdin pushed
 proc = subprocess.Popen(['crowdin-cli --config=crowdin/crowdin_cm.yaml --identity=crowdin/config_cm.yaml list sources && crowdin-cli --config=crowdin/crowdin_aosp.yaml --identity=crowdin/config_aosp.yaml list sources'], stdout=subprocess.PIPE, shell=True)
 proc.wait() # Wait for the above to finish
 
-############################################## STEP 7 ##############################################
+############################################## STEP 5 ##############################################
 
-#print('\nSTEP 7: Convert JS-XML translations to their JS format')
-#
-#for item in items_js:
-#    path = item.attributes['path'].value
-#    all_xml_files = [os.path.join(dp, f) for dp, dn, filenames in os.walk(os.getcwd() + '/' + path) for f in filenames if os.path.splitext(f)[1] == '.xml']
-#    for xml_file in all_xml_files:
-#        lang_code = os.path.splitext(xml_file)[0]
-#        sync_js_translations('download', path, lang_code)
-#        os.remove(xml_file)
-#    os.remove(path + '/' + item.attributes['source'].value)
-#
-
-############################################## STEP 8 ##############################################
-
-print('\nSTEP 8: Commit to Gerrit')
+print('\nSTEP 5: Commit to Gerrit')
 xml_extra = minidom.parse('crowdin/extra_packages.xml')
 items = xml_android.getElementsByTagName('project')
 items += xml_extra.getElementsByTagName('project')
