diff --git a/.build/Gruntfile.js b/.build/Gruntfile.js
index 5ae24b022b7995c50f798f23108b722e70a733c2..56bac94ee9b502dd7bd2313c1666de48bcbe3308 100644
--- a/.build/Gruntfile.js
+++ b/.build/Gruntfile.js
@@ -2,34 +2,60 @@ module.exports = function(grunt) {
     grunt.initConfig({
         bower_concat: {
             all: {
-                dest: '../gui/slick/js/_bower.js',
-                // cssDest: 'gui/slick/css/_bower.css',
+                dest: './_bower.js',
+                cssDest: './_bower.css',
                 exclude: [
-                    // 'jquery',
-                    // 'modernizr'
                 ],
                 dependencies: {
-                    // 'underscore': 'jquery',
-                    // 'backbone': 'underscore',
-                    // 'jquery-mousewheel': 'jquery'
+                },
+                mainFiles: {
+                    'tablesorter': [
+                        'dist/js/jquery.tablesorter.combined.js',
+                        'dist/js/widgets/widget-columnSelector.min.js',
+                        'dist/js/widgets/widget-stickyHeaders.min.js',
+                        'dist/css/theme.blue.min.css'
+                    ],
+                    'bootstrap-formhelpers': [
+                        'dist/js/bootstrap-formhelpers.min.js'
+                    ]
                 },
                 bowerOptions: {
                     relative: false
-                },
+                }
             }
         },
         uglify: {
             my_target: {
                 files: {
-                    '../gui/slick/js/_bower.min.js': ['../gui/slick/js/_bower.js']
+                    '../gui/slick/js/vender.min.js': ['./_bower.js'],
+                    '../gui/slick/js/core.min.js': ['../gui/slick/js/core.js']
                 }
             }
+        },
+        cssmin: {
+            options: {
+                shorthandCompacting: false,
+                roundingPrecision: -1
+            },
+            target: {
+                files: {
+                    '../gui/slick/css/vender.min.css': ['./_bower.css'],
+                    // '../gui/slick/css/core.min.css': ['./gui/slick/css/core.css']
+                }
+            }
+        },
+        jshint: {
+            options: {
+                eqeqeq: true
+            },
+            uses_defaults: ['../gui/slick/js/**/*.js']
         }
     });
 
     grunt.loadNpmTasks('grunt-bower-concat');
     grunt.loadNpmTasks('grunt-contrib-uglify');
+    grunt.loadNpmTasks('grunt-contrib-cssmin');
+    grunt.loadNpmTasks('grunt-contrib-jshint');
 
-    grunt.registerTask('default', ['bower_concat', 'uglify']);
-
+    grunt.registerTask('default', ['bower_concat', 'uglify', 'cssmin']);
 };
diff --git a/.build/bower.json b/.build/bower.json
index bb396f088855eba598330d50a98c2d81cb4b0e51..8954ee4c899e14d3b29161f6f0de765951556877 100644
--- a/.build/bower.json
+++ b/.build/bower.json
@@ -14,11 +14,16 @@
     "bootstrap": "~3.3.5",
     "bootstrap-hover-dropdown": "~2.1.3",
     "jquery-ui": "~1.11.4",
-    "tablesorter": "jquery.tablesorter#~2.23.5",
     "jquery-form": "~3.46.0",
     "jquery-timeago": "~1.4.3",
     "jquery-tokeninput": "~1.7.0",
     "bootstrap3-typeahead": "~3.1.1",
-    "underscore": "~1.8.3"
+    "underscore": "~1.8.3",
+    "jqueryui-touch-punch": "*",
+    "pnotify": "~2.1.0",
+    "qtip2": "~2.2.1",
+    "tablesorter": "jquery.tablesorter#~2.24.5",
+    "jquery-confirm": "~2.5.2",
+    "bootstrap-formhelpers": "~2.3.0"
   }
 }
diff --git a/.build/package.json b/.build/package.json
index cada201ee611225dd7d68b3ac51f0db63181c017..a0a4b41183e254ed37b997591865458798311451 100644
--- a/.build/package.json
+++ b/.build/package.json
@@ -5,14 +5,16 @@
   "dependencies": {
     "grunt": "^0.4.5",
     "grunt-bower-concat": "^0.5.0",
+    "grunt-contrib-cssmin": "^0.14.0",
+    "grunt-contrib-jshint": "^0.11.3",
     "grunt-contrib-uglify": "^0.9.2"
   },
   "repository": {
     "type": "git",
-    "url": "git+https://github.com/OmgImAlexis/SickRage.git"
+    "url": "git+https://github.com/SickRage/SickRage.git"
   },
   "bugs": {
-    "url": "https://github.com/OmgImAlexis/SickRage/issues"
+    "url": "https://github.com/SickRage/SickRage/issues"
   },
-  "homepage": "https://github.com/OmgImAlexis/SickRage#readme"
+  "homepage": "https://github.com/SickRage/SickRage#readme"
 }
diff --git a/.gitignore b/.gitignore
index e17cfc889383a407336fd939bdb57adfb7c3d6bd..77f444fa1137a7e4d2e8f273a4bb16be48468dfd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -62,6 +62,6 @@ lib/unrar2/UnRAR.exe
 
 # Bower #
 ######################
-bower_components
-node_modules
-gui/**/_bower.js
+.build/bower_components
+.build/node_modules
+.build/_bower*
diff --git a/.jscsrc b/.jscsrc
new file mode 100644
index 0000000000000000000000000000000000000000..c13d13dcf1eed8b2f55b8701780280638b1abc67
--- /dev/null
+++ b/.jscsrc
@@ -0,0 +1,3 @@
+{
+    "validateIndentation": 4
+}
diff --git a/.jshintrc b/.jshintrc
new file mode 100644
index 0000000000000000000000000000000000000000..7ec9ec8b693393d2ca5bffb94bdcc5e030309f43
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,33 @@
+{
+    "bitwise": true,
+    "browser": true,
+    "camelcase": true,
+    "curly": true,
+    "devel": true,
+    "eqeqeq": true,
+    "forin": true,
+    "freeze": true,
+    "indent": 4,
+    "jquery": true,
+    "latedef": true,
+    "maxerr": 100,
+    "noarg": true,
+    "noempty": true,
+    "nonbsp": true,
+    "undef": true,
+    "unused": true,
+    "node": true,
+    "globals": {
+        "srRoot": true,
+        "themeSpinner": true,
+        "metaToBool": true,
+        "getMeta": true,
+        "isMeta": true,
+        "topImageHtml": true,
+        "generate_bwlist": true,
+        "_": true,
+        "bootbox": true,
+        "PNotify": true,
+        "anonURL": true
+    }
+}
diff --git a/.travis.yml b/.travis.yml
index f250fbdf4569b5b37a4ed14bdec80a38fbc9087a..74d73d121d460d86a86baa6a5d19babc05de1fc5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,8 @@
+sudo: false
+
 language: python
-python:
-  - 2.7.10
+
+python: 2.7.9
 
 sudo: false
 
@@ -8,13 +10,8 @@ branches:
   except:
     - master
 
-install: echo "Nothing required!"
-
 cache: pip
 
-before_script:
- - chmod +x ./tests/all_tests.py
-
 script:
   - ./tests/all_tests.py
 
diff --git a/SickBeard.py b/SickBeard.py
index ad942a88db47c72fcbf6bf84f618af524ebee2b3..e9a3fa0d31afd422c65c32029e6567ac8634453c 100755
--- a/SickBeard.py
+++ b/SickBeard.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python2.7
+# -*- coding: utf-8 -*
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -20,8 +21,7 @@
 # Check needed software dependencies to nudge users to fix their setup
 
 # pylint: disable=W0703
-
-from __future__ import with_statement
+# Catching too general exception
 
 import codecs
 
@@ -45,9 +45,11 @@ if sys.version_info < (2, 7):
     print "Sorry, requires Python 2.7.x"
     sys.exit(1)
 
+# https://mail.python.org/pipermail/python-dev/2014-September/136300.html
 if sys.version_info >= (2, 7, 9):
     import ssl
     # pylint: disable=W0212
+    # Access to a protected member of a client class
     ssl._create_default_https_context = ssl._create_unverified_context
 
 import locale
@@ -55,14 +57,20 @@ import datetime
 import threading
 import getopt
 
+# Do this before importing sickbeard, to prevent locked files and incorrect import
+oldtornado = os.path.abspath(os.path.join(os.path.dirname(__file__), 'tornado'))
+if os.path.isdir(oldtornado):
+    shutil.move(oldtornado, oldtornado + '_kill')
+    shutil.rmtree(oldtornado + '_kill')
+
 import sickbeard
 from sickbeard import db, logger, network_timezones, failed_history, name_cache
 from sickbeard.tv import TVShow
 from sickbeard.webserveInit import SRWebServer
 from sickbeard.event_queue import Events
 from configobj import ConfigObj
-from sickrage.helper.encoding import ek
 
+# http://bugs.python.org/issue7980#msg221094
 throwaway = datetime.datetime.strptime('20110101', '%Y%m%d')
 
 signal.signal(signal.SIGINT, sickbeard.sig_handler)
@@ -71,6 +79,7 @@ signal.signal(signal.SIGTERM, sickbeard.sig_handler)
 
 class SickRage(object):
     # pylint: disable=R0902
+    # Too many instance attributes
     def __init__(self):
         # system event callback for shutdown/restart
         sickbeard.events = Events(self.shutdown)
@@ -92,7 +101,6 @@ class SickRage(object):
         self.log_dir = None
         self.consoleLogging = True
 
-
     @staticmethod
     def help_message():
         """
@@ -125,33 +133,9 @@ class SickRage(object):
 
         return help_msg
 
-    @staticmethod
-    def fix_clients_nonsense():
-
-        filenames = [
-            "sickbeard/clients/download_station.py",
-            "sickbeard/clients/utorrent.py",
-            "sickbeard/clients/qbittorrent.py",
-            "sickbeard/clients/transmission.py",
-            "sickbeard/clients/deluge.py",
-            "sickbeard/clients/deluged.py",
-            "sickbeard/clients/rtorrent.py"
-        ]
-
-        for filename in filenames:
-            filename = ek(os.path.join, sickbeard.PROG_DIR, filename)
-            try:
-                if ek(os.path.exists, filename):
-                    ek(os.remove, filename)
-            except Exception:
-                pass
-            try:
-                if ek(os.path.exists, filename + "c"):
-                    ek(os.remove, filename + "c")
-            except Exception:
-                pass
-
     # pylint: disable=R0912,R0915
+    # Too many branches
+    # Too many statements
     def start(self):
         # do some preliminary stuff
         sickbeard.MY_FULLNAME = os.path.normpath(os.path.abspath(__file__))
@@ -159,26 +143,22 @@ class SickRage(object):
         sickbeard.PROG_DIR = os.path.dirname(sickbeard.MY_FULLNAME)
         sickbeard.DATA_DIR = sickbeard.PROG_DIR
         sickbeard.MY_ARGS = sys.argv[1:]
-        sickbeard.SYS_ENCODING = None
 
         try:
             locale.setlocale(locale.LC_ALL, "")
             sickbeard.SYS_ENCODING = locale.getpreferredencoding()
         except (locale.Error, IOError):
-            pass
+            sickbeard.SYS_ENCODING = 'UTF-8'
 
-        # For OSes that are poorly configured I'll just randomly force UTF-8
-        if not sickbeard.SYS_ENCODING or sickbeard.SYS_ENCODING in ('ANSI_X3.4-1968', 'US-ASCII', 'ASCII'):
+        # pylint: disable=E1101
+        if not sickbeard.SYS_ENCODING or sickbeard.SYS_ENCODING.lower() in ('ansi_x3.4-1968', 'us-ascii', 'ascii', 'charmap') or \
+            (sys.platform.startswith('win') and sys.getwindowsversion()[0] >= 6 and getattr(sys.stdout, 'device', sys.stdout).encoding.lower() in ('cp65001', 'charmap')):
             sickbeard.SYS_ENCODING = 'UTF-8'
 
+        # TODO: Continue working on making this unnecessary, this hack creates all sorts of hellish problems
         if not hasattr(sys, "setdefaultencoding"):
             reload(sys)
 
-        if sys.platform == 'win32':
-            #pylint: disable=E1101
-            if sys.getwindowsversion()[0] >= 6 and sys.stdout.encoding == 'cp65001':
-                sickbeard.SYS_ENCODING = 'UTF-8'
-
         try:
             # pylint: disable=E1101
             # On non-unicode builds this will raise an AttributeError, if encoding type is not valid it throws a LookupError
@@ -191,13 +171,13 @@ class SickRage(object):
         self.consoleLogging = (not hasattr(sys, "frozen")) or (sickbeard.MY_NAME.lower().find('-console') > 0)
 
         # Rename the main thread
-        threading.currentThread().name = "MAIN"
+        threading.currentThread().name = u"MAIN"
 
         try:
-            # pylint: disable=W0612
-            opts, args = getopt.getopt(sys.argv[1:], "hqdp::",
-                                       ['help', 'quiet', 'nolaunch', 'daemon', 'pidfile=', 'port=',
-                                        'datadir=', 'config=', 'noresize'])  # @UnusedVariable
+            opts, _ = getopt.getopt(
+                sys.argv[1:], "hqdp::",
+                ['help', 'quiet', 'nolaunch', 'daemon', 'pidfile=', 'port=', 'datadir=', 'config=', 'noresize']
+            )
         except getopt.GetoptError:
             sys.exit(self.help_message())
 
@@ -265,7 +245,7 @@ class SickRage(object):
 
             else:
                 if self.consoleLogging:
-                    sys.stdout.write("Not running in daemon mode. PID file creation disabled.\n")
+                    sys.stdout.write(u"Not running in daemon mode. PID file creation disabled.\n")
 
                 self.CREATEPID = False
 
@@ -299,11 +279,11 @@ class SickRage(object):
         if os.path.exists(restoreDir):
             success = self.restoreDB(restoreDir, sickbeard.DATA_DIR)
             if self.consoleLogging:
-                sys.stdout.write("Restore: restoring DB and config.ini %s!\n" % ("FAILED", "SUCCESSFUL")[success])
+                sys.stdout.write(u"Restore: restoring DB and config.ini %s!\n" % ("FAILED", "SUCCESSFUL")[success])
 
         # Load the config and publish it to the sickbeard package
         if self.consoleLogging and not os.path.isfile(sickbeard.CONFIG_FILE):
-            sys.stdout.write("Unable to find '" + sickbeard.CONFIG_FILE + "' , all settings will be default!" + "\n")
+            sys.stdout.write(u"Unable to find '" + sickbeard.CONFIG_FILE + "' , all settings will be default!" + "\n")
 
         sickbeard.CFG = ConfigObj(sickbeard.CONFIG_FILE)
 
@@ -316,9 +296,6 @@ class SickRage(object):
         # Get PID
         sickbeard.PID = os.getpid()
 
-        # Fix clients old files
-        self.fix_clients_nonsense()
-
         # Build from the DB to start with
         self.loadShowsFromDB()
 
@@ -388,8 +365,8 @@ class SickRage(object):
         if sickbeard.USE_FAILED_DOWNLOADS:
             failed_history.trimHistory()
 
-        # Check for metadata indexer updates for shows (Disabled until we use api)
-        #sickbeard.showUpdateScheduler.forceRun()
+        # # Check for metadata indexer updates for shows (Disabled until we use api)
+        # sickbeard.showUpdateScheduler.forceRun()
 
         # Launch browser
         if sickbeard.LAUNCH_BROWSER and not (self.noLaunch or self.runAsDaemon):
@@ -404,13 +381,15 @@ class SickRage(object):
         Fork off as a daemon
         """
         # pylint: disable=E1101,W0212
+        # An object is accessed for a non-existent member.
+        # Access to a protected member of a client class
         # Make a non-session-leader child process
         try:
             pid = os.fork()  # @UndefinedVariable - only available in UNIX
             if pid != 0:
                 os._exit(0)
         except OSError, e:
-            sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
+            sys.stderr.write(u"fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))
             sys.exit(1)
 
         os.setsid()  # @UndefinedVariable - only available in UNIX
@@ -422,20 +401,20 @@ class SickRage(object):
         # Daemons traditionally run with umask 0 anyways and this should not have repercussions
         os.umask(0)
 
-
         # Make the child a session-leader by detaching from the terminal
         try:
             pid = os.fork()  # @UndefinedVariable - only available in UNIX
             if pid != 0:
                 os._exit(0)
         except OSError, e:
-            sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))
+            sys.stderr.write(u"fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))
             sys.exit(1)
 
         # Write pid
         if self.CREATEPID:
             pid = str(os.getpid())
             logger.log(u"Writing PID: " + pid + " to " + str(self.PIDFILE))
+
             try:
                 file(self.PIDFILE, 'w').write("%s\n" % pid)
             except IOError, e:
@@ -451,16 +430,16 @@ class SickRage(object):
         stdin = file(devnull, 'r')
         stdout = file(devnull, 'a+')
         stderr = file(devnull, 'a+')
-        os.dup2(stdin.fileno(), sys.stdin.fileno())
-        os.dup2(stdout.fileno(), sys.stdout.fileno())
-        os.dup2(stderr.fileno(), sys.stderr.fileno())
+
+        os.dup2(stdin.fileno(), getattr(sys.stdin, 'device', sys.stdin).fileno())
+        os.dup2(stdout.fileno(), getattr(sys.stdout, 'device', sys.stdout).fileno())
+        os.dup2(stderr.fileno(), getattr(sys.stderr, 'device', sys.stderr).fileno())
 
     @staticmethod
     def remove_pid_file(PIDFILE):
         try:
             if os.path.exists(PIDFILE):
                 os.remove(PIDFILE)
-
         except (IOError, OSError):
             return False
 
@@ -471,7 +450,6 @@ class SickRage(object):
         """
         Populates the showList with shows from the database
         """
-
         logger.log(u"Loading initial show list", logger.DEBUG)
 
         myDB = db.DBConnection()
@@ -497,7 +475,7 @@ class SickRage(object):
             for filename in filesList:
                 srcFile = os.path.join(srcDir, filename)
                 dstFile = os.path.join(dstDir, filename)
-                bakFile = os.path.join(dstDir, '{0}.bak-{1}'.format(filename, datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d_%H%M%S')))
+                bakFile = os.path.join(dstDir, '{0}.bak-{1}'.format(filename, datetime.datetime.now().strftime('%Y%m%d_%H%M%S')))
                 if os.path.isfile(dstFile):
                     shutil.move(dstFile, bakFile)
                 shutil.move(srcFile, dstFile)
@@ -515,8 +493,9 @@ class SickRage(object):
 
             # shutdown web server
             if self.webserver:
-                logger.log("Shutting down Tornado")
+                logger.log(u"Shutting down Tornado")
                 self.webserver.shutDown()
+
                 try:
                     self.webserver.join(10)
                 except Exception:
@@ -541,12 +520,13 @@ class SickRage(object):
                     if '--nolaunch' not in popen_list:
                         popen_list += ['--nolaunch']
                     logger.log(u"Restarting SickRage with " + str(popen_list))
-                    logger.shutdown() #shutdown the logger to make sure it's released the logfile BEFORE it restarts SR.
+                    logger.shutdown()  # shutdown the logger to make sure it's released the logfile BEFORE it restarts SR.
                     subprocess.Popen(popen_list, cwd=os.getcwd())
 
         # system exit
-        logger.shutdown() #Make sure the logger has stopped, just in case
+        logger.shutdown()  # Make sure the logger has stopped, just in case
         # pylint: disable=W0212
+        # Access to a protected member of a client class
         os._exit(0)
 
 
diff --git a/gui/slick/css/dark.css b/gui/slick/css/dark.css
index fe24eafcb4f4ab6bee444f3f6736bdee63af8fc8..d2189bcdf49877d145658397429240e438aa65ad 100644
--- a/gui/slick/css/dark.css
+++ b/gui/slick/css/dark.css
@@ -4,34 +4,34 @@ inc_top.mako
 
 .ui-dialog,
 .ui-dialog-buttonpane {
-	background: #2a2a2a !important;
+    background: #2a2a2a !important;
 }
 
 .ui-widget-content {
     background: #606060;
     border: 1px solid #111;
-	color: #fff;
+    color: #fff;
 }
 
 .ui-widget-content a {
-	color: #fff;
+    color: #fff;
 }
 
 .ui-widget-content a:hover {
-	color: #09A2FF;
-	text-decoration: none;
+    color: #09A2FF;
+    text-decoration: none;
 }
 
 .ui-widget-header {
-	background: #3d3d3d;
-	border: 1px solid #111;
-	color: #fff;
+    background: #3d3d3d;
+    border: 1px solid #111;
+    color: #fff;
 }
 
 .ui-state-default,
 .ui-widget-content .ui-state-default,
 .ui-widget-header .ui-state-default {
-	border: 1px solid #111;
+    border: 1px solid #111;
 }
 
 .ui-state-hover,
@@ -40,35 +40,35 @@ inc_top.mako
 .ui-state-focus,
 .ui-widget-content .ui-state-focus,
 .ui-widget-header .ui-state-focus {
-	background: #3d3d3d;
+    background: #3d3d3d;
 }
 
 .ui-state-active,
 .ui-widget-content .ui-state-active,
 .ui-widget-header .ui-state-active {
-	background: #3d3d3d;
+    background: #3d3d3d;
 }
 
 .ui-icon,
 .ui-widget-content .ui-icon {
-	background-image: url("../css/lib/images/ui-icons_ffffff_256x240.png");
+    background-image: url("../css/lib/images/ui-icons_ffffff_256x240.png");
 }
 
 .ui-state-default .ui-icon {
-	background-image: url('../css/lib/images/ui-icons_09a2ff_256x240.png');
+    background-image: url('../css/lib/images/ui-icons_09a2ff_256x240.png');
 }
 
 .ui-widget-overlay {
-	background: #000000 url("../css/lib/images/ui-bg_flat_0_000000_40x100.png") 50% 50% repeat-x;
+    background: #000000 url("../css/lib/images/ui-bg_flat_0_000000_40x100.png") 50% 50% repeat-x;
 }
 
 .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited {
-	color: #fff;
-	text-decoration: none;
+    color: #fff;
+    text-decoration: none;
 }
 
 .ui-dialog .ui-dialog-titlebar-close {
-	background: #333;
+    background: #333;
 }
 
 .ui-tabs {
@@ -78,134 +78,134 @@ inc_top.mako
 }
 
 .ui-tabs .ui-tabs-panel {
-	background-color: #3d3d3d !important;
-	border: 1px solid #111 !important;
+    background-color: #3d3d3d !important;
+    border: 1px solid #111 !important;
 }
 
 .ui-tabs-nav > :not(.ui-tabs-active){
-	background: #333;
-	border-top-left-radius: 5px;
-	border-top-right-radius: 5px;
+    background: #333;
+    border-top-left-radius: 5px;
+    border-top-right-radius: 5px;
 }
 
 [class^="menu-icon-"], [class*=" menu-icon-"] {
-	background: url("../images/menu/menu-icons-white.png");
-	height: 16px;
-	width: 16px;
-	display: inline-block;
-	position: relative;
-	top: 2px;
-	float: left;
+    background: url("../images/menu/menu-icons-white.png");
+    height: 16px;
+    width: 16px;
+    display: inline-block;
+    position: relative;
+    top: 2px;
+    float: left;
 }
 
 .menu-icon-addshow {
-	background-position: 0px 0px;
+    background-position: 0px 0px;
 }
 
 .menu-icon-anime {
-	background-position: -21px 0px;
+    background-position: -21px 0px;
 }
 
 .menu-icon-backlog-view {
-	background-position: -42px 0px;
+    background-position: -42px 0px;
 }
 
 .menu-icon-backlog {
-	background-position: -63px 0px;
+    background-position: -63px 0px;
 }
 
 .menu-icon-bittorrent {
-	background-position: -84px 0px;
+    background-position: -84px 0px;
 }
 
 .menu-icon-config-index {
-	background-position: -105px 0px;
+    background-position: -105px 0px;
 }
 
 .menu-icon-config {
-	background-position: -126px 0px;
+    background-position: -126px 0px;
 }
 
 .menu-icon-failed-download {
-	background-position: -147px 0px;
+    background-position: -147px 0px;
 }
 
 .menu-icon-home {
-	background-position: -168px 0px;
+    background-position: -168px 0px;
 }
 
 .menu-icon-manage {
-	background-position: -189px 0px;
+    background-position: -189px 0px;
 }
 
 .menu-icon-manage-searches {
-	background-position: -210px 0px;
+    background-position: -210px 0px;
 }
 
 .menu-icon-poster {
-	background-position: -231px 0px;
+    background-position: -231px 0px;
 }
 
 .menu-icon-postprocess {
-	background-position: -252px 0px;
+    background-position: -252px 0px;
 }
 
 .menu-icon-restart {
-	background-position: -273px 0px;
+    background-position: -273px 0px;
 }
 
 .menu-icon-shutdown {
-	background-position: -294px 0px;
+    background-position: -294px 0px;
 }
 
 .menu-icon-update {
-	background-position: -315px 0px;
+    background-position: -315px 0px;
 }
 
 .menu-icon-viewlog-errors {
-	background-position: -336px 0px;
+    background-position: -336px 0px;
 }
 
 .menu-icon-viewlog {
-	background-position: -357px 0px;
+    background-position: -357px 0px;
 }
 
 .menu-icon-kodi {
-	background-position: -378px 0px;
+    background-position: -378px 0px;
 }
 
 .menu-icon-help {
-	background-position: -399px 0px;
+    background-position: -399px 0px;
 }
 
 [class^="submenu-icon-"], [class*=" submenu-icon-"] {
-	background: url("../images/menu/menu-icons-white.png");
-	height: 16px;
-	width: 16px;
+    background: url("../images/menu/menu-icons-white.png");
+    height: 16px;
+    width: 16px;
 }
 
 .submenu-icon-anime {
-	background-position: -21px 0px;
+    background-position: -21px 0px;
 }
 
 .submenu-icon-bittorrent {
-	background-position: -84px 0px;
+    background-position: -84px 0px;
 }
 
 .submenu-icon-failed-download {
-	background-position: -147px 0px;
+    background-position: -147px 0px;
 }
 
 .submenu-icon-restart {
-	background-position: -273px 0px;
+    background-position: -273px 0px;
 }
 
 .submenu-icon-shutdown {
-	background-position: -294px 0px;
+    background-position: -294px 0px;
 }
 
 .submenu-icon-kodi {
-	background-position: -378px 0px;
+    background-position: -378px 0px;
 }
 
 /* =======================================================================
@@ -213,16 +213,16 @@ inc_bottom.mako
 ========================================================================== */
 
 .footer {
-	width: 100%;
-	padding: 20px 0;
-	color: #fff;
-	text-align: center;
-	font-size: 12px;
+    width: 100%;
+    padding: 20px 0;
+    color: #fff;
+    text-align: center;
+    font-size: 12px;
 }
 
 .footerhighlight {
-	color: #09A2FF;
-	display: inline;
+    color: #09A2FF;
+    display: inline;
 }
 
 /* =======================================================================
@@ -230,88 +230,88 @@ home.mako
 ========================================================================== */
 
 .imgbanner .banner {
-	border: 1px solid #111;
-	overflow: hidden;
-	height: 66px;
-	overflow: hidden;
-	border-radius: 8px;
-	vertical-align: top;
-	width: 360px;
-	display: block;
-	margin-left: auto;
-	margin-right: auto;
+    border: 1px solid #111;
+    overflow: hidden;
+    height: 66px;
+    overflow: hidden;
+    border-radius: 8px;
+    vertical-align: top;
+    width: 360px;
+    display: block;
+    margin-left: auto;
+    margin-right: auto;
 }
 
 .imgsmallposter .small {
-	height: 66px;
-	overflow: hidden;
-	border-radius: 3px;
-	vertical-align: middle;
-	width: 45px;
-	border: 1px solid #111;
-	margin-right: 5px;
+    height: 66px;
+    overflow: hidden;
+    border-radius: 3px;
+    vertical-align: middle;
+    width: 45px;
+    border: 1px solid #111;
+    margin-right: 5px;
 }
 
 .progressbarText {
-	position: absolute;
-	top: 0;
-	width: 100%;
-	height: 100%;
-	overflow: visible;
-	text-align: center;
-	text-shadow: 0 0 0.1em #000;
-	vertical-align: middle;
-	font-size: 12px;
-	color: #fff;
+    position: absolute;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    overflow: visible;
+    text-align: center;
+    text-shadow: 0 0 0.1em #000;
+    vertical-align: middle;
+    font-size: 12px;
+    color: #fff;
 }
 
 .show {
-	margin: 12px;
-	width: 188px;
-	height: 352px;
-	background-color: #333;
-	border: 1px solid #111;
-	border-radius: 6px;
+    margin: 12px;
+    width: 188px;
+    height: 352px;
+    background-color: #333;
+    border: 1px solid #111;
+    border-radius: 6px;
 }
 
 .show-title:after {
-	content: "";
-	pointer-events: none;
-	position: absolute;
-	width: 20px;
-	height: 100%;
-	top: 0;
-	right: 0;
-	background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    content: "";
+    pointer-events: none;
+    position: absolute;
+    width: 20px;
+    height: 100%;
+    top: 0;
+    right: 0;
+    background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
 }
 
 .show-date:after {
-	content: "";
-	pointer-events: none;
-	position: absolute;
-	width: 20px;
-	height: 100%;
-	top: 0;
-	right: 0;
-	background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
-	background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    content: "";
+    pointer-events: none;
+    position: absolute;
+    width: 20px;
+    height: 100%;
+    top: 0;
+    right: 0;
+    background-image: -webkit-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -moz-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -ms-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: -o-linear-gradient(right, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
+    background-image: linear-gradient(to left, rgba(51, 51, 51, 1), rgba(51, 51, 51, 0));
 }
 
 td.tvShow a {
-	color: #fff;
-	text-decoration: none;
+    color: #fff;
+    text-decoration: none;
 }
 
 td.tvShow a:hover {
-	cursor: pointer;
-	color: #09A2FF;
+    cursor: pointer;
+    color: #09A2FF;
 }
 
 .popover {
@@ -332,27 +332,27 @@ home_addShows.mako
 ========================================================================== */
 
 .icon-addnewshow {
-	background-image: url("../images/addshows/add-new32-white.png");
-	width: 32px;
-	height: 32px;
+    background-image: url("../images/addshows/add-new32-white.png");
+    width: 32px;
+    height: 32px;
 }
 
 .icon-addtrendingshow {
-	background-image: url("../images/addshows/add-trending32-white.png");
-	width: 32px;
-	height: 32px;
+    background-image: url("../images/addshows/add-trending32-white.png");
+    width: 32px;
+    height: 32px;
 }
 
 .icon-addrecommendedshow {
-	background-image: url("../images/addshows/add-trakt32-white.png");
-	width: 32px;
-	height: 32px;
+    background-image: url("../images/addshows/add-trakt32-white.png");
+    width: 32px;
+    height: 32px;
 }
 
 .icon-addexistingshow {
-	background-image: url("../images/addshows/add-existing32-white.png");
-	width: 32px;
-	height: 32px;
+    background-image: url("../images/addshows/add-existing32-white.png");
+    width: 32px;
+    height: 32px;
 }
 
 /* =======================================================================
@@ -360,11 +360,11 @@ home_newShow.mako
 ========================================================================== */
 
 #displayText {
-	padding: 8px;
-	overflow: hidden;
-	font-size: 14px;
-	background-color: #3d3d3d;
-	border: 1px solid #111;
+    padding: 8px;
+    overflow: hidden;
+    font-size: 14px;
+    background-color: #3d3d3d;
+    border: 1px solid #111;
 }
 
 /* =======================================================================
@@ -372,11 +372,11 @@ home_addExistingShow.mako
 ========================================================================== */
 
 ul#rootDirStaticList li {
-	padding: 4px 5px 4px 5px;
-	margin: 2px;
-	list-style: none outside none;
-	cursor: pointer;
-	background: #3d3d3d;
+    padding: 4px 5px 4px 5px;
+    margin: 2px;
+    list-style: none outside none;
+    cursor: pointer;
+    background: #3d3d3d;
 }
 
 /* =======================================================================
@@ -384,11 +384,11 @@ home_trendingShows.mako
 ========================================================================== */
 
 .traktContainer {
-	margin: 12px;
-	width: 188px;
-	background-color: #333;
-	border: 1px solid #111;
-	border-radius: 6px;
+    margin: 12px;
+    width: 188px;
+    background-color: #333;
+    border: 1px solid #111;
+    border-radius: 6px;
 }
 
 /* =======================================================================
@@ -398,95 +398,95 @@ displayShow.mako
 #prevShow,
 #nextShow,
 #topcontrol {
-	-webkit-filter: "none";
-	filter: none;
+    -webkit-filter: "none";
+    filter: none;
 }
 
 h1.title {
-	padding-bottom: 12px;
-	margin-bottom: 15px;
-	line-height: 30px;
-	text-align: left;
-	text-rendering: optimizelegibility;
-	border-bottom: 1px solid #555;
+    padding-bottom: 12px;
+    margin-bottom: 15px;
+    line-height: 30px;
+    text-align: left;
+    text-rendering: optimizelegibility;
+    border-bottom: 1px solid #555;
 }
 
 ul.tags li {
-	margin-right: 4px;
-	margin-bottom: 5px;
-	padding: 3px 4px 3px 25px;
-	background: url(../images/tag.png) no-repeat scroll 5px 4px #15528F;
-	border-radius: 3px;
-	border: 1px solid #111;
-	color: #FFF;
-	font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
-	text-shadow: 0px 1px rgba(0, 0, 0, 0.8);
-	float: left;
+    margin-right: 4px;
+    margin-bottom: 5px;
+    padding: 3px 4px 3px 25px;
+    background: url(../images/tag.png) no-repeat scroll 5px 4px #15528F;
+    border-radius: 3px;
+    border: 1px solid #111;
+    color: #FFF;
+    font: 14px/18px "Open Sans", "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
+    text-shadow: 0px 1px rgba(0, 0, 0, 0.8);
+    float: left;
 }
 
 .tvshowImg {
-	border: 1px solid #111;
-	border-radius: 5px;
-	height: 311px;
-	width: auto;
-	float: left;
+    border: 1px solid #111;
+    border-radius: 5px;
+    height: 311px;
+    width: auto;
+    float: left;
 }
 
 #summary {
-	padding: 10px;
-	background-color: #3d3d3d;
-	border: 1px solid #111;
-	width: 100%;
-	height: 250px;
-	overflow: auto;
-	cursor: default;
+    padding: 10px;
+    background-color: #3d3d3d;
+    border: 1px solid #111;
+    width: 100%;
+    height: 250px;
+    overflow: auto;
+    cursor: default;
 }
 
 .sickbeardTable {
-	table-layout: auto;
-	width: 100%;
-	border-collapse: collapse;
-	border-spacing: 0;
-	text-align: center;
-	border: none;
-	empty-cells: show;
-	color: #000;
+    table-layout: auto;
+    width: 100%;
+    border-collapse: collapse;
+    border-spacing: 0;
+    text-align: center;
+    border: none;
+    empty-cells: show;
+    color: #000;
 }
 
 .sickbeardTable th{
-	color: #fff;
-	text-align: center;
-	background-color: #15528F;
-	white-space: nowrap;
+    color: #fff;
+    text-align: center;
+    background-color: #15528F;
+    white-space: nowrap;
 }
 
 .sickbeardTable th,
 .sickbeardTable td {
-	border-top: 1px solid #222;
-	border-left: 1px solid #222;
-	padding: 4px;
+    border-top: 1px solid #222;
+    border-left: 1px solid #222;
+    padding: 4px;
 }
 
 th.row-seasonheader {
-	border: none;
-	background-color: #222;
-	color: #fff;
-	padding-top: 15px;
-	text-align: left;
+    border: none;
+    background-color: #222;
+    color: #fff;
+    padding-top: 15px;
+    text-align: left;
 }
 
 tr.seasonheader {
-	padding-bottom: 5px;
-	padding-top: 10px;
-	text-align: left;
-	border: none;
+    padding-bottom: 5px;
+    padding-top: 10px;
+    text-align: left;
+    border: none;
 }
 
 th.col-checkbox,
 td.col-checkbox {
-	width: 30px;
-	border-left: none;
-	text-align: center;
+    width: 30px;
+    border-left: none;
+    text-align: center;
 }
 
 /* =======================================================================
@@ -494,59 +494,59 @@ schedule.mako
 ========================================================================== */
 
 h2.day, h2.network {
-	margin: 10px 0;
-	font-size: 24px;
-	line-height: 36px;
-	font-weight: bold;
-	letter-spacing: 1px;
-	color: #FFF;
-	text-align: center;
-	text-shadow: -1px -1px 0px rgba(0, 0, 0, 0.3);
-	background-color: #15528F;
+    margin: 10px 0;
+    font-size: 24px;
+    line-height: 36px;
+    font-weight: bold;
+    letter-spacing: 1px;
+    color: #FFF;
+    text-align: center;
+    text-shadow: -1px -1px 0px rgba(0, 0, 0, 0.3);
+    background-color: #15528F;
 }
 
 .tvshowDiv {
-	display: block;
-	clear: both;
-	border: 1px solid #ccc;
-	margin: auto;
-	padding: 0px;
-	text-align: left;
-	width: 750px;
-	border-radius: 5px;
-	background: #fff;
-	cursor: default;
-	overflow: hidden;
-	color: #000;
+    display: block;
+    clear: both;
+    border: 1px solid #ccc;
+    margin: auto;
+    padding: 0px;
+    text-align: left;
+    width: 750px;
+    border-radius: 5px;
+    background: #fff;
+    cursor: default;
+    overflow: hidden;
+    color: #000;
 }
 
 .tvshowDiv a:hover {
-	color: #09A2FF;
+    color: #09A2FF;
 }
 
 #showListTable td.tvShow a {
-	color: #000;
+    color: #000;
 }
 
 #showListTable td.tvShow a:hover {
-	cursor: pointer;
-	color: #09A2FF;
+    cursor: pointer;
+    color: #09A2FF;
 }
 
 table.cal-odd {
-	background-color: #333;
+    background-color: #333;
 }
 
 table.cal-even {
-	background-color: #3d3d3d;
+    background-color: #3d3d3d;
 }
 
 .calendarShow .text .airtime {
-	color:#fff
+    color:#fff
 }
 
 .calendarShow .text .episode-title {
-	color:#aaa
+    color:#aaa
 }
 
 /* =======================================================================
@@ -554,43 +554,43 @@ config*.mako
 ========================================================================== */
 
 .component-group {
-	padding: 15px 15px 25px;
-	border-bottom: 1px dotted #555;
-	min-height: 200px;
+    padding: 15px 15px 25px;
+    border-bottom: 1px dotted #555;
+    min-height: 200px;
 }
 
 .component-group-desc p {
-	width: 90%;
-	margin: 10px 0;
-	color: #ddd;
+    width: 90%;
+    margin: 10px 0;
+    color: #ddd;
 }
 
 #provider_order_list li,
 #service_order_list li {
-	padding: 5px;
-	margin: 5px 0;
-	font-size: 14px;
-	background: #333 !important;
-	color: #fff;
+    padding: 5px;
+    margin: 5px 0;
+    font-size: 14px;
+    background: #333 !important;
+    color: #fff;
 }
 
 #provider_order_list .ui-state-default.torrent-provider {
-	background-color: #555 !important;
+    background-color: #555 !important;
 }
 
 #provider_order_list .ui-state-default.nzb-provider {
-	background-color: #222 !important;
+    background-color: #222 !important;
 }
 
 [class^="icon16-"], [class*=" icon16-"] {
-	background-image: url("../images/glyphicons-config-white.png");
-	background-position: -40px 0;
-	background-repeat: no-repeat;
-	display: inline-block;
-	height: 16px;
-	line-height: 16px;
-	vertical-align: text-top;
-	width: 16px;
+    background-image: url("../images/glyphicons-config-white.png");
+    background-position: -40px 0;
+    background-repeat: no-repeat;
+    display: inline-block;
+    height: 16px;
+    line-height: 16px;
+    vertical-align: text-top;
+    width: 16px;
 }
 
 /* =======================================================================
@@ -598,35 +598,35 @@ config_postProcessing.mako
 ========================================================================== */
 
 #config div.example {
-	padding: 10px;
-	background-color: #333333;
-	border: 1px solid #111;
+    padding: 10px;
+    background-color: #333333;
+    border: 1px solid #111;
 }
 
 .Key {
-	width: 100%;
-	padding: 6px;
-	font-size: 13px;
-	background-color: #3d3d3d;
-	border: 1px solid #111;
-	border-collapse: collapse;
-	border-spacing: 0;
+    width: 100%;
+    padding: 6px;
+    font-size: 13px;
+    background-color: #3d3d3d;
+    border: 1px solid #111;
+    border-collapse: collapse;
+    border-spacing: 0;
 }
 
 .Key th, .tableHeader {
-	padding: 3px 9px;
-	margin: 0;
-	color: #fff;
-	text-align: center;
-	background: #15528F;
+    padding: 3px 9px;
+    margin: 0;
+    color: #fff;
+    text-align: center;
+    background: #15528F;
 }
 
 .Key tr {
-	border-bottom: 1px solid #111;
+    border-bottom: 1px solid #111;
 }
 
 .Key tr.even {
-	background-color: #333;
+    background-color: #333;
 }
 
 /* =======================================================================
@@ -634,31 +634,31 @@ config_notifications.mako
 ========================================================================== */
 
 div.metadata_options {
-	padding: 7px;
-	overflow: auto;
-	background: #333;
-	color: #fff;
-	border: 1px solid #111;
+    padding: 7px;
+    overflow: auto;
+    background: #333;
+    color: #fff;
+    border: 1px solid #111;
 }
 
 div.metadata_options label:hover {
-	color: #fff;
-	background-color: #15528F;
-	cursor: pointer;
+    color: #fff;
+    background-color: #15528F;
+    cursor: pointer;
 }
 
 div.metadata_options label {
-	display: block;
-	padding-left: 7px;
-	line-height: 20px;
-	color: #fff;
+    display: block;
+    padding-left: 7px;
+    line-height: 20px;
+    color: #fff;
 }
 
 div.metadata_example label {
-	display: block;
-	line-height: 21px;
-	color: #fff;
-	cursor: pointer;
+    display: block;
+    line-height: 21px;
+    color: #fff;
+    cursor: pointer;
 }
 
 /* =======================================================================
@@ -666,8 +666,8 @@ manage*.mako
 ========================================================================== */
 
 .separator {
-	font-size: 90%;
-	color: #fff;
+    font-size: 90%;
+    color: #fff;
 }
 
 a.whitelink {
@@ -678,9 +678,9 @@ Global
 ========================================================================== */
 
 span.path {
-	padding: 3px 6px;
-	color: #09A2FF;
-	background-color: #333;
+    padding: 3px 6px;
+    color: #09A2FF;
+    background-color: #333;
 }
 
 /* =======================================================================
@@ -688,48 +688,48 @@ bootstrap Overrides
 ========================================================================== */
 
 body {
-	padding-top: 60px;
-	overflow-y: scroll;
-	font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
-	color: #fff;
-	background-color: #222;
+    padding-top: 60px;
+    overflow-y: scroll;
+    font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+    color: #fff;
+    background-color: #222;
 }
 
 /* navbar styling */
 .navbar-default {
-	background-color: #15528F;
-	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F');
-	background: -webkit-gradient(linear, left top, left bottom, from(#297AB8), to(#15528F));
-	background: -moz-linear-gradient(top,  #297AB8,  #15528F);
-	border-color: #3e3f3a;
+    background-color: #15528F;
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F');
+    background: -webkit-gradient(linear, left top, left bottom, from(#297AB8), to(#15528F));
+    background: -moz-linear-gradient(top,  #297AB8,  #15528F);
+    border-color: #3e3f3a;
 }
 
 .navbar-default .navbar-nav > li > a:hover,
 .navbar-default .navbar-nav > li > a:focus {
-	background-color: #124477;
+    background-color: #124477;
 }
 
 .navbar-default .navbar-nav > .active > a,
 .navbar-default .navbar-nav > .active > a:hover,
 .navbar-default .navbar-nav > .active > a:focus {
-	color: #ffffff;
-	background-color: #124477;
+    color: #ffffff;
+    background-color: #124477;
 }
 
 .navbar-default .navbar-toggle:hover,
 .navbar-default .navbar-toggle:focus {
-	background-color: #124477;
+    background-color: #124477;
 }
 
 .navbar-default .navbar-toggle .icon-bar {
-	background-color: #124477;
+    background-color: #124477;
 }
 
 .navbar-default .navbar-nav > .open > a,
 .navbar-default .navbar-nav > .open > a:hover,
 .navbar-default .navbar-nav > .open > a:focus {
-	background-color: #124477;
-	color: #ffffff;
+    background-color: #124477;
+    color: #ffffff;
 }
 
 @media (max-width: 767px) {
@@ -742,59 +742,59 @@ body {
 }
 
 .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
-	color: #fff;
-	text-decoration: none;
-	background-color: #15528F;
+    color: #fff;
+    text-decoration: none;
+    background-color: #15528F;
 }
 
 .dropdown-menu > li > a {
-	padding: 4px 36px 4px 20px;
-	color: #fff;
+    padding: 4px 36px 4px 20px;
+    color: #fff;
 }
 
 .dropdown-menu {
-	background-color: #333;
-	border: 1px solid rgba(0, 0, 0, 0.15);
-	box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
+    background-color: #333;
+    border: 1px solid rgba(0, 0, 0, 0.15);
+    box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.176);
 }
 
 .btn {
-	display: inline-block;
-	*display: inline;
-	padding: 4px 10px 4px;
-	margin-bottom: 0;
-	*margin-left: .3em;
-	font-size: 12px;
-	line-height: 16px;
-	*line-height: 20px;
-	color: #fff;
-	text-align: center;
-	text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
-	vertical-align: middle;
-	cursor: pointer;
-	background-color: #2672B6;
-	*background-color: #2672B6;
-	background-image: -ms-linear-gradient(top, #297AB8, #15528F);
-	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#297AB8), to(#15528F));
-	background-image: -webkit-linear-gradient(top, #297AB8, #15528F);
-	background-image: -o-linear-gradient(top, #297AB8, #15528F);
-	background-image: linear-gradient(top, #297AB8, #15528F);
-	background-image: -moz-linear-gradient(top, #297AB8, #15528F);
-	background-repeat: repeat-x;
-	border: 1px solid #111;
-	*border: 0;
-	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
-	border-color: #111 #111 #111;
-	border-bottom-color: #111;
-	-webkit-border-radius: 4px;
-	-moz-border-radius: 4px;
-	border-radius: 4px;
-	filter: progid:dximagetransform.microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F', GradientType=0);
-	filter: progid:dximagetransform.microsoft.gradient(enabled=false);
-	*zoom: 1;
-	-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
-	-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
-	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
+    display: inline-block;
+    *display: inline;
+    padding: 4px 10px 4px;
+    margin-bottom: 0;
+    *margin-left: .3em;
+    font-size: 12px;
+    line-height: 16px;
+    *line-height: 20px;
+    color: #fff;
+    text-align: center;
+    text-shadow: 0 1px 1px rgba(0, 0, 0, 0.75);
+    vertical-align: middle;
+    cursor: pointer;
+    background-color: #2672B6;
+    *background-color: #2672B6;
+    background-image: -ms-linear-gradient(top, #297AB8, #15528F);
+    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#297AB8), to(#15528F));
+    background-image: -webkit-linear-gradient(top, #297AB8, #15528F);
+    background-image: -o-linear-gradient(top, #297AB8, #15528F);
+    background-image: linear-gradient(top, #297AB8, #15528F);
+    background-image: -moz-linear-gradient(top, #297AB8, #15528F);
+    background-repeat: repeat-x;
+    border: 1px solid #111;
+    *border: 0;
+    border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+    border-color: #111 #111 #111;
+    border-bottom-color: #111;
+    -webkit-border-radius: 4px;
+    -moz-border-radius: 4px;
+    border-radius: 4px;
+    filter: progid:dximagetransform.microsoft.gradient(startColorstr='#297AB8', endColorstr='#15528F', GradientType=0);
+    filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+    *zoom: 1;
+    -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
+    -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
+    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.0), 0 1px 2px rgba(0, 0, 0, 0.05);
 }
 
 .btn:hover,
@@ -802,78 +802,78 @@ body {
 .btn.active,
 .btn.disabled,
 .btn[disabled] {
-	background-color: #2672B6;
-	*background-color: #2672B6;
-	color: #fff;
+    background-color: #2672B6;
+    *background-color: #2672B6;
+    color: #fff;
 }
 
 .btn:active,
 .btn.active {
-	background-color: #cccccc \9;
-	color: #fff;
+    background-color: #cccccc \9;
+    color: #fff;
 }
 
 .btn:hover {
-	color: #fff;
-	text-decoration: none;
-	background-color: #2672B6;
-	*background-color: #2672B6;
-	background-position: 0 -150px;
-	-webkit-transition: background-position 0.0s linear;
-	-moz-transition: background-position 0.0s linear;
-	-ms-transition: background-position 0.0s linear;
-	-o-transition: background-position 0.0s linear;
-	transition: background-position 0.0s linear;
+    color: #fff;
+    text-decoration: none;
+    background-color: #2672B6;
+    *background-color: #2672B6;
+    background-position: 0 -150px;
+    -webkit-transition: background-position 0.0s linear;
+    -moz-transition: background-position 0.0s linear;
+    -ms-transition: background-position 0.0s linear;
+    -o-transition: background-position 0.0s linear;
+    transition: background-position 0.0s linear;
 }
 
 .btn:focus {
-	outline: thin dotted #333;
-	outline: 5px auto -webkit-focus-ring-color;
-	outline-offset: -2px;
-	color: #fff;
+    outline: thin dotted #333;
+    outline: 5px auto -webkit-focus-ring-color;
+    outline-offset: -2px;
+    color: #fff;
 }
 
 .btn.active,
 .btn:active {
-	background-color: #2672B6;
-	background-color: #2672B6 \9;
-	background-image: none;
-	color: #fff;
-	outline: 0;
-	-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-	-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
-	box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+    background-color: #2672B6;
+    background-color: #2672B6 \9;
+    background-image: none;
+    color: #fff;
+    outline: 0;
+    -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+    -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+    box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
 }
 
 .btn.disabled,
 .btn[disabled] {
-	cursor: default;
-	background-color: #15528F;
-	background-image: none;
-	opacity: 0.65;
-	filter: alpha(opacity=65);
-	-webkit-box-shadow: none;
-	-moz-box-shadow: none;
-	box-shadow: none;
+    cursor: default;
+    background-color: #15528F;
+    background-image: none;
+    opacity: 0.65;
+    filter: alpha(opacity=65);
+    -webkit-box-shadow: none;
+    -moz-box-shadow: none;
+    box-shadow: none;
 }
 
 @media(min-width:768px){
-	.navbar .nav > li > .dropdown-menu:after {
-		position: absolute;
-		top: -6px;
-		right: 12px;
-		display: inline-block;
-		border-right: 6px solid transparent;
-		border-bottom: 6px solid #333;
-		border-left: 6px solid transparent;
-		content: "";
-	}
+    .navbar .nav > li > .dropdown-menu:after {
+        position: absolute;
+        top: -6px;
+        right: 12px;
+        display: inline-block;
+        border-right: 6px solid transparent;
+        border-bottom: 6px solid #333;
+        border-left: 6px solid transparent;
+        content: "";
+    }
 }
 
 pre {
-	color: #fff;
-	background-color: #3d3d3d;
-	border-color: #111;
+    color: #fff;
+    background-color: #3d3d3d;
+    border-color: #111;
 }
 
 /* =======================================================================
@@ -881,15 +881,15 @@ browser.css overrides
 ========================================================================== */
 
 #fileBrowserDialog ul li {
-	margin: 2px 0;
-	list-style-type: none;
-	cursor: pointer;
-	background: #333;
+    margin: 2px 0;
+    list-style-type: none;
+    cursor: pointer;
+    background: #333;
 }
 
 #fileBrowserDialog ul li a:hover {
-	color: #09a2ff;
-	background: none;
+    color: #09a2ff;
+    background: none;
 }
 
 /* =======================================================================
@@ -897,28 +897,28 @@ formWizard.css
 ========================================================================== */
 
 legend.legendStep {
-	color: #ffffff;
-	margin-bottom: 0px;
+    color: #ffffff;
+    margin-bottom: 0px;
 }
 
 div.stepsguide .step p {
-	margin: 12px 0;
-	border-bottom: 4px solid #23AFDC;
+    margin: 12px 0;
+    border-bottom: 4px solid #23AFDC;
 }
 
 div.stepsguide .disabledstep p {
-	border-bottom: 4px solid #1178B3;
+    border-bottom: 4px solid #1178B3;
 }
 
 div.formpaginate .prev, div.formpaginate .next {
-	padding: 3px 6px;
-	color: #fff;
-	cursor: hand;
-	cursor: pointer;
-	background: #2265A1;
-	-webkit-border-radius: 6px;
-		-moz-border-radius: 6px;
-			border-radius: 6px;
+    padding: 3px 6px;
+    color: #fff;
+    cursor: hand;
+    cursor: pointer;
+    background: #2265A1;
+    -webkit-border-radius: 6px;
+        -moz-border-radius: 6px;
+            border-radius: 6px;
 }
 
 /* =======================================================================
@@ -926,25 +926,25 @@ pnotify.css
 ========================================================================== */
 
 .ui-pnotify-container {
-	border: 1px solid #111;
-	background-image: -moz-linear-gradient(#333, #3d3d3d) !important;
-	background-image: linear-gradient(#333, #3d3d3d) !important;
-	background-image: -webkit-linear-gradient(#333, #3d3d3d) !important;
-	background-image: -o-linear-gradient(#333, #3d3d3d) !important;
-	filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important;
-	-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important;
-	-moz-box-shadow: 0px 0px 2px #000;
-	-webkit-box-shadow: 0px 0px 2px #000;
-	-o-box-shadow: 0px 0px 2px #000;
-	box-shadow: 0px 0px 2px #000;
+    border: 1px solid #111;
+    background-image: -moz-linear-gradient(#333, #3d3d3d) !important;
+    background-image: linear-gradient(#333, #3d3d3d) !important;
+    background-image: -webkit-linear-gradient(#333, #3d3d3d) !important;
+    background-image: -o-linear-gradient(#333, #3d3d3d) !important;
+    filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important;
+    -ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#333, endColorstr=#3d3d3d) !important;
+    -moz-box-shadow: 0px 0px 2px #000;
+    -webkit-box-shadow: 0px 0px 2px #000;
+    -o-box-shadow: 0px 0px 2px #000;
+    box-shadow: 0px 0px 2px #000;
 }
 
 .ui-pnotify-title {
-	color: #ffffff;
+    color: #ffffff;
 }
 
 .ui-pnotify-text {
-	color: #ffffff;
+    color: #ffffff;
 }
 
 /* =======================================================================
@@ -952,90 +952,90 @@ tablesorter.css
 ========================================================================== */
 
 .tablesorter {
-	width: 100%;
-	margin-right: auto;
-	margin-left: auto;
-	color: #fff;
-	text-align: left;
-	background-color: #333;
-	border-spacing: 0;
+    width: 100%;
+    margin-right: auto;
+    margin-left: auto;
+    color: #fff;
+    text-align: left;
+    background-color: #333;
+    border-spacing: 0;
 }
 
 .tablesorter th,
 .tablesorter td {
-	padding: 4px;
-	border-top: #222 1px solid;
-	border-left: #222 1px solid;
-	vertical-align: middle;
+    padding: 4px;
+    border-top: #222 1px solid;
+    border-left: #222 1px solid;
+    vertical-align: middle;
 }
 
 .tablesorter th {
-	color: #fff;
-	text-align: center;
-	text-shadow: -1px -1px 0 rgba(0,0,0,0.3);
-	background-color: #15528F;
-	border-collapse: collapse;
-	font-weight: normal;
+    color: #fff;
+    text-align: center;
+    text-shadow: -1px -1px 0 rgba(0,0,0,0.3);
+    background-color: #15528F;
+    border-collapse: collapse;
+    font-weight: normal;
 }
 
 .tablesorter thead .tablesorter-headerDesc {
-	background-color: #297AB8;
-	background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);
-	/* background-image: url(../images/tablesorter/asc.gif); */
+    background-color: #297AB8;
+    background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);
+    /* background-image: url(../images/tablesorter/asc.gif); */
 }
 
 .tablesorter thead .tablesorter-headerAsc {
-	background-color: #297AB8;
-	background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);
-	/* background-image: url(../images/tablesorter/desc.gif); */
+    background-color: #297AB8;
+    background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);
+    /* background-image: url(../images/tablesorter/desc.gif); */
 }
 
 thead.tablesorter-stickyHeader {
-	border-top: 2px solid #222;
-	border-bottom: 2px solid #222;
+    border-top: 2px solid #222;
+    border-bottom: 2px solid #222;
 }
 
 /* Zebra Widget - row alternating colors */
 .tablesorter tr.odd, .sickbeardTable tr.odd {
-	background-color: #333333;
+    background-color: #333333;
 }
 
 .tablesorter tr.even, .sickbeardTable tr.even {
-	background-color: #2e2e2e;
+    background-color: #2e2e2e;
 }
 
 .tablesorter tr.tablesorter-filter-row,
 .tablesorter tr.tablesorter-filter-row td {
-	text-align: center;
-	background: #333;
-	border-bottom: 1px solid #111;
+    text-align: center;
+    background: #333;
+    border-bottom: 1px solid #111;
 }
 
 /* hidden filter row */
 .tablesorter-filter-row.hideme td {
-	/*** *********************************************** ***/
-	/*** change this padding to modify the thickness     ***/
-	/*** of the closed filter row (height = padding x 2) ***/
-	padding: 2px;
-	/*** *********************************************** ***/
-	margin: 0;
-	line-height: 0;
-	cursor: pointer;
+    /*** *********************************************** ***/
+    /*** change this padding to modify the thickness     ***/
+    /*** of the closed filter row (height = padding x 2) ***/
+    padding: 2px;
+    /*** *********************************************** ***/
+    margin: 0;
+    line-height: 0;
+    cursor: pointer;
 }
 
 .tablesorter-filter-row.hideme * {
-	height: 1px;
-	min-height: 0;
-	border: 0;
-	padding: 0;
-	margin: 0;
-	/* don't use visibility: hidden because it disables tabbing */
-	opacity: 0;
-	filter: alpha(opacity=0);
+    height: 1px;
+    min-height: 0;
+    border: 0;
+    padding: 0;
+    margin: 0;
+    /* don't use visibility: hidden because it disables tabbing */
+    opacity: 0;
+    filter: alpha(opacity=0);
 }
 
 #showListTable  tbody {
-	color: #000;
+    color: #000;
 }
 
 /* =======================================================================
@@ -1043,11 +1043,11 @@ token-input.css
 ========================================================================== */
 
 div.token-input-dropdown {
-	background-color: #fff;
-	color: #000;
-	border-left-color: #ccc;
-	border-right-color: #ccc;
-	border-bottom-color: #ccc;
+    background-color: #fff;
+    color: #000;
+    border-left-color: #ccc;
+    border-right-color: #ccc;
+    border-bottom-color: #ccc;
 }
 
 /* =======================================================================
@@ -1055,29 +1055,29 @@ jquery.confirm.css
 ========================================================================== */
 
 #confirmBox{
-	background: #222;
-	width: 460px;
-	position: fixed;
-	left: 50%;
-	top: 50%;
-	margin: -130px 0 0 -230px;
-	border: 1px solid #111;
-	box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175);
+    background: #222;
+    width: 460px;
+    position: fixed;
+    left: 50%;
+    top: 50%;
+    margin: -130px 0 0 -230px;
+    border: 1px solid #111;
+    box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175);
 }
 
 #confirmBox h1 {
-	background-color: #15528F;
-	border-bottom: 1px solid #111;
-	color: #fff;
-	margin: 0;
-	font-size: 22px;
-	text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
+    background-color: #15528F;
+    border-bottom: 1px solid #111;
+    color: #fff;
+    margin: 0;
+    font-size: 22px;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
 }
 
 #confirmBox p {
-	padding-top: 20px;
-	color: #fff;
-	text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
+    padding-top: 20px;
+    color: #fff;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
 }
 
 /* =======================================================================
@@ -1093,15 +1093,15 @@ bootstrap modal
 }
 
 .modal-header {
-	padding:9px 15px;
-	border-bottom:1px solid #eee;
-	background-color: #15528F;
-	-webkit-border-top-left-radius: 5px;
-	-webkit-border-top-right-radius: 5px;
-	-moz-border-radius-topleft: 5px;
-	-moz-border-radius-topright: 5px;
-	 border-top-left-radius: 5px;
-	 border-top-right-radius: 5px;
+    padding:9px 15px;
+    border-bottom:1px solid #eee;
+    background-color: #15528F;
+    -webkit-border-top-left-radius: 5px;
+    -webkit-border-top-right-radius: 5px;
+    -moz-border-radius-topleft: 5px;
+    -moz-border-radius-topright: 5px;
+     border-top-left-radius: 5px;
+     border-top-right-radius: 5px;
 }
 
 /* =======================================================================
@@ -1109,11 +1109,100 @@ bootstrap panel
 ========================================================================== */
 
 .panel-default {
-	background-color: #3D3D3D;
-	border-color: #111111;
+    background-color: #3D3D3D;
+    border-color: #111111;
 }
 
 .panel-heading {
-	background-color: #3D3D3D !important;
-	color: #FFFFFF !important;
+    background-color: #3D3D3D !important;
+    color: #FFFFFF !important;
+}
+
+
+/* =======================================================================
+new #confirmBox
+@TODO THIS NEEDS TO BE FIXED!
+========================================================================== */
+.modal-dialog {
+    width: 460px;
+    position: fixed;
+    left: 50%;
+    top: 50%;
+    margin: -130px 0 0 -230px;
+    border: 1px solid #111;
+    box-shadow: 0px 0px 12px 0px rgba(0, 0, 0, 0.175);
+    border-radius: 0px;
+}
+
+.modal-content {
+    border-radius: 0px;
+}
+
+.modal-header {
+    border-bottom: none;
+    border-radius: 0px;
+}
+
+.modal-body, .modal-content{
+    background: #222;
+}
+
+.modal-footer {
+    border-top: none;
+}
+
+.confirmation-modal {
+    background: -moz-linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)) repeat-x rgba(0,0,0,0.5);
+    background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.5))) repeat-x rgba(0,0,0,0.5);
+}
+
+.modal-footer {
+    text-align: center;
+}
+
+.modal-header .close {
+    display: none
+}
+
+.modal-footer button {
+    margin-right: 15px;
+    padding: 2px 15px;
+    text-decoration: none;
+    display: inline-block;
+    color: #fff;
+    text-align:center;
+    text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75);
+    background-clip: padding-box;
+    border: 1px solid #111;
+    border-radius: 3px;
+    cursor: pointer;
+    -webkit-box-sizing: border-box;
+    -moz-box-sizing: border-box;
+    box-sizing: border-box;
+    background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
+    background-image: -moz-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
+    background-image: -o-linear-gradient(top, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
+    background-image: linear-gradient(to bottom, rgba(255,255,255,0.08),rgba(255,255,255,0) 50%,rgba(0,0,0,0) 51%,rgba(0,0,0,0.25));
+    -webkit-box-shadow: inset 0 1px rgba(255,255,255,0.1),inset 0 -1px 3px rgba(0,0,0,0.3),inset 0 0 0 1px rgba(255,255,255,0.08),0 1px 2px rgba(0,0,0,0.15);
+    box-shadow: inset 0 1px rgba(255,255,255,0.1),inset 0 -1px 3px rgba(0,0,0,0.3),inset 0 0 0 1px rgba(255,255,255,0.08),0 1px 2px rgba(0,0,0,0.15);
+}
+
+.modal-footer button:last-child {
+    margin-right:0;
+}
+
+.modal-footer button.confirm {
+    background-color: #3F7636;
+}
+
+.modal-footer button.confirm:hover {
+    background-color: #48873E;
+}
+
+.modal-footer button.cancel {
+    background-color: #8D2D2B;
+}
+
+.modal-footer button.cancel:hover {
+    background-color: #A13331;
 }
diff --git a/gui/slick/css/vender.min.css b/gui/slick/css/vender.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..c23d4637c1e42dbea7d6a89964b962a45fffef9a
Binary files /dev/null and b/gui/slick/css/vender.min.css differ
diff --git a/gui/slick/images/providers/frenchtorrentdb.png b/gui/slick/images/providers/frenchtorrentdb.png
deleted file mode 100644
index 26a665b300adc56127ec4e55e36574b66f5f27e5..0000000000000000000000000000000000000000
Binary files a/gui/slick/images/providers/frenchtorrentdb.png and /dev/null differ
diff --git a/gui/slick/js/_bower.min.js b/gui/slick/js/_bower.min.js
deleted file mode 100644
index aad0ddf1ce56d0457e6d9e1978f112a66e0d3d3e..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/_bower.min.js and /dev/null differ
diff --git a/gui/slick/js/addExistingShow.js b/gui/slick/js/addExistingShow.js
index 851628a09ed85cef5d0e5214cf87d1793ba8fa8a..150b5a158f41a7c0b9f15bd32e5b4f805dc0aa6b 100644
--- a/gui/slick/js/addExistingShow.js
+++ b/gui/slick/js/addExistingShow.js
@@ -1,5 +1,4 @@
 $(document).ready(function() {
-
     $('#tableDiv').on('click', '#checkAll', function() {
         var seasCheck = this;
         $('.dirCheck').each(function() {
@@ -9,7 +8,7 @@ $(document).ready(function() {
 
     $('#submitShowDirs').click(function() {
         var dirArr = [];
-        $('.dirCheck').each(function(i,w) {
+        $('.dirCheck').each(function() {
             if (this.checked === true) {
                 var show = $(this).attr('id');
                 var indexer = $(this).closest('tr').find('select').val();
@@ -21,10 +20,7 @@ $(document).ready(function() {
             return false;
         }
 
-        url = srRoot + '/home/addShows/addExistingShows?promptForSettings=' + ($('#promptForSettings').prop('checked') ? 'on' : 'off');
-        url += '&shows_to_add=' + dirArr.join('&shows_to_add=');
-
-        window.location.href = url;
+        window.location.href = srRoot + '/home/addShows/addExistingShows?promptForSettings=' + ($('#promptForSettings').prop('checked') ? 'on' : 'off') + '&shows_to_add=' + dirArr.join('&shows_to_add=');
     });
 
 
@@ -52,12 +48,12 @@ $(document).ready(function() {
         });
     }
 
-    var last_txt = '';
+    var lastTxt = '';
     $('#rootDirText').change(function() {
-        if (last_txt == $('#rootDirText').val()) {
+        if (lastTxt === $('#rootDirText').val()) {
             return false;
         } else {
-            last_txt = $('#rootDirText').val();
+            lastTxt = $('#rootDirText').val();
         }
         $('#rootDirStaticList').html('');
         $('#rootDirs option').each(function(i, w) {
diff --git a/gui/slick/js/ajaxEpSearch.js b/gui/slick/js/ajaxEpSearch.js
index 6c01dcfd10064dbdaec7060d74701e2bd386dfa6..ff66ca7c7916d12251b395946108eccbc4ab0ec2 100644
--- a/gui/slick/js/ajaxEpSearch.js
+++ b/gui/slick/js/ajaxEpSearch.js
@@ -1,4 +1,4 @@
-var search_status_url = srRoot + '/home/getManualSearchStatus';
+var searchStatusUrl = srRoot + '/home/getManualSearchStatus';
 var failedDownload = false;
 var qualityDownload = false;
 var selectedEpisode = '';
@@ -6,32 +6,16 @@ PNotify.prototype.options.maxonscreen = 5;
 
 $.fn.manualSearches = [];
 
-function check_manual_searches() {
-    var poll_interval = 5000;
-    showId = $('#showID').val();
-    var url = showId !== undefined ? search_status_url + '?show=' + showId : search_status_url ;
-    $.ajax({
-        url: url,
-        success: function (data) {
-            if (data.episodes) {
-                poll_interval = 5000;
-            } else {
-                poll_interval = 15000;
-            }
+function enableLink(el) {
+    el.on('click.disabled', false);
+    el.prop('enableClick', '1');
+    el.fadeTo("fast", 1);
+}
 
-            updateImages(data);
-            //cleanupManualSearches(data);
-        },
-        error: function () {
-            poll_interval = 30000;
-        },
-        type: "GET",
-        dataType: "json",
-        complete: function () {
-            setTimeout(check_manual_searches, poll_interval);
-        },
-        timeout: 15000 // timeout every 15 secs
-    });
+function disableLink(el) {
+    el.off('click.disabled');
+    el.prop('enableClick', '0');
+    el.fadeTo("fast", 0.5);
 }
 
 function updateImages(data) {
@@ -40,14 +24,14 @@ function updateImages(data) {
         var loadingImage = 'loading16.gif';
         var queuedImage = 'queued.png';
         var searchImage = 'search16.png';
-        var status = null;
+        var htmlContent = '';
         //Try to get the <a> Element
-        el=$('a[id=' + ep.show + 'x' + ep.season + 'x' + ep.episode+']');
-        img=el.children('img');
-        parent=el.parent();
+        var el = $('a[id=' + ep.show + 'x' + ep.season + 'x' + ep.episode+']');
+        var img = el.children('img');
+        var parent = el.parent();
         if (el) {
             var rSearchTerm = '';
-            if (ep.searchstatus == 'searching') {
+            if (ep.searchstatus.toLowerCase() === 'searching') {
                 //el=$('td#' + ep.season + 'x' + ep.episode + '.search img');
                 img.prop('title','Searching');
                 img.prop('alt','Searching');
@@ -55,16 +39,16 @@ function updateImages(data) {
                 disableLink(el);
                 // Update Status and Quality
                 rSearchTerm = /(\w+)\s\((.+?)\)/;
-                HtmlContent = ep.searchstatus;
+                htmlContent = ep.searchstatus;
 
-            } else if (ep.searchstatus == 'queued') {
+            } else if (ep.searchstatus.toLowerCase() === 'queued') {
                 //el=$('td#' + ep.season + 'x' + ep.episode + '.search img');
                 img.prop('title','Queued');
                 img.prop('alt','queued');
                 img.prop('src',srRoot+'/images/' + queuedImage );
                 disableLink(el);
-                HtmlContent = ep.searchstatus;
-            } else if (ep.searchstatus == 'finished') {
+                htmlContent = ep.searchstatus;
+            } else if (ep.searchstatus.toLowerCase() === 'finished') {
                 //el=$('td#' + ep.season + 'x' + ep.episode + '.search img');
                 img.prop('title','Searching');
                 img.prop('alt','searching');
@@ -74,54 +58,70 @@ function updateImages(data) {
 
                 // Update Status and Quality
                 rSearchTerm = /(\w+)\s\((.+?)\)/;
-                HtmlContent = ep.status.replace(rSearchTerm,"$1"+' <span class="quality '+ep.quality+'">'+"$2"+'</span>');
+                htmlContent = ep.status.replace(rSearchTerm,"$1"+' <span class="quality '+ep.quality+'">'+"$2"+'</span>');
                 parent.closest('tr').prop("class", ep.overview + " season-" + ep.season + " seasonstyle");
             }
             // update the status column if it exists
-            parent.siblings('.col-status').html(HtmlContent);
+            parent.siblings('.col-status').html(htmlContent);
 
         }
-        el_comEps=$('a[id=forceUpdate-' + ep.show + 'x' + ep.season + 'x' + ep.episode+']');
-        img_comEps=el_comEps.children('img');
-        if (el_comEps) {
-            if (ep.searchstatus == 'searching') {
-                img_comEps.prop('title','Searching');
-                img_comEps.prop('alt','Searching');
-                img_comEps.prop('src',srRoot+'/images/' + loadingImage);
-                disableLink(el_comEps);
-            } else if (ep.searchstatus == 'queued') {
-                img_comEps.prop('title','Queued');
-                img_comEps.prop('alt','queued');
-                img_comEps.prop('src',srRoot+'/images/' + queuedImage );
-            } else if (ep.searchstatus == 'finished') {
-                img_comEps.prop('title','Manual Search');
-                img_comEps.prop('alt','[search]');
-                img_comEps.prop('src',srRoot+'/images/' + searchImage);
-                if (ep.overview == 'snatched') {
-                    el_comEps.closest('tr').remove();
+        var elementCompleteEpisodes = $('a[id=forceUpdate-' + ep.show + 'x' + ep.season + 'x' + ep.episode+']');
+        var imageCompleteEpisodes = elementCompleteEpisodes.children('img');
+        if (elementCompleteEpisodes) {
+            if (ep.searchstatus.toLowerCase() === 'searching') {
+                imageCompleteEpisodes.prop('title','Searching');
+                imageCompleteEpisodes.prop('alt','Searching');
+                imageCompleteEpisodes.prop('src',srRoot+'/images/' + loadingImage);
+                disableLink(elementCompleteEpisodes);
+            } else if (ep.searchstatus.toLowerCase() === 'queued') {
+                imageCompleteEpisodes.prop('title','Queued');
+                imageCompleteEpisodes.prop('alt','queued');
+                imageCompleteEpisodes.prop('src',srRoot+'/images/' + queuedImage );
+            } else if (ep.searchstatus.toLowerCase() === 'finished') {
+                imageCompleteEpisodes.prop('title','Manual Search');
+                imageCompleteEpisodes.prop('alt','[search]');
+                imageCompleteEpisodes.prop('src',srRoot+'/images/' + searchImage);
+                if (ep.overview.toLowerCase() === 'snatched') {
+                    elementCompleteEpisodes.closest('tr').remove();
                 } else {
-                    enableLink(el_comEps);
+                    enableLink(elementCompleteEpisodes);
                 }
             }
         }
     });
 }
 
-$(document).ready(function () {
-    check_manual_searches();
-});
+function checkManualSearches() {
+    var pollInterval = 5000;
+    var showId = $('#showID').val();
+    var url = showId !== undefined ? searchStatusUrl + '?show=' + showId : searchStatusUrl ;
+    $.ajax({
+        url: url,
+        success: function (data) {
+            if (data.episodes) {
+                pollInterval = 5000;
+            } else {
+                pollInterval = 15000;
+            }
 
-function enableLink(el) {
-    el.on('click.disabled', false);
-    el.prop('enableClick', '1');
-    el.fadeTo("fast", 1);
+            updateImages(data);
+            //cleanupManualSearches(data);
+        },
+        error: function () {
+            pollInterval = 30000;
+        },
+        type: "GET",
+        dataType: "json",
+        complete: function () {
+            setTimeout(checkManualSearches, pollInterval);
+        },
+        timeout: 15000 // timeout every 15 secs
+    });
 }
 
-function disableLink(el) {
-    el.off('click.disabled');
-    el.prop('enableClick', '0');
-    el.fadeTo("fast", 0.5);
-}
+$(document).ready(function () {
+    checkManualSearches();
+});
 
 (function(){
     $.ajaxEpSearch = {
@@ -142,7 +142,7 @@ function disableLink(el) {
             event.preventDefault();
 
             // Check if we have disabled the click
-            if($(this).prop('enableClick') == '0') return false;
+            if($(this).prop('enableClick') === '0') { return false; }
 
             selectedEpisode = $(this);
 
@@ -153,7 +153,7 @@ function disableLink(el) {
             event.preventDefault();
 
             // Check if we have disabled the click
-            if ($(this).prop('enableClick') == '0') return false;
+            if ($(this).prop('enableClick') === '0') { return false; }
 
             selectedEpisode = $(this);
 
@@ -165,23 +165,25 @@ function disableLink(el) {
         });
 
         $('#manualSearchModalFailed .btn').click(function(){
-            failedDownload = ($(this).text() == 'Yes');
+            failedDownload = ($(this).text().toLowerCase() === 'yes');
             $("#manualSearchModalQuality").modal('show');
         });
 
         $('#manualSearchModalQuality .btn').click(function(){
-            qualityDownload = ($(this).text() == 'Yes');
+            qualityDownload = ($(this).text().toLowerCase() === 'yes');
             manualSearch();
         });
 
         function manualSearch(){
+            var imageName, imageResult, htmlContent;
+
             var parent = selectedEpisode.parent();
 
             // Create var for anchor
-            link = selectedEpisode;
+            var link = selectedEpisode;
 
             // Create var for img under anchor and set options for the loading gif
-            img=selectedEpisode.children('img');
+            var img = selectedEpisode.children('img');
             img.prop('title','loading');
             img.prop('alt','');
             img.prop('src',srRoot+'/images/' + options.loadingImage);
@@ -197,31 +199,32 @@ function disableLink(el) {
             $.getJSON(url, function(data){
 
                 // if they failed then just put the red X
-                if (data.result == 'failure') {
-                    img_name = options.noImage;
-                    img_result = 'failed';
+                if (data.result.toLowerCase() === 'failure') {
+                    imageName = options.noImage;
+                    imageResult = 'failed';
 
                 // if the snatch was successful then apply the corresponding class and fill in the row appropriately
                 } else {
-                    img_name = options.loadingImage;
-                    img_result = 'success';
+                    imageName = options.loadingImage;
+                    imageResult = 'success';
                     // color the row
-                    if (options.colorRow)
+                    if (options.colorRow) {
                         parent.parent().removeClass('skipped wanted qual good unaired').addClass('snatched');
+                    }
                     // applying the quality class
                     var rSearchTerm = /(\w+)\s\((.+?)\)/;
-                        HtmlContent = data.result.replace(rSearchTerm,"$1"+' <span class="quality '+data.quality+'">'+"$2"+'</span>');
+                        htmlContent = data.result.replace(rSearchTerm,"$1"+' <span class="quality '+data.quality+'">'+"$2"+'</span>');
                     // update the status column if it exists
-                    parent.siblings('.col-status').html(HtmlContent);
+                    parent.siblings('.col-status').html(htmlContent);
                     // Only if the queuing was successful, disable the onClick event of the loading image
                     disableLink(link);
                 }
 
                 // put the corresponding image as the result of queuing of the manual search
-                img.prop('title',img_result);
-                img.prop('alt',img_result);
+                img.prop('title', imageResult);
+                img.prop('alt', imageResult);
                 img.prop('height', options.size);
-                img.prop('src',srRoot+"/images/"+img_name);
+                img.prop('src', srRoot+"/images/" + imageName);
             });
 
             // don't follow the link
diff --git a/gui/slick/js/ajaxEpSubtitles.js b/gui/slick/js/ajaxEpSubtitles.js
index 241ed7f698360dfc8012c966205cb8eeda0deae8..a61499c394dc069b5e79655c55c1ebe8f94a0ddf 100644
--- a/gui/slick/js/ajaxEpSubtitles.js
+++ b/gui/slick/js/ajaxEpSubtitles.js
@@ -1,29 +1,29 @@
 (function(){
     $.fn.ajaxEpSubtitlesSearch = function(){
         $('.epSubtitlesSearch').click(function(){
-            var subtitles_td = $(this).parent().siblings('.col-subtitles');
-            var subtitles_search_link = $(this);
+            var subtitlesTd = $(this).parent().siblings('.col-subtitles');
+            var subtitlesSearchLink = $(this);
             // fill with the ajax loading gif
-            subtitles_search_link.empty();
-            subtitles_search_link.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"}));
+            subtitlesSearchLink.empty();
+            subtitlesSearchLink.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"}));
             $.getJSON($(this).attr('href'), function(data){
-                if (data.result != "failure" && data.result != "No subtitles downloaded") {
-                // clear and update the subtitles column with new informations
-                var subtitles = data.subtitles.split(',');
-                subtitles_td.empty();
-                $.each(subtitles,function(index, language){
-                    if (language !== "" && language != "und") {
-                        if (index != subtitles.length - 1) {
-                            subtitles_td.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
-                        } else {
-                            subtitles_td.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
+                if (data.result.toLowerCase() !== "failure" && data.result.toLowerCase() !== "no subtitles downloaded") {
+                    // clear and update the subtitles column with new informations
+                    var subtitles = data.subtitles.split(',');
+                    subtitlesTd.empty();
+                    $.each(subtitles,function(index, language){
+                        if (language !== "" && language !== "und") {
+                            if (index !== subtitles.length - 1) {
+                                subtitlesTd.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
+                            } else {
+                                subtitlesTd.append($("<img/>").attr({"src": srRoot+"/images/subtitles/flags/"+language+".png", "alt": language, "width": 16, "height": 11}));
+                            }
                         }
-                    }
-                });
-                // don't allow other searches
-                subtitles_search_link.remove();
+                    });
+                    // don't allow other searches
+                    subtitlesSearchLink.remove();
                 } else {
-                    subtitles_search_link.remove();
+                    subtitlesSearchLink.remove();
                 }
             });
 
@@ -34,13 +34,13 @@
 
     $.fn.ajaxEpMergeSubtitles = function(){
         $('.epMergeSubtitles').click(function(){
-            var subtitles_merge_link = $(this);
+            var subtitlesMergeLink = $(this);
             // fill with the ajax loading gif
-            subtitles_merge_link.empty();
-            subtitles_merge_link.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"}));
-            $.getJSON($(this).attr('href'), function(data){
+            subtitlesMergeLink.empty();
+            subtitlesMergeLink.append($("<img/>").attr({"src": srRoot+"/images/loading16.gif", "alt": "", "title": "loading"}));
+            $.getJSON($(this).attr('href'), function(){
                 // don't allow other merges
-                subtitles_merge_link.remove();
+                subtitlesMergeLink.remove();
             });
             // don't follow the link
             return false;
diff --git a/gui/slick/js/ajaxNotifications.js b/gui/slick/js/ajaxNotifications.js
index 80e2a359cbbc4ca11e7ca8d9973be386ec5f6099..11cf3bce413c66cb87617617c219415011430b66 100644
--- a/gui/slick/js/ajaxNotifications.js
+++ b/gui/slick/js/ajaxNotifications.js
@@ -39,5 +39,5 @@ function check_notifications() {
 
 $(document).ready(function(){
     check_notifications();
-    if(test) displayPNotify('notice', 'test', 'test<br/><i class="test-class">hello <b>world</b></i><ul><li>item 1</li><li>item 2</li></ul>');
+    if(test) displayPNotify('notice', 'test', 'test<br><i class="test-class">hello <b>world</b></i><ul><li>item 1</li><li>item 2</li></ul>');
 });
diff --git a/gui/slick/js/config.js b/gui/slick/js/config.js
deleted file mode 100644
index 7c852360b89e1f1ea408996f73d007bc5d69b81d..0000000000000000000000000000000000000000
--- a/gui/slick/js/config.js
+++ /dev/null
@@ -1,115 +0,0 @@
-$(document).ready(function(){
-    $(".enabler").each(function(){
-        if (!$(this).prop('checked')) $('#content_'+$(this).attr('id')).hide();
-    });
-
-    $(".enabler").click(function() {
-        if ($(this).prop('checked')){
-            $('#content_'+$(this).attr('id')).fadeIn("fast", "linear");
-        } else {
-            $('#content_'+$(this).attr('id')).fadeOut("fast", "linear");
-        }
-    });
-
-    $(".viewIf").click(function() {
-        if ($(this).prop('checked')) {
-            $('.hide_if_'+$(this).attr('id')).css('display','none');
-            $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear");
-        } else {
-            $('.show_if_'+$(this).attr('id')).css('display','none');
-            $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear");
-        }
-    });
-
-    $(".datePresets").click(function() {
-        var def = $('#date_presets').val();
-        if ($(this).prop('checked') && '%x' == def) {
-            def = '%a, %b %d, %Y';
-            $('#date_use_system_default').html('1');
-        } else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html()){
-            def = '%x';
-        }
-
-        $('#date_presets').attr('name', 'date_preset_old');
-        $('#date_presets').attr('id', 'date_presets_old');
-
-        $('#date_presets_na').attr('name', 'date_preset');
-        $('#date_presets_na').attr('id', 'date_presets');
-
-        $('#date_presets_old').attr('name', 'date_preset_na');
-        $('#date_presets_old').attr('id', 'date_presets_na');
-
-        if (def) $('#date_presets').val(def);
-    });
-
-    // bind 'myForm' and provide a simple callback function
-    $('#configForm').ajaxForm({
-        beforeSubmit: function(){
-            $('.config_submitter .config_submitter_refresh').each(function(){
-                $(this).attr("disabled", "disabled");
-                $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
-                $(this).hide();
-            });
-        },
-        success: function(){
-            setTimeout(function () {
-                "use strict";
-                config_success();
-            }, 2000);
-        }
-    });
-
-    $('#api_key').click(function(){
-        $('#api_key').select();
-    });
-
-    $("#generate_new_apikey").click(function(){
-        $.get(srRoot + '/config/general/generateApiKey',
-            function(data){
-                if (data.error !== undefined) {
-                    alert(data.error);
-                    return;
-                }
-                $('#api_key').val(data);
-        });
-    });
-
-    $('#branchCheckout').click(function() {
-        var url = srRoot+'/home/branchCheckout?branch='+$("#branchVersion").val();
-        var  checkDBversion = srRoot + "/home/getDBcompare";
-        $.getJSON(checkDBversion, function(data){
-            if (data.status == "success") {
-                if (data.message == "equal") {
-                    //Checkout Branch
-                    window.location.href = url;
-                }
-                if (data.message == "upgrade") {
-                    if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) {
-                        //Checkout Branch
-                        window.location.href = url;
-                    }
-                }
-                if (data.message == "downgrade") {
-                    alert("Can't switch branch as this will result in a database downgrade.");
-                }
-            }
-        });
-    });
-
-});
-
-function config_success(){
-    $('.config_submitter').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-    });
-    $('.config_submitter_refresh').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-        url = srRoot+'/config/providers/';
-        window.location.href = url;
-    });
-    $('#email_show').trigger('notify');
-}
diff --git a/gui/slick/js/configBackupRestore.js b/gui/slick/js/configBackupRestore.js
deleted file mode 100644
index fc690ba76973405d6f071490c702db11a12bfc6b..0000000000000000000000000000000000000000
--- a/gui/slick/js/configBackupRestore.js
+++ /dev/null
@@ -1,24 +0,0 @@
-$(document).ready(function(){
-    var loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
-
-    $('#Backup').click(function() {
-        $("#Backup").attr("disabled", true);
-        $('#Backup-result').html(loading);
-        var backupDir = $("#backupDir").val();
-        $.get(srRoot + "/config/backuprestore/backup", {'backupDir': backupDir})
-            .done(function (data) {
-                $('#Backup-result').html(data);
-                $("#Backup").attr("disabled", false);
-            });
-    });
-    $('#Restore').click(function() {
-        $("#Restore").attr("disabled", true);
-        $('#Restore-result').html(loading);
-        var backupFile = $("#backupFile").val();
-        $.get(srRoot + "/config/backuprestore/restore", {'backupFile': backupFile})
-            .done(function (data) {
-                $('#Restore-result').html(data);
-                $("#Restore").attr("disabled", false);
-            });
-    });
-});
diff --git a/gui/slick/js/configNotifications.js b/gui/slick/js/configNotifications.js
deleted file mode 100644
index 5c69d7d47e8b187334cf3036df63256b0073f203..0000000000000000000000000000000000000000
--- a/gui/slick/js/configNotifications.js
+++ /dev/null
@@ -1,575 +0,0 @@
-$(document).ready(function(){
-    var loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
-
-    $('#testGrowl').click(function () {
-        var growl_host = $.trim($('#growl_host').val());
-        var growl_password = $.trim($('#growl_password').val());
-        if (!growl_host) {
-            $('#testGrowl-result').html('Please fill out the necessary fields above.');
-            $('#growl_host').addClass('warning');
-            return;
-        }
-        $('#growl_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testGrowl-result').html(loading);
-        $.get(srRoot + '/home/testGrowl', {'host': growl_host, 'password': growl_password})
-            .done(function (data) {
-                $('#testGrowl-result').html(data);
-                $('#testGrowl').prop('disabled', false);
-            });
-    });
-
-    $('#testProwl').click(function () {
-        var prowl_api = $.trim($('#prowl_api').val());
-        var prowl_priority = $('#prowl_priority').val();
-        if (!prowl_api) {
-            $('#testProwl-result').html('Please fill out the necessary fields above.');
-            $('#prowl_api').addClass('warning');
-            return;
-        }
-        $('#prowl_api').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testProwl-result').html(loading);
-        $.get(srRoot + '/home/testProwl', {'prowl_api': prowl_api, 'prowl_priority': prowl_priority}).done(function (data) {
-            $('#testProwl-result').html(data);
-            $('#testProwl').prop('disabled', false);
-        });
-    });
-
-    $('#testKODI').click(function () {
-        var kodi_host = $.trim($('#kodi_host').val());
-        var kodi_username = $.trim($('#kodi_username').val());
-        var kodi_password = $.trim($('#kodi_password').val());
-        if (!kodi_host) {
-            $('#testKODI-result').html('Please fill out the necessary fields above.');
-            $('#kodi_host').addClass('warning');
-            return;
-        }
-        $('#kodi_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testKODI-result').html(loading);
-        $.get(srRoot + '/home/testKODI', {'host': kodi_host, 'username': kodi_username, 'password': kodi_password}).done(function (data) {
-            $('#testKODI-result').html(data);
-            $('#testKODI').prop('disabled', false);
-        });
-    });
-
-    $('#testPMC').click(function () {
-        var plex_host = $.trim($('#plex_host').val());
-        var plex_client_username = $.trim($('#plex_client_username').val());
-        var plex_client_password = $.trim($('#plex_client_password').val());
-        if (!plex_host) {
-            $('#testPMC-result').html('Please fill out the necessary fields above.');
-            $('#plex_host').addClass('warning');
-            return;
-        }
-        $('#plex_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testPMC-result').html(loading);
-        $.get(srRoot + '/home/testPMC', {'host': plex_host, 'username': plex_client_username, 'password': plex_client_password}).done(function (data) {
-            $('#testPMC-result').html(data);
-            $('#testPMC').prop('disabled', false);
-        });
-    });
-
-    $('#testPMS').click(function () {
-        var plex_server_host = $.trim($('#plex_server_host').val());
-        var plex_username = $.trim($('#plex_username').val());
-        var plex_password = $.trim($('#plex_password').val());
-        var plex_server_token = $.trim($('#plex_server_token').val());
-        if (!plex_server_host) {
-            $('#testPMS-result').html('Please fill out the necessary fields above.');
-            $('#plex_server_host').addClass('warning');
-            return;
-        }
-        $('#plex_server_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testPMS-result').html(loading);
-        $.get(srRoot + '/home/testPMS', {'host': plex_server_host, 'username': plex_username, 'password': plex_password, 'plex_server_token': plex_server_token}).done(function (data) {
-            $('#testPMS-result').html(data);
-            $('#testPMS').prop('disabled', false);
-        });
-    });
-
-    $('#testEMBY').click(function () {
-        var emby_host = $('#emby_host').val();
-        var emby_apikey = $('#emby_apikey').val();
-        if (!emby_host || !emby_apikey) {
-            $('#testEMBY-result').html('Please fill out the necessary fields above.');
-            if (!emby_host) {
-                $('#emby_host').addClass('warning');
-            } else {
-                $('#emby_host').removeClass('warning');
-            }
-            if (!emby_apikey) {
-                $('#emby_apikey').addClass('warning');
-            } else {
-                $('#emby_apikey').removeClass('warning');
-            }
-            return;
-        }
-        $('#emby_host,#emby_apikey').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testEMBY-result').html(loading);
-        $.get(srRoot + '/home/testEMBY', {'host': emby_host, 'emby_apikey': emby_apikey}).done(function (data) {
-            $('#testEMBY-result').html(data);
-            $('#testEMBY').prop('disabled', false);
-        });
-    });
-
-    $('#testBoxcar').click(function() {
-        var boxcar_username = $.trim($('#boxcar_username').val());
-        if (!boxcar_username) {
-            $('#testBoxcar-result').html('Please fill out the necessary fields above.');
-            $('#boxcar_username').addClass('warning');
-            return;
-        }
-        $('#boxcar_username').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testBoxcar-result').html(loading);
-        $.get(srRoot + '/home/testBoxcar', {'username': boxcar_username}).done(function (data) {
-            $('#testBoxcar-result').html(data);
-            $('#testBoxcar').prop('disabled', false);
-        });
-    });
-
-    $('#testBoxcar2').click(function () {
-        var boxcar2_accesstoken = $.trim($('#boxcar2_accesstoken').val());
-        if (!boxcar2_accesstoken) {
-            $('#testBoxcar2-result').html('Please fill out the necessary fields above.');
-            $('#boxcar2_accesstoken').addClass('warning');
-            return;
-        }
-        $('#boxcar2_accesstoken').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testBoxcar2-result').html(loading);
-        $.get(srRoot + '/home/testBoxcar2', {'accesstoken': boxcar2_accesstoken}).done(function (data) {
-            $('#testBoxcar2-result').html(data);
-            $('#testBoxcar2').prop('disabled', false);
-        });
-    });
-
-    $('#testPushover').click(function () {
-        var pushover_userkey = $('#pushover_userkey').val();
-        var pushover_apikey = $('#pushover_apikey').val();
-        if (!pushover_userkey || !pushover_apikey) {
-            $('#testPushover-result').html('Please fill out the necessary fields above.');
-            if (!pushover_userkey) {
-                $('#pushover_userkey').addClass('warning');
-            } else {
-                $('#pushover_userkey').removeClass('warning');
-            }
-            if (!pushover_apikey) {
-                $('#pushover_apikey').addClass('warning');
-            } else {
-                $('#pushover_apikey').removeClass('warning');
-            }
-            return;
-        }
-        $('#pushover_userkey,#pushover_apikey').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testPushover-result').html(loading);
-        $.get(srRoot + '/home/testPushover', {'userKey': pushover_userkey, 'apiKey': pushover_apikey}).done(function (data) {
-            $('#testPushover-result').html(data);
-            $('#testPushover').prop('disabled', false);
-        });
-    });
-
-    $('#testLibnotify').click(function() {
-        $('#testLibnotify-result').html(loading);
-        $.get(srRoot + '/home/testLibnotify', function (data) {
-            $('#testLibnotify-result').html(data);
-        });
-    });
-
-    $('#twitterStep1').click(function() {
-        $('#testTwitter-result').html(loading);
-        $.get(srRoot + '/home/twitterStep1', function (data) {
-            window.open(data);
-        }).done(function() {
-            $('#testTwitter-result').html('<b>Step1:</b> Confirm Authorization');
-        });
-    });
-
-    $('#twitterStep2').click(function () {
-        var twitter_key = $.trim($('#twitter_key').val());
-        if (!twitter_key) {
-            $('#testTwitter-result').html('Please fill out the necessary fields above.');
-            $('#twitter_key').addClass('warning');
-            return;
-        }
-        $('#twitter_key').removeClass('warning');
-        $('#testTwitter-result').html(loading);
-        $.get(srRoot + '/home/twitterStep2', {'key': twitter_key}, function(data) {
-            $('#testTwitter-result').html(data);
-        });
-    });
-
-    $('#testTwitter').click(function() {
-        $.get(srRoot + '/home/testTwitter', function(data) {
-            $('#testTwitter-result').html(data);
-        });
-    });
-
-    $('#settingsNMJ').click(function() {
-        if (!$('#nmj_host').val()) {
-            alert('Please fill in the Popcorn IP address');
-            $('#nmj_host').focus();
-            return;
-        }
-        $('#testNMJ-result').html(loading);
-        var nmj_host = $('#nmj_host').val();
-
-        $.get(srRoot + '/home/settingsNMJ', {'host': nmj_host}, function (data) {
-            if (data === null) {
-                $('#nmj_database').removeAttr('readonly');
-                $('#nmj_mount').removeAttr('readonly');
-            }
-            var JSONData = $.parseJSON(data);
-            $('#testNMJ-result').html(JSONData.message);
-            $('#nmj_database').val(JSONData.database);
-            $('#nmj_mount').val(JSONData.mount);
-
-            if (JSONData.database) {
-                $('#nmj_database').attr('readonly', true);
-            } else {
-                $('#nmj_database').removeAttr('readonly');
-            }
-            if (JSONData.mount) {
-                $('#nmj_mount').attr('readonly', true);
-            } else {
-                $('#nmj_mount').removeAttr('readonly');
-            }
-        });
-    });
-
-    $('#testNMJ').click(function () {
-        var nmj_host = $.trim($('#nmj_host').val());
-        var nmj_database = $('#nmj_database').val();
-        var nmj_mount = $('#nmj_mount').val();
-        if (!nmj_host) {
-            $('#testNMJ-result').html('Please fill out the necessary fields above.');
-            $('#nmj_host').addClass('warning');
-            return;
-        }
-        $('#nmj_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testNMJ-result').html(loading);
-        $.get(srRoot + '/home/testNMJ', {'host': nmj_host, 'database': nmj_database, 'mount': nmj_mount}).done(function (data) {
-            $('#testNMJ-result').html(data);
-            $('#testNMJ').prop('disabled', false);
-        });
-    });
-
-    $('#settingsNMJv2').click(function() {
-        if (!$('#nmjv2_host').val()) {
-            alert('Please fill in the Popcorn IP address');
-            $('#nmjv2_host').focus();
-            return;
-        }
-        $('#testNMJv2-result').html(loading);
-        var nmjv2_host = $('#nmjv2_host').val();
-        var nmjv2_dbloc;
-        var radios = document.getElementsByName('nmjv2_dbloc');
-        for (var i = 0; i < radios.length; i++) {
-            if (radios[i].checked) {
-                nmjv2_dbloc=radios[i].value;
-                break;
-            }
-        }
-
-        var nmjv2_dbinstance=$('#NMJv2db_instance').val();
-        $.get(srRoot + '/home/settingsNMJv2', {'host': nmjv2_host,'dbloc': nmjv2_dbloc,'instance': nmjv2_dbinstance}, function (data){
-            if (data === null) {
-                $('#nmjv2_database').removeAttr('readonly');
-            }
-            var JSONData = $.parseJSON(data);
-            $('#testNMJv2-result').html(JSONData.message);
-            $('#nmjv2_database').val(JSONData.database);
-
-            if (JSONData.database){
-                $('#nmjv2_database').attr('readonly', true);
-            } else {
-                $('#nmjv2_database').removeAttr('readonly');
-            }
-        });
-    });
-
-    $('#testNMJv2').click(function () {
-        var nmjv2_host = $.trim($('#nmjv2_host').val());
-        if (!nmjv2_host) {
-            $('#testNMJv2-result').html('Please fill out the necessary fields above.');
-            $('#nmjv2_host').addClass('warning');
-            return;
-        }
-        $('#nmjv2_host').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testNMJv2-result').html(loading);
-        $.get(srRoot + '/home/testNMJv2', {'host': nmjv2_host}) .done(function (data) {
-            $('#testNMJv2-result').html(data);
-            $('#testNMJv2').prop('disabled', false);
-        });
-    });
-
-    $('#testFreeMobile').click(function () {
-        var freemobile_id = $.trim($('#freemobile_id').val());
-        var freemobile_apikey = $.trim($('#freemobile_apikey').val());
-        if (!freemobile_id || !freemobile_apikey) {
-            $('#testFreeMobile-result').html('Please fill out the necessary fields above.');
-            if (!freemobile_id) {
-                $('#freemobile_id').addClass('warning');
-            } else {
-                $('#freemobile_id').removeClass('warning');
-            }
-            if (!freemobile_apikey) {
-                $('#freemobile_apikey').addClass('warning');
-            } else {
-                $('#freemobile_apikey').removeClass('warning');
-            }
-            return;
-        }
-        $('#freemobile_id,#freemobile_apikey').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testFreeMobile-result').html(loading);
-        $.get(srRoot + '/home/testFreeMobile', {'freemobile_id': freemobile_id, 'freemobile_apikey': freemobile_apikey}).done(function (data) {
-            $('#testFreeMobile-result').html(data);
-            $('#testFreeMobile').prop('disabled', false);
-        });
-    });
-
-    $('#TraktGetPin').click(function () {
-        var trakt_pin_url = $('#trakt_pin_url').val();
-        var w;
-        w = window.open(trakt_pin_url, "popUp", "toolbar=no, scrollbars=no, resizable=no, top=200, left=200, width=650, height=550");
-         $('#trakt_pin').removeClass('hide');
-    });
-
-    $('#trakt_pin').on('keyup change', function(){
-        var trakt_pin = $('#trakt_pin').val();
-
-        if (trakt_pin.length !== 0) {
-            $('#TraktGetPin').addClass('hide');
-            $('#authTrakt').removeClass('hide');
-        } else {
-            $('#TraktGetPin').removeClass('hide');
-            $('#authTrakt').addClass('hide');
-        }
-    });
-
-    $('#authTrakt').click(function() {
-        var trakt_pin = $('#trakt_pin').val();
-        if (trakt_pin.length !== 0) {
-            $.get(srRoot + '/home/getTraktToken', { "trakt_pin": trakt_pin }).done(function (data) {
-                $('#testTrakt-result').html(data);
-                $('#authTrakt').addClass('hide');
-                $('#trakt_pin').addClass('hide');
-                $('#TraktGetPin').addClass('hide');
-            });
-        }
-    });
-
-    $('#testTrakt').click(function () {
-        var trakt_username = $.trim($('#trakt_username').val());
-        var trakt_trending_blacklist = $.trim($('#trakt_blacklist_name').val());
-        if (!trakt_username) {
-            $('#testTrakt-result').html('Please fill out the necessary fields above.');
-            if (!trakt_username) {
-                $('#trakt_username').addClass('warning');
-            } else {
-                $('#trakt_username').removeClass('warning');
-            }
-            return;
-        }
-
-        if (/\s/g.test(trakt_trending_blacklist)) {
-            $('#testTrakt-result').html('Check blacklist name; the value need to be a trakt slug');
-            $('#trakt_blacklist_name').addClass('warning');
-            return;
-        }
-        $('#trakt_username').removeClass('warning');
-        $('#trakt_blacklist_name').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testTrakt-result').html(loading);
-        $.get(srRoot + '/home/testTrakt', {'username': trakt_username, 'blacklist_name': trakt_trending_blacklist}).done(function (data) {
-            $('#testTrakt-result').html(data);
-            $('#testTrakt').prop('disabled', false);
-        });
-    });
-
-    $('#testEmail').click(function () {
-        var status, host, port, tls, from, user, pwd, err, to;
-        status = $('#testEmail-result');
-        status.html(loading);
-        host = $('#email_host').val();
-        host = host.length > 0 ? host : null;
-        port = $('#email_port').val();
-        port = port.length > 0 ? port : null;
-        tls = $('#email_tls').attr('checked') !== undefined ? 1 : 0;
-        from = $('#email_from').val();
-        from = from.length > 0 ? from : 'root@localhost';
-        user = $('#email_user').val().trim();
-        pwd = $('#email_password').val();
-        err = '';
-        if (host === null) {
-            err += '<li style="color: red;">You must specify an SMTP hostname!</li>';
-        }
-        if (port === null) {
-            err += '<li style="color: red;">You must specify an SMTP port!</li>';
-        } else if (port.match(/^\d+$/) === null || parseInt(port, 10) > 65535) {
-            err += '<li style="color: red;">SMTP port must be between 0 and 65535!</li>';
-        }
-        if (err.length > 0) {
-            err = '<ol>' + err + '</ol>';
-            status.html(err);
-        } else {
-            to = prompt('Enter an email address to send the test to:', null);
-            if (to === null || to.length === 0 || to.match(/.*@.*/) === null) {
-                status.html('<p style="color: red;">You must provide a recipient email address!</p>');
-            } else {
-                $.get(srRoot + '/home/testEmail', {host: host, port: port, smtp_from: from, use_tls: tls, user: user, pwd: pwd, to: to}, function (msg) {
-                    $('#testEmail-result').html(msg);
-                });
-            }
-        }
-    });
-
-    $('#testNMA').click(function () {
-        var nma_api = $.trim($('#nma_api').val());
-        var nma_priority = $('#nma_priority').val();
-        if (!nma_api) {
-            $('#testNMA-result').html('Please fill out the necessary fields above.');
-            $('#nma_api').addClass('warning');
-            return;
-        }
-        $('#nma_api').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testNMA-result').html(loading);
-        $.get(srRoot + '/home/testNMA', {'nma_api': nma_api, 'nma_priority': nma_priority}).done(function (data) {
-            $('#testNMA-result').html(data);
-            $('#testNMA').prop('disabled', false);
-        });
-    });
-
-    $('#testPushalot').click(function () {
-        var pushalot_authorizationtoken = $.trim($('#pushalot_authorizationtoken').val());
-        if (!pushalot_authorizationtoken) {
-            $('#testPushalot-result').html('Please fill out the necessary fields above.');
-            $('#pushalot_authorizationtoken').addClass('warning');
-            return;
-        }
-        $('#pushalot_authorizationtoken').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testPushalot-result').html(loading);
-        $.get(srRoot + '/home/testPushalot', {'authorizationToken': pushalot_authorizationtoken}).done(function (data) {
-            $('#testPushalot-result').html(data);
-            $('#testPushalot').prop('disabled', false);
-        });
-    });
-
-    $('#testPushbullet').click(function () {
-        var pushbullet_api = $.trim($('#pushbullet_api').val());
-        if (!pushbullet_api) {
-            $('#testPushbullet-result').html('Please fill out the necessary fields above.');
-            $('#pushbullet_api').addClass('warning');
-            return;
-        }
-        $('#pushbullet_api').removeClass('warning');
-        $(this).prop('disabled', true);
-        $('#testPushbullet-result').html(loading);
-        $.get(srRoot + '/home/testPushbullet', {'api': pushbullet_api}).done(function (data) {
-            $('#testPushbullet-result').html(data);
-            $('#testPushbullet').prop('disabled', false);
-        });
-    });
-
-    function get_pushbullet_devices(msg){
-
-        if(msg) $('#testPushbullet-result').html(loading);
-
-        var pushbullet_api = $("#pushbullet_api").val();
-
-        if(!pushbullet_api) {
-            $('#testPushbullet-result').html("You didn't supply a Pushbullet api key");
-            $("#pushbullet_api").focus();
-            return false;
-        }
-
-        $.get(srRoot + "/home/getPushbulletDevices", {'api': pushbullet_api}, function (data) {
-            var devices = jQuery.parseJSON(data).devices;
-            var current_pushbullet_device = $("#pushbullet_device").val();
-            $("#pushbullet_device_list").html('');
-            for (var i = 0; i < devices.length; i++) {
-                if(devices[i].active === true) {
-                    if(current_pushbullet_device == devices[i].iden) {
-                        $("#pushbullet_device_list").append('<option value="'+devices[i].iden+'" selected>' + devices[i].nickname + '</option>');
-                    } else {
-                        $("#pushbullet_device_list").append('<option value="'+devices[i].iden+'">' + devices[i].nickname + '</option>');
-                    }
-                }
-            }
-            if (current_pushbullet_device === '') {
-                $("#pushbullet_device_list").prepend('<option value="" selected>All devices</option>');
-            } else {
-                $("#pushbullet_device_list").prepend('<option value="">All devices</option>');
-            }
-            if(msg) $('#testPushbullet-result').html(msg);
-        });
-
-        $("#pushbullet_device_list").change(function(){
-            $("#pushbullet_device").val($("#pushbullet_device_list").val());
-            $('#testPushbullet-result').html("Don't forget to save your new pushbullet settings.");
-        });
-    }
-
-    $('#getPushbulletDevices').click(function(){
-        get_pushbullet_devices("Device list updated. Please choose a device to push to.");
-    });
-
-    // we have to call this function on dom ready to create the devices select
-    get_pushbullet_devices();
-
-    $('#email_show').change(function() {
-        var key = parseInt($('#email_show').val(), 10);
-        $('#email_show_list').val(key >= 0 ? notify_data[key.toString()].list : '');
-    });
-
-    // Update the internal data struct anytime settings are saved to the server
-    $('#email_show').bind('notify', function() {
-        load_show_notify_lists();
-    });
-
-    function load_show_notify_lists() {
-        $.get(srRoot + "/home/loadShowNotifyLists", function(data) {
-            var list, html, s;
-            list = $.parseJSON(data);
-            notify_data = list;
-            if (list._size === 0) return;
-            html = '<option value="-1">-- Select --</option>';
-            for (s in list) {
-                if (s.charAt(0) !== '_') {
-                    html += '<option value="' + list[s].id + '">' + $('<div/>').text(list[s].name).html() + '</option>';
-                }
-            }
-            $('#email_show').html(html);
-            $('#email_show_list').val('');
-        });
-    }
-    // Load the per show notify lists everytime this page is loaded
-    load_show_notify_lists();
-
-    $('#email_show_save').click(function() {
-        $.post(srRoot + "/home/saveShowNotifyList", { show: $('#email_show').val(), emails: $('#email_show_list').val()}, function (data) {
-            // Reload the per show notify lists to reflect changes
-            load_show_notify_lists();
-        });
-    });
-
-    // show instructions for plex when enabled
-    $('#use_plex').click(function() {
-        if ($(this).is(':checked')) {
-            $('.plexinfo').removeClass('hide');
-        } else {
-            $('.plexinfo').addClass('hide');
-        }
-    });
-});
diff --git a/gui/slick/js/configPostProcessing.js b/gui/slick/js/configPostProcessing.js
deleted file mode 100644
index ff1bb61ad46f8bebfb6df6d349a7650056aa441d..0000000000000000000000000000000000000000
--- a/gui/slick/js/configPostProcessing.js
+++ /dev/null
@@ -1,475 +0,0 @@
-$(document).ready(function () {
-    // http://stackoverflow.com/questions/2219924/idiomatic-jquery-delayed-event-only-after-a-short-pause-in-typing-e-g-timew
-    var typewatch = (function () {
-        var timer = 0;
-        return function (callback, ms) {
-            clearTimeout(timer);
-            timer = setTimeout(callback, ms);
-        };
-    })();
-
-    function israr_supported() {
-        var pattern = $('#naming_pattern').val();
-        $.get(srRoot + '/config/postProcessing/isRarSupported', function (data) {
-            if (data !== "supported") {
-                $('#unpack').qtip('option', {
-                    'content.text': 'Unrar Executable not found.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#unpack').qtip('toggle', true);
-                $('#unpack').css('background-color', '#FFFFDD');
-            }
-        });
-    }
-
-    function fill_examples() {
-        var pattern = $('#naming_pattern').val();
-        var multi = $('#naming_multi_ep :selected').val();
-        var anime_type = $('input[name="naming_anime"]:checked').val();
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, anime_type: 3}, function (data) {
-            if (data) {
-                $('#naming_example').text(data + '.ext');
-                $('#naming_example_div').show();
-            } else {
-                $('#naming_example_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, multi: multi, anime_type: 3}, function (data) {
-            if (data) {
-                $('#naming_example_multi').text(data + '.ext');
-                $('#naming_example_multi_div').show();
-            } else {
-                $('#naming_example_multi_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
-            if (data == "invalid") {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern is invalid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_pattern').qtip('toggle', true);
-                $('#naming_pattern').css('background-color', '#FFDDDD');
-            } else if (data == "seasonfolders") {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_pattern').qtip('toggle', true);
-                $('#naming_pattern').css('background-color', '#FFFFDD');
-            } else {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern is valid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-green'
-                });
-                $('#naming_pattern').qtip('toggle', false);
-                $('#naming_pattern').css('background-color', '#FFFFFF');
-            }
-        });
-    }
-
-    function fill_abd_examples() {
-        var pattern = $('#naming_abd_pattern').val();
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, abd: 'True'}, function (data) {
-            if (data) {
-                $('#naming_abd_example').text(data + '.ext');
-                $('#naming_abd_example_div').show();
-            } else {
-                $('#naming_abd_example_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, abd: 'True'}, function (data) {
-            if (data == "invalid") {
-                $('#naming_abd_pattern').qtip('option', {
-                    'content.text': 'This pattern is invalid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_abd_pattern').qtip('toggle', true);
-                $('#naming_abd_pattern').css('background-color', '#FFDDDD');
-            } else if (data == "seasonfolders") {
-                $('#naming_abd_pattern').qtip('option', {
-                    'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_abd_pattern').qtip('toggle', true);
-                $('#naming_abd_pattern').css('background-color', '#FFFFDD');
-            } else {
-                $('#naming_abd_pattern').qtip('option', {
-                    'content.text': 'This pattern is valid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-green'
-                });
-                $('#naming_abd_pattern').qtip('toggle', false);
-                $('#naming_abd_pattern').css('background-color', '#FFFFFF');
-            }
-        });
-    }
-
-    function fill_sports_examples() {
-        var pattern = $('#naming_sports_pattern').val();
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, sports: 'True'}, function (data) {
-            if (data) {
-                $('#naming_sports_example').text(data + '.ext');
-                $('#naming_sports_example_div').show();
-            } else {
-                $('#naming_sports_example_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, sports: 'True'}, function (data) {
-            if (data == "invalid") {
-                $('#naming_sports_pattern').qtip('option', {
-                    'content.text': 'This pattern is invalid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_sports_pattern').qtip('toggle', true);
-                $('#naming_sports_pattern').css('background-color', '#FFDDDD');
-            } else if (data == "seasonfolders") {
-                $('#naming_sports_pattern').qtip('option', {
-                    'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_sports_pattern').qtip('toggle', true);
-                $('#naming_sports_pattern').css('background-color', '#FFFFDD');
-            } else {
-                $('#naming_sports_pattern').qtip('option', {
-                    'content.text': 'This pattern is valid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-green'
-                });
-                $('#naming_sports_pattern').qtip('toggle', false);
-                $('#naming_sports_pattern').css('background-color', '#FFFFFF');
-            }
-        });
-    }
-
-    function fill_anime_examples() {
-        var pattern = $('#naming_anime_pattern').val();
-        var multi = $('#naming_anime_multi_ep :selected').val();
-        var anime_type = $('input[name="naming_anime"]:checked').val();
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, anime_type: anime_type}, function (data) {
-            if (data) {
-                $('#naming_example_anime').text(data + '.ext');
-                $('#naming_example_anime_div').show();
-            } else {
-                $('#naming_example_anime_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/testNaming', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
-            if (data) {
-                $('#naming_example_multi_anime').text(data + '.ext');
-                $('#naming_example_multi_anime_div').show();
-            } else {
-                $('#naming_example_multi_anime_div').hide();
-            }
-        });
-
-        $.get(srRoot + '/config/postProcessing/isNamingValid', {pattern: pattern, multi: multi, anime_type: anime_type}, function (data) {
-            if (data == "invalid") {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern is invalid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_pattern').qtip('toggle', true);
-                $('#naming_pattern').css('background-color', '#FFDDDD');
-            } else if (data == "seasonfolders") {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-red'
-                });
-                $('#naming_pattern').qtip('toggle', true);
-                $('#naming_pattern').css('background-color', '#FFFFDD');
-            } else {
-                $('#naming_pattern').qtip('option', {
-                    'content.text': 'This pattern is valid.',
-                    'style.classes': 'qtip-rounded qtip-shadow qtip-green'
-                });
-                $('#naming_pattern').qtip('toggle', false);
-                $('#naming_pattern').css('background-color', '#FFFFFF');
-            }
-        });
-    }
-
-    function setup_naming() {
-        // if it is a custom selection then show the text box
-        if ($('#name_presets :selected').val() == "Custom...") {
-            $('#naming_custom').show();
-        } else {
-            $('#naming_custom').hide();
-            $('#naming_pattern').val($('#name_presets :selected').attr('id'));
-        }
-        fill_examples();
-    }
-
-    function setup_abd_naming() {
-        // if it is a custom selection then show the text box
-        if ($('#name_abd_presets :selected').val() == "Custom...") {
-            $('#naming_abd_custom').show();
-        } else {
-            $('#naming_abd_custom').hide();
-            $('#naming_abd_pattern').val($('#name_abd_presets :selected').attr('id'));
-        }
-        fill_abd_examples();
-    }
-
-    function setup_sports_naming() {
-        // if it is a custom selection then show the text box
-        if ($('#name_sports_presets :selected').val() == "Custom...") {
-            $('#naming_sports_custom').show();
-        } else {
-            $('#naming_sports_custom').hide();
-            $('#naming_sports_pattern').val($('#name_sports_presets :selected').attr('id'));
-        }
-        fill_sports_examples();
-    }
-
-    function setup_anime_naming() {
-        // if it is a custom selection then show the text box
-        if ($('#name_anime_presets :selected').val() == "Custom...") {
-            $('#naming_anime_custom').show();
-        } else {
-            $('#naming_anime_custom').hide();
-            $('#naming_anime_pattern').val($('#name_anime_presets :selected').attr('id'));
-        }
-        fill_anime_examples();
-    }
-
-    $('#unpack').on('change', function(){
-        if(this.checked) {
-            israr_supported();
-        } else {
-            $('#unpack').qtip('toggle', false);
-        }
-    });
-
-    $('#name_presets').on('change', function(){
-        setup_naming();
-    });
-
-    $('#name_abd_presets').on('change', function(){
-        setup_abd_naming();
-    });
-
-    $('#naming_custom_abd').on('change', function(){
-        setup_abd_naming();
-    });
-
-    $('#name_sports_presets').on('change', function(){
-        setup_sports_naming();
-    });
-
-    $('#naming_custom_sports').on('change', function(){
-        setup_sports_naming();
-    });
-
-    $('#name_anime_presets').on('change', function(){
-        setup_anime_naming();
-    });
-
-    $('#naming_custom_anime').on('change', function(){
-        setup_anime_naming();
-    });
-
-    $('input[name="naming_anime"]').on('click', function(){
-        setup_anime_naming();
-    });
-
-    $('#naming_multi_ep').change(fill_examples);
-    $('#naming_pattern').focusout(fill_examples);
-    $('#naming_pattern').keyup(function () {
-        typewatch(function () {
-            fill_examples();
-        }, 500);
-    });
-
-    $('#naming_anime_multi_ep').change(fill_anime_examples);
-    $('#naming_anime_pattern').focusout(fill_anime_examples);
-    $('#naming_anime_pattern').keyup(function () {
-        typewatch(function () {
-            fill_anime_examples();
-        }, 500);
-    });
-
-    $('#naming_abd_pattern').focusout(fill_examples);
-    $('#naming_abd_pattern').keyup(function () {
-        typewatch(function () {
-            fill_abd_examples();
-        }, 500);
-    });
-
-    $('#naming_sports_pattern').focusout(fill_examples);
-    $('#naming_sports_pattern').keyup(function () {
-        typewatch(function () {
-            fill_sports_examples();
-        }, 500);
-    });
-
-    $('#naming_anime_pattern').focusout(fill_examples);
-    $('#naming_anime_pattern').keyup(function () {
-        typewatch(function () {
-            fill_anime_examples();
-        }, 500);
-    });
-
-    $('#show_naming_key').on('click', function(){
-        $('#naming_key').toggle();
-    });
-    $('#show_naming_abd_key').on('click', function(){
-        $('#naming_abd_key').toggle();
-    });
-    $('#show_naming_sports_key').on('click', function(){
-        $('#naming_sports_key').toggle();
-    });
-    $('#show_naming_anime_key').on('click', function(){
-        $('#naming_anime_key').toggle();
-    });
-    $('#do_custom').on('click', function(){
-        $('#naming_pattern').val($('#name_presets :selected').attr('id'));
-        $('#naming_custom').show();
-        $('#naming_pattern').focus();
-    });
-    setup_naming();
-    setup_abd_naming();
-    setup_sports_naming();
-    setup_anime_naming();
-
-    // -- start of metadata options div toggle code --
-    $('#metadataType').on('change keyup', function () {
-        $(this).showHideMetadata();
-    });
-
-    $.fn.showHideMetadata = function () {
-        $('.metadataDiv').each(function () {
-            var targetName = $(this).attr('id');
-            var selectedTarget = $('#metadataType :selected').val();
-
-            if (selectedTarget == targetName) {
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-    };
-    //initialize to show the div
-    $(this).showHideMetadata();
-    // -- end of metadata options div toggle code --
-
-    $('.metadata_checkbox').on('click', function(){
-        $(this).refreshMetadataConfig(false);
-    });
-
-    $.fn.refreshMetadataConfig = function (first) {
-        var cur_most = 0;
-        var cur_most_provider = '';
-
-        $('.metadataDiv').each(function () {
-            var generator_name = $(this).attr('id');
-
-            var config_arr = [];
-            var show_metadata = $("#" + generator_name + "_show_metadata").prop('checked');
-            var episode_metadata = $("#" + generator_name + "_episode_metadata").prop('checked');
-            var fanart = $("#" + generator_name + "_fanart").prop('checked');
-            var poster = $("#" + generator_name + "_poster").prop('checked');
-            var banner = $("#" + generator_name + "_banner").prop('checked');
-            var episode_thumbnails = $("#" + generator_name + "_episode_thumbnails").prop('checked');
-            var season_posters = $("#" + generator_name + "_season_posters").prop('checked');
-            var season_banners = $("#" + generator_name + "_season_banners").prop('checked');
-            var season_all_poster = $("#" + generator_name + "_season_all_poster").prop('checked');
-            var season_all_banner = $("#" + generator_name + "_season_all_banner").prop('checked');
-
-            config_arr.push(show_metadata ? '1' : '0');
-            config_arr.push(episode_metadata ? '1' : '0');
-            config_arr.push(fanart ? '1' : '0');
-            config_arr.push(poster ? '1' : '0');
-            config_arr.push(banner ? '1' : '0');
-            config_arr.push(episode_thumbnails ? '1' : '0');
-            config_arr.push(season_posters ? '1' : '0');
-            config_arr.push(season_banners ? '1' : '0');
-            config_arr.push(season_all_poster ? '1' : '0');
-            config_arr.push(season_all_banner ? '1' : '0');
-
-            var cur_num = 0;
-            for (var i = 0; i < config_arr.length; i++) {
-                cur_num += parseInt(config_arr[i]);
-            }
-            if (cur_num > cur_most) {
-                cur_most = cur_num;
-                cur_most_provider = generator_name;
-            }
-
-            $("#" + generator_name + "_eg_show_metadata").attr('class', show_metadata ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_episode_metadata").attr('class', episode_metadata ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_fanart").attr('class', fanart ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_poster").attr('class', poster ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_banner").attr('class', banner ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_episode_thumbnails").attr('class', episode_thumbnails ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_season_posters").attr('class', season_posters ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_season_banners").attr('class', season_banners ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_season_all_poster").attr('class', season_all_poster ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_eg_season_all_banner").attr('class', season_all_banner ? 'enabled' : 'disabled');
-            $("#" + generator_name + "_data").val(config_arr.join('|'));
-
-        });
-
-        if (cur_most_provider !== '' && first) {
-            $('#metadataType option[value=' + cur_most_provider + ']').attr('selected', 'selected');
-            $(this).showHideMetadata();
-        }
-    };
-
-    $(this).refreshMetadataConfig(true);
-    $('img[title]').qtip({
-        position: {
-            viewport: $(window),
-            at: 'bottom center',
-            my: 'top right'
-        },
-        style: {
-            tip: {
-                corner: true,
-                method: 'polygon'
-            },
-            classes: 'qtip-shadow qtip-dark'
-        }
-    });
-    $('i[title]').qtip({
-        position: {
-            viewport: $(window),
-            at: 'top center',
-            my: 'bottom center'
-        },
-        style: {
-            tip: {
-                corner: true,
-                method: 'polygon'
-            },
-            classes: 'qtip-rounded qtip-shadow ui-tooltip-sb'
-        }
-    });
-    $('.custom-pattern,#unpack').qtip({
-        content: 'validating...',
-        show: {
-            event: false,
-            ready: false
-        },
-        hide: false,
-        position: {
-            viewport: $(window),
-            at: 'center left',
-            my: 'center right'
-        },
-        style: {
-            tip: {
-                corner: true,
-                method: 'polygon'
-            },
-            classes: 'qtip-rounded qtip-shadow qtip-red'
-        }
-    });
-});
diff --git a/gui/slick/js/configProviders.js b/gui/slick/js/configProviders.js
index 466df5ceb8c2b47b3e72ae5b12235185359cd8bd..e2a7a49ed83ad5aaceb102bef6a3b250c4bac9e8 100644
--- a/gui/slick/js/configProviders.js
+++ b/gui/slick/js/configProviders.js
@@ -4,7 +4,7 @@ $(document).ready(function(){
             var providerName = $(this).attr('id');
             var selectedProvider = $('#editAProvider :selected').val();
 
-            if (selectedProvider + 'Div' == providerName) {
+            if (selectedProvider + 'Div' == providerName) { // jshint ignore:line
                 $(this).show();
             } else {
                 $(this).hide();
@@ -12,6 +12,18 @@ $(document).ready(function(){
         });
     };
 
+    var ifExists = function(loopThroughArray, searchFor) {
+        var found = false;
+
+        loopThroughArray.forEach(function(rootObject) {
+            if (rootObject.name === searchFor) {
+                found = true;
+            }
+            console.log(rootObject.name + " while searching for: "+  searchFor);
+        });
+        return found;
+    };
+
     /**
      * Gets categories for the provided newznab provider.
      * @param {String} isDefault
@@ -24,38 +36,35 @@ $(document).ready(function(){
         var url = selectedProvider[1];
         var key = selectedProvider[2];
 
-        if (!name)
-            return;
-
-        if (!url)
-            return;
-
-        if (!key)
+        if (!name || !url || !key) {
             return;
+        }
 
         var params = {url: url, name: name, key: key};
-        var returnData;
 
         $(".updating_categories").wrapInner('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Updating Categories ...</span>');
-        var jqxhr = $.getJSON(srRoot + '/config/providers/getNewznabCategories', params,
-                function(data){
-                    $(this).updateNewznabCaps( data, selectedProvider );
-                    console.debug(data.tv_categories);
-            });
+        var jqxhr = $.getJSON(srRoot + '/config/providers/getNewznabCategories', params, function(data){
+            $(this).updateNewznabCaps( data, selectedProvider );
+            console.debug(data.tv_categories); // jshint ignore:line
+        });
         jqxhr.always(function() {
             $(".updating_categories").empty();
-             });
+        });
     };
 
     $.fn.addProvider = function (id, name, url, key, cat, isDefault, showProvider) {
-
         url = $.trim(url);
-        if (!url)
+        if (!url) {
             return;
+        }
 
-        if (!/^https?:\/\//i.test(url)) url = "http://" + url;
+        if (!/^https?:\/\//i.test(url)) {
+            url = "http://" + url;
+        }
 
-        if (url.match('/$') === null) url = url + '/';
+        if (url.match('/$') === null) {
+            url = url + '/';
+        }
 
         var newData = [isDefault, [name, url, key, cat]];
         newznabProviders[id] = newData;
@@ -76,7 +85,6 @@ $(document).ready(function(){
     };
 
     $.fn.addTorrentRssProvider = function (id, name, url, cookies, titleTAG) {
-
         var newData = [name, url, cookies, titleTAG];
         torrentRssProviders[id] = newData;
 
@@ -84,9 +92,7 @@ $(document).ready(function(){
         $(this).populateTorrentRssSection();
 
         if ($('#provider_order_list > #'+id).length === 0) {
-            var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/torrentrss.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>';
-
-            $('#provider_order_list').append(toAdd);
+            $('#provider_order_list').append('<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="provider_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/providers/torrentrss.png" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>');
             $('#provider_order_list').sortable("refresh");
         }
 
@@ -94,7 +100,6 @@ $(document).ready(function(){
     };
 
     $.fn.updateProvider = function (id, url, key, cat) {
-
         newznabProviders[id][1][1] = url;
         newznabProviders[id][1][2] = key;
         newznabProviders[id][1][3] = cat;
@@ -102,17 +107,14 @@ $(document).ready(function(){
         $(this).populateNewznabSection();
 
         $(this).makeNewznabProviderString();
-
     };
 
     $.fn.deleteProvider = function (id) {
-
         $('#editANewznabProvider').removeOption(id);
         delete newznabProviders[id];
         $(this).populateNewznabSection();
         $('li').remove('#'+id);
         $(this).makeNewznabProviderString();
-
     };
 
     $.fn.updateTorrentRssProvider = function (id, url, cookies, titleTAG) {
@@ -132,12 +134,12 @@ $(document).ready(function(){
     };
 
     $.fn.populateNewznabSection = function() {
-
         var selectedProvider = $('#editANewznabProvider :selected').val();
         var data = '';
         var isDefault = '';
+        var rrcat = '';
 
-        if (selectedProvider == 'addNewznab') {
+        if (selectedProvider === 'addNewznab') {
             data = ['','',''];
             isDefault = 0;
             $('#newznab_add_div').show();
@@ -183,16 +185,17 @@ $(document).ready(function(){
         var newCatOptions = [];
         if (rrcat) {
             rrcat.forEach(function (cat) {
-                if (cat !== '') newCatOptions.push({text : cat, value : cat});
+                if (cat !== '') {
+                    newCatOptions.push({text : cat, value : cat});
+                }
             });
             $("#newznab_cat").replaceOptions(newCatOptions);
         }
 
-        if (selectedProvider == 'addNewznab') {
+        if (selectedProvider === 'addNewznab') {
             $('#newznab_name').removeAttr("disabled");
             $('#newznab_url').removeAttr("disabled");
         } else {
-
             $('#newznab_name').attr("disabled", "disabled");
 
             if (isDefault) {
@@ -211,18 +214,6 @@ $(document).ready(function(){
         }
     };
 
-    ifExists = function(loopThroughArray, searchFor) {
-        var found = false;
-
-        loopThroughArray.forEach(function(rootObject) {
-            if (rootObject.name == searchFor) {
-                found = true;
-            }
-            console.log(rootObject.name + " while searching for: "+  searchFor);
-        });
-        return found;
-    };
-
     /**
      * Updates the Global array $.fn.newznabProvidersCapabilities with a combination of newznab prov name
      * and category capabilities. Return
@@ -231,24 +222,22 @@ $(document).ready(function(){
      * @return no return data. The multiselect input $("#newznab_cap") is updated, as a result.
      */
     $.fn.updateNewznabCaps = function( newzNabCaps, selectedProvider ) {
-
         if (newzNabCaps && !ifExists($.fn.newznabProvidersCapabilities, selectedProvider[0])) {
-            $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories});
+            $.fn.newznabProvidersCapabilities.push({'name' : selectedProvider[0], 'categories' : newzNabCaps.tv_categories}); // jshint ignore:line
         }
 
         //Loop through the array and if currently selected newznab provider name matches one in the array, use it to
         //update the capabilities select box (on the left).
         if (selectedProvider[0]) {
             $.fn.newznabProvidersCapabilities.forEach(function(newzNabCap) {
-
-                if (newzNabCap.name && newzNabCap.name == selectedProvider[0] && newzNabCap.categories instanceof Array) {
-                        var newCapOptions = [];
-                        newzNabCap.categories.forEach(function(category_set) {
-                            if (category_set.id && category_set.name) {
-                                newCapOptions.push({value : category_set.id, text : category_set.name + "(" + category_set.id + ")"});
-                            }
-                        });
-                        $("#newznab_cap").replaceOptions(newCapOptions);
+                if (newzNabCap.name && newzNabCap.name === selectedProvider[0] && newzNabCap.categories instanceof Array) {
+                    var newCapOptions = [];
+                    newzNabCap.categories.forEach(function(categorySet) {
+                        if (categorySet.id && categorySet.name) {
+                            newCapOptions.push({value : categorySet.id, text : categorySet.name + "(" + categorySet.id + ")"});
+                        }
+                    });
+                    $("#newznab_cap").replaceOptions(newCapOptions);
                 }
             });
         }
@@ -258,7 +247,9 @@ $(document).ready(function(){
         var provStrings = [];
 
         for (var id in newznabProviders) {
-            provStrings.push(newznabProviders[id][1].join('|'));
+            if (newznabProviders.hasOwnProperty(id)) {
+                provStrings.push(newznabProviders[id][1].join('|'));
+            }
         }
 
         $('#newznab_string').val(provStrings.join('!!!'));
@@ -268,7 +259,7 @@ $(document).ready(function(){
         var selectedProvider = $('#editATorrentRssProvider :selected').val();
         var data = '';
 
-        if (selectedProvider == 'addTorrentRss') {
+        if (selectedProvider === 'addTorrentRss') {
             data = ['','','','title'];
             $('#torrentrss_add_div').show();
             $('#torrentrss_update_div').hide();
@@ -283,7 +274,7 @@ $(document).ready(function(){
         $('#torrentrss_cookies').val(data[2]);
         $('#torrentrss_titleTAG').val(data[3]);
 
-        if (selectedProvider == 'addTorrentRss') {
+        if (selectedProvider === 'addTorrentRss') {
             $('#torrentrss_name').removeAttr("disabled");
             $('#torrentrss_url').removeAttr("disabled");
             $('#torrentrss_cookies').removeAttr("disabled");
@@ -295,13 +286,14 @@ $(document).ready(function(){
             $('#torrentrss_titleTAG').removeAttr("disabled");
             $('#torrentrss_delete').removeAttr("disabled");
         }
-
     };
 
     $.fn.makeTorrentRssProviderString = function() {
         var provStrings = [];
         for (var id in torrentRssProviders) {
-            provStrings.push(torrentRssProviders[id].join('|'));
+            if (torrentRssProviders.hasOwnProperty(id)) {
+                provStrings.push(torrentRssProviders[id].join('|'));
+            }
         }
 
         $('#torrentrss_string').val(provStrings.join('!!!'));
@@ -333,7 +325,7 @@ $(document).ready(function(){
 
         if (finalArr.length > 0) {
             $('<select>').prop('id','editAProvider').addClass('form-control input-sm').appendTo('#provider-list');
-            for (var i = 0; i < finalArr.length; i++) {
+            for (var i = 0, len = finalArr.length; i < len; i++) {
                 var provider = finalArr[i];
                 $('#editAProvider').append($('<option>').prop('value',provider).text($.trim($('#'+provider).text()).replace(/\s\*$/, '').replace(/\s\*\*$/, '')));
             }
@@ -348,22 +340,22 @@ $(document).ready(function(){
     var torrentRssProviders = [];
 
     $(this).on('change', '.newznab_key', function(){
+        var providerId = $(this).attr('id');
+        providerId = providerId.substring(0, providerId.length-'_hash'.length);
 
-        var provider_id = $(this).attr('id');
-        provider_id = provider_id.substring(0, provider_id.length-'_hash'.length);
-
-        var url = $('#'+provider_id+'_url').val();
-        var cat = $('#'+provider_id+'_cat').val();
+        var url = $('#'+providerId+'_url').val();
+        var cat = $('#'+providerId+'_cat').val();
         var key = $(this).val();
 
-        $(this).updateProvider(provider_id, url, key, cat);
-
+        $(this).updateProvider(providerId, url, key, cat);
     });
 
     $('#newznab_key,#newznab_url').change(function(){
         var selectedProvider = $('#editANewznabProvider :selected').val();
 
-        if (selectedProvider == "addNewznab") return;
+        if (selectedProvider === "addNewznab"){
+             return;
+        }
 
         var url = $('#newznab_url').val();
         var key = $('#newznab_key').val();
@@ -378,7 +370,9 @@ $(document).ready(function(){
     $('#torrentrss_url,#torrentrss_cookies,#torrentrss_titleTAG').change(function(){
         var selectedProvider = $('#editATorrentRssProvider :selected').val();
 
-        if (selectedProvider == "addTorrentRss") return;
+        if (selectedProvider === "addTorrentRss"){
+             return;
+        }
 
         var url = $('#torrentrss_url').val();
         var cookies = $('#torrentrss_cookies').val();
@@ -416,52 +410,44 @@ $(document).ready(function(){
         // When the update botton is clicked, loop through the capabilities list
         // and copy the selected category id's to the category list on the right.
         $("#newznab_cap option:selected").each(function(){
-            var selected_cat = $(this).val();
-            console.debug(selected_cat);
-            newOptions.push({text: selected_cat, value: selected_cat});
+            var selectedCat = $(this).val();
+            console.debug(selectedCat);
+            newOptions.push({text: selectedCat, value: selectedCat});
         });
 
         $("#newznab_cat").replaceOptions(newOptions);
 
         var selectedProvider = $("#editANewznabProvider :selected").val();
-        if (selectedProvider == "addNewznab")
+        if (selectedProvider === "addNewznab"){
             return;
+        }
 
         var url = $('#newznab_url').val();
         var key = $('#newznab_key').val();
 
         var cat = $('#newznab_cat option').map(function(i, opt) {
             return $(opt).text();
-          }).toArray().join(',');
+        }).toArray().join(',');
 
         $("#newznab_cat option:not([value])").remove();
 
         $(this).updateProvider(selectedProvider, url, key, cat);
-
     });
 
 
     $('#newznab_add').click(function(){
-
-        var selectedProvider = $('#editANewznabProvider :selected').val();
-
         var name = $.trim($('#newznab_name').val());
         var url = $.trim($('#newznab_url').val());
         var key = $.trim($('#newznab_key').val());
         //var cat = $.trim($('#newznab_cat').val());
 
         var cat = $.trim($('#newznab_cat option').map(function(i, opt) {
-              return $(opt).text();}).toArray().join(','));
-
-
-        if (!name)
-            return;
-
-        if (!url)
-            return;
+            return $(opt).text();
+        }).toArray().join(','));
 
-        if (!key)
+        if (!name || !url || !key) {
             return;
+        }
 
         var params = {name: name};
 
@@ -473,7 +459,6 @@ $(document).ready(function(){
             }
             $(this).addProvider(data.success, name, url, key, cat, 0);
         });
-
     });
 
     $('.newznab_delete').click(function(){
@@ -482,8 +467,6 @@ $(document).ready(function(){
     });
 
     $('#torrentrss_add').click(function(){
-        var selectedProvider = $('#editATorrentRssProvider :selected').val();
-
         var name = $('#torrentrss_name').val();
         var url = $('#torrentrss_url').val();
         var cookies = $('#torrentrss_cookies').val();
@@ -491,25 +474,22 @@ $(document).ready(function(){
         var params = { name: name, url: url, cookies: cookies, titleTAG: titleTAG};
 
         // send to the form with ajax, get a return value
-        $.getJSON(srRoot + '/config/providers/canAddTorrentRssProvider', params,
-            function(data){
-                if (data.error !== undefined) {
-                    alert(data.error);
-                    return;
-                }
+        $.getJSON(srRoot + '/config/providers/canAddTorrentRssProvider', params, function(data){
+            if (data.error !== undefined) {
+                alert(data.error);
+                return;
+            }
 
-                $(this).addTorrentRssProvider(data.success, name, url, cookies, titleTAG);
-                $(this).refreshEditAProvider();
+            $(this).addTorrentRssProvider(data.success, name, url, cookies, titleTAG);
+            $(this).refreshEditAProvider();
         });
     });
 
     $('.torrentrss_delete').on('click', function(){
-        var selectedProvider = $('#editATorrentRssProvider :selected').val();
-        $(this).deleteTorrentRssProvider(selectedProvider);
+        $(this).deleteTorrentRssProvider($('#editATorrentRssProvider :selected').val());
         $(this).refreshEditAProvider();
     });
 
-
     $(this).on('change', "[class='providerDiv_tip'] input", function(){
         $('div .providerDiv ' + "[name=" + $(this).attr('name') + "]").replaceWith($(this).clone());
         $('div .providerDiv ' + "[newznab_name=" + $(this).attr('id') + "]").replaceWith($(this).clone());
@@ -546,22 +526,20 @@ $(document).ready(function(){
         }
     });
 
-    $.fn.makeTorrentOptionString = function(provider_id) {
-
-        var seed_ratio  = $('.providerDiv_tip #'+provider_id+'_seed_ratio').prop('value');
-        var seed_time   = $('.providerDiv_tip #'+provider_id+'_seed_time').prop('value');
-        var process_met = $('.providerDiv_tip #'+provider_id+'_process_method').prop('value');
-        var option_string = $('.providerDiv_tip #'+provider_id+'_option_string');
+    $.fn.makeTorrentOptionString = function(providerId) {
+        var seedRatio  = $('.providerDiv_tip #' + providerId + '_seed_ratio').prop('value');
+        var seedTime   = $('.providerDiv_tip #' + providerId + '_seed_time').prop('value');
+        var processMet = $('.providerDiv_tip #' + providerId + '_process_method').prop('value');
+        var optionString = $('.providerDiv_tip #' + providerId + '_option_string');
 
-        option_string.val([seed_ratio, seed_time, process_met].join('|'));
+        optionString.val([seedRatio, seedTime, processMet].join('|'));
     };
 
     $(this).on('change', '.seed_option', function(){
-        var provider_id = $(this).attr('id').split('_')[0];
-        $(this).makeTorrentOptionString(provider_id);
+        var providerId = $(this).attr('id').split('_')[0];
+        $(this).makeTorrentOptionString(providerId);
     });
 
-
     $.fn.replaceOptions = function(options) {
         var self, $option;
 
@@ -569,23 +547,19 @@ $(document).ready(function(){
         self = this;
 
         $.each(options, function(index, option) {
-          $option = $("<option></option>")
-            .attr("value", option.value)
-            .text(option.text);
-          self.append($option);
+            $option = $("<option></option>").attr("value", option.value).text(option.text);
+            self.append($option);
         });
-      };
+    };
 
     // initialization stuff
-
-
     $.fn.newznabProvidersCapabilities = [];
 
     $(this).showHideProviders();
 
     $("#provider_order_list").sortable({
         placeholder: 'ui-state-highlight',
-        update: function (event, ui) {
+        update: function () {
             $(this).refreshProviderList();
         }
     });
@@ -595,5 +569,4 @@ $(document).ready(function(){
     if ($('#editANewznabProvider').length) {
         $(this).populateNewznabSection();
     }
-
 });
diff --git a/gui/slick/js/configSearch.js b/gui/slick/js/configSearch.js
deleted file mode 100644
index 35dfd6b00c9c1c03e52c0ce85a8aaed4374068bb..0000000000000000000000000000000000000000
--- a/gui/slick/js/configSearch.js
+++ /dev/null
@@ -1,218 +0,0 @@
-$(document).ready(function(){
-    var loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
-
-    function toggle_torrent_title(){
-        if ($('#use_torrents').prop('checked')){
-            $('#no_torrents').show();
-        } else {
-            $('#no_torrents').hide();
-        }
-    }
-
-    $.fn.nzb_method_handler = function() {
-        var selectedProvider = $('#nzb_method :selected').val(),
-            blackhole_settings = '#blackhole_settings',
-            sabnzbd_settings = '#sabnzbd_settings',
-            testSABnzbd = '#testSABnzbd',
-            testSABnzbd_result = '#testSABnzbd_result',
-            nzbget_settings = '#nzbget_settings';
-
-        $(blackhole_settings).hide();
-        $(sabnzbd_settings).hide();
-        $(testSABnzbd).hide();
-        $(testSABnzbd_result).hide();
-        $(nzbget_settings).hide();
-
-        if ('blackhole' == selectedProvider) {
-            $(blackhole_settings).show();
-        } else if ('nzbget' == selectedProvider) {
-            $(nzbget_settings).show();
-        } else {
-            $(sabnzbd_settings).show();
-            $(testSABnzbd).show();
-            $(testSABnzbd_result).show();
-        }
-    };
-
-    $.fn.rtorrent_scgi = function(){
-        var selectedProvider = $('#torrent_method :selected').val();
-
-        if ('rtorrent' == selectedProvider) {
-            var hostname = $('#torrent_host').prop('value');
-            var isMatch = hostname.substr(0, 7) == "scgi://";
-
-            if (isMatch) {
-                $('#torrent_username_option').hide();
-                $('#torrent_username').prop('value', '');
-                $('#torrent_password_option').hide();
-                $('#torrent_password').prop('value', '');
-                $('#torrent_auth_type_option').hide();
-                $("#torrent_auth_type option[value=none]").attr('selected', 'selected');
-            } else {
-                $('#torrent_username_option').show();
-                $('#torrent_password_option').show();
-                $('#torrent_auth_type_option').show();
-            }
-        }
-    };
-
-    $.fn.torrent_method_handler = function() {
-
-        $('#options_torrent_clients').hide();
-        $('#options_torrent_blackhole').hide();
-
-        var selectedProvider = $('#torrent_method :selected').val(),
-            host = ' host:port',
-            username = ' username',
-            password = ' password',
-            label = ' label',
-            directory = ' directory',
-            client = '',
-            option_panel = '#options_torrent_blackhole';
-            rpcurl = ' RPC URL';
-
-        if ('blackhole' != selectedProvider) {
-            var label_warning_deluge = '#label_warning_deluge',
-                label_anime_warning_deluge = '#label_anime_warning_deluge',
-                host_desc_rtorrent = '#host_desc_rtorrent',
-                host_desc_torrent = '#host_desc_torrent',
-                torrent_verify_cert_option = '#torrent_verify_cert_option',
-                torrent_path_option = '#torrent_path_option',
-                torrent_seed_time_option = '#torrent_seed_time_option',
-                torrent_high_bandwidth_option = '#torrent_high_bandwidth_option',
-                torrent_label_option = '#torrent_label_option',
-                torrent_label_anime_option = '#torrent_label_anime_option',
-                path_synology = '#path_synology',
-                torrent_paused_option = '#torrent_paused_option';
-
-            $(label_warning_deluge).hide();
-            $(label_anime_warning_deluge).hide();
-            $(label_anime_warning_deluge).hide();
-            $(host_desc_rtorrent).hide();
-            $(host_desc_torrent).show();
-            $(torrent_verify_cert_option).hide();
-            $(torrent_verify_deluge).hide();
-            $(torrent_verify_rtorrent).hide();
-            $(torrent_auth_type_option).hide();
-            $(torrent_path_option).show();
-            $(torrent_path_option).find('.fileBrowser').show();
-            $(torrent_seed_time_option).hide();
-            $(torrent_high_bandwidth_option).hide();
-            $(torrent_label_option).show();
-            $(torrent_label_anime_option).show();
-            $(path_synology).hide();
-            $(torrent_paused_option).show();
-            $(torrent_rpcurl_option).hide();
-            $(this).rtorrent_scgi();
-
-            if ('utorrent' == selectedProvider) {
-                client = 'uTorrent';
-                $(torrent_path_option).hide();
-                $('#torrent_seed_time_label').text('Minimum seeding time is');
-                $(torrent_seed_time_option).show();
-                $('#host_desc_torrent').text('URL to your uTorrent client (e.g. http://localhost:8000)');
-            } else if ('transmission' == selectedProvider){
-                client = 'Transmission';
-                $('#torrent_seed_time_label').text('Stop seeding when inactive for');
-                $(torrent_seed_time_option).show();
-                $(torrent_high_bandwidth_option).show();
-                $(torrent_label_option).hide();
-                $(torrent_label_anime_option).hide();
-                $(torrent_rpcurl_option).show();
-                $('#host_desc_torrent').text('URL to your Transmission client (e.g. http://localhost:9091)');
-                //$('#directory_title').text(client + directory);
-            } else if ('deluge' == selectedProvider){
-                client = 'Deluge';
-                $(torrent_verify_cert_option).show();
-                $(torrent_verify_deluge).show();
-                $(torrent_verify_rtorrent).hide();
-                $(label_warning_deluge).show();
-                $(label_anime_warning_deluge).show();
-                $('#torrent_username_option').hide();
-                $('#torrent_username').prop('value', '');
-                $('#host_desc_torrent').text('URL to your Deluge client (e.g. http://localhost:8112)');
-                //$('#directory_title').text(client + directory);
-            } else if ('deluged' == selectedProvider){
-                client = 'Deluge';
-                $(torrent_verify_cert_option).hide();
-                $(torrent_verify_deluge).hide();
-                $(torrent_verify_rtorrent).hide();
-                $(label_warning_deluge).show();
-                $(label_anime_warning_deluge).show();
-                $('#torrent_username_option').show();
-                $('#host_desc_torrent').text('IP or Hostname of your Deluge Daemon (e.g. scgi://localhost:58846)');
-                //$('#directory_title').text(client + directory);
-            } else if ('download_station' == selectedProvider){
-                client = 'Synology DS';
-                $(torrent_label_option).hide();
-                $(torrent_label_anime_option).hide();
-                $('#torrent_paused_option').hide();
-                $(torrent_path_option).find('.fileBrowser').hide();
-                $('#host_desc_torrent').text('URL to your Synology DS client (e.g. http://localhost:5000)');
-                //$('#directory_title').text(client + directory);
-                $(path_synology).show();
-            } else if ('rtorrent' == selectedProvider){
-                client = 'rTorrent';
-                $(torrent_paused_option).hide();
-                $('#host_desc_torrent').text('URL to your rTorrent client (e.g. scgi://localhost:5000 <br/> or https://localhost/rutorrent/plugins/httprpc/action.php)');
-                $(torrent_verify_cert_option).show();
-                $(torrent_verify_deluge).hide();
-                $(torrent_verify_rtorrent).show();
-                $(torrent_auth_type_option).show();
-                //$('#directory_title').text(client + directory);
-            } else if ('qbittorrent' == selectedProvider){
-                client = 'qbittorrent';
-                $(torrent_path_option).hide();
-                $(torrent_label_option).hide();
-                $(torrent_label_anime_option).hide();
-                $('#host_desc_torrent').text('URL to your qbittorrent client (e.g. http://localhost:8080)');
-            }
-            $('#host_title').text(client + host);
-            $('#username_title').text(client + username);
-            $('#password_title').text(client + password);
-            $('#torrent_client').text(client);
-            $('#rpcurl_title').text(client + rpcurl);
-            option_panel = '#options_torrent_clients';
-        }
-        $(option_panel).show();
-    };
-
-    $('#nzb_method').change($(this).nzb_method_handler);
-
-    $(this).nzb_method_handler();
-
-    $('#testSABnzbd').click(function(){
-        $('#testSABnzbd_result').html(loading);
-        var sab_host = $('#sab_host').val();
-        var sab_username = $('#sab_username').val();
-        var sab_password = $('#sab_password').val();
-        var sab_apiKey = $('#sab_apikey').val();
-
-        $.get(srRoot + '/home/testSABnzbd', {'host': sab_host, 'username': sab_username, 'password': sab_password, 'apikey': sab_apiKey},
-        function(data){
-            $('#testSABnzbd_result').html(data);
-        });
-    });
-
-
-    $('#torrent_method').change($(this).torrent_method_handler);
-
-    $(this).torrent_method_handler();
-
-    $('#use_torrents').click(function(){
-        toggle_torrent_title();
-    });
-
-    $('#test_torrent').click(function(){
-        $('#test_torrent_result').html(loading);
-        var torrent_method = $('#torrent_method :selected').val();
-        var torrent_host = $('#torrent_host').val();
-        var torrent_username = $('#torrent_username').val();
-        var torrent_password = $('#torrent_password').val();
-
-        $.get(srRoot + '/home/testTorrent', {'torrent_method': torrent_method, 'host': torrent_host, 'username': torrent_username, 'password': torrent_password},
-        function(data){ $('#test_torrent_result').html(data); });
-    });
-
-    $('#torrent_host').change($(this).rtorrent_scgi);
-});
diff --git a/gui/slick/js/configSubtitles.js b/gui/slick/js/configSubtitles.js
deleted file mode 100644
index 05974d6dfb467491a8f66bbdbabb7a5e4c1418c2..0000000000000000000000000000000000000000
--- a/gui/slick/js/configSubtitles.js
+++ /dev/null
@@ -1,65 +0,0 @@
-$(document).ready(function(){
-
-    $.fn.showHideServices = function() {
-        $('.serviceDiv').each(function(){
-            var serviceName = $(this).attr('id');
-            var selectedService = $('#editAService :selected').val();
-
-            if (selectedService+'Div' == serviceName){
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-    };
-
-    $.fn.addService = function (id, name, url, key, isDefault, showService) {
-        if (url.match('/$') === null) url = url + '/';
-
-        var newData = [isDefault, [name, url, key]];
-
-        if ($('#service_order_list > #'+id).length === 0 && showService !== false) {
-            var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="service_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/services/newznab.gif" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>';
-
-            $('#service_order_list').append(toAdd);
-            $('#service_order_list').sortable("refresh");
-        }
-    };
-
-    $.fn.deleteService = function (id) {
-        $('#service_order_list > #'+id).remove();
-    };
-
-    $.fn.refreshServiceList = function() {
-        var idArr = $("#service_order_list").sortable('toArray');
-        var finalArr = [];
-        $.each(idArr, function(key, val) {
-                var checked = + $('#enable_'+val).prop('checked') ? '1' : '0';
-                finalArr.push(val + ':' + checked);
-        });
-
-        $("#service_order").val(finalArr.join(' '));
-    };
-
-    $('#editAService').change(function(){
-        $(this).showHideServices();
-    });
-
-    $('.service_enabler').on('click', function(){
-        $(this).refreshServiceList();
-    });
-
-
-    // initialization stuff
-
-    $(this).showHideServices();
-
-    $("#service_order_list").sortable({
-        placeholder: 'ui-state-highlight',
-        update: function (event, ui) {
-            $(this).refreshServiceList();
-        }
-    });
-
-    $("#service_order_list").disableSelection();
-});
diff --git a/gui/slick/js/confirmations.js b/gui/slick/js/confirmations.js
deleted file mode 100644
index 2746732902d192ee5bd37f1985addd59ebf5493b..0000000000000000000000000000000000000000
--- a/gui/slick/js/confirmations.js
+++ /dev/null
@@ -1,129 +0,0 @@
-$(document).ready(function () {
-    $('a.shutdown').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        $.confirm({
-            'title'		: 'Shutdown',
-            'message'	: 'Are you sure you want to shutdown SickRage ?',
-            'buttons'	: {
-                'Yes'	: {
-                    'class'	: 'green',
-                    'action': function(){
-                        location.href = target;
-                    }
-                },
-                'No'	: {
-                    'class'	: 'red',
-                    'action': function(){}	// Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-
-    $('a.restart').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        $.confirm({
-            'title'		: 'Restart',
-            'message'	: 'Are you sure you want to restart SickRage ?',
-            'buttons'	: {
-                'Yes'	: {
-                    'class'	: 'green',
-                    'action': function(){
-                        location.href = target;
-                    }
-                },
-                'No'	: {
-                    'class'	: 'red',
-                    'action': function(){}	// Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-
-    $('a.removeshow').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        var showname = document.getElementById("showtitle").getAttribute('data-showname');
-        $.confirm({
-            'title'		: 'Remove Show',
-            'message'	: 'Are you sure you want to remove <span class="footerhighlight">' + showname + '</span> from the database ?<br /><br /><input type="checkbox" id="deleteFiles"> <span class="red-text">Check to delete files as well. IRREVERSIBLE</span></input>',
-            'buttons'	: {
-                'Yes'	: {
-                    'class'	: 'green',
-                    'action': function(){
-                        location.href = target + (document.getElementById('deleteFiles').checked ? '&full=1' : '');
-                        // If checkbox is ticked, remove show and delete files. Else just remove show.
-                    }
-                },
-                'No'	: {
-                    'class'	: 'red',
-                    'action': function(){}	// Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-
-    $('a.clearhistory').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        $.confirm({
-            'title'		: 'Clear History',
-            'message'	: 'Are you sure you want to clear all download history ?',
-            'buttons'	: {
-                'Yes'	: {
-                    'class'	: 'green',
-                    'action': function(){
-                        location.href = target;
-                    }
-                },
-                'No'	: {
-                    'class'	: 'red',
-                    'action': function(){}	// Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-
-    $('a.trimhistory').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        $.confirm({
-            'title'		: 'Trim History',
-            'message'	: 'Are you sure you want to trim all download history older than 30 days ?',
-            'buttons'	: {
-                'Yes'	: {
-                    'class'	: 'green',
-                    'action': function(){
-                        location.href = target;
-                    }
-                },
-                'No'	: {
-                    'class'	: 'red',
-                    'action': function(){}	// Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-
-    $('a.submiterrors').on('click', function(e) {
-        e.preventDefault();
-        var target = $(this).attr('href');
-        $.confirm({
-            'title'		: 'Submit Errors',
-            'message'	: 'Are you sure you want to submit these errors ?<br /><br /><span class="red-text">Make sure SickRage is updated and trigger<br /> this error with debug enabled before submitting</span>',
-            'buttons'	: {
-                'Yes'	: {
-                    'class' : 'green',
-                    'action': function(){
-                        location.href = target;
-                    }
-                },
-                'No'	: {
-                    'class' : 'red',
-                    'action': function(){}  // Nothing to do in this case. You can as well omit the action property.
-                }
-            }
-        });
-    });
-});
diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js
new file mode 100644
index 0000000000000000000000000000000000000000..1fcbeae568427ab310002eb23a6e9d9f37aab25b
--- /dev/null
+++ b/gui/slick/js/core.js
@@ -0,0 +1,2003 @@
+// @TODO Move these into common.ini when possible,
+//       currently we can't do that as browser.js and a few others need it before this is loaded
+var srRoot = getMeta('srRoot'),
+    themeSpinner = getMeta('themeSpinner'),
+    anonURL = getMeta('anonURL'),
+    topImageHtml = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />', // jshint ignore:line
+    loading = '<img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif" height="16" width="16" />';
+
+var configSuccess = function(){
+    $('.config_submitter').each(function(){
+        $(this).removeAttr("disabled");
+        $(this).next().remove();
+        $(this).show();
+    });
+    $('.config_submitter_refresh').each(function(){
+        $(this).removeAttr("disabled");
+        $(this).next().remove();
+        $(this).show();
+        window.location.href = srRoot + '/config/providers/';
+    });
+    $('#email_show').trigger('notify');
+};
+
+var SICKRAGE = {
+    common: {
+        init: function() {
+            $.confirm.options = {
+                confirmButton: "Yes",
+                cancelButton: "Cancel",
+                dialogClass: "modal-dialog",
+                post: false,
+                confirm: function(e) {
+                    location.href = e.context.href;
+                }
+            };
+
+            $("a.shutdown").confirm({
+                title: "Shutdown",
+                text: "Are you sure you want to shutdown SickRage?"
+            });
+
+            $("a.restart").confirm({
+                title: "Restart",
+                text: "Are you sure you want to restart SickRage?"
+            });
+
+            $("a.removeshow").confirm({
+                title: "Remove Show",
+                text: 'Are you sure you want to remove <span class="footerhighlight">' + $('#showtitle').data('showname') + '</span> from the database?<br><br><input type="checkbox" id="deleteFiles"> <span class="red-text">Check to delete files as well. IRREVERSIBLE</span></input>',
+                confirm: function(e) {
+                    location.href = e.context.href + ($('#deleteFiles')[0].checked ? '&full=1' : '');
+                }
+            });
+
+            $('a.clearhistory').confirm({
+                title: 'Clear History',
+                text: 'Are you sure you want to clear all download history?'
+            });
+
+            $('a.trimhistory').confirm({
+                title: 'Trim History',
+                text: 'Are you sure you want to trim all download history older than 30 days?'
+            });
+
+            $('a.submiterrors').confirm({
+                title: 'Submit Errors',
+                text: 'Are you sure you want to submit these errors ?<br><br><span class="red-text">Make sure SickRage is updated and trigger<br> this error with debug enabled before submitting</span>'
+            });
+
+            $("#config-components").tabs({
+                activate: function (event, ui) {
+                    var lastOpenedPanel = $(this).data("lastOpenedPanel");
+
+                    if(!lastOpenedPanel) { lastOpenedPanel = $(ui.oldPanel); }
+
+                    if(!$(this).data("topPositionTab")) { $(this).data("topPositionTab", $(ui.newPanel).position().top); }
+
+                    //Dont use the builtin fx effects. This will fade in/out both tabs, we dont want that
+                    //Fadein the new tab yourself
+                    $(ui.newPanel).hide().fadeIn(0);
+
+                    if(lastOpenedPanel) {
+                        // 1. Show the previous opened tab by removing the jQuery UI class
+                        // 2. Make the tab temporary position:absolute so the two tabs will overlap
+                        // 3. Set topposition so they will overlap if you go from tab 1 to tab 0
+                        // 4. Remove position:absolute after animation
+                        lastOpenedPanel
+                            .toggleClass("ui-tabs-hide")
+                            .css("position", "absolute")
+                            .css("top", $(this).data("topPositionTab") + "px")
+                            .fadeOut(0, function () {
+                                $(this).css("position", "");
+                            });
+                    }
+
+                    //Saving the last tab has been opened
+                    $(this).data("lastOpenedPanel", $(ui.newPanel));
+                }
+            });
+
+            // @TODO Replace this with a real touchscreen check
+            // hack alert: if we don't have a touchscreen, and we are already hovering the mouse, then click should link instead of toggle
+            if((navigator.maxTouchPoints || 0) < 2) {
+                $('.dropdown-toggle').on('click', function() {
+                    var $this = $(this);
+                    if ($this.attr('aria-expanded') === 'true') {
+                        window.location.href = $this.attr('href');
+                    }
+                });
+            }
+
+            if(metaToBool('sickbeard.FUZZY_DATING')) {
+                $.timeago.settings.allowFuture = true;
+                $.timeago.settings.strings = {
+                    prefixAgo: null,
+                    prefixFromNow: 'In ',
+                    suffixAgo: "ago",
+                    suffixFromNow: "",
+                    seconds: "less than a minute",
+                    minute: "about a minute",
+                    minutes: "%d minutes",
+                    hour: "an hour",
+                    hours: "%d hours",
+                    day: "a day",
+                    days: "%d days",
+                    month: "a month",
+                    months: "%d months",
+                    year: "a year",
+                    years: "%d years",
+                    wordSeparator: " ",
+                    numbers: []
+                };
+                $("[datetime]").timeago();
+            }
+        }
+    },
+    config: {
+        init: function() {
+            $('#config-components').tabs();
+
+            $(".enabler").each(function(){
+                if (!$(this).prop('checked')) { $('#content_'+$(this).attr('id')).hide(); }
+            });
+
+            $(".enabler").click(function() {
+                if ($(this).prop('checked')){
+                    $('#content_'+$(this).attr('id')).fadeIn("fast", "linear");
+                } else {
+                    $('#content_'+$(this).attr('id')).fadeOut("fast", "linear");
+                }
+            });
+
+            $(".viewIf").click(function() {
+                if ($(this).prop('checked')) {
+                    $('.hide_if_'+$(this).attr('id')).css('display','none');
+                    $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear");
+                } else {
+                    $('.show_if_'+$(this).attr('id')).css('display','none');
+                    $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear");
+                }
+            });
+
+            $(".datePresets").click(function() {
+                var def = $('#date_presets').val();
+                if ($(this).prop('checked') && '%x' === def) {
+                    def = '%a, %b %d, %Y';
+                    $('#date_use_system_default').html('1');
+                } else if (!$(this).prop('checked') && '1' === $('#date_use_system_default').html()){
+                    def = '%x';
+                }
+
+                $('#date_presets').attr('name', 'date_preset_old');
+                $('#date_presets').attr('id', 'date_presets_old');
+
+                $('#date_presets_na').attr('name', 'date_preset');
+                $('#date_presets_na').attr('id', 'date_presets');
+
+                $('#date_presets_old').attr('name', 'date_preset_na');
+                $('#date_presets_old').attr('id', 'date_presets_na');
+
+                if (def) { $('#date_presets').val(def); }
+            });
+
+            // bind 'myForm' and provide a simple callback function
+            $('#configForm').ajaxForm({
+                beforeSubmit: function(){
+                    $('.config_submitter .config_submitter_refresh').each(function(){
+                        $(this).attr("disabled", "disabled");
+                        $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
+                        $(this).hide();
+                    });
+                },
+                success: function(){
+                    setTimeout(function () {
+                        "use strict";
+                        configSuccess();
+                    }, 2000);
+                }
+            });
+
+            $('#api_key').click(function(){
+                $('#api_key').select();
+            });
+
+            $("#generate_new_apikey").click(function(){
+                $.get(srRoot + '/config/general/generateApiKey', function(data){
+                    if (data.error !== undefined) {
+                        alert(data.error);
+                        return;
+                    }
+                    $('#api_key').val(data);
+                });
+            });
+
+            $('#branchCheckout').click(function() {
+                var url = srRoot + '/home/branchCheckout?branch=' + $("#branchVersion").val();
+                var checkDBversion = srRoot + "/home/getDBcompare";
+                $.getJSON(checkDBversion, function(data){
+                    if (data.status === "success") {
+                        if (data.message === "equal") {
+                            //Checkout Branch
+                            window.location.href = url;
+                        }
+                        if (data.message === "upgrade") {
+                            if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) {
+                                //Checkout Branch
+                                window.location.href = url;
+                            }
+                        }
+                        if (data.message === "downgrade") {
+                            alert("Can't switch branch as this will result in a database downgrade.");
+                        }
+                    }
+                });
+            });
+        },
+        index: function() {
+            if ($("input[name='proxy_setting']").val().length === 0) {
+                $("input[id='proxy_indexers']").prop('checked', false);
+                $("label[for='proxy_indexers']").hide();
+            }
+
+            $("input[name='proxy_setting']").on('input', function() {
+                if($(this).val().length === 0) {
+                    $("input[id='proxy_indexers']").prop('checked', false);
+                    $("label[for='proxy_indexers']").hide();
+                } else {
+                    $("label[for='proxy_indexers']").show();
+                }
+            });
+
+            $('#log_dir').fileBrowser({ title: 'Select log file folder location' });
+        },
+        backupRestore: function(){
+            $('#Backup').click(function() {
+                $("#Backup").attr("disabled", true);
+                $('#Backup-result').html(loading);
+                var backupDir = $("#backupDir").val();
+                $.get(srRoot + "/config/backuprestore/backup", {'backupDir': backupDir})
+                    .done(function (data) {
+                        $('#Backup-result').html(data);
+                        $("#Backup").attr("disabled", false);
+                    });
+            });
+            $('#Restore').click(function() {
+                $("#Restore").attr("disabled", true);
+                $('#Restore-result').html(loading);
+                var backupFile = $("#backupFile").val();
+                $.get(srRoot + "/config/backuprestore/restore", {'backupFile': backupFile})
+                    .done(function (data) {
+                        $('#Restore-result').html(data);
+                        $("#Restore").attr("disabled", false);
+                    });
+            });
+
+            $('#backupDir').fileBrowser({ title: 'Select backup folder to save to', key: 'backupPath' });
+            $('#backupFile').fileBrowser({ title: 'Select backup files to restore', key: 'backupFile', includeFiles: 1 });
+            $('#config-components').tabs();
+
+            $(".enabler").each(function(){
+                if (!$(this).prop('checked')) { $('#content_'+$(this).attr('id')).hide(); }
+            });
+
+            $(".enabler").click(function() {
+                if ($(this).prop('checked')){
+                    $('#content_'+$(this).attr('id')).fadeIn("fast", "linear");
+                } else {
+                    $('#content_'+$(this).attr('id')).fadeOut("fast", "linear");
+                }
+            });
+
+            $(".viewIf").click(function() {
+                if ($(this).prop('checked')) {
+                    $('.hide_if_'+$(this).attr('id')).css('display','none');
+                    $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear");
+                } else {
+                    $('.show_if_'+$(this).attr('id')).css('display','none');
+                    $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear");
+                }
+            });
+
+            $(".datePresets").click(function() {
+                var def = $('#date_presets').val();
+                if ($(this).prop('checked') && '%x' == def) { // jshint ignore:line
+                    def = '%a, %b %d, %Y';
+                    $('#date_use_system_default').html('1');
+                } else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html()){ // jshint ignore:line
+                    def = '%x';
+                }
+
+                $('#date_presets').attr('name', 'date_preset_old');
+                $('#date_presets').attr('id', 'date_presets_old');
+
+                $('#date_presets_na').attr('name', 'date_preset');
+                $('#date_presets_na').attr('id', 'date_presets');
+
+                $('#date_presets_old').attr('name', 'date_preset_na');
+                $('#date_presets_old').attr('id', 'date_presets_na');
+
+                if (def) { $('#date_presets').val(def); }
+            });
+
+            // bind 'myForm' and provide a simple callback function
+            $('#configForm').ajaxForm({
+                beforeSubmit: function(){
+                    $('.config_submitter .config_submitter_refresh').each(function(){
+                        $(this).attr("disabled", "disabled");
+                        $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
+                        $(this).hide();
+                    });
+                },
+                success: function(){
+                    setTimeout(function () {
+                        "use strict";
+                        configSuccess();
+                    }, 2000);
+                }
+            });
+
+            $('#api_key').click(function(){
+                $('#api_key').select();
+            });
+
+            $("#generate_new_apikey").click(function(){
+                $.get(srRoot + '/config/general/generateApiKey', function(data){
+                    if (data.error !== undefined) {
+                        alert(data.error);
+                        return;
+                    }
+                    $('#api_key').val(data);
+                });
+            });
+
+            $('#branchCheckout').click(function() {
+                var url = srRoot+'/home/branchCheckout?branch='+$("#branchVersion").val();
+                var checkDBversion = srRoot + "/home/getDBcompare";
+                $.getJSON(checkDBversion, function(data){
+                    if (data.status.toLowerCase() === "success") {
+                        if (data.message.toLowerCase() === "equal") {
+                            //Checkout Branch
+                            window.location.href = url;
+                        }
+                        if (data.message.toLowerCase() === "upgrade") {
+                            if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) {
+                                //Checkout Branch
+                                window.location.href = url;
+                            }
+                        }
+                        if (data.message.toLowerCase() === "downgrade") {
+                            alert("Can't switch branch as this will result in a database downgrade.");
+                        }
+                    }
+                });
+            });
+        },
+        notifications: function() {
+            $('#config-components').tabs();
+
+            $('#testGrowl').click(function () {
+                var growl = {};
+                growl.host = $.trim($('#growl_host').val());
+                growl.password = $.trim($('#growl_password').val());
+                if (!growl.ost) {
+                    $('#testGrowl-result').html('Please fill out the necessary fields above.');
+                    $('#growl_host').addClass('warning');
+                    return;
+                }
+                $('#growl_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testGrowl-result').html(loading);
+                $.get(srRoot + '/home/testGrowl', {'host': growl.host, 'password': growl.password}).done(function (data) {
+                    $('#testGrowl-result').html(data);
+                    $('#testGrowl').prop('disabled', false);
+                });
+            });
+
+            $('#testProwl').click(function () {
+                var prowl = {};
+                prowl.api = $.trim($('#prowl_api').val());
+                prowl.priority = $('#prowl_priority').val();
+                if (!prowl.ai) {
+                    $('#testProwl-result').html('Please fill out the necessary fields above.');
+                    $('#prowl_api').addClass('warning');
+                    return;
+                }
+                $('#prowl_api').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testProwl-result').html(loading);
+                $.get(srRoot + '/home/testProwl', {'prowl_api': prowl.api, 'prowl_priority': prowl.priority}).done(function (data) {
+                    $('#testProwl-result').html(data);
+                    $('#testProwl').prop('disabled', false);
+                });
+            });
+
+            $('#testKODI').click(function () {
+                var kodi = {};
+                kodi.host = $.trim($('#kodi_host').val());
+                kodi.username = $.trim($('#kodi_username').val());
+                kodi.password = $.trim($('#kodi_password').val());
+                if (!kodi.host) {
+                    $('#testKODI-result').html('Please fill out the necessary fields above.');
+                    $('#kodi_host').addClass('warning');
+                    return;
+                }
+                $('#kodi_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testKODI-result').html(loading);
+                $.get(srRoot + '/home/testKODI', {'host': kodi.host, 'username': kodi.username, 'password': kodi.password}).done(function (data) {
+                    $('#testKODI-result').html(data);
+                    $('#testKODI').prop('disabled', false);
+                });
+            });
+
+            $('#testPMC').click(function () {
+                var plex = {};
+                plex.client = {};
+                plex.client.host = $.trim($('#plex_host').val());
+                plex.client.username = $.trim($('#plex_client_username').val());
+                plex.client.password = $.trim($('#plex_client_password').val());
+                if (!plex.host) {
+                    $('#testPMC-result').html('Please fill out the necessary fields above.');
+                    $('#plex_host').addClass('warning');
+                    return;
+                }
+                $('#plex_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testPMC-result').html(loading);
+                $.get(srRoot + '/home/testPMC', {'host': plex.client.host, 'username': plex.client.username, 'password': plex.client.password}).done(function (data) {
+                    $('#testPMC-result').html(data);
+                    $('#testPMC').prop('disabled', false);
+                });
+            });
+
+            $('#testPMS').click(function () {
+                var plex = {};
+                plex.server = {};
+                plex.server.host = $.trim($('#plex_server_host').val());
+                plex.username = $.trim($('#plex_username').val());
+                plex.password = $.trim($('#plex_password').val());
+                plex.server.token = $.trim($('#plex_server_token').val());
+                if (!plex.server.host) {
+                    $('#testPMS-result').html('Please fill out the necessary fields above.');
+                    $('#plex_server_host').addClass('warning');
+                    return;
+                }
+                $('#plex_server_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testPMS-result').html(loading);
+                $.get(srRoot + '/home/testPMS', {'host': plex.server.host, 'username': plex.username, 'password': plex.password, 'plex_server_token': plex.server.token}).done(function (data) {
+                    $('#testPMS-result').html(data);
+                    $('#testPMS').prop('disabled', false);
+                });
+            });
+
+            $('#testEMBY').click(function () {
+                var emby = {};
+                emby.host = $('#emby_host').val();
+                emby.apikey = $('#emby_apikey').val();
+                if (!emby.host || !emby.apikey) {
+                    $('#testEMBY-result').html('Please fill out the necessary fields above.');
+                    if (!emby.host) {
+                        $('#emby_host').addClass('warning');
+                    } else {
+                        $('#emby_host').removeClass('warning');
+                    }
+                    if (!emby.apikey) {
+                        $('#emby_apikey').addClass('warning');
+                    } else {
+                        $('#emby_apikey').removeClass('warning');
+                    }
+                    return;
+                }
+                $('#emby_host,#emby_apikey').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testEMBY-result').html(loading);
+                $.get(srRoot + '/home/testEMBY', {'host': emby.host, 'emby_apikey': emby.apikey}).done(function (data) {
+                    $('#testEMBY-result').html(data);
+                    $('#testEMBY').prop('disabled', false);
+                });
+            });
+
+            $('#testBoxcar').click(function() {
+                var boxcar = {};
+                boxcar.username = $.trim($('#boxcar_username').val());
+                if (!boxcar.username) {
+                    $('#testBoxcar-result').html('Please fill out the necessary fields above.');
+                    $('#boxcar_username').addClass('warning');
+                    return;
+                }
+                $('#boxcar_username').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testBoxcar-result').html(loading);
+                $.get(srRoot + '/home/testBoxcar', {'username': boxcar.username}).done(function (data) {
+                    $('#testBoxcar-result').html(data);
+                    $('#testBoxcar').prop('disabled', false);
+                });
+            });
+
+            $('#testBoxcar2').click(function () {
+                var boxcar2 = {};
+                boxcar2.accesstoken = $.trim($('#boxcar2_accesstoken').val());
+                if (!boxcar2.accesstoken) {
+                    $('#testBoxcar2-result').html('Please fill out the necessary fields above.');
+                    $('#boxcar2_accesstoken').addClass('warning');
+                    return;
+                }
+                $('#boxcar2_accesstoken').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testBoxcar2-result').html(loading);
+                $.get(srRoot + '/home/testBoxcar2', {'accesstoken': boxcar2.accesstoken}).done(function (data) {
+                    $('#testBoxcar2-result').html(data);
+                    $('#testBoxcar2').prop('disabled', false);
+                });
+            });
+
+            $('#testPushover').click(function () {
+                var pushover = {};
+                pushover.userkey = $('#pushover_userkey').val();
+                pushover.apikey = $('#pushover_apikey').val();
+                if (!pushover.userkey || !pushover.apikey) {
+                    $('#testPushover-result').html('Please fill out the necessary fields above.');
+                    if (!pushover.userkey) {
+                        $('#pushover_userkey').addClass('warning');
+                    } else {
+                        $('#pushover_userkey').removeClass('warning');
+                    }
+                    if (!pushover.apikey) {
+                        $('#pushover_apikey').addClass('warning');
+                    } else {
+                        $('#pushover_apikey').removeClass('warning');
+                    }
+                    return;
+                }
+                $('#pushover_userkey,#pushover_apikey').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testPushover-result').html(loading);
+                $.get(srRoot + '/home/testPushover', {'userKey': pushover.userkey, 'apiKey': pushover.apikey}).done(function (data) {
+                    $('#testPushover-result').html(data);
+                    $('#testPushover').prop('disabled', false);
+                });
+            });
+
+            $('#testLibnotify').click(function() {
+                $('#testLibnotify-result').html(loading);
+                $.get(srRoot + '/home/testLibnotify', function (data) {
+                    $('#testLibnotify-result').html(data);
+                });
+            });
+
+            $('#twitterStep1').click(function() {
+                $('#testTwitter-result').html(loading);
+                $.get(srRoot + '/home/twitterStep1', function (data) {
+                    window.open(data);
+                }).done(function() {
+                    $('#testTwitter-result').html('<b>Step1:</b> Confirm Authorization');
+                });
+            });
+
+            $('#twitterStep2').click(function () {
+                var twitter = {};
+                twitter.key = $.trim($('#twitter_key').val());
+                if (!twitter.key) {
+                    $('#testTwitter-result').html('Please fill out the necessary fields above.');
+                    $('#twitter_key').addClass('warning');
+                    return;
+                }
+                $('#twitter_key').removeClass('warning');
+                $('#testTwitter-result').html(loading);
+                $.get(srRoot + '/home/twitterStep2', {'key': twitter.key}, function(data) {
+                    $('#testTwitter-result').html(data);
+                });
+            });
+
+            $('#testTwitter').click(function() {
+                $.get(srRoot + '/home/testTwitter', function(data) {
+                    $('#testTwitter-result').html(data);
+                });
+            });
+
+            $('#settingsNMJ').click(function() {
+                var nmj = {};
+                if (!$('#nmj_host').val()) {
+                    alert('Please fill in the Popcorn IP address');
+                    $('#nmj_host').focus();
+                    return;
+                }
+                $('#testNMJ-result').html(loading);
+                nmj.host = $('#nmj_host').val();
+
+                $.get(srRoot + '/home/settingsNMJ', {'host': nmj.host}, function (data) {
+                    if (data === null) {
+                        $('#nmj_database').removeAttr('readonly');
+                        $('#nmj_mount').removeAttr('readonly');
+                    }
+                    var JSONData = $.parseJSON(data);
+                    $('#testNMJ-result').html(JSONData.message);
+                    $('#nmj_database').val(JSONData.database);
+                    $('#nmj_mount').val(JSONData.mount);
+
+                    if (JSONData.database) {
+                        $('#nmj_database').attr('readonly', true);
+                    } else {
+                        $('#nmj_database').removeAttr('readonly');
+                    }
+                    if (JSONData.mount) {
+                        $('#nmj_mount').attr('readonly', true);
+                    } else {
+                        $('#nmj_mount').removeAttr('readonly');
+                    }
+                });
+            });
+
+            $('#testNMJ').click(function () {
+                var nmj = {};
+                nmj.host = $.trim($('#nmj_host').val());
+                nmj.database = $('#nmj_database').val();
+                nmj.mount = $('#nmj_mount').val();
+                if (!nmj.host) {
+                    $('#testNMJ-result').html('Please fill out the necessary fields above.');
+                    $('#nmj_host').addClass('warning');
+                    return;
+                }
+                $('#nmj_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testNMJ-result').html(loading);
+                $.get(srRoot + '/home/testNMJ', {'host': nmj.host, 'database': nmj.database, 'mount': nmj.mount}).done(function (data) {
+                    $('#testNMJ-result').html(data);
+                    $('#testNMJ').prop('disabled', false);
+                });
+            });
+
+            $('#settingsNMJv2').click(function() {
+                var nmjv2 = {};
+                if(!$('#nmjv2_host').val()) {
+                    alert('Please fill in the Popcorn IP address');
+                    $('#nmjv2_host').focus();
+                    return;
+                }
+                $('#testNMJv2-result').html(loading);
+                nmjv2.host = $('#nmjv2_host').val();
+                nmjv2.dbloc = '';
+                var radios = document.getElementsByName('nmjv2_dbloc');
+                for(var i = 0, len = radios.length; i < len; i++) {
+                    if (radios[i].checked) {
+                        nmjv2.dbloc = radios[i].value;
+                        break;
+                    }
+                }
+
+                nmjv2.dbinstance=$('#NMJv2db_instance').val();
+                $.get(srRoot + '/home/settingsNMJv2', {'host': nmjv2.host,'dbloc': nmjv2.dbloc,'instance': nmjv2.dbinstance}, function (data){
+                    if (data === null) {
+                        $('#nmjv2_database').removeAttr('readonly');
+                    }
+                    var JSONData = $.parseJSON(data);
+                    $('#testNMJv2-result').html(JSONData.message);
+                    $('#nmjv2_database').val(JSONData.database);
+
+                    if (JSONData.database){
+                        $('#nmjv2_database').attr('readonly', true);
+                    } else {
+                        $('#nmjv2_database').removeAttr('readonly');
+                    }
+                });
+            });
+
+            $('#testNMJv2').click(function () {
+                var nmjv2 = {};
+                nmjv2.host = $.trim($('#nmjv2_host').val());
+                if (!nmjv2.host) {
+                    $('#testNMJv2-result').html('Please fill out the necessary fields above.');
+                    $('#nmjv2_host').addClass('warning');
+                    return;
+                }
+                $('#nmjv2_host').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testNMJv2-result').html(loading);
+                $.get(srRoot + '/home/testNMJv2', {'host': nmjv2.host}) .done(function (data) {
+                    $('#testNMJv2-result').html(data);
+                    $('#testNMJv2').prop('disabled', false);
+                });
+            });
+
+            $('#testFreeMobile').click(function () {
+                var freemobile = {};
+                freemobile.id = $.trim($('#freemobile_id').val());
+                freemobile.apikey = $.trim($('#freemobile_apikey').val());
+                if (!freemobile.id || !freemobile.apikey) {
+                    $('#testFreeMobile-result').html('Please fill out the necessary fields above.');
+                    if (!freemobile.id) {
+                        $('#freemobile_id').addClass('warning');
+                    } else {
+                        $('#freemobile_id').removeClass('warning');
+                    }
+                    if (!freemobile.apikey) {
+                        $('#freemobile_apikey').addClass('warning');
+                    } else {
+                        $('#freemobile_apikey').removeClass('warning');
+                    }
+                    return;
+                }
+                $('#freemobile_id,#freemobile_apikey').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testFreeMobile-result').html(loading);
+                $.get(srRoot + '/home/testFreeMobile', {'freemobile_id': freemobile.id, 'freemobile_apikey': freemobile.apikey}).done(function (data) {
+                    $('#testFreeMobile-result').html(data);
+                    $('#testFreeMobile').prop('disabled', false);
+                });
+            });
+
+            $('#TraktGetPin').click(function () {
+                var trakt = {};
+                trakt.pinUrl = $('#trakt_pin_url').val();
+                window.open(trakt.pinUrl, "popUp", "toolbar=no, scrollbars=no, resizable=no, top=200, left=200, width=650, height=550");
+                $('#trakt_pin').removeClass('hide');
+            });
+
+            $('#trakt_pin').on('keyup change', function(){
+                var trakt = {};
+                trakt.pin = $('#trakt_pin').val();
+
+                if (trakt.pin.length !== 0) {
+                    $('#TraktGetPin').addClass('hide');
+                    $('#authTrakt').removeClass('hide');
+                } else {
+                    $('#TraktGetPin').removeClass('hide');
+                    $('#authTrakt').addClass('hide');
+                }
+            });
+
+            $('#authTrakt').click(function() {
+                var trakt = {};
+                trakt.pin = $('#trakt_pin').val();
+                if (trakt.pin.length !== 0) {
+                    $.get(srRoot + '/home/getTraktToken', { "trakt_pin": trakt.pin }).done(function (data) {
+                        $('#testTrakt-result').html(data);
+                        $('#authTrakt').addClass('hide');
+                        $('#trakt_pin').addClass('hide');
+                        $('#TraktGetPin').addClass('hide');
+                    });
+                }
+            });
+
+            $('#testTrakt').click(function () {
+                var trakt = {};
+                trakt.username = $.trim($('#trakt_username').val());
+                trakt.trendingBlacklist = $.trim($('#trakt_blacklist_name').val());
+                if (!trakt.username) {
+                    $('#testTrakt-result').html('Please fill out the necessary fields above.');
+                    if (!trakt.username) {
+                        $('#trakt_username').addClass('warning');
+                    } else {
+                        $('#trakt_username').removeClass('warning');
+                    }
+                    return;
+                }
+
+                if (/\s/g.test(trakt.trendingBlacklist)) {
+                    $('#testTrakt-result').html('Check blacklist name; the value need to be a trakt slug');
+                    $('#trakt_blacklist_name').addClass('warning');
+                    return;
+                }
+                $('#trakt_username').removeClass('warning');
+                $('#trakt_blacklist_name').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testTrakt-result').html(loading);
+                $.get(srRoot + '/home/testTrakt', {'username': trakt.username, 'blacklist_name': trakt.trendingBlacklist}).done(function (data) {
+                    $('#testTrakt-result').html(data);
+                    $('#testTrakt').prop('disabled', false);
+                });
+            });
+
+            $('#testEmail').click(function () {
+                var status, host, port, tls, from, user, pwd, err, to;
+                status = $('#testEmail-result');
+                status.html(loading);
+                host = $('#email_host').val();
+                host = host.length > 0 ? host : null;
+                port = $('#email_port').val();
+                port = port.length > 0 ? port : null;
+                tls = $('#email_tls').attr('checked') !== undefined ? 1 : 0;
+                from = $('#email_from').val();
+                from = from.length > 0 ? from : 'root@localhost';
+                user = $('#email_user').val().trim();
+                pwd = $('#email_password').val();
+                err = '';
+                if (host === null) {
+                    err += '<li style="color: red;">You must specify an SMTP hostname!</li>';
+                }
+                if (port === null) {
+                    err += '<li style="color: red;">You must specify an SMTP port!</li>';
+                } else if (port.match(/^\d+$/) === null || parseInt(port, 10) > 65535) {
+                    err += '<li style="color: red;">SMTP port must be between 0 and 65535!</li>';
+                }
+                if (err.length > 0) {
+                    err = '<ol>' + err + '</ol>';
+                    status.html(err);
+                } else {
+                    to = prompt('Enter an email address to send the test to:', null);
+                    if (to === null || to.length === 0 || to.match(/.*@.*/) === null) {
+                        status.html('<p style="color: red;">You must provide a recipient email address!</p>');
+                    } else {
+                        $.get(srRoot + '/home/testEmail', {
+                            host: host,
+                            port: port,
+                            smtp_from: from, // jshint ignore:line
+                            use_tls: tls, // jshint ignore:line
+                            user: user,
+                            pwd: pwd,
+                            to: to
+                        }, function (msg) {
+                            $('#testEmail-result').html(msg);
+                        });
+                    }
+                }
+            });
+
+            $('#testNMA').click(function () {
+                var nma = {};
+                nma.api = $.trim($('#nma_api').val());
+                nma.priority = $('#nma_priority').val();
+                if (!nma.api) {
+                    $('#testNMA-result').html('Please fill out the necessary fields above.');
+                    $('#nma_api').addClass('warning');
+                    return;
+                }
+                $('#nma_api').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testNMA-result').html(loading);
+                $.get(srRoot + '/home/testNMA', {'nma_api': nma.api, 'nma_priority': nma.priority}).done(function (data) {
+                    $('#testNMA-result').html(data);
+                    $('#testNMA').prop('disabled', false);
+                });
+            });
+
+            $('#testPushalot').click(function () {
+                var pushalot = {};
+                pushalot.authToken = $.trim($('#pushalot_authorizationtoken').val());
+                if (!pushalot.authToken) {
+                    $('#testPushalot-result').html('Please fill out the necessary fields above.');
+                    $('#pushalot_authorizationtoken').addClass('warning');
+                    return;
+                }
+                $('#pushalot_authorizationtoken').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testPushalot-result').html(loading);
+                $.get(srRoot + '/home/testPushalot', {'authorizationToken': pushalot.authToken}).done(function (data) {
+                    $('#testPushalot-result').html(data);
+                    $('#testPushalot').prop('disabled', false);
+                });
+            });
+
+            $('#testPushbullet').click(function () {
+                var pushbullet = {};
+                pushbullet.api = $.trim($('#pushbullet_api').val());
+                if (!pushbullet.api) {
+                    $('#testPushbullet-result').html('Please fill out the necessary fields above.');
+                    $('#pushbullet_api').addClass('warning');
+                    return;
+                }
+                $('#pushbullet_api').removeClass('warning');
+                $(this).prop('disabled', true);
+                $('#testPushbullet-result').html(loading);
+                $.get(srRoot + '/home/testPushbullet', {'api': pushbullet.api}).done(function (data) {
+                    $('#testPushbullet-result').html(data);
+                    $('#testPushbullet').prop('disabled', false);
+                });
+            });
+
+            function getPushbulletDevices(msg){
+                var pushbullet = {};
+                pushbullet.api = $("#pushbullet_api").val();
+
+                if(msg) {
+                    $('#testPushbullet-result').html(loading);
+                }
+
+                if(!pushbullet.api) {
+                    $('#testPushbullet-result').html("You didn't supply a Pushbullet api key");
+                    $("#pushbullet_api").focus();
+                    return false;
+                }
+
+                $.get(srRoot + "/home/getPushbulletDevices", {'api': pushbullet.api}, function (data) {
+                    pushbullet.devices = jQuery.parseJSON(data).devices;
+                    pushbullet.currentDevice = $("#pushbullet_device").val();
+                    $("#pushbullet_device_list").html('');
+                    for (var i = 0, len = pushbullet.devices.length; i < len; i++) {
+                        if(pushbullet.devices[i].active === true) {
+                            if(pushbullet.currentDevice === pushbullet.devices[i].iden) {
+                                $("#pushbullet_device_list").append('<option value="'+pushbullet.devices[i].iden+'" selected>' + pushbullet.devices[i].nickname + '</option>');
+                            } else {
+                                $("#pushbullet_device_list").append('<option value="'+pushbullet.devices[i].iden+'">' + pushbullet.devices[i].nickname + '</option>');
+                            }
+                        }
+                    }
+                    if (pushbullet.currentDevice === '') {
+                        $("#pushbullet_device_list").prepend('<option value="" selected>All devices</option>');
+                    } else {
+                        $("#pushbullet_device_list").prepend('<option value="">All devices</option>');
+                    }
+                    if(msg) {
+                        $('#testPushbullet-result').html(msg);
+                    }
+                });
+
+                $("#pushbullet_device_list").change(function(){
+                    $("#pushbullet_device").val($("#pushbullet_device_list").val());
+                    $('#testPushbullet-result').html("Don't forget to save your new pushbullet settings.");
+                });
+            }
+
+            $('#getPushbulletDevices').click(function(){
+                getPushbulletDevices("Device list updated. Please choose a device to push to.");
+            });
+
+            // we have to call this function on dom ready to create the devices select
+            getPushbulletDevices();
+
+            // @TODO Find out what notify_data actually does since it doesn't seem to be a real function
+            $('#email_show').change(function() {
+                var key = parseInt($('#email_show').val(), 10);
+                $('#email_show_list').val(key >= 0 ? notify_data[key.toString()].list : ''); // jshint ignore:line
+            });
+
+            // Update the internal data struct anytime settings are saved to the server
+            $('#email_show').bind('notify', function() {
+                loadShowNotifyLists();
+            });
+
+            function loadShowNotifyLists() {
+                $.get(srRoot + "/home/loadShowNotifyLists", function(data) {
+                    var list, html, s;
+                    list = $.parseJSON(data); // @TODO The line below this is the same as the $('#email_show') function above
+                    notify_data = list; // jshint ignore:line
+                    if (list._size === 0) { return; }
+                    html = '<option value="-1">-- Select --</option>';
+                    for (s in list) {
+                        if (s.charAt(0) !== '_') {
+                            html += '<option value="' + list[s].id + '">' + $('<div/>').text(list[s].name).html() + '</option>';
+                        }
+                    }
+                    $('#email_show').html(html);
+                    $('#email_show_list').val('');
+                });
+            }
+            // Load the per show notify lists everytime this page is loaded
+            loadShowNotifyLists();
+
+            $('#email_show_save').click(function() {
+                $.post(srRoot + "/home/saveShowNotifyList", {
+                    show: $('#email_show').val(),
+                    emails: $('#email_show_list').val()
+                }, function() {
+                    // Reload the per show notify lists to reflect changes
+                    loadShowNotifyLists();
+                });
+            });
+
+            // show instructions for plex when enabled
+            $('#use_plex').click(function() {
+                if ($(this).is(':checked')) {
+                    $('.plexinfo').removeClass('hide');
+                } else {
+                    $('.plexinfo').addClass('hide');
+                }
+            });
+        },
+        postProcessing: function() {
+            $('#config-components').tabs();
+            $('#tv_download_dir').fileBrowser({ title: 'Select TV Download Directory' });
+
+            // http://stackoverflow.com/questions/2219924/idiomatic-jquery-delayed-event-only-after-a-short-pause-in-typing-e-g-timew
+            var typewatch = (function () {
+                var timer = 0;
+                return function (callback, ms) {
+                    clearTimeout(timer);
+                    timer = setTimeout(callback, ms);
+                };
+            })();
+
+            function isRarSupported() {
+                $.get(srRoot + '/config/postProcessing/isRarSupported', function (data) {
+                    if (data !== "supported") {
+                        $('#unpack').qtip('option', {
+                            'content.text': 'Unrar Executable not found.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#unpack').qtip('toggle', true);
+                        $('#unpack').css('background-color', '#FFFFDD');
+                    }
+                });
+            }
+
+            function fillExamples() {
+                var example = {};
+
+                example.pattern = $('#naming_pattern').val();
+                example.multi = $('#naming_multi_ep :selected').val();
+                example.animeType = $('input[name="naming_anime"]:checked').val();
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: example.pattern,
+                    anime_type: 3 // jshint ignore:line
+                }, function (data) {
+                    if (data) {
+                        $('#naming_example').text(data + '.ext');
+                        $('#naming_example_div').show();
+                    } else {
+                        $('#naming_example_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: example.pattern,
+                    multi: example.multi,
+                    anime_type: 3 // jshint ignore:line
+                }, function (data) {
+                    if (data) {
+                        $('#naming_example_multi').text(data + '.ext');
+                        $('#naming_example_multi_div').show();
+                    } else {
+                        $('#naming_example_multi_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {
+                    pattern: example.pattern,
+                    multi: example.multi,
+                    anime_type: example.animeType // jshint ignore:line
+                }, function (data) {
+                    if (data === "invalid") {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern is invalid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_pattern').qtip('toggle', true);
+                        $('#naming_pattern').css('background-color', '#FFDDDD');
+                    } else if (data === "seasonfolders") {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_pattern').qtip('toggle', true);
+                        $('#naming_pattern').css('background-color', '#FFFFDD');
+                    } else {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern is valid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-green'
+                        });
+                        $('#naming_pattern').qtip('toggle', false);
+                        $('#naming_pattern').css('background-color', '#FFFFFF');
+                    }
+                });
+            }
+
+            function fillAbdExamples() {
+                var pattern = $('#naming_abd_pattern').val();
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: pattern,
+                    abd: 'True'
+                }, function (data) {
+                    if (data) {
+                        $('#naming_abd_example').text(data + '.ext');
+                        $('#naming_abd_example_div').show();
+                    } else {
+                        $('#naming_abd_example_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {
+                    pattern: pattern,
+                    abd: 'True'
+                }, function (data) {
+                    if (data === "invalid") {
+                        $('#naming_abd_pattern').qtip('option', {
+                            'content.text': 'This pattern is invalid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_abd_pattern').qtip('toggle', true);
+                        $('#naming_abd_pattern').css('background-color', '#FFDDDD');
+                    } else if (data === "seasonfolders") {
+                        $('#naming_abd_pattern').qtip('option', {
+                            'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_abd_pattern').qtip('toggle', true);
+                        $('#naming_abd_pattern').css('background-color', '#FFFFDD');
+                    } else {
+                        $('#naming_abd_pattern').qtip('option', {
+                            'content.text': 'This pattern is valid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-green'
+                        });
+                        $('#naming_abd_pattern').qtip('toggle', false);
+                        $('#naming_abd_pattern').css('background-color', '#FFFFFF');
+                    }
+                });
+            }
+
+            function fillSportsExamples() {
+                var pattern = $('#naming_sports_pattern').val();
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: pattern,
+                    sports: 'True'
+                }, function (data) {
+                    if (data) {
+                        $('#naming_sports_example').text(data + '.ext');
+                        $('#naming_sports_example_div').show();
+                    } else {
+                        $('#naming_sports_example_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {
+                    pattern: pattern,
+                    sports: 'True'
+                }, function (data) {
+                    if (data === "invalid") {
+                        $('#naming_sports_pattern').qtip('option', {
+                            'content.text': 'This pattern is invalid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_sports_pattern').qtip('toggle', true);
+                        $('#naming_sports_pattern').css('background-color', '#FFDDDD');
+                    } else if (data === "seasonfolders") {
+                        $('#naming_sports_pattern').qtip('option', {
+                            'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_sports_pattern').qtip('toggle', true);
+                        $('#naming_sports_pattern').css('background-color', '#FFFFDD');
+                    } else {
+                        $('#naming_sports_pattern').qtip('option', {
+                            'content.text': 'This pattern is valid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-green'
+                        });
+                        $('#naming_sports_pattern').qtip('toggle', false);
+                        $('#naming_sports_pattern').css('background-color', '#FFFFFF');
+                    }
+                });
+            }
+
+            function fillAnimeExamples() {
+                var example = {};
+                example.pattern = $('#naming_anime_pattern').val();
+                example.multi = $('#naming_anime_multi_ep :selected').val();
+                example.animeType = $('input[name="naming_anime"]:checked').val();
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: example.pattern,
+                    anime_type: example.animeType // jshint ignore:line
+                }, function (data) {
+                    if (data) {
+                        $('#naming_example_anime').text(data + '.ext');
+                        $('#naming_example_anime_div').show();
+                    } else {
+                        $('#naming_example_anime_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/testNaming', {
+                    pattern: example.pattern,
+                    multi: example.multi,
+                    anime_type: example.animeType // jshint ignore:line
+                }, function (data) {
+                    if (data) {
+                        $('#naming_example_multi_anime').text(data + '.ext');
+                        $('#naming_example_multi_anime_div').show();
+                    } else {
+                        $('#naming_example_multi_anime_div').hide();
+                    }
+                });
+
+                $.get(srRoot + '/config/postProcessing/isNamingValid', {
+                    pattern: example.pattern,
+                    multi: example.multi,
+                    anime_type: example.animeType // jshint ignore:line
+                }, function (data) {
+                    if (data === "invalid") {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern is invalid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_pattern').qtip('toggle', true);
+                        $('#naming_pattern').css('background-color', '#FFDDDD');
+                    } else if (data === "seasonfolders") {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern would be invalid without the folders, using it will force "Flatten" off for all shows.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-red'
+                        });
+                        $('#naming_pattern').qtip('toggle', true);
+                        $('#naming_pattern').css('background-color', '#FFFFDD');
+                    } else {
+                        $('#naming_pattern').qtip('option', {
+                            'content.text': 'This pattern is valid.',
+                            'style.classes': 'qtip-rounded qtip-shadow qtip-green'
+                        });
+                        $('#naming_pattern').qtip('toggle', false);
+                        $('#naming_pattern').css('background-color', '#FFFFFF');
+                    }
+                });
+            }
+
+            function setupNaming() {
+                // if it is a custom selection then show the text box
+                if ($('#name_presets :selected').val().toLowerCase() === "custom...") {
+                    $('#naming_custom').show();
+                } else {
+                    $('#naming_custom').hide();
+                    $('#naming_pattern').val($('#name_presets :selected').attr('id'));
+                }
+                fillExamples();
+            }
+
+            function setupAbdNaming() {
+                // if it is a custom selection then show the text box
+                if ($('#name_abd_presets :selected').val().toLowerCase() === "custom...") {
+                    $('#naming_abd_custom').show();
+                } else {
+                    $('#naming_abd_custom').hide();
+                    $('#naming_abd_pattern').val($('#name_abd_presets :selected').attr('id'));
+                }
+                fillAbdExamples();
+            }
+
+            function setupSportsNaming() {
+                // if it is a custom selection then show the text box
+                if ($('#name_sports_presets :selected').val().toLowerCase() === "custom...") {
+                    $('#naming_sports_custom').show();
+                } else {
+                    $('#naming_sports_custom').hide();
+                    $('#naming_sports_pattern').val($('#name_sports_presets :selected').attr('id'));
+                }
+                fillSportsExamples();
+            }
+
+            function setupAnimeNaming() {
+                // if it is a custom selection then show the text box
+                if ($('#name_anime_presets :selected').val().toLowerCase() === "custom...") {
+                    $('#naming_anime_custom').show();
+                } else {
+                    $('#naming_anime_custom').hide();
+                    $('#naming_anime_pattern').val($('#name_anime_presets :selected').attr('id'));
+                }
+                fillAnimeExamples();
+            }
+
+            $('#unpack').on('change', function(){
+                if(this.checked) {
+                    isRarSupported();
+                } else {
+                    $('#unpack').qtip('toggle', false);
+                }
+            });
+
+            $('#name_presets').on('change', function(){
+                setupNaming();
+            });
+
+            $('#name_abd_presets').on('change', function(){
+                setupAbdNaming();
+            });
+
+            $('#naming_custom_abd').on('change', function(){
+                setupAbdNaming();
+            });
+
+            $('#name_sports_presets').on('change', function(){
+                setupSportsNaming();
+            });
+
+            $('#naming_custom_sports').on('change', function(){
+                setupSportsNaming();
+            });
+
+            $('#name_anime_presets').on('change', function(){
+                setupAnimeNaming();
+            });
+
+            $('#naming_custom_anime').on('change', function(){
+                setupAnimeNaming();
+            });
+
+            $('input[name="naming_anime"]').on('click', function(){
+                setupAnimeNaming();
+            });
+
+            $('#naming_multi_ep').change(fillExamples);
+            $('#naming_pattern').focusout(fillExamples);
+            $('#naming_pattern').keyup(function () {
+                typewatch(function () {
+                    fillExamples();
+                }, 500);
+            });
+
+            $('#naming_anime_multi_ep').change(fillAnimeExamples);
+            $('#naming_anime_pattern').focusout(fillAnimeExamples);
+            $('#naming_anime_pattern').keyup(function () {
+                typewatch(function () {
+                    fillAnimeExamples();
+                }, 500);
+            });
+
+            $('#naming_abd_pattern').focusout(fillExamples);
+            $('#naming_abd_pattern').keyup(function () {
+                typewatch(function () {
+                    fillAbdExamples();
+                }, 500);
+            });
+
+            $('#naming_sports_pattern').focusout(fillExamples);
+            $('#naming_sports_pattern').keyup(function () {
+                typewatch(function () {
+                    fillSportsExamples();
+                }, 500);
+            });
+
+            $('#naming_anime_pattern').focusout(fillExamples);
+            $('#naming_anime_pattern').keyup(function () {
+                typewatch(function () {
+                    fillAnimeExamples();
+                }, 500);
+            });
+
+            $('#show_naming_key').on('click', function(){
+                $('#naming_key').toggle();
+            });
+            $('#show_naming_abd_key').on('click', function(){
+                $('#naming_abd_key').toggle();
+            });
+            $('#show_naming_sports_key').on('click', function(){
+                $('#naming_sports_key').toggle();
+            });
+            $('#show_naming_anime_key').on('click', function(){
+                $('#naming_anime_key').toggle();
+            });
+            $('#do_custom').on('click', function(){
+                $('#naming_pattern').val($('#name_presets :selected').attr('id'));
+                $('#naming_custom').show();
+                $('#naming_pattern').focus();
+            });
+            setupNaming();
+            setupAbdNaming();
+            setupSportsNaming();
+            setupAnimeNaming();
+
+            // -- start of metadata options div toggle code --
+            $('#metadataType').on('change keyup', function () {
+                $(this).showHideMetadata();
+            });
+
+            $.fn.showHideMetadata = function () {
+                $('.metadataDiv').each(function () {
+                    var targetName = $(this).attr('id');
+                    var selectedTarget = $('#metadataType :selected').val();
+
+                    if (selectedTarget === targetName) {
+                        $(this).show();
+                    } else {
+                        $(this).hide();
+                    }
+                });
+            };
+            //initialize to show the div
+            $(this).showHideMetadata();
+            // -- end of metadata options div toggle code --
+
+            $('.metadata_checkbox').on('click', function(){
+                $(this).refreshMetadataConfig(false);
+            });
+
+            $.fn.refreshMetadataConfig = function (first) {
+                var curMost = 0;
+                var curMostProvider = '';
+
+                $('.metadataDiv').each(function () {
+                    var generatorName = $(this).attr('id');
+
+                    var configArray = [];
+                    var showMetadata = $("#" + generatorName + "_show_metadata").prop('checked');
+                    var episodeMetadata = $("#" + generatorName + "_episode_metadata").prop('checked');
+                    var fanart = $("#" + generatorName + "_fanart").prop('checked');
+                    var poster = $("#" + generatorName + "_poster").prop('checked');
+                    var banner = $("#" + generatorName + "_banner").prop('checked');
+                    var episodeThumbnails = $("#" + generatorName + "_episode_thumbnails").prop('checked');
+                    var seasonPosters = $("#" + generatorName + "_season_posters").prop('checked');
+                    var seasonBanners = $("#" + generatorName + "_season_banners").prop('checked');
+                    var seasonAllPoster = $("#" + generatorName + "_season_all_poster").prop('checked');
+                    var seasonAllBanner = $("#" + generatorName + "_season_all_banner").prop('checked');
+
+                    configArray.push(showMetadata ? '1' : '0');
+                    configArray.push(episodeMetadata ? '1' : '0');
+                    configArray.push(fanart ? '1' : '0');
+                    configArray.push(poster ? '1' : '0');
+                    configArray.push(banner ? '1' : '0');
+                    configArray.push(episodeThumbnails ? '1' : '0');
+                    configArray.push(seasonPosters ? '1' : '0');
+                    configArray.push(seasonBanners ? '1' : '0');
+                    configArray.push(seasonAllPoster ? '1' : '0');
+                    configArray.push(seasonAllBanner ? '1' : '0');
+
+                    var curNumber = 0;
+                    for (var i = 0, len = configArray.length; i < len; i++) {
+                        curNumber += parseInt(configArray[i]);
+                    }
+                    if (curNumber > curMost) {
+                        curMost = curNumber;
+                        curMostProvider = generatorName;
+                    }
+
+                    $("#" + generatorName + "_eg_show_metadata").attr('class', showMetadata ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_episode_metadata").attr('class', episodeMetadata ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_fanart").attr('class', fanart ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_poster").attr('class', poster ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_banner").attr('class', banner ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_episode_thumbnails").attr('class', episodeThumbnails ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_posters").attr('class', seasonPosters ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_banners").attr('class', seasonBanners ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_all_poster").attr('class', seasonAllPoster ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_eg_season_all_banner").attr('class', seasonAllBanner ? 'enabled' : 'disabled');
+                    $("#" + generatorName + "_data").val(configArray.join('|'));
+
+                });
+
+                if (curMostProvider !== '' && first) {
+                    $('#metadataType option[value=' + curMostProvider + ']').attr('selected', 'selected');
+                    $(this).showHideMetadata();
+                }
+            };
+
+            $(this).refreshMetadataConfig(true);
+            $('img[title]').qtip({
+                position: {
+                    viewport: $(window),
+                    at: 'bottom center',
+                    my: 'top right'
+                },
+                style: {
+                    tip: {
+                        corner: true,
+                        method: 'polygon'
+                    },
+                    classes: 'qtip-shadow qtip-dark'
+                }
+            });
+            $('i[title]').qtip({
+                position: {
+                    viewport: $(window),
+                    at: 'top center',
+                    my: 'bottom center'
+                },
+                style: {
+                    tip: {
+                        corner: true,
+                        method: 'polygon'
+                    },
+                    classes: 'qtip-rounded qtip-shadow ui-tooltip-sb'
+                }
+            });
+            $('.custom-pattern,#unpack').qtip({
+                content: 'validating...',
+                show: {
+                    event: false,
+                    ready: false
+                },
+                hide: false,
+                position: {
+                    viewport: $(window),
+                    at: 'center left',
+                    my: 'center right'
+                },
+                style: {
+                    tip: {
+                        corner: true,
+                        method: 'polygon'
+                    },
+                    classes: 'qtip-rounded qtip-shadow qtip-red'
+                }
+            });
+        },
+        search: function() {
+            $('#config-components').tabs();
+            $('#nzb_dir').fileBrowser({ title: 'Select .nzb black hole/watch location' });
+            $('#torrent_dir').fileBrowser({ title: 'Select .torrent black hole/watch location' });
+            $('#torrent_path').fileBrowser({ title: 'Select .torrent download location' });
+
+            function toggleTorrentTitle(){
+                if ($('#use_torrents').prop('checked')){
+                    $('#no_torrents').show();
+                } else {
+                    $('#no_torrents').hide();
+                }
+            }
+
+            $.fn.nzbMethodHandler = function() {
+                var selectedProvider = $('#nzb_method :selected').val(),
+                    blackholeSettings = '#blackhole_settings',
+                    sabnzbdSettings = '#sabnzbd_settings',
+                    testSABnzbd = '#testSABnzbd',
+                    testSABnzbdResult = '#testSABnzbd_result',
+                    nzbgetSettings = '#nzbget_settings';
+
+                $(blackholeSettings).hide();
+                $(sabnzbdSettings).hide();
+                $(testSABnzbd).hide();
+                $(testSABnzbdResult).hide();
+                $(nzbgetSettings).hide();
+
+                if (selectedProvider.toLowerCase() === 'blackhole') {
+                    $(blackholeSettings).show();
+                } else if (selectedProvider.toLowerCase() === 'nzbget') {
+                    $(nzbgetSettings).show();
+                } else {
+                    $(sabnzbdSettings).show();
+                    $(testSABnzbd).show();
+                    $(testSABnzbdResult).show();
+                }
+            };
+
+            $.fn.rtorrentScgi = function(){
+                var selectedProvider = $('#torrent_method :selected').val();
+
+                if (selectedProvider.toLowerCase() === 'rtorrent') {
+                    var hostname = $('#torrent_host').prop('value');
+                    var isMatch = hostname.substr(0, 7) === "scgi://";
+
+                    if (isMatch) {
+                        $('#torrent_username_option').hide();
+                        $('#torrent_username').prop('value', '');
+                        $('#torrent_password_option').hide();
+                        $('#torrent_password').prop('value', '');
+                        $('#torrent_auth_type_option').hide();
+                        $("#torrent_auth_type option[value=none]").attr('selected', 'selected');
+                    } else {
+                        $('#torrent_username_option').show();
+                        $('#torrent_password_option').show();
+                        $('#torrent_auth_type_option').show();
+                    }
+                }
+            };
+
+            $.fn.torrentMethodHandler = function() {
+                $('#options_torrent_clients').hide();
+                $('#options_torrent_blackhole').hide();
+
+                var selectedProvider = $('#torrent_method :selected').val(),
+                    host = ' host:port',
+                    username = ' username',
+                    password = ' password',
+                    client = '',
+                    optionPanel = '#options_torrent_blackhole',
+                    rpcurl = ' RPC URL';
+
+                if (selectedProvider.toLowerCase() !== 'blackhole') {
+                    var label_warning_deluge = '#label_warning_deluge',
+                        label_anime_warning_deluge = '#label_anime_warning_deluge',
+                        host_desc_rtorrent = '#host_desc_rtorrent',
+                        host_desc_torrent = '#host_desc_torrent',
+                        torrent_verify_cert_option = '#torrent_verify_cert_option',
+                        torrent_path_option = '#torrent_path_option',
+                        torrent_seed_time_option = '#torrent_seed_time_option',
+                        torrent_high_bandwidth_option = '#torrent_high_bandwidth_option',
+                        torrent_label_option = '#torrent_label_option',
+                        torrent_label_anime_option = '#torrent_label_anime_option',
+                        path_synology = '#path_synology',
+                        torrent_paused_option = '#torrent_paused_option';
+
+                    $(label_warning_deluge).hide();
+                    $(label_anime_warning_deluge).hide();
+                    $(label_anime_warning_deluge).hide();
+                    $(host_desc_rtorrent).hide();
+                    $(host_desc_torrent).show();
+                    $(torrent_verify_cert_option).hide();
+                    $(torrent_verify_deluge).hide();
+                    $(torrent_verify_rtorrent).hide();
+                    $(torrent_auth_type_option).hide();
+                    $(torrent_path_option).show();
+                    $(torrent_path_option).find('.fileBrowser').show();
+                    $(torrent_seed_time_option).hide();
+                    $(torrent_high_bandwidth_option).hide();
+                    $(torrent_label_option).show();
+                    $(torrent_label_anime_option).show();
+                    $(path_synology).hide();
+                    $(torrent_paused_option).show();
+                    $(torrent_rpcurl_option).hide();
+                    $(this).rtorrentScgi();
+
+                    if (selectedProvider.toLowerCase() === 'utorrent') {
+                        client = 'uTorrent';
+                        $(torrent_path_option).hide();
+                        $('#torrent_seed_time_label').text('Minimum seeding time is');
+                        $(torrent_seed_time_option).show();
+                        $('#host_desc_torrent').text('URL to your uTorrent client (e.g. http://localhost:8000)');
+                    } else if (selectedProvider.toLowerCase() === 'transmission'){
+                        client = 'Transmission';
+                        $('#torrent_seed_time_label').text('Stop seeding when inactive for');
+                        $(torrent_seed_time_option).show();
+                        $(torrent_high_bandwidth_option).show();
+                        $(torrent_label_option).hide();
+                        $(torrent_label_anime_option).hide();
+                        $(torrent_rpcurl_option).show();
+                        $('#host_desc_torrent').text('URL to your Transmission client (e.g. http://localhost:9091)');
+                    } else if (selectedProvider.toLowerCase() === 'deluge'){
+                        client = 'Deluge';
+                        $(torrent_verify_cert_option).show();
+                        $(torrent_verify_deluge).show();
+                        $(torrent_verify_rtorrent).hide();
+                        $(label_warning_deluge).show();
+                        $(label_anime_warning_deluge).show();
+                        $('#torrent_username_option').hide();
+                        $('#torrent_username').prop('value', '');
+                        $('#host_desc_torrent').text('URL to your Deluge client (e.g. http://localhost:8112)');
+                    } else if ('deluged' == selectedProvider){
+                        client = 'Deluge';
+                        $(torrent_verify_cert_option).hide();
+                        $(torrent_verify_deluge).hide();
+                        $(torrent_verify_rtorrent).hide();
+                        $(label_warning_deluge).show();
+                        $(label_anime_warning_deluge).show();
+                        $('#torrent_username_option').show();
+                        $('#host_desc_torrent').text('IP or Hostname of your Deluge Daemon (e.g. scgi://localhost:58846)');
+                    } else if ('download_station' == selectedProvider){
+                        client = 'Synology DS';
+                        $(torrent_label_option).hide();
+                        $(torrent_label_anime_option).hide();
+                        $('#torrent_paused_option').hide();
+                        $(torrent_path_option).find('.fileBrowser').hide();
+                        $('#host_desc_torrent').text('URL to your Synology DS client (e.g. http://localhost:5000)');
+                        $(path_synology).show();
+                    } else if ('rtorrent' == selectedProvider){
+                        client = 'rTorrent';
+                        $(torrent_paused_option).hide();
+                        $('#host_desc_torrent').text('URL to your rTorrent client (e.g. scgi://localhost:5000 <br> or https://localhost/rutorrent/plugins/httprpc/action.php)');
+                        $(torrent_verify_cert_option).show();
+                        $(torrent_verify_deluge).hide();
+                        $(torrent_verify_rtorrent).show();
+                        $(torrent_auth_type_option).show();
+                    } else if ('qbittorrent' == selectedProvider){
+                        client = 'qbittorrent';
+                        $(torrent_path_option).hide();
+                        $(torrent_label_option).hide();
+                        $(torrent_label_anime_option).hide();
+                        $('#host_desc_torrent').text('URL to your qbittorrent client (e.g. http://localhost:8080)');
+                    } else if ('mlnet' == selectedProvider){
+                        client = 'mlnet';
+                        $(torrent_path_option).hide();
+                        $(torrent_label_option).hide();
+                        $(torrent_verify_cert_option).hide();
+                        $(torrent_verify_deluge).hide();
+                        $(torrent_verify_rtorrent).hide();
+                        $(torrent_label_anime_option).hide();
+                        $(torrent_paused_option).hide();
+                        $('#host_desc_torrent').text('URL to your MLDonkey (e.g. http://localhost:4080)');
+                    }
+                    $('#host_title').text(client + host);
+                    $('#username_title').text(client + username);
+                    $('#password_title').text(client + password);
+                    $('#torrent_client').text(client);
+                    $('#rpcurl_title').text(client + rpcurl);
+                    optionPanel = '#options_torrent_clients';
+                }
+                $(optionPanel).show();
+            };
+
+            $('#nzb_method').change($(this).nzbMethodHandler);
+
+            $(this).nzbMethodHandler();
+
+            $('#testSABnzbd').click(function(){
+                $('#testSABnzbd_result').html(loading);
+                var sab_host = $('#sab_host').val();
+                var sab_username = $('#sab_username').val();
+                var sab_password = $('#sab_password').val();
+                var sab_apiKey = $('#sab_apikey').val();
+
+                $.get(srRoot + '/home/testSABnzbd', {'host': sab_host, 'username': sab_username, 'password': sab_password, 'apikey': sab_apiKey}, function(data){
+                    $('#testSABnzbd_result').html(data);
+                });
+            });
+
+            $('#torrent_method').change($(this).torrentMethodHandler);
+
+            $(this).torrentMethodHandler();
+
+            $('#use_torrents').click(function(){
+                toggleTorrentTitle();
+            });
+
+            $('#test_torrent').click(function(){
+                var torrent = {};
+                $('#test_torrent_result').html(loading);
+                torrent.method = $('#torrent_method :selected').val();
+                torrent.host = $('#torrent_host').val();
+                torrent.username = $('#torrent_username').val();
+                torrent.password = $('#torrent_password').val();
+
+                $.get(srRoot + '/home/testTorrent', {
+                    'torrent_method': torrent.method,
+                    'host': torrent.host,
+                    'username': torrent.username,
+                    'password': torrent.password
+                }, function(data){
+                    $('#test_torrent_result').html(data);
+                });
+            });
+
+            $('#torrent_host').change($(this).rtorrentScgi);
+        },
+        subtitles: function() {
+            $.fn.showHideServices = function() {
+                $('.serviceDiv').each(function(){
+                    var serviceName = $(this).attr('id');
+                    var selectedService = $('#editAService :selected').val();
+
+                    if (selectedService+'Div' === serviceName){
+                        $(this).show();
+                    } else {
+                        $(this).hide();
+                    }
+                });
+            };
+
+            $.fn.addService = function(id, name, url, key, isDefault, showService) {
+                if (url.match('/$') === null) { url = url + '/'; }
+
+                if ($('#service_order_list > #'+id).length === 0 && showService !== false) {
+                    var toAdd = '<li class="ui-state-default" id="' + id + '"> <input type="checkbox" id="enable_' + id + '" class="service_enabler" CHECKED> <a href="' + anonURL + url + '" class="imgLink" target="_new"><img src="' + srRoot + '/images/services/newznab.gif" alt="' + name + '" width="16" height="16"></a> ' + name + '</li>';
+
+                    $('#service_order_list').append(toAdd);
+                    $('#service_order_list').sortable("refresh");
+                }
+            };
+
+            $.fn.deleteService = function(id) {
+                $('#service_order_list > #'+id).remove();
+            };
+
+            $.fn.refreshServiceList = function() {
+                var idArr = $("#service_order_list").sortable('toArray');
+                var finalArr = [];
+                $.each(idArr, function(key, val) {
+                    var checked = + $('#enable_'+val).prop('checked') ? '1' : '0';
+                    finalArr.push(val + ':' + checked);
+                });
+                $("#service_order").val(finalArr.join(' '));
+            };
+
+            $('#editAService').change(function(){
+                $(this).showHideServices();
+            });
+
+            $('.service_enabler').on('click', function(){
+                $(this).refreshServiceList();
+            });
+
+            // initialization stuff
+            $(this).showHideServices();
+
+            $("#service_order_list").sortable({
+                placeholder: 'ui-state-highlight',
+                update: function() {
+                    $(this).refreshServiceList();
+                }
+            });
+
+            $("#service_order_list").disableSelection();
+        },
+        providers: function() {
+            // @TODO This function need to be filled with ConfigProviders.js but can't be as we've got scope issues currently.
+            console.log('This function need to be filled with ConfigProviders.js but can\'t be as we\'ve got scope issues currently.');
+        }
+    },
+    manage: {
+        init: function() {
+            $.makeRow = function(indexerId, season, episode, name, checked) {
+                var row = '';
+                row += ' <tr class="' + $('#row_class').val() + ' show-' + indexerId + '">';
+                row += '  <td class="tableleft" align="center"><input type="checkbox" class="' + indexerId + '-epcheck" name="' + indexerId + '-' + season + 'x' + episode + '"' + (checked ? ' checked' : '') + '></td>';
+                row += '  <td>' + season + 'x' + episode + '</td>';
+                row += '  <td class="tableright" style="width: 100%">' + name + '</td>';
+                row += ' </tr>';
+
+                return row;
+            };
+        },
+        index: function() {
+            $("#massUpdateTable:has(tbody tr)").tablesorter({
+                sortList: [[1,0]],
+                textExtraction: {
+                    2: function(node) { return $(node).find("span").text().toLowerCase(); },
+                    3: function(node) { return $(node).find("img").attr("alt"); },
+                    4: function(node) { return $(node).find("img").attr("alt"); },
+                    5: function(node) { return $(node).find("img").attr("alt"); },
+                    6: function(node) { return $(node).find("img").attr("alt"); },
+                    7: function(node) { return $(node).find("img").attr("alt"); },
+                    8: function(node) { return $(node).find("img").attr("alt"); },
+                    9: function(node) { return $(node).find("img").attr("alt"); },
+                },
+                widgets: ['zebra'],
+                headers: {
+                    0: { sorter: false},
+                    1: { sorter: 'showNames'},
+                    2: { sorter: 'quality'},
+                    3: { sorter: 'sports'},
+                    4: { sorter: 'scene'},
+                    5: { sorter: 'anime'},
+                    6: { sorter: 'flatfold'},
+                    7: { sorter: 'archive_firstmatch'},
+                    8: { sorter: 'paused'},
+                    9: { sorter: 'subtitle'},
+                   10: { sorter: 'default_ep_status'},
+                   11: { sorter: 'status'},
+                   12: { sorter: false},
+                   13: { sorter: false},
+                   14: { sorter: false},
+                   15: { sorter: false},
+                   16: { sorter: false},
+                   17: { sorter: false}
+                }
+            });
+        },
+        backlogOverview: function() {
+            $('#pickShow').change(function(){
+                var id = $(this).val();
+                if (id) {
+                    $('html,body').animate({scrollTop: $('#show-' + id).offset().top -25},'slow');
+                }
+            });
+        },
+        failedDownloads: function() {
+            $("#failedTable:has(tbody tr)").tablesorter({
+                widgets: ['zebra'],
+                sortList: [[0,0]],
+                headers: { 3: { sorter: false } }
+            });
+            $('#limit').change(function(){
+                window.location.href = srRoot + '/manage/failedDownloads/?limit=' + $(this).val();
+            });
+        },
+        massEdit: function() {
+            $('#location').fileBrowser({ title: 'Select Show Location' });
+        },
+        episodeStatuses: function() {
+            $('.allCheck').click(function(){
+                var indexerId = $(this).attr('id').split('-')[1];
+                $('.' + indexerId + '-epcheck').prop('checked', $(this).prop('checked'));
+            });
+
+            $('.get_more_eps').click(function(){
+                var curIndexerId = $(this).attr('id');
+                var checked = $('#allCheck-' + curIndexerId).prop('checked');
+                var lastRow = $('tr#' + curIndexerId);
+                var clicked = $(this).attr('data-clicked');
+                var action = $(this).attr('value');
+
+                if(!clicked) {
+                    $.getJSON(srRoot+'/manage/showEpisodeStatuses',{
+                        indexer_id: curIndexerId, // jshint ignore:line
+                        whichStatus: $('#oldStatus').val()
+                    }, function (data) {
+                        $.each(data, function(season,eps){
+                            $.each(eps, function(episode, name) {
+                                //alert(season+'x'+episode+': '+name);
+                                lastRow.after($.makeRow(curIndexerId, season, episode, name, checked));
+                            });
+                        });
+                    });
+                    $(this).attr('data-clicked',1);
+                    $(this).prop('value', 'Collapse');
+                } else {
+                    if (action.toLowerCase() === 'collapse') {
+                        $('table tr').filter('.show-' + curIndexerId).hide();
+                        $(this).prop('value', 'Expand');
+                    } else if (action.toLowerCase() === 'expand') {
+                        $('table tr').filter('.show-' + curIndexerId).show();
+                        $(this).prop('value', 'Collapse');
+                    }
+                }
+            });
+
+            // selects all visible episode checkboxes.
+            $('.selectAllShows').click(function(){
+                $('.allCheck').each(function(){
+                        this.checked = true;
+                });
+                $('input[class*="-epcheck"]').each(function(){
+                        this.checked = true;
+                });
+            });
+
+            // clears all visible episode checkboxes and the season selectors
+            $('.unselectAllShows').click(function(){
+                $('.allCheck').each(function(){
+                        this.checked = false;
+                });
+                $('input[class*="-epcheck"]').each(function(){
+                        this.checked = false;
+                });
+            });
+        },
+        subtitleMissed: function() {
+            $('.allCheck').click(function(){
+                var indexerId = $(this).attr('id').split('-')[1];
+                $('.'+indexerId+'-epcheck').prop('checked', $(this).prop('checked'));
+            });
+
+            $('.get_more_eps').click(function(){
+                var indexerId = $(this).attr('id');
+                var checked = $('#allCheck-'+indexerId).prop('checked');
+                var lastRow = $('tr#'+indexerId);
+                var clicked = $(this).attr('data-clicked');
+                var action = $(this).attr('value');
+
+                if (!clicked) {
+                    $.getJSON(srRoot + '/manage/showSubtitleMissed', {
+                        indexer_id: indexerId, // jshint ignore:line
+                        whichSubs: $('#selectSubLang').val()
+                    }, function(data) {
+                        $.each(data, function(season, eps) {
+                            $.each(eps, function(episode, data) {
+                                lastRow.after($.makeRow(indexerId, season, episode, data.name, data.subtitles, checked));
+                            });
+                        });
+                    });
+                    $(this).attr('data-clicked', 1);
+                    $(this).prop('value', 'Collapse');
+                } else {
+                    if (action === 'Collapse') {
+                        $('table tr').filter('.show-' + indexerId).hide();
+                        $(this).prop('value', 'Expand');
+                    } else if (action === 'Expand') {
+                        $('table tr').filter('.show-' + indexerId).show();
+                        $(this).prop('value', 'Collapse');
+                    }
+                }
+            });
+
+            // selects all visible episode checkboxes.
+            $('.selectAllShows').click(function(){
+                $('.allCheck').each(function(){
+                        this.checked = true;
+                });
+                $('input[class*="-epcheck"]').each(function(){
+                        this.checked = true;
+                });
+            });
+
+            // clears all visible episode checkboxes and the season selectors
+            $('.unselectAllShows').click(function(){
+                $('.allCheck').each(function(){
+                        this.checked = false;
+                });
+                $('input[class*="-epcheck"]').each(function(){
+                        this.checked = false;
+                });
+            });
+        }
+    }
+};
+
+var UTIL = {
+    exec: function(controller, action) {
+        var ns = SICKRAGE;
+        action = (action === undefined) ? "init" : action;
+
+        if (controller !== "" && ns[controller] && typeof ns[controller][action] === "function") {
+            ns[controller][action]();
+        }
+    },
+    init: function() {
+        var body = document.body,
+        controller = body.getAttribute("data-controller"),
+        action = body.getAttribute("data-action");
+
+        UTIL.exec("common");
+        UTIL.exec(controller);
+        UTIL.exec(controller, action);
+    }
+};
+
+$(document).ready(UTIL.init);
diff --git a/gui/slick/js/core.min.js b/gui/slick/js/core.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..07c6080f5cac0873cd01ac7aea2ca82773f1a384
Binary files /dev/null and b/gui/slick/js/core.min.js differ
diff --git a/gui/slick/js/displayShow.js b/gui/slick/js/displayShow.js
deleted file mode 100644
index 138abad496103bb89f8775aadf5aa922474c2e53..0000000000000000000000000000000000000000
--- a/gui/slick/js/displayShow.js
+++ /dev/null
@@ -1,247 +0,0 @@
-$(document).ready(function () {
-
-    $('#srRoot').ajaxEpSearch({'colorRow': true});
-
-    $('#srRoot').ajaxEpSubtitlesSearch();
-
-    $('#seasonJump').on('change', function(){
-        var id = $('#seasonJump option:selected').val();
-        if (id && id != 'jump') {
-            var season = $('#seasonJump option:selected').data('season');
-            $('html,body').animate({scrollTop: $('[name ="' + id.substring(1) + '"]').offset().top - 50}, 'slow');
-            $('#collapseSeason-' + season).collapse('show');
-            location.hash = id;
-        }
-        $(this).val('jump');
-    });
-
-    $("#prevShow").on('click', function(){
-        $('#pickShow option:selected').prev('option').prop('selected', 'selected');
-        $("#pickShow").change();
-    });
-
-    $("#nextShow").on('click', function(){
-        $('#pickShow option:selected').next('option').prop('selected', 'selected');
-        $("#pickShow").change();
-    });
-
-    $('#changeStatus').on('click', function(){
-        var srRoot = $('#srRoot').val();
-        var epArr = [];
-
-        $('.epCheck').each(function () {
-            if (this.checked === true) epArr.push($(this).attr('id'));
-        });
-
-        if (epArr.length === 0) return false;
-
-        url = srRoot + '/home/setStatus?show=' + $('#showID').attr('value') + '&eps=' + epArr.join('|') + '&status=' + $('#statusSelect').val();
-        window.location.href = url;
-    });
-
-    $('.seasonCheck').on('click', function(){
-        var seasCheck = this;
-        var seasNo = $(seasCheck).attr('id');
-
-        $('#collapseSeason-' + seasNo).collapse('show');
-        $('.epCheck:visible').each(function () {
-            var epParts = $(this).attr('id').split('x');
-            if (epParts[0] == seasNo) this.checked = seasCheck.checked;
-        });
-    });
-
-    var lastCheck = null;
-    $('.epCheck').on('click', function (event) {
-
-        if (!lastCheck || !event.shiftKey) {
-            lastCheck = this;
-            return;
-        }
-
-        var check = this;
-        var found = 0;
-
-        $('.epCheck').each(function() {
-            switch (found) {
-                case 2:
-                    return false;
-                case 1:
-                    this.checked = lastCheck.checked;
-            }
-
-            if (this == check || this == lastCheck)
-                found++;
-        });
-
-        lastClick = this;
-    });
-
-    // selects all visible episode checkboxes.
-    $('.seriesCheck').on('click', function () {
-        $('.epCheck:visible').each(function () {
-            this.checked = true;
-        });
-        $('.seasonCheck:visible').each(function () {
-            this.checked = true;
-        });
-    });
-
-    // clears all visible episode checkboxes and the season selectors
-    $('.clearAll').on('click', function () {
-        $('.epCheck:visible').each(function () {
-            this.checked = false;
-        });
-        $('.seasonCheck:visible').each(function () {
-            this.checked = false;
-        });
-    });
-
-    // handle the show selection dropbox
-    $('#pickShow').on('change', function () {
-        var srRoot = $('#srRoot').val();
-        var val = $(this).val();
-        if (val === 0) return;
-        url = srRoot + '/home/displayShow?show=' + val;
-        window.location.href = url;
-    });
-
-    // show/hide different types of rows when the checkboxes are changed
-    $("#checkboxControls input").change(function (e) {
-        var whichClass = $(this).attr('id');
-        $(this).showHideRows(whichClass);
-    });
-
-    // initially show/hide all the rows according to the checkboxes
-    $("#checkboxControls input").each(function (e) {
-        var status = this.checked;
-        $("tr." + $(this).attr('id')).each(function (e) {
-            if (status) {
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-    });
-
-    $.fn.showHideRows = function(whichClass) {
-        var status = $('#checkboxControls > input, #' + whichClass).prop('checked');
-        $("tr." + whichClass).each(function (e) {
-            if (status) {
-                $(this).show();
-            } else {
-                $(this).hide();
-            }
-        });
-
-        // hide season headers with no episodes under them
-        $('tr.seasonheader').each(function () {
-            var numRows = 0;
-            var seasonNo = $(this).attr('id');
-            $('tr.' + seasonNo + ' :visible').each(function () {
-                numRows++;
-            });
-            if (numRows === 0) {
-                $(this).hide();
-                $('#' + seasonNo + '-cols').hide();
-            } else {
-                $(this).show();
-                $('#' + seasonNo + '-cols').show();
-            }
-        });
-    };
-
-    function setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode) {
-        var srRoot = $('#srRoot').val();
-        var showId = $('#showID').val();
-        var indexer = $('#indexer').val();
-
-        if (sceneSeason === '') sceneSeason = null;
-        if (sceneEpisode === '') sceneEpisode = null;
-
-        $.getJSON(srRoot + '/home/setSceneNumbering',{
-            'show': showId,
-            'indexer': indexer,
-            'forSeason': forSeason,
-            'forEpisode': forEpisode,
-            'sceneSeason': sceneSeason,
-            'sceneEpisode': sceneEpisode
-        }, function(data) {
-            //	Set the values we get back
-            if (data.sceneSeason === null || data.sceneEpisode === null) {
-                $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val('');
-            } else {
-                $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val(data.sceneSeason + 'x' + data.sceneEpisode);
-            }
-            if (!data.success) {
-                if (data.errorMessage) {
-                    alert(data.errorMessage);
-                } else {
-                    alert('Update failed.');
-                }
-            }
-        });
-    }
-
-    function setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute) {
-        var srRoot = $('#srRoot').val();
-        var showId = $('#showID').val();
-        var indexer = $('#indexer').val();
-
-        if (sceneAbsolute === '') sceneAbsolute = null;
-
-        $.getJSON(srRoot + '/home/setSceneNumbering', {
-            'show': showId,
-            'indexer': indexer,
-            'forAbsolute': forAbsolute,
-            'sceneAbsolute': sceneAbsolute
-        },
-        function(data) {
-            //	Set the values we get back
-            if (data.sceneAbsolute === null) {
-                $('#sceneAbsolute_' + showId + '_' + forAbsolute).val('');
-            } else {
-                $('#sceneAbsolute_' + showId + '_' + forAbsolute).val(data.sceneAbsolute);
-            }
-            if (!data.success) {
-                if (data.errorMessage) {
-                    alert(data.errorMessage);
-                } else {
-                    alert('Update failed.');
-                }
-            }
-        });
-    }
-
-    $('.sceneSeasonXEpisode').on('change', function() {
-        //	Strip non-numeric characters
-        $(this).val($(this).val().replace(/[^0-9xX]*/g, ''));
-        var forSeason = $(this).attr('data-for-season');
-        var forEpisode = $(this).attr('data-for-episode');
-        var showId = $('#showID').val();
-        var indexer = $('#indexer').val();
-
-        //var sceneEpisode = $('#sceneEpisode_' + showId + '_' + forSeason +'_' + forEpisode).val();
-        var m = $(this).val().match(/^(\d+)x(\d+)$/i);
-        var sceneSeason = null, sceneEpisode = null;
-        if (m) {
-            sceneSeason = m[1];
-            sceneEpisode = m[2];
-        }
-        setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode);
-    });
-
-    $('.sceneAbsolute').on('change', function() {
-        //	Strip non-numeric characters
-        $(this).val($(this).val().replace(/[^0-9xX]*/g, ''));
-        var forAbsolute = $(this).attr('data-for-absolute');
-        var showId = $('#showID').val();
-        var indexer = $('#indexer').val();
-
-        var m = $(this).val().match(/^(\d{1,3})$/i);
-        var sceneAbsolute = null;
-        if (m) {
-            sceneAbsolute = m[1];
-        }
-        setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute);
-    });
-});
diff --git a/gui/slick/js/failedDownloads.js b/gui/slick/js/failedDownloads.js
index 62b2fea48d175a327bd3ce63adca11ccb7406195..f599e41295952278058651f016dc04ea31bad2eb 100644
--- a/gui/slick/js/failedDownloads.js
+++ b/gui/slick/js/failedDownloads.js
@@ -8,10 +8,9 @@ $(document).ready(function(){
             }
         });
 
-        if (removeArr.length === 0) return false;
+        if (removeArr.length === 0) { return false; }
 
-        url = srRoot + '/manage/failedDownloads?toRemove='+removeArr.join('|');
-        window.location.href = url;
+        window.location.href = srRoot + '/manage/failedDownloads?toRemove='+removeArr.join('|');
     });
 
     $('.bulkCheck').on('click', function(){
@@ -23,26 +22,29 @@ $(document).ready(function(){
         });
     });
 
-    $('.removeCheck').forEach(function(name) {
-        var lastCheck = null;
-        $(name).click(function(event) {
-            if(!lastCheck || !event.shiftKey) {
-                lastCheck = this;
-                return;
-            }
+    if($('.removeCheck').length){
+        $('.removeCheck').each(function(name) {
+            var lastCheck = null;
+            $(name).click(function(event) {
+                if(!lastCheck || !event.shiftKey) {
+                    lastCheck = this;
+                    return;
+                }
 
-            var check = this;
-            var found = 0;
+                var check = this;
+                var found = 0;
 
-            $(name+':visible').each(function() {
-                switch (found) {
-                    case 2: return false;
-                    case 1:
-                    this.checked = lastCheck.checked;
-                }
+                $(name+':visible').each(function() {
+                    switch (found) {
+                        case 2: return false;
+                        case 1:
+                        this.checked = lastCheck.checked;
+                    }
 
-                if (this == check || this == lastCheck) found++;
+                    if (this === check || this === lastCheck) { found++; }
+                });
             });
         });
-    });
+    }
+
 });
diff --git a/gui/slick/js/lib/bootbox.min.js b/gui/slick/js/lib/bootbox.min.js
deleted file mode 100644
index 0dc0cbd5f42ee1df3ab6568b77f0f6366329b2e6..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/lib/bootbox.min.js and /dev/null differ
diff --git a/gui/slick/js/lib/bootstrap-formhelpers.min-2.3.0.js b/gui/slick/js/lib/bootstrap-formhelpers.min-2.3.0.js
deleted file mode 100644
index 4cffbbccde68a12245af48232e3da4692c36f983..0000000000000000000000000000000000000000
--- a/gui/slick/js/lib/bootstrap-formhelpers.min-2.3.0.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
-* bootstrap-formhelpers.js v2.3.0 by @vincentlamanna
-* Copyright 2013 Vincent Lamanna
-* http://www.apache.org/licenses/LICENSE-2.0
-*/
-if(!jQuery)throw new Error("Bootstrap Form Helpers requires jQuery");var BFHCountriesList={AF:"Afghanistan",AL:"Albania",DZ:"Algeria",AS:"American Samoa",AD:"Andorra",AO:"Angola",AI:"Anguilla",AQ:"Antarctica",AG:"Antigua and Barbuda",AR:"Argentina",AM:"Armenia",AW:"Aruba",AU:"Australia",AT:"Austria",AZ:"Azerbaijan",BH:"Bahrain",BD:"Bangladesh",BB:"Barbados",BY:"Belarus",BE:"Belgium",BZ:"Belize",BJ:"Benin",BM:"Bermuda",BT:"Bhutan",BO:"Bolivia",BA:"Bosnia and Herzegovina",BW:"Botswana",BV:"Bouvet Island",BR:"Brazil",IO:"British Indian Ocean Territory",VG:"British Virgin Islands",BN:"Brunei",BG:"Bulgaria",BF:"Burkina Faso",BI:"Burundi",CI:"Côte d'Ivoire",KH:"Cambodia",CM:"Cameroon",CA:"Canada",CV:"Cape Verde",KY:"Cayman Islands",CF:"Central African Republic",TD:"Chad",CL:"Chile",CN:"China",CX:"Christmas Island",CC:"Cocos (Keeling) Islands",CO:"Colombia",KM:"Comoros",CG:"Congo",CK:"Cook Islands",CR:"Costa Rica",HR:"Croatia",CU:"Cuba",CY:"Cyprus",CZ:"Czech Republic",CD:"Democratic Republic of the Congo",DK:"Denmark",DJ:"Djibouti",DM:"Dominica",DO:"Dominican Republic",TP:"East Timor",EC:"Ecuador",EG:"Egypt",SV:"El Salvador",GQ:"Equatorial Guinea",ER:"Eritrea",EE:"Estonia",ET:"Ethiopia",FO:"Faeroe Islands",FK:"Falkland Islands",FJ:"Fiji",FI:"Finland",MK:"Former Yugoslav Republic of Macedonia",FR:"France",FX:"France, Metropolitan",GF:"French Guiana",PF:"French Polynesia",TF:"French Southern Territories",GA:"Gabon",GE:"Georgia",DE:"Germany",GH:"Ghana",GI:"Gibraltar",GR:"Greece",GL:"Greenland",GD:"Grenada",GP:"Guadeloupe",GU:"Guam",GT:"Guatemala",GN:"Guinea",GW:"Guinea-Bissau",GY:"Guyana",HT:"Haiti",HM:"Heard and Mc Donald Islands",HN:"Honduras",HK:"Hong Kong",HU:"Hungary",IS:"Iceland",IN:"India",ID:"Indonesia",IR:"Iran",IQ:"Iraq",IE:"Ireland",IL:"Israel",IT:"Italy",JM:"Jamaica",JP:"Japan",JO:"Jordan",KZ:"Kazakhstan",KE:"Kenya",KI:"Kiribati",KW:"Kuwait",KG:"Kyrgyzstan",LA:"Laos",LV:"Latvia",LB:"Lebanon",LS:"Lesotho",LR:"Liberia",LY:"Libya",LI:"Liechtenstein",LT:"Lithuania",LU:"Luxembourg",MO:"Macau",MG:"Madagascar",MW:"Malawi",MY:"Malaysia",MV:"Maldives",ML:"Mali",MT:"Malta",MH:"Marshall Islands",MQ:"Martinique",MR:"Mauritania",MU:"Mauritius",YT:"Mayotte",MX:"Mexico",FM:"Micronesia",MD:"Moldova",MC:"Monaco",MN:"Mongolia",ME:"Montenegro",MS:"Montserrat",MA:"Morocco",MZ:"Mozambique",MM:"Myanmar",NA:"Namibia",NR:"Nauru",NP:"Nepal",NL:"Netherlands",AN:"Netherlands Antilles",NC:"New Caledonia",NZ:"New Zealand",NI:"Nicaragua",NE:"Niger",NG:"Nigeria",NU:"Niue",NF:"Norfolk Island",KP:"North Korea",MP:"Northern Marianas",NO:"Norway",OM:"Oman",PK:"Pakistan",PW:"Palau",PS:"Palestine",PA:"Panama",PG:"Papua New Guinea",PY:"Paraguay",PE:"Peru",PH:"Philippines",PN:"Pitcairn Islands",PL:"Poland",PT:"Portugal",PR:"Puerto Rico",QA:"Qatar",RE:"Reunion",RO:"Romania",RU:"Russia",RW:"Rwanda",ST:"São Tomé and Príncipe",SH:"Saint Helena",PM:"St. Pierre and Miquelon",KN:"Saint Kitts and Nevis",LC:"Saint Lucia",VC:"Saint Vincent and the Grenadines",WS:"Samoa",SM:"San Marino",SA:"Saudi Arabia",SN:"Senegal",RS:"Serbia",SC:"Seychelles",SL:"Sierra Leone",SG:"Singapore",SK:"Slovakia",SI:"Slovenia",SB:"Solomon Islands",SO:"Somalia",ZA:"South Africa",GS:"South Georgia and the South Sandwich Islands",KR:"South Korea",ES:"Spain",LK:"Sri Lanka",SD:"Sudan",SR:"Suriname",SJ:"Svalbard and Jan Mayen Islands",SZ:"Swaziland",SE:"Sweden",CH:"Switzerland",SY:"Syria",TW:"Taiwan",TJ:"Tajikistan",TZ:"Tanzania",TH:"Thailand",BS:"The Bahamas",GM:"The Gambia",TG:"Togo",TK:"Tokelau",TO:"Tonga",TT:"Trinidad and Tobago",TN:"Tunisia",TR:"Turkey",TM:"Turkmenistan",TC:"Turks and Caicos Islands",TV:"Tuvalu",VI:"US Virgin Islands",UG:"Uganda",UA:"Ukraine",AE:"United Arab Emirates",GB:"United Kingdom",US:"United States",UM:"United States Minor Outlying Islands",UY:"Uruguay",UZ:"Uzbekistan",VU:"Vanuatu",VA:"Vatican City",VE:"Venezuela",VN:"Vietnam",WF:"Wallis and Futuna Islands",EH:"Western Sahara",YE:"Yemen",ZM:"Zambia",ZW:"Zimbabwe"},BFHCurrenciesList={AED:{label:"United Arab Emirates dirham",currencyflag:"",symbol:"د.إ"},AFN:{label:"Afghan afghani",currencyflag:"",symbol:"؋"},ALL:{label:"Albanian lek",currencyflag:"",symbol:"L"},AMD:{label:"Armenian dram",currencyflag:"",symbol:"դր"},AOA:{label:"Angolan kwanza",currencyflag:"",symbol:"Kz"},ARS:{label:"Argentine peso",currencyflag:"",symbol:"$"},AUD:{label:"Australian dollar",currencyflag:"AUD",symbol:"$"},AWG:{label:"Aruban florin",currencyflag:"",symbol:"ƒ"},AZN:{label:"Azerbaijani manat",currencyflag:"",symbol:""},BAM:{label:"Bosnia and Herzegovina convertible mark",currencyflag:"",symbol:"KM"},BBD:{label:"Barbadian dollar",currencyflag:"",symbol:"$"},BDT:{label:"Bangladeshi taka",currencyflag:"",symbol:"৳"},BGN:{label:"Bulgarian lev",currencyflag:"",symbol:"лв"},BHD:{label:"Bahraini dinar",currencyflag:"",symbol:".د.ب"},BIF:{label:"Burundian franc",currencyflag:"",symbol:"Fr"},BMD:{label:"Bermudian dollar",currencyflag:"",symbol:"$"},BND:{label:"Brunei dollar",currencyflag:"",symbol:"$"},BOB:{label:"Bolivian boliviano",currencyflag:"",symbol:"Bs"},BRL:{label:"Brazilian real",currencyflag:"",symbol:"R$"},BSD:{label:"Bahamian dollar",currencyflag:"",symbol:"$"},BTN:{label:"Bhutanese ngultrum",currencyflag:"",symbol:"Nu"},BWP:{label:"Botswana pula",currencyflag:"",symbol:"P"},BYR:{label:"Belarusian ruble",currencyflag:"",symbol:"Br"},BZD:{label:"Belize dollar",currencyflag:"",symbol:"$"},CAD:{label:"Canadian dollar",currencyflag:"",symbol:"$"},CDF:{label:"Congolese franc",currencyflag:"",symbol:"Fr"},CHF:{label:"Swiss franc",currencyflag:"CHF",symbol:"Fr"},CLP:{label:"Chilean peso",currencyflag:"",symbol:"$"},CNY:{label:"Chinese yuan",currencyflag:"",symbol:"¥"},COP:{label:"Colombian peso",currencyflag:"",symbol:"$"},CRC:{label:"Costa Rican colón",currencyflag:"",symbol:"₡"},CUP:{label:"Cuban convertible peso",currencyflag:"",symbol:"$"},CVE:{label:"Cape Verdean escudo",currencyflag:"",symbol:"$"},CZK:{label:"Czech koruna",currencyflag:"",symbol:"Kč"},DJF:{label:"Djiboutian franc",currencyflag:"",symbol:"Fr"},DKK:{label:"Danish krone",currencyflag:"DKK",symbol:"kr"},DOP:{label:"Dominican peso",currencyflag:"",symbol:"$"},DZD:{label:"Algerian dinar",currencyflag:"",symbol:"د.ج"},EGP:{label:"Egyptian pound",currencyflag:"",symbol:"ج.م"},ERN:{label:"Eritrean nakfa",currencyflag:"",symbol:"Nfk"},ETB:{label:"Ethiopian birr",currencyflag:"",symbol:"Br"},EUR:{label:"Euro",currencyflag:"EUR",symbol:"€"},FJD:{label:"Fijian dollar",currencyflag:"",symbol:"$"},FKP:{label:"Falkland Islands pound",currencyflag:"",symbol:"£"},GBP:{label:"British pound",currencyflag:"",symbol:"£"},GEL:{label:"Georgian lari",currencyflag:"",symbol:"ლ"},GHS:{label:"Ghana cedi",currencyflag:"",symbol:"₵"},GMD:{label:"Gambian dalasi",currencyflag:"",symbol:"D"},GNF:{label:"Guinean franc",currencyflag:"",symbol:"Fr"},GTQ:{label:"Guatemalan quetzal",currencyflag:"",symbol:"Q"},GYD:{label:"Guyanese dollar",currencyflag:"",symbol:"$"},HKD:{label:"Hong Kong dollar",currencyflag:"",symbol:"$"},HNL:{label:"Honduran lempira",currencyflag:"",symbol:"L"},HRK:{label:"Croatian kuna",currencyflag:"",symbol:"kn"},HTG:{label:"Haitian gourde",currencyflag:"",symbol:"G"},HUF:{label:"Hungarian forint",currencyflag:"",symbol:"Ft"},IDR:{label:"Indonesian rupiah",currencyflag:"",symbol:"Rp"},ILS:{label:"Israeli new shekel",currencyflag:"",symbol:"₪"},IMP:{label:"Manx pound",currencyflag:"",symbol:"£"},INR:{label:"Indian rupee",currencyflag:"",symbol:""},IQD:{label:"Iraqi dinar",currencyflag:"",symbol:"ع.د"},IRR:{label:"Iranian rial",currencyflag:"",symbol:"﷼"},ISK:{label:"Icelandic króna",currencyflag:"",symbol:"kr"},JEP:{label:"Jersey pound",currencyflag:"",symbol:"£"},JMD:{label:"Jamaican dollar",currencyflag:"",symbol:"$"},JOD:{label:"Jordanian dinar",currencyflag:"",symbol:"د.ا"},JPY:{label:"Japanese yen",currencyflag:"",symbol:"¥"},KES:{label:"Kenyan shilling",currencyflag:"",symbol:"Sh"},KGS:{label:"Kyrgyzstani som",currencyflag:"",symbol:"лв"},KHR:{label:"Cambodian riel",currencyflag:"",symbol:"៛"},KMF:{label:"Comorian franc",currencyflag:"",symbol:"Fr"},KPW:{label:"North Korean won",currencyflag:"",symbol:"₩"},KRW:{label:"South Korean won",currencyflag:"",symbol:"₩"},KWD:{label:"Kuwaiti dinar",currencyflag:"",symbol:"د.ك"},KYD:{label:"Cayman Islands dollar",currencyflag:"",symbol:"$"},KZT:{label:"Kazakhstani tenge",currencyflag:"",symbol:"₸"},LAK:{label:"Lao kip",currencyflag:"",symbol:"₭"},LBP:{label:"Lebanese pound",currencyflag:"",symbol:"ل.ل"},LKR:{label:"Sri Lankan rupee",currencyflag:"",symbol:"Rs"},LRD:{label:"Liberian dollar",currencyflag:"",symbol:"$"},LSL:{label:"Lesotho loti",currencyflag:"",symbol:"L"},LTL:{label:"Lithuanian litas",currencyflag:"",symbol:"Lt"},LVL:{label:"Latvian lats",currencyflag:"",symbol:"Ls"},LYD:{label:"Libyan dinar",currencyflag:"",symbol:"ل.د"},MAD:{label:"Moroccan dirham",currencyflag:"",symbol:"د.م."},MDL:{label:"Moldovan leu",currencyflag:"",symbol:"L"},MGA:{label:"Malagasy ariary",currencyflag:"",symbol:"Ar"},MKD:{label:"Macedonian denar",currencyflag:"",symbol:"ден"},MMK:{label:"Burmese kyat",currencyflag:"",symbol:"Ks"},MNT:{label:"Mongolian tögrög",currencyflag:"",symbol:"₮"},MOP:{label:"Macanese pataca",currencyflag:"",symbol:"P"},MRO:{label:"Mauritanian ouguiya",currencyflag:"",symbol:"UM"},MUR:{label:"Mauritian rupee",currencyflag:"",symbol:"Rs"},MVR:{label:"Maldivian rufiyaa",currencyflag:"",symbol:".ރ"},MWK:{label:"Malawian kwacha",currencyflag:"",symbol:"MK"},MXN:{label:"Mexican peso",currencyflag:"",symbol:"$"},MYR:{label:"Malaysian ringgit",currencyflag:"",symbol:"MR"},MZN:{label:"Mozambican metical",currencyflag:"",symbol:"MT"},NAD:{label:"Namibian dollar",currencyflag:"",symbol:"$"},NGN:{label:"Nigerian naira",currencyflag:"",symbol:"₦"},NIO:{label:"Nicaraguan córdoba",currencyflag:"",symbol:"C$"},NOK:{label:"Norwegian krone",currencyflag:"",symbol:"kr"},NPR:{label:"Nepalese rupee",currencyflag:"",symbol:"Rs"},NZD:{label:"New Zealand dollar",currencyflag:"",symbol:"$"},OMR:{label:"Omani rial",currencyflag:"",symbol:"ر.ع."},PAB:{label:"Panamanian balboa",currencyflag:"",symbol:"B/."},PEN:{label:"Peruvian nuevo sol",currencyflag:"",symbol:"S/."},PGK:{label:"Papua New Guinean kina",currencyflag:"",symbol:"K"},PHP:{label:"Philippine peso",currencyflag:"",symbol:"₱"},PKR:{label:"Pakistani rupee",currencyflag:"",symbol:"Rs"},PLN:{label:"Polish złoty",currencyflag:"",symbol:"zł"},PRB:{label:"Transnistrian ruble",currencyflag:"",symbol:"р."},PYG:{label:"Paraguayan guaraní",currencyflag:"",symbol:"₲"},QAR:{label:"Qatari riyal",currencyflag:"",symbol:"ر.ق"},RON:{label:"Romanian leu",currencyflag:"",symbol:"L"},RSD:{label:"Serbian dinar",currencyflag:"",symbol:"дин"},RUB:{label:"Russian ruble",currencyflag:"",symbol:"руб."},RWF:{label:"Rwandan franc",currencyflag:"",symbol:"Fr"},SAR:{label:"Saudi riyal",currencyflag:"",symbol:"ر.س"},SBD:{label:"Solomon Islands dollar",currencyflag:"",symbol:"$"},SCR:{label:"Seychellois rupee",currencyflag:"",symbol:"Rs"},SDG:{label:"Singapore dollar",currencyflag:"",symbol:"$"},SEK:{label:"Swedish krona",currencyflag:"",symbol:"kr"},SGD:{label:"Singapore dollar",currencyflag:"",symbol:"$"},SHP:{label:"Saint Helena pound",currencyflag:"",symbol:"£"},SLL:{label:"Sierra Leonean leone",currencyflag:"",symbol:"Le"},SOS:{label:"Somali shilling",currencyflag:"",symbol:"Sh"},SRD:{label:"Surinamese dollar",currencyflag:"",symbol:"$"},SSP:{label:"South Sudanese pound",currencyflag:"",symbol:"£"},STD:{label:"São Tomé and Príncipe dobra",currencyflag:"",symbol:"Db"},SVC:{label:"Salvadoran colón",currencyflag:"",symbol:"₡"},SYP:{label:"Syrian pound",currencyflag:"",symbol:"£"},SZL:{label:"Swazi lilangeni",currencyflag:"",symbol:"L"},THB:{label:"Thai baht",currencyflag:"",symbol:"฿"},TJS:{label:"Tajikistani somoni",currencyflag:"",symbol:"SM"},TMT:{label:"Turkmenistan manat",currencyflag:"",symbol:"m"},TND:{label:"Tunisian dinar",currencyflag:"",symbol:"د.ت"},TOP:{label:"Tongan paʻanga",currencyflag:"",symbol:"T$"},TRY:{label:"Turkish lira",currencyflag:"",symbol:"&#8378;"},TTD:{label:"Trinidad and Tobago dollar",currencyflag:"",symbol:"$"},TWD:{label:"New Taiwan dollar",currencyflag:"",symbol:"$"},TZS:{label:"Tanzanian shilling",currencyflag:"",symbol:"Sh"},UAH:{label:"Ukrainian hryvnia",currencyflag:"",symbol:"₴"},UGX:{label:"Ugandan shilling",currencyflag:"",symbol:"Sh"},USD:{label:"United States dollar",currencyflag:"",symbol:"$"},UYU:{label:"Uruguayan peso",currencyflag:"",symbol:"$"},UZS:{label:"Uzbekistani som",currencyflag:"",symbol:"лв"},VEF:{label:"Venezuelan bolívar",currencyflag:"",symbol:"Bs F"},VND:{label:"Vietnamese đồng",currencyflag:"",symbol:"₫"},VUV:{label:"Vanuatu vatu",currencyflag:"",symbol:"Vt"},WST:{label:"Samoan tālā",currencyflag:"",symbol:"T"},XAF:{label:"Central African CFA franc",currencyflag:"XAF",symbol:"Fr"},XCD:{label:"East Caribbean dollar",currencyflag:"XCD",symbol:"$"},XOF:{label:"West African CFA franc",currencyflag:"XOF",symbol:"Fr"},XPF:{label:"CFP franc",currencyflag:"XPF",symbol:"Fr"},YER:{label:"Yemeni rial",currencyflag:"",symbol:"﷼"},ZAR:{label:"South African rand",currencyflag:"ZAR",symbol:"R"},ZMW:{label:"Zambian kwacha",currencyflag:"",symbol:"ZK"},ZWL:{label:"Zimbabwean dollar",currencyflag:"",symbol:"$"}},BFHMonthsList=["January","February","March","April","May","June","July","August","September","October","November","December"],BFHDaysList=["SUN","MON","TUE","WED","THU","FRI","SAT"],BFHDayOfWeekStart=0,BFHFontsList={"Andale Mono":'"Andale Mono", AndaleMono, monospace',Arial:'Arial, "Helvetica Neue", Helvetica, sans-serif',"Arial Black":'"Arial Black", "Arial Bold", Gadget, sans-serif',"Arial Narrow":'"Arial Narrow", Arial, sans-serif',"Arial Rounded MT Bold":'"Arial Rounded MT Bold", "Helvetica Rounded", Arial, sans-serif',"Avant Garde":'"Avant Garde", Avantgarde, "Century Gothic", CenturyGothic, "AppleGothic", sans-serif',Baskerville:'Baskerville, "Baskerville Old Face", "Hoefler Text", Garamond, "Times New Roman", serif',"Big Caslon":'"Big Caslon", "Book Antiqua", "Palatino Linotype", Georgia, serif',"Bodoni MT":'"Bodoni MT", Didot, "Didot LT STD", "Hoefler Text", Garamond, "Times New Roman", serif',"Book Antiqua":'"Book Antiqua", Palatino, "Palatino Linotype", "Palatino LT STD", Georgia, serif',"Brush Script MT":'"Brush Script MT", cursive',Calibri:'Calibri, Candara, Segoe, "Segoe UI", Optima, Arial, sans-serif',"Calisto MT":'"Calisto MT", "Bookman Old Style", Bookman, "Goudy Old Style", Garamond, "Hoefler Text", "Bitstream Charter", Georgia, serif',Cambrio:"Cambria, Georgia, serif",Candara:'Candara, Calibri, Segoe, "Segoe UI", Optima, Arial, sans-serif',"Century Gothic":'"Century Gothic", CenturyGothic, AppleGothic, sans-serif',Consolas:"Consolas, monaco, monospace",Copperplate:'Copperplate, "Copperplate Gothic Light", fantasy',"Courier New":'"Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace',Didot:'Didot, "Didot LT STD", "Hoefler Text", Garamond, "Times New Roman", serif',"Franklin Gothic Medium":'"Franklin Gothic Medium", "Franklin Gothic", "ITC Franklin Gothic", Arial, sans-serif',Futura:'Futura, "Trebuchet MS", Arial, sans-serif',Garamond:'Garamond, Baskerville, "Baskerville Old Face", "Hoefler Text", "Times New Roman", serif',Geneva:"Geneva, Tahoma, Verdana, sans-serif",Georgia:'Georgia, Times, "Times New Roman", serif',"Gill Sans":'"Gill Sans", "Gill Sans MT", Calibri, sans-serif',"Goudy Old Style":'"Goudy Old Style", Garamond, "Big Caslon", "Times New Roman", serif',Helvetica:'"Helvetica Neue", Helvetica, Arial, sans-serif',"Hoefler Text":'"Hoefler Text", "Baskerville old face", Garamond, "Times New Roman", serif',Impact:'Impact, Haettenschweiler, "Franklin Gothic Bold", Charcoal, "Helvetica Inserat", "Bitstream Vera Sans Bold", "Arial Black", sans serif',"Lucida Bright":'"Lucida Bright", Georgia, serif',"Lucida Console":'"Lucida Console", "Lucida Sans Typewriter", Monaco, "Bitstream Vera Sans Mono", monospace',"Lucida Sans Typewriter":'"Lucida Sans Typewriter", "Lucida Console", Monaco, "Bitstream Vera Sans Mono", monospace',"Lucida Grande":'"Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Geneva, Verdana, sans-serif',Monaco:'Monaco, Consolas, "Lucida Console", monospace',Optima:'Optima, Segoe, "Segoe UI", Candara, Calibri, Arial, sans-serif',Palatino:'Palatino, "Palatino Linotype", "Palatino LT STD", "Book Antiqua", Georgia, serif',Papyrus:"Papyrus, fantasy",Perpetua:'Perpetua, Baskerville, "Big Caslon", "Palatino Linotype", Palatino, "URW Palladio L", "Nimbus Roman No9 L", serif',Rockwell:'Rockwell, "Courier Bold", Courier, Georgia, Times, "Times New Roman", serif',"Rockwell Extra Bold":'"Rockwell Extra Bold", "Rockwell Bold", monospace',"Segoe UI":'"Segoe UI", Frutiger, "Frutiger Linotype',Tahoma:"Tahoma, Verdana, Segoe, sans-serif","Times New Roman":'TimesNewRoman, "Times New Roman", Times, Baskerville, Georgia, serif',"Trebuchet MS":'"Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Tahoma, sans-serif',Verdana:"Verdana, Geneva, sans-serif"},BFHFontSizesList={8:"8px",9:"9px",10:"10px",11:"11px",12:"12px",14:"14px",16:"16px",18:"18px",20:"20px",24:"24px",28:"28px",36:"36px",48:"48px"},BFHGoogleFontsList={kind:"webfonts#webfontList",items:[{kind:"webfonts#webfont",family:"ABeeZee",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Abel",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Abril Fatface",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Aclonica",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Acme",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Actor",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Adamina",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Advent Pro",variants:["100","200","300","regular","500","600","700"],subsets:["latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Aguafina Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Akronim",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Aladin",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Aldrich",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alegreya",variants:["regular","italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Alegreya SC",variants:["regular","italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Alex Brush",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Alfa Slab One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alice",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alike",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Alike Angular",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Allan",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Allerta",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Allerta Stencil",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Allura",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Almendra",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Almendra Display",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Almendra SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Amarante",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Amaranth",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Amatic SC",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Amethysta",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Anaheim",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Andada",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Andika",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Angkor",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Annie Use Your Telescope",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Anonymous Pro",variants:["regular","italic","700","700italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Antic",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Antic Didone",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Antic Slab",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Anton",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Arapey",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Arbutus",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Arbutus Slab",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Architects Daughter",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Archivo Black",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Archivo Narrow",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Arimo",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Arizonia",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Armata",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Artifika",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Arvo",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Asap",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Asset",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Astloch",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Asul",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Atomic Age",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Aubrey",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Audiowide",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Autour One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Average",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Average Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Averia Gruesa Libre",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Averia Libre",variants:["300","300italic","regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Averia Sans Libre",variants:["300","300italic","regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Averia Serif Libre",variants:["300","300italic","regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bad Script",variants:["regular"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Balthazar",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bangers",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Basic",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Battambang",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Baumans",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bayon",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Belgrano",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Belleza",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"BenchNine",variants:["300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bentham",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Berkshire Swash",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bevan",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bigelow Rules",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bigshot One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bilbo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bilbo Swash Caps",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bitter",variants:["regular","italic","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Black Ops One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bokor",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Bonbon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Boogaloo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bowlby One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bowlby One SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Brawler",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Bree Serif",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bubblegum Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Bubbler One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Buda",variants:["300"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Buenard",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Butcherman",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Butterfly Kids",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cabin",variants:["regular","italic","500","500italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cabin Condensed",variants:["regular","500","600","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cabin Sketch",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Caesar Dressing",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cagliostro",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Calligraffitti",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cambo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Candal",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cantarell",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cantata One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cantora One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Capriola",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cardo",variants:["regular","italic","700"],subsets:["greek-ext","latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Carme",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Carrois Gothic",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Carrois Gothic SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Carter One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Caudex",variants:["regular","italic","700","700italic"],subsets:["greek-ext","latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Cedarville Cursive",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ceviche One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Changa One",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Chango",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chau Philomene One",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chela One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chelsea Market",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chenla",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Cherry Cream Soda",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cherry Swash",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chewy",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Chicle",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Chivo",variants:["regular","italic","900","900italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cinzel",variants:["regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cinzel Decorative",variants:["regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Clicker Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Coda",variants:["regular","800"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Coda Caption",variants:["800"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Codystar",variants:["300","regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Combo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Comfortaa",variants:["300","regular","700"],subsets:["cyrillic","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Coming Soon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Concert One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Condiment",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Content",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Contrail One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Convergence",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cookie",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Copse",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Corben",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Courgette",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cousine",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Coustard",variants:["regular","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Covered By Your Grace",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Crafty Girls",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Creepster",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Crete Round",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Crimson Text",variants:["regular","italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Croissant One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Crushed",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Cuprum",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cutive",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Cutive Mono",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Damion",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Dancing Script",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Dangrek",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Dawning of a New Day",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Days One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Delius",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Delius Swash Caps",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Delius Unicase",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Della Respira",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Devonshire",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Didact Gothic",variants:["regular"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Diplomata",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Diplomata SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Doppio One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Dorsa",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Dosis",variants:["200","300","regular","500","600","700","800"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Dr Sugiyama",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Droid Sans",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Droid Sans Mono",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Droid Serif",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Duru Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Dynalight",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"EB Garamond",variants:["regular"],subsets:["cyrillic","latin-ext","latin","vietnamese","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Eagle Lake",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Eater",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Economica",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Electrolize",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Emblema One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Emilys Candy",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Engagement",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Englebert",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Enriqueta",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Erica One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Esteban",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Euphoria Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ewert",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Exo",variants:["100","100italic","200","200italic","300","300italic","regular","italic","500","500italic","600","600italic","700","700italic","800","800italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Expletus Sans",variants:["regular","italic","500","500italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fanwood Text",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fascinate",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fascinate Inline",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Faster One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fasthand",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Federant",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Federo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Felipa",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Fenix",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Finger Paint",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fjord One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Flamenco",variants:["300","regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Flavors",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fondamento",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Fontdiner Swanky",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Forum",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Francois One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Freckle Face",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Fredericka the Great",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fredoka One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Freehand",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Fresca",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Frijole",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Fugaz One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"GFS Didot",variants:["regular"],subsets:["greek"]},{kind:"webfonts#webfont",family:"GFS Neohellenic",variants:["regular","italic","700","700italic"],subsets:["greek"]},{kind:"webfonts#webfont",family:"Gafata",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Galdeano",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Galindo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gentium Basic",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gentium Book Basic",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Geo",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Geostar",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Geostar Fill",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Germania One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gilda Display",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Give You Glory",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Glass Antiqua",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Glegoo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gloria Hallelujah",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Goblin One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gochi Hand",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gorditas",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Goudy Bookletter 1911",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Graduate",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Gravitas One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Great Vibes",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Griffy",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gruppo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Gudea",variants:["regular","italic","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Habibi",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Hammersmith One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Hanalei",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Hanalei Fill",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Handlee",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Hanuman",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Happy Monkey",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Headland One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Henny Penny",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Herr Von Muellerhoff",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Holtwood One SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Homemade Apple",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Homenaje",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"IM Fell DW Pica",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell DW Pica SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Double Pica",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Double Pica SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell English",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell English SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell French Canon",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell French Canon SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Great Primer",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"IM Fell Great Primer SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Iceberg",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Iceland",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Imprima",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Inconsolata",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Inder",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Indie Flower",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Inika",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Irish Grover",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Istok Web",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Italiana",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Italianno",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Jacques Francois",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Jacques Francois Shadow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Jim Nightshade",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Jockey One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Jolly Lodger",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Josefin Sans",variants:["100","100italic","300","300italic","regular","italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Josefin Slab",variants:["100","100italic","300","300italic","regular","italic","600","600italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Joti One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Judson",variants:["regular","italic","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Julee",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Julius Sans One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Junge",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Jura",variants:["300","regular","500","600"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Just Another Hand",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Just Me Again Down Here",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Kameron",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Karla",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kaushan Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Keania One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kelly Slab",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kenia",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Khmer",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Kite One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Knewave",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Kotta One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Koulen",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Kranky",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Kreon",variants:["300","regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Kristi",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Krona One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"La Belle Aurore",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lancelot",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lato",variants:["100","100italic","300","300italic","regular","italic","700","700italic","900","900italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"League Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Leckerli One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ledger",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Lekton",variants:["regular","italic","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Lemon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Life Savers",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Lilita One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Limelight",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Linden Hill",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lobster",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Lobster Two",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Outline",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Shadow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Sketch",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Londrina Solid",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lora",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Love Ya Like A Sister",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Loved by the King",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lovers Quarrel",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Luckiest Guy",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lusitana",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Lustria",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Macondo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Macondo Swash Caps",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Magra",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Maiden Orange",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mako",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Marcellus",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marcellus SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marck Script",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Margarine",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marko One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Marmelad",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Marvel",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mate",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mate SC",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Maven Pro",variants:["regular","500","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"McLaren",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Meddon",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"MedievalSharp",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Medula One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Megrim",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Meie Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Merienda",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Merienda One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Merriweather",variants:["300","regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Metal",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Metal Mania",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Metamorphous",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Metrophobic",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Michroma",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miltonian",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miltonian Tattoo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miniver",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Miss Fajardose",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Modern Antiqua",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Molengo",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Molle",variants:["italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Monofett",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Monoton",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Monsieur La Doulaise",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Montaga",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montez",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montserrat",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montserrat Alternates",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Montserrat Subrayada",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Moul",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Moulpali",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Mountains of Christmas",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mouse Memoirs",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mr Bedfort",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mr Dafoe",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mr De Haviland",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mrs Saint Delafield",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Mrs Sheppards",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Muli",variants:["300","300italic","regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Mystery Quest",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Neucha",variants:["regular"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Neuton",variants:["200","300","regular","italic","700","800"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"News Cycle",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Niconne",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Nixie One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nobile",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nokora",variants:["regular","700"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Norican",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Nosifer",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Nothing You Could Do",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Noticia Text",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin","vietnamese"]},{kind:"webfonts#webfont",family:"Nova Cut",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Flat",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Mono",variants:["regular"],subsets:["latin","greek"]},{kind:"webfonts#webfont",family:"Nova Oval",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Round",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Slim",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nova Square",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Numans",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Nunito",variants:["300","regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Odor Mean Chey",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Offside",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Old Standard TT",variants:["regular","italic","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oldenburg",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Oleo Script",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Oleo Script Swash Caps",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Open Sans",variants:["300","300italic","regular","italic","600","600italic","700","700italic","800","800italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","vietnamese","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Open Sans Condensed",variants:["300","300italic","700"],subsets:["cyrillic","greek-ext","latin-ext","latin","vietnamese","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Oranienbaum",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Orbitron",variants:["regular","500","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oregano",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Orienta",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Original Surfer",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oswald",variants:["300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Over the Rainbow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Overlock",variants:["regular","italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Overlock SC",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ovo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Oxygen",variants:["300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Oxygen Mono",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Mono",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"PT Sans",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Sans Caption",variants:["regular","700"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Sans Narrow",variants:["regular","700"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"PT Serif",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"PT Serif Caption",variants:["regular","italic"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Pacifico",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Paprika",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Parisienne",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Passero One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Passion One",variants:["regular","700","900"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Patrick Hand",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Patua One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Paytone One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Peralta",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Permanent Marker",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Petit Formal Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Petrona",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Philosopher",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin"]},{kind:"webfonts#webfont",family:"Piedra",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Pinyon Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Pirata One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Plaster",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Play",variants:["regular","700"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Playball",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Playfair Display",variants:["regular","italic","700","700italic","900","900italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Playfair Display SC",variants:["regular","italic","700","700italic","900","900italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Podkova",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Poiret One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Poller One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Poly",variants:["regular","italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Pompiere",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Pontano Sans",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Port Lligat Sans",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Port Lligat Slab",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Prata",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Preahvihear",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Press Start 2P",variants:["regular"],subsets:["cyrillic","latin-ext","latin","greek"]},{kind:"webfonts#webfont",family:"Princess Sofia",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Prociono",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Prosto One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Puritan",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Purple Purse",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Quando",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Quantico",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Quattrocento",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Quattrocento Sans",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Questrial",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Quicksand",variants:["300","regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Quintessential",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Qwigley",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Racing Sans One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Radley",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Raleway",variants:["100","200","300","regular","500","600","700","800","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Raleway Dots",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rambla",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rammetto One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ranchers",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rancho",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rationale",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Redressed",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Reenie Beanie",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Revalia",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ribeye",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ribeye Marrow",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Righteous",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Risque",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rochester",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rock Salt",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rokkitt",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Romanesco",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ropa Sans",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rosario",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Rosarivo",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rouge Script",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ruda",variants:["regular","700","900"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rufina",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruge Boogie",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruluko",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rum Raisin",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruslan Display",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Russo One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Ruthie",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Rye",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sacramento",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sail",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Salsa",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sanchez",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sancreek",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sansita One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sarina",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Satisfy",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Scada",variants:["regular","italic","700","700italic"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Schoolbell",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Seaweed Script",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sevillana",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Seymour One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Shadows Into Light",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Shadows Into Light Two",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Shanti",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Share",variants:["regular","italic","700","700italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Share Tech",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Share Tech Mono",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Shojumaru",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Short Stack",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Siemreap",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Sigmar One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Signika",variants:["300","regular","600","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Signika Negative",variants:["300","regular","600","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Simonetta",variants:["regular","italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sirin Stencil",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Six Caps",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Skranji",variants:["regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Slackey",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Smokum",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Smythe",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sniglet",variants:["800"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Snippet",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Snowburst One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sofadi One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sofia",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sonsie One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Sorts Mill Goudy",variants:["regular","italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Source Code Pro",variants:["200","300","regular","600","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Source Sans Pro",variants:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","900","900italic"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Special Elite",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Spicy Rice",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Spinnaker",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Spirax",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Squada One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Stalemate",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stalinist One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stardos Stencil",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Stint Ultra Condensed",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stint Ultra Expanded",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Stoke",variants:["300","regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Strait",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sue Ellen Francisco",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Sunshiney",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Supermercado One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Suwannaphum",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Swanky and Moo Moo",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Syncopate",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tangerine",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Taprom",variants:["regular"],subsets:["khmer"]},{kind:"webfonts#webfont",family:"Telex",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tenor Sans",variants:["regular"],subsets:["cyrillic","latin-ext","latin","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Text Me One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"The Girl Next Door",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tienne",variants:["regular","700","900"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Tinos",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Titan One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Titillium Web",variants:["200","200italic","300","300italic","regular","italic","600","600italic","700","700italic","900"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Trade Winds",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Trocchi",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Trochut",variants:["regular","italic","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Trykker",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Tulpen One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Ubuntu",variants:["300","300italic","regular","italic","500","500italic","700","700italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Ubuntu Condensed",variants:["regular"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Ubuntu Mono",variants:["regular","italic","700","700italic"],subsets:["cyrillic","greek-ext","latin-ext","latin","greek","cyrillic-ext"]},{kind:"webfonts#webfont",family:"Ultra",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Uncial Antiqua",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Underdog",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Unica One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"UnifrakturCook",variants:["700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"UnifrakturMaguntia",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Unkempt",variants:["regular","700"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Unlock",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Unna",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"VT323",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vampiro One",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Varela",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Varela Round",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vast Shadow",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vibur",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vidaloka",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Viga",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Voces",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Volkhov",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Vollkorn",variants:["regular","italic","700","700italic"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Voltaire",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Waiting for the Sunrise",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Wallpoet",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Walter Turncoat",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Warnes",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Wellfleet",variants:["regular"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Wire One",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Yanone Kaffeesatz",variants:["200","300","regular","700"],subsets:["latin-ext","latin"]},{kind:"webfonts#webfont",family:"Yellowtail",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Yeseva One",variants:["regular"],subsets:["cyrillic","latin-ext","latin"]},{kind:"webfonts#webfont",family:"Yesteryear",variants:["regular"],subsets:["latin"]},{kind:"webfonts#webfont",family:"Zeyada",variants:["regular"],subsets:["latin"]}]},BFHLanguagesList={om:"Afaan Oromoo",aa:"Afaraf",af:"Afrikaans",ak:"Akan",an:"aragonés",ig:"Asụsụ Igbo",gn:"Avañe'ẽ",ae:"avesta",ay:"aymar aru",az:"azərbaycan dili",id:"Bahasa Indonesia",ms:"bahasa Melayu",bm:"bamanankan",jv:"basa Jawa",su:"Basa Sunda",bi:"Bislama",bs:"bosanski jezik",br:"brezhoneg",ca:"català",ch:"Chamoru",ny:"chiCheŵa",sn:"chiShona",co:"corsu",cy:"Cymraeg",da:"dansk",se:"Davvisámegiella",de:"Deutsch",nv:"Diné bizaad",et:"eesti",na:"Ekakairũ Naoero",en:"English",es:"español",eo:"Esperanto",eu:"euskara",ee:"Eʋegbe",to:"faka Tonga",mg:"fiteny malagasy",fr:"français",fy:"Frysk",ff:"Fulfulde",fo:"føroyskt",ga:"Gaeilge",gv:"Gaelg",sm:"gagana fa'a Samoa",gl:"galego",sq:"gjuha shqipe",gd:"Gàidhlig",ki:"Gĩkũyũ",ha:"Hausa",ho:"Hiri Motu",hr:"hrvatski jezik",io:"Ido",rw:"Ikinyarwanda",rn:"Ikirundi",ia:"Interlingua",nd:"isiNdebele",nr:"isiNdebele",xh:"isiXhosa",zu:"isiZulu",it:"italiano",ik:"Iñupiaq",pl:"polski",mh:"Kajin M̧ajeļ",kl:"kalaallisut",kr:"Kanuri",kw:"Kernewek",kg:"KiKongo",sw:"Kiswahili",ht:"Kreyòl ayisyen",kj:"Kuanyama",ku:"Kurdî",la:"latine",lv:"latviešu valoda",lt:"lietuvių kalba",ro:"limba română",li:"Limburgs",ln:"Lingála",lg:"Luganda",lb:"Lëtzebuergesch",hu:"magyar",mt:"Malti",nl:"Nederlands",no:"Norsk",nb:"Norsk bokmål",nn:"Norsk nynorsk",uz:"O'zbek",oc:"occitan",ie:"Interlingue",hz:"Otjiherero",ng:"Owambo",pt:"português",ty:"Reo Tahiti",rm:"rumantsch grischun",qu:"Runa Simi",sc:"sardu",za:"Saɯ cueŋƅ",st:"Sesotho",tn:"Setswana",ss:"SiSwati",sl:"slovenski jezik",sk:"slovenčina",so:"Soomaaliga",fi:"suomi",sv:"Svenska",mi:"te reo Māori",vi:"Tiếng Việt",lu:"Tshiluba",ve:"Tshivenḓa",tw:"Twi",tk:"Türkmen",tr:"Türkçe",ug:"Uyƣurqə",vo:"Volapük",fj:"vosa Vakaviti",wa:"walon",tl:"Wikang Tagalog",wo:"Wollof",ts:"Xitsonga",yo:"Yorùbá",sg:"yângâ tî sängö",is:"Íslenska",cs:"čeština",el:"ελληνικά",av:"авар мацӀ",ab:"аҧсуа бызшәа",ba:"башҡорт теле",be:"беларуская мова",bg:"български език",os:"ирон æвзаг",kv:"коми кыв",ky:"Кыргызча",mk:"македонски јазик",mn:"монгол",ce:"нохчийн мотт",ru:"русский язык",sr:"српски језик",tt:"татар теле",tg:"тоҷикӣ",uk:"українська мова",cv:"чӑваш чӗлхи",cu:"ѩзыкъ словѣньскъ",kk:"қазақ тілі",hy:"Հայերեն",yi:"ייִדיש",he:"עברית",ur:"اردو",ar:"العربية",fa:"فارسی",ps:"پښتو",ks:"कश्मीरी",ne:"नेपाली",pi:"पाऴि",bh:"भोजपुरी",mr:"मराठी",sa:"संस्कृतम्",sd:"सिन्धी",hi:"हिन्दी",as:"অসমীয়া",bn:"বাংলা",pa:"ਪੰਜਾਬੀ",gu:"ગુજરાતી",or:"ଓଡ଼ିଆ",ta:"தமிழ்",te:"తెలుగు",kn:"ಕನ್ನಡ",ml:"മലയാളം",si:"සිංහල",th:"ไทย",lo:"ພາສາລາວ",bo:"བོད་ཡིག",dz:"རྫོང་ཁ",my:"ဗမာစာ",ka:"ქართული",ti:"ትግርኛ",am:"አማርኛ",iu:"ᐃᓄᒃᑎᑐᑦ",oj:"ᐊᓂᔑᓈᐯᒧᐎᓐ",cr:"ᓀᐦᐃᔭᐍᐏᐣ",km:"ខ្មែរ",zh:"中文 (Zhōngwén)",ja:"日本語 (にほんご)",ii:"ꆈꌠ꒿ Nuosuhxop",ko:"한국어 (韓國語)"},BFHPhoneFormatList={AF:"+93 0dd ddd dddd",AL:"+355 0dd ddd ddd",DZ:"+213 0ddd dd dd dd",AS:"+1 (ddd) ddd-dddd",AD:"+376 ddddddddd",AO:"+244 ddd ddd ddd",AI:"+1 (ddd) ddd-dddd",AQ:"+672 ddddddddd",AG:"+1 (ddd) ddd-dddd",AR:"+54 ddddddddd",AM:"+374 0dd dddddd",AW:"+297 ddd dddd",AU:"+61 ddd ddd ddd",AT:"+43 0dddd ddddddddd",AZ:"+994 ddddddddd",BH:"+973 ddddddddd",BD:"+880 ddddddddd",BB:"+1 ddddddddd",BY:"+375 ddddddddd",BE:"+32 ddddddddd",BZ:"+501 ddddddddd",BJ:"+229 ddddddddd",BM:"+1 (ddd) ddd-dddd",BT:"+975 ddddddddd",BO:"+591 ddddddddd",BA:"+387 ddddddddd",BW:"+267 ddddddddd",BV:"+0 ddddddddd",BR:"+55 ddddddddd",IO:"+0 ddddddddd",VG:"+1 (ddd) ddd-dddd",BN:"+673 ddddddddd",BG:"+359 ddddddddd",BF:"+226 ddddddddd",BI:"+257 ddddddddd",CI:"+225 ddddddddd",KH:"+855 ddddddddd",CM:"+237 ddddddddd",CA:"+1 (ddd) ddd-dddd",CV:"+238 ddddddddd",KY:"+1 (ddd) ddd-dddd",CF:"+236 ddddddddd",TD:"+235 ddddddddd",CL:"+56 ddddddddd",CN:"+86 ddddddddd",CX:"+61 ddddddddd",CC:"+61 ddddddddd",CO:"+57 ddddddddd",KM:"+269 ddddddddd",CG:"+242 ddddddddd",CK:"+682 ddddddddd",CR:"+506 ddddddddd",HR:"+385 ddddddddd",CU:"+53 ddddddddd",CY:"+357 ddddddddd",CZ:"+420 ddddddddd",CD:"+243 ddddddddd",DK:"+45 ddddddddd",DJ:"+253 ddddddddd",DM:"+1 (ddd) ddd-dddd",DO:"+1 (ddd) ddd-dddd",TL:"+670 ddddddddd",EC:"+593 ddddddddd",EG:"+20 ddddddddd",SV:"+503 ddddddddd",GQ:"+240 ddddddddd",ER:"+291 ddddddddd",EE:"+372 ddddddddd",ET:"+251 ddddddddd",FO:"+298 ddddddddd",FK:"+500 ddddddddd",FJ:"+679 ddddddddd",FI:"+358 ddddddddd",MK:"+389 ddddddddd",FR:"+33 d dd dd dd dd",GF:"+594 ddddddddd",PF:"+689 ddddddddd",TF:"+262 ddddddddd",GA:"+241 ddddddddd",GE:"+995 ddddddddd",DE:"+49 ddddddddd",GH:"+233 ddddddddd",GI:"+350 ddddddddd",GR:"+30 ddddddddd",GL:"+299 ddddddddd",GD:"+1 (ddd) ddd-dddd",GP:"+590 ddddddddd",GU:"+1 (ddd) ddd-dddd",GT:"+502 ddddddddd",GN:"+224 ddddddddd",GW:"+245 ddddddddd",GY:"+592 ddddddddd",HT:"+509 ddddddddd",HM:"+0 ddddddddd",HN:"+504 ddddddddd",HK:"+852 ddddddddd",HU:"+36 ddddddddd",IS:"+354 ddddddddd",IN:"+91 ddddddddd",ID:"+62 ddddddddd",IR:"+98 ddddddddd",IQ:"+964 ddddddddd",IE:"+353 ddddddddd",IL:"+972 ddddddddd",IT:"+39 ddddddddd",JM:"+1 (ddd) ddd-dddd",JP:"+81 ddddddddd",JO:"+962 ddddddddd",KZ:"+7 ddddddddd",KE:"+254 ddddddddd",KI:"+686 ddddddddd",KW:"+965 ddddddddd",KG:"+996 ddddddddd",LA:"+856 ddddddddd",LV:"+371 ddddddddd",LB:"+961 ddddddddd",LS:"+266 ddddddddd",LR:"+231 ddddddddd",LY:"+218 ddddddddd",LI:"+423 ddddddddd",LT:"+370 ddddddddd",LU:"+352 ddddddddd",MO:"+853 ddddddddd",MG:"+261 ddddddddd",MW:"+265 ddddddddd",MY:"+60 ddddddddd",MV:"+960 ddddddddd",ML:"+223 ddddddddd",MT:"+356 ddddddddd",MH:"+692 ddddddddd",MQ:"+596 ddddddddd",MR:"+222 ddddddddd",MU:"+230 ddddddddd",YT:"+262 ddddddddd",MX:"+52 ddddddddd",FM:"+691 ddddddddd",MD:"+373 ddddddddd",MC:"+377 ddddddddd",MN:"+976 ddddddddd",MS:"+1 (ddd) ddd-dddd",MA:"+212 ddddddddd",MZ:"+258 ddddddddd",MM:"+95 ddddddddd",NA:"+264 ddddddddd",NR:"+674 ddddddddd",NP:"+977 ddddddddd",NL:"+31 ddddddddd",AN:"+599 ddddddddd",NC:"+687 ddddddddd",NZ:"+64 ddddddddd",NI:"+505 ddddddddd",NE:"+227 ddddddddd",NG:"+234 ddddddddd",NU:"+683 ddddddddd",NF:"+672 ddddddddd",KP:"+850 ddddddddd",MP:"+1 (ddd) ddd-dddd",NO:"+47 ddddddddd",OM:"+968 ddddddddd",PK:"+92 ddddddddd",PW:"+680 ddddddddd",PA:"+507 ddddddddd",PG:"+675 ddddddddd",PY:"+595 ddddddddd",PE:"+51 ddddddddd",PH:"+63 ddddddddd",PN:"+870 ddddddddd",PL:"+48 ddddddddd",PT:"+351 ddddddddd",PR:"+1 (ddd) ddd-dddd",QA:"+974 ddddddddd",RE:"+262 ddddddddd",RO:"+40 ddddddddd",RU:"+7 ddddddddd",RW:"+250 ddddddddd",ST:"+239 ddddddddd",SH:"+290 ddddddddd",KN:"+1 (ddd) ddd-dddd",LC:"+1 (ddd) ddd-dddd",PM:"+508 ddddddddd",VC:"+1 (ddd) ddd-dddd",WS:"+685 ddddddddd",SM:"+378 ddddddddd",SA:"+966 ddddddddd",SN:"+221 ddddddddd",SC:"+248 ddddddddd",SL:"+232 ddddddddd",SG:"+65 ddddddddd",SK:"+421 ddddddddd",SI:"+386 ddddddddd",SB:"+677 ddddddddd",SO:"+252 ddddddddd",ZA:"+27 ddddddddd",GS:"+0 ddddddddd",KR:"+82 ddddddddd",ES:"+34 ddddddddd",LK:"+94 ddddddddd",SD:"+249 ddddddddd",SR:"+597 ddddddddd",SJ:"+0 ddddddddd",SZ:"+268 ddddddddd",SE:"+46 ddddddddd",CH:"+41 ddddddddd",SY:"+963 ddddddddd",TW:"+886 ddddddddd",TJ:"+992 ddddddddd",TZ:"+255 ddddddddd",TH:"+66 ddddddddd",BS:"+1 (ddd) ddd-dddd",GM:"+220 ddddddddd",TG:"+228 ddddddddd",TK:"+690 ddddddddd",TO:"+676 ddddddddd",TT:"+1 (ddd) ddd-dddd",TN:"+216 ddddddddd",TR:"+90 ddddddddd",TM:"+993 ddddddddd",TC:"+1 (ddd) ddd-dddd",TV:"+688 ddddddddd",VI:"+1 (ddd) ddd-dddd",UG:"+256 ddddddddd",UA:"+380 ddddddddd",AE:"+971 ddddddddd",GB:"+44 (ddd) dddd dddd",US:"+1 (ddd) ddd-dddd",UM:"+0 ddddddddd",UY:"+598 ddddddddd",UZ:"+998 ddddddddd",VU:"+678 ddddddddd",VA:"+39 ddddddddd",VE:"+58 ddddddddd",VN:"+84 ddddddddd",WF:"+681 ddddddddd",EH:"+0 ddddddddd",YE:"+967 ddddddddd",YU:"+0 ddddddddd",ZM:"+260 ddddddddd",ZW:"+263 ddddddddd"},BFHStatesList={AF:{1:{code:"BAL",name:"Balkh"},2:{code:"BAM",name:"Bamian"},3:{code:"BDG",name:"Badghis"},4:{code:"BDS",name:"Badakhshan"},5:{code:"BGL",name:"Baghlan"},6:{code:"FRA",name:"Farah"},7:{code:"FYB",name:"Faryab"},8:{code:"GHA",name:"Ghazni"},9:{code:"GHO",name:"Ghowr"},10:{code:"HEL",name:"Helmand"},11:{code:"HER",name:"Herat"},12:{code:"JOW",name:"Jowzjan"},13:{code:"KAB",name:"Kabul"},14:{code:"KAN",name:"Kandahar"},15:{code:"KAP",name:"Kapisa"},16:{code:"KDZ",name:"Kondoz"},17:{code:"KHO",name:"Khost"},18:{code:"KNR",name:"Konar"},19:{code:"LAG",name:"Laghman"},20:{code:"LOW",name:"Lowgar"},21:{code:"NAN",name:"Nangrahar"},22:{code:"NIM",name:"Nimruz"},23:{code:"NUR",name:"Nurestan"},24:{code:"ORU",name:"Oruzgan"},25:{code:"PAR",name:"Parwan"},26:{code:"PIA",name:"Paktia"},27:{code:"PKA",name:"Paktika"},28:{code:"SAM",name:"Samangan"},29:{code:"SAR",name:"Sar-e Pol"},30:{code:"TAK",name:"Takhar"},31:{code:"WAR",name:"Wardak"},32:{code:"ZAB",name:"Zabol"}},AL:{1:{code:"BR",name:"Berat"},2:{code:"BU",name:"Bulqize"},3:{code:"DI",name:"Diber"},4:{code:"DL",name:"Delvine"},5:{code:"DR",name:"Durres"},6:{code:"DV",name:"Devoll"},7:{code:"EL",name:"Elbasan"},8:{code:"ER",name:"Kolonje"},9:{code:"FR",name:"Fier"},10:{code:"GJ",name:"Gjirokaster"},11:{code:"GR",name:"Gramsh"},12:{code:"HA",name:"Has"},13:{code:"KA",name:"Kavaje"},14:{code:"KB",name:"Kurbin"},15:{code:"KC",name:"Kucove"},16:{code:"KO",name:"Korce"},17:{code:"KR",name:"Kruje"},18:{code:"KU",name:"Kukes"},19:{code:"LB",name:"Librazhd"},20:{code:"LE",name:"Lezhe"},21:{code:"LU",name:"Lushnje"},22:{code:"MK",name:"Mallakaster"},23:{code:"MM",name:"Malesi e Madhe"},24:{code:"MR",name:"Mirdite"},25:{code:"MT",name:"Mat"},26:{code:"PG",name:"Pogradec"},27:{code:"PQ",name:"Peqin"},28:{code:"PR",name:"Permet"},29:{code:"PU",name:"Puke"},30:{code:"SH",name:"Shkoder"},31:{code:"SK",name:"Skrapar"},32:{code:"SR",name:"Sarande"},33:{code:"TE",name:"Tepelene"},34:{code:"TP",name:"Tropoje"},35:{code:"TR",name:"Tirane"},36:{code:"VL",name:"Vlore"}},DZ:{1:{code:"ADE",name:"Ain Defla"},2:{code:"ADR",name:"Adrar"},3:{code:"ALG",name:"Alger"},4:{code:"ANN",name:"Annaba"},5:{code:"ATE",name:"Ain Temouchent"},6:{code:"BAT",name:"Batna"},7:{code:"BBA",name:"Bordj Bou Arreridj"},8:{code:"BEC",name:"Bechar"},9:{code:"BEJ",name:"Bejaia"},10:{code:"BIS",name:"Biskra"},11:{code:"BLI",name:"Blida"},12:{code:"BMD",name:"Boumerdes"},13:{code:"BOA",name:"Bouira"},14:{code:"CHL",name:"Chlef"},15:{code:"CON",name:"Constantine"},16:{code:"DJE",name:"Djelfa"},17:{code:"EBA",name:"El Bayadh"},18:{code:"EOU",name:"El Oued"},19:{code:"ETA",name:"El Tarf"},20:{code:"GHA",name:"Ghardaia"},21:{code:"GUE",name:"Guelma"},22:{code:"ILL",name:"Illizi"},23:{code:"JIJ",name:"Jijel"},24:{code:"KHE",name:"Khenchela"},25:{code:"LAG",name:"Laghouat"},26:{code:"MED",name:"Medea"},27:{code:"MIL",name:"Mila"},28:{code:"MOS",name:"Mostaganem"},29:{code:"MSI",name:"M'Sila"},30:{code:"MUA",name:"Muaskar"},31:{code:"NAA",name:"Naama"},32:{code:"OEB",name:"Oum el-Bouaghi"},33:{code:"ORA",name:"Oran"},34:{code:"OUA",name:"Ouargla"},35:{code:"REL",name:"Relizane"},36:{code:"SAH",name:"Souk Ahras"},37:{code:"SAI",name:"Saida"},38:{code:"SBA",name:"Sidi Bel Abbes"},39:{code:"SET",name:"Setif"},40:{code:"SKI",name:"Skikda"},41:{code:"TAM",name:"Tamanghasset"},42:{code:"TEB",name:"Tebessa"},43:{code:"TIA",name:"Tiaret"},44:{code:"TIN",name:"Tindouf"},45:{code:"TIP",name:"Tipaza"},46:{code:"TIS",name:"Tissemsilt"},47:{code:"TLE",name:"Tlemcen"},48:{code:"TOU",name:"Tizi Ouzou"}},AS:{1:{code:"E",name:"Eastern"},2:{code:"M",name:"Manu'a"},3:{code:"R",name:"Rose Island"},4:{code:"S",name:"Swains Island"},5:{code:"W",name:"Western"}},AD:{1:{code:"ALV",name:"Andorra la Vella"},2:{code:"CAN",name:"Canillo"},3:{code:"ENC",name:"Encamp"},4:{code:"ESE",name:"Escaldes-Engordany"},5:{code:"LMA",name:"La Massana"},6:{code:"ORD",name:"Ordino"},7:{code:"SJL",name:"Sant Julià de Lòria"}},AO:{1:{code:"BGO",name:"Bengo"},2:{code:"BGU",name:"Benguela"},3:{code:"BIE",name:"Bie"},4:{code:"CAB",name:"Cabinda"},5:{code:"CCU",name:"Cuando-Cubango"},6:{code:"CNO",name:"Cuanza Norte"},7:{code:"CUS",name:"Cuanza Sul"},8:{code:"CNN",name:"Cunene"},9:{code:"HUA",name:"Huambo"},10:{code:"HUI",name:"Huila"},11:{code:"LUA",name:"Luanda"},12:{code:"LNO",name:"Lunda Norte"},13:{code:"LSU",name:"Lunda Sul"},14:{code:"MAL",name:"Malange"},15:{code:"MOX",name:"Moxico"},16:{code:"NAM",name:"Namibe"},17:{code:"UIG",name:"Uige"},18:{code:"ZAI",name:"Zaire"}},AI:{1:{code:"ANG",name:"Anguillita"},2:{code:"ANG",name:"Anguila"},3:{code:"DOG",name:"Dog"},4:{code:"LIT",name:"Little Scrub"},5:{code:"PRI",name:"Prickly Pear"},6:{code:"SAN",name:"Sandy"},7:{code:"SCR",name:"Scrub"},8:{code:"SEA",name:"Seal"},9:{code:"SOM",name:"Sombrero"}},AQ:{1:{code:"ASG",name:"Saint George"},2:{code:"ASH",name:"Saint Philip"},3:{code:"ASJ",name:"Saint John"},4:{code:"ASL",name:"Saint Paul"},5:{code:"ASM",name:"Saint Mary"},6:{code:"ASR",name:"Saint Peter"},7:{code:"BAR",name:"Barbuda"},8:{code:"RED",name:"Redonda"}},AR:{1:{code:"AN",name:"Antartida e Islas del Atlantico"},2:{code:"BA",name:"Buenos Aires"},3:{code:"CA",name:"Catamarca"},4:{code:"CH",name:"Chaco"},5:{code:"CU",name:"Chubut"},6:{code:"CO",name:"Cordoba"},7:{code:"CR",name:"Corrientes"},8:{code:"CF",name:"Capital Federal"},9:{code:"ER",name:"Entre Rios"},10:{code:"FO",name:"Formosa"},11:{code:"JU",name:"Jujuy"},12:{code:"LP",name:"La Pampa"},13:{code:"LR",name:"La Rioja"},14:{code:"ME",name:"Mendoza"},15:{code:"MI",name:"Misiones"},16:{code:"NE",name:"Neuquen"},17:{code:"RN",name:"Rio Negro"},18:{code:"SA",name:"Salta"},19:{code:"SJ",name:"San Juan"},20:{code:"SL",name:"San Luis"},21:{code:"SC",name:"Santa Cruz"},22:{code:"SF",name:"Santa Fe"},23:{code:"SD",name:"Santiago del Estero"},24:{code:"TF",name:"Tierra del Fuego"},25:{code:"TU",name:"Tucuman"}},AM:{1:{code:"AGT",name:"Aragatsotn"},2:{code:"ARR",name:"Ararat"},3:{code:"ARM",name:"Armavir"},4:{code:"GEG",name:"Geghark 'unik'"},5:{code:"KOT",name:"Kotayk'"},6:{code:"LOR",name:"Lorri"},7:{code:"SHI",name:"Shirak"},8:{code:"SYU",name:"Syunik'"},9:{code:"TAV",name:"Tavush"},10:{code:"VAY",name:"Vayots' Dzor"},11:{code:"YER",name:"Yerevan"}},AW:{1:{code:"ARU",name:"Aruba"},2:{code:"DRU",name:"Druif Beach"},3:{code:"MAN",name:"Manchebo Beach"},4:{code:"NOO",name:"Noord"},5:{code:"ORA",name:"Oranjestad"},6:{code:"PAL",name:"Palm Beach"},7:{code:"ROO",name:"Rooi Thomas"},8:{code:"SIN",name:"Sint Nicolaas"},9:{code:"SIN",name:"Sint Nicolas"},10:{code:"WAY",name:"Wayaca"}},AU:{1:{code:"ACT",name:"Australian Capital Territory"},2:{code:"NSW",name:"New South Wales"},3:{code:"NT",name:"Northern Territory"},4:{code:"QLD",name:"Queensland"},5:{code:"SA",name:"South Australia"},6:{code:"TAS",name:"Tasmania"},7:{code:"VIC",name:"Victoria"},8:{code:"WA",name:"Western Australia"}},AT:{1:{code:"BUR",name:"Burgenland"},2:{code:"KAR",name:"Krnten"},3:{code:"NOS",name:"Niederöesterreich"},4:{code:"OOS",name:"Oberöesterreich"},5:{code:"SAL",name:"Salzburg"},6:{code:"STE",name:"Steiermark"},7:{code:"TIR",name:"Tirol"},8:{code:"VOR",name:"Vorarlberg"},9:{code:"WIE",name:"Wien"}},AZ:{1:{code:"AB",name:"Ali Bayramli"},2:{code:"ABS",name:"Abseron"},3:{code:"AGC",name:"AgcabAdi"},4:{code:"AGM",name:"Agdam"},5:{code:"AGS",name:"Agdas"},6:{code:"AGA",name:"Agstafa"},7:{code:"AGU",name:"Agsu"},8:{code:"AST",name:"Astara"},9:{code:"BA",name:"Baki"},10:{code:"BAB",name:"BabAk"},11:{code:"BAL",name:"BalakAn"},12:{code:"BAR",name:"BArdA"},13:{code:"BEY",name:"Beylaqan"},14:{code:"BIL",name:"Bilasuvar"},15:{code:"CAB",name:"Cabrayil"},16:{code:"CAL",name:"Calilabab"},17:{code:"CUL",name:"Culfa"},18:{code:"DAS",name:"Daskasan"},19:{code:"DAV",name:"Davaci"},20:{code:"FUZ",name:"Fuzuli"},21:{code:"GA",name:"Ganca"},22:{code:"GAD",name:"Gadabay"},23:{code:"GOR",name:"Goranboy"},24:{code:"GOY",name:"Goycay"},25:{code:"HAC",name:"Haciqabul"},26:{code:"IMI",name:"Imisli"},27:{code:"ISM",name:"Ismayilli"},28:{code:"KAL",name:"Kalbacar"},29:{code:"KUR",name:"Kurdamir"},30:{code:"LA",name:"Lankaran"},31:{code:"LAC",name:"Lacin"},32:{code:"LAN",name:"Lankaran"},33:{code:"LER",name:"Lerik"},34:{code:"MAS",name:"Masalli"},35:{code:"MI",name:"Mingacevir"},36:{code:"NA",name:"Naftalan"},37:{code:"NX",name:"Naxcivan"},38:{code:"NEF",name:"Neftcala"},39:{code:"OGU",name:"Oguz"},40:{code:"ORD",name:"Ordubad"},41:{code:"QAB",name:"Qabala"},42:{code:"QAX",name:"Qax"},43:{code:"QAZ",name:"Qazax"},44:{code:"QOB",name:"Qobustan"},45:{code:"QBA",name:"Quba"},46:{code:"QBI",name:"Qubadli"},47:{code:"QUS",name:"Qusar"},48:{code:"SA",name:"Saki"},49:{code:"SAT",name:"Saatli"},50:{code:"SAB",name:"Sabirabad"},51:{code:"SAD",name:"Sadarak"},52:{code:"SAH",name:"Sahbuz"},53:{code:"SAK",name:"Saki"},54:{code:"SAL",name:"Salyan"},55:{code:"SM",name:"Sumqayit"},56:{code:"SMI",name:"Samaxi"},57:{code:"SKR",name:"Samkir"},58:{code:"SMX",name:"Samux"},59:{code:"SAR",name:"Sarur"},60:{code:"SIY",name:"Siyazan"},61:{code:"SS",name:"Susa"},62:{code:"SUS",name:"Susa"},63:{code:"TAR",name:"Tartar"},64:{code:"TOV",name:"Tovuz"},65:{code:"UCA",name:"Ucar"},66:{code:"XA",name:"Xankandi"},67:{code:"XAC",name:"Xacmaz"},68:{code:"XAN",name:"Xanlar"},69:{code:"XIZ",name:"Xizi"},70:{code:"XCI",name:"Xocali"},71:{code:"XVD",name:"Xocavand"},72:{code:"YAR",name:"Yardimli"},73:{code:"YEV",name:"Yevlax"},74:{code:"ZAN",name:"Zangilan"},75:{code:"ZAQ",name:"Zaqatala"},76:{code:"ZAR",name:"Zardab"}},BS:{1:{code:"ACK",name:"Acklins"},2:{code:"BER",name:"Berry Islands"},3:{code:"BIM",name:"Bimini"},4:{code:"BLK",name:"Black Point"},5:{code:"CAT",name:"Cat Island"},6:{code:"CAB",name:"Central Abaco"},7:{code:"CAN",name:"Central Andros"},8:{code:"CEL",name:"Central Eleuthera"},9:{code:"FRE",name:"City of Freeport"},10:{code:"CRO",name:"Crooked Island"},11:{code:"EGB",name:"East Grand Bahama"},12:{code:"EXU",name:"Exuma"},13:{code:"GRD",name:"Grand Cay"},14:{code:"HAR",name:"Harbour Island"},15:{code:"HOP",name:"Hope Town"},16:{code:"INA",name:"Inagua"},17:{code:"LNG",name:"Long Island"},18:{code:"MAN",name:"Mangrove Cay"},19:{code:"MAY",name:"Mayaguana"},20:{code:"MOO",name:"Moore's Island"},21:{code:"NAB",name:"North Abaco"},22:{code:"NAN",name:"North Andros"},23:{code:"NEL",name:"North Eleuthera"},24:{code:"RAG",name:"Ragged Island"},25:{code:"RUM",name:"Rum Cay"},26:{code:"SAL",name:"San Salvador"},27:{code:"SAB",name:"South Abaco"},28:{code:"SAN",name:"South Andros"},29:{code:"SEL",name:"South Eleuthera"},30:{code:"SWE",name:"Spanish Wells"},31:{code:"WGB",name:"West Grand Bahama"}},BH:{1:{code:"CAP",name:"Capital"},2:{code:"CEN",name:"Central"},3:{code:"MUH",name:"Muharraq"},4:{code:"NOR",name:"Northern"},5:{code:"SOU",name:"Southern"}},BD:{1:{code:"BAR",name:"Barisal"},2:{code:"CHI",name:"Chittagong"},3:{code:"DHA",name:"Dhaka"},4:{code:"KHU",name:"Khulna"},5:{code:"RAJ",name:"Rajshahi"},6:{code:"SYL",name:"Sylhet"}},BB:{1:{code:"CC",name:"Christ Church"},2:{code:"AND",name:"Saint Andrew"},3:{code:"GEO",name:"Saint George"},4:{code:"JAM",name:"Saint James"},5:{code:"JOH",name:"Saint John"},6:{code:"JOS",name:"Saint Joseph"},7:{code:"LUC",name:"Saint Lucy"},8:{code:"MIC",name:"Saint Michael"},9:{code:"PET",name:"Saint Peter"},10:{code:"PHI",name:"Saint Philip"},11:{code:"THO",name:"Saint Thomas"}},BY:{1:{code:"BR",name:"Brestskaya (Brest)"},2:{code:"HO",name:"Homyel'skaya (Homyel')"},3:{code:"HM",name:"Horad Minsk"},4:{code:"HR",name:"Hrodzyenskaya (Hrodna)"},5:{code:"MA",name:"Mahilyowskaya (Mahilyow)"},6:{code:"MI",name:"Minskaya"},7:{code:"VI",name:"Vitsyebskaya (Vitsyebsk)"}},BE:{1:{code:"VAN",name:"Antwerpen"},2:{code:"WBR",name:"Brabant Wallon"},3:{code:"WHT",name:"Hainaut"},4:{code:"WLG",name:"Liege"},5:{code:"VLI",name:"Limburg"},6:{code:"WLX",name:"Luxembourg"},7:{code:"WNA",name:"Namur"},8:{code:"VOV",name:"Oost-Vlaanderen"},9:{code:"VBR",name:"Vlaams Brabant"},10:{code:"VWV",name:"West-Vlaanderen"}},BZ:{1:{code:"BZ",name:"Belize"},2:{code:"CY",name:"Cayo"},3:{code:"CR",name:"Corozal"},4:{code:"OW",name:"Orange Walk"},5:{code:"SC",name:"Stann Creek"},6:{code:"TO",name:"Toledo"}},BJ:{1:{code:"AL",name:"Alibori"},2:{code:"AK",name:"Atakora"},3:{code:"AQ",name:"Atlantique"},4:{code:"BO",name:"Borgou"},5:{code:"CO",name:"Collines"},6:{code:"DO",name:"Donga"},7:{code:"KO",name:"Kouffo"},8:{code:"LI",name:"Littoral"},9:{code:"MO",name:"Mono"},10:{code:"OU",name:"Oueme"},11:{code:"PL",name:"Plateau"},12:{code:"ZO",name:"Zou"}},BM:{1:{code:"DS",name:"Devonshire"},2:{code:"HC",name:"Hamilton City"},3:{code:"HA",name:"Hamilton"},4:{code:"PG",name:"Paget"},5:{code:"PB",name:"Pembroke"},6:{code:"GC",name:"Saint George City"},7:{code:"SG",name:"Saint George's"},8:{code:"SA",name:"Sandys"},9:{code:"SM",name:"Smith's"},10:{code:"SH",name:"Southampton"},11:{code:"WA",name:"Warwick"}},BT:{1:{code:"BUM",name:"Bumthang"},2:{code:"CHU",name:"Chukha"},3:{code:"DAG",name:"Dagana"},4:{code:"GAS",name:"Gasa"},5:{code:"HAA",name:"Haa"},6:{code:"LHU",name:"Lhuntse"},7:{code:"MON",name:"Mongar"},8:{code:"PAR",name:"Paro"},9:{code:"PEM",name:"Pemagatshel"},10:{code:"PUN",name:"Punakha"},11:{code:"SJO",name:"Samdrup Jongkhar"},12:{code:"SAT",name:"Samtse"},13:{code:"SAR",name:"Sarpang"},14:{code:"THI",name:"Thimphu"},15:{code:"TRG",name:"Trashigang"},16:{code:"TRY",name:"Trashiyangste"},17:{code:"TRO",name:"Trongsa"},18:{code:"TSI",name:"Tsirang"},19:{code:"WPH",name:"Wangdue Phodrang"},20:{code:"ZHE",name:"Zhemgang"}},BO:{1:{code:"BEN",name:"Beni"},2:{code:"CHU",name:"Chuquisaca"},3:{code:"COC",name:"Cochabamba"},4:{code:"LPZ",name:"La Paz"},5:{code:"ORU",name:"Oruro"},6:{code:"PAN",name:"Pando"},7:{code:"POT",name:"Potosi"},8:{code:"SCZ",name:"Santa Cruz"},9:{code:"TAR",name:"Tarija"}},BA:{1:{code:"BRO",name:"Brcko district"},2:{code:"FBP",name:"Bosanskopodrinjski Kanton"},3:{code:"FHN",name:"Hercegovacko-neretvanski Kanton"},4:{code:"FPO",name:"Posavski Kanton"},5:{code:"FSA",name:"Kanton Sarajevo"},6:{code:"FSB",name:"Srednjebosanski Kanton"},7:{code:"FTU",name:"Tuzlanski Kanton"},8:{code:"FUS",name:"Unsko-Sanski Kanton"},9:{code:"FZA",name:"Zapadnobosanska"},10:{code:"FZE",name:"Zenicko-Dobojski Kanton"},11:{code:"FZH",name:"Zapadnohercegovacka Zupanija"},12:{code:"SBI",name:"Bijeljina"},13:{code:"SBL",name:"Banja Luka"},14:{code:"SDO",name:"Doboj"},15:{code:"SFO",name:"Foca"},16:{code:"SSR",name:"Sarajevo-Romanija or Sokolac"},17:{code:"STR",name:"Trebinje"},18:{code:"SVL",name:"Vlasenica"}},BW:{1:{code:"CE",name:"Central"},2:{code:"GH",name:"Ghanzi"},3:{code:"KD",name:"Kgalagadi"},4:{code:"KT",name:"Kgatleng"},5:{code:"KW",name:"Kweneng"},6:{code:"NG",name:"Ngamiland"},7:{code:"NE",name:"North East"},8:{code:"NW",name:"North West"},9:{code:"SE",name:"South East"},10:{code:"SO",name:"Southern"}},BR:{1:{code:"AC",name:"Acre"},2:{code:"AL",name:"Alagoas"},3:{code:"AP",name:"Amapa"},4:{code:"AM",name:"Amazonas"},5:{code:"BA",name:"Bahia"},6:{code:"CE",name:"Ceara"},7:{code:"DF",name:"Distrito Federal"},8:{code:"ES",name:"Espirito Santo"},9:{code:"GO",name:"Goias"},10:{code:"MA",name:"Maranhao"},11:{code:"MT",name:"Mato Grosso"},12:{code:"MS",name:"Mato Grosso do Sul"},13:{code:"MG",name:"Minas Gerais"},14:{code:"PA",name:"Para"},15:{code:"PB",name:"Paraiba"},16:{code:"PR",name:"Parana"},17:{code:"PE",name:"Pernambuco"},18:{code:"PI",name:"Piaui"},19:{code:"RJ",name:"Rio de Janeiro"},20:{code:"RN",name:"Rio Grande do Norte"},21:{code:"RS",name:"Rio Grande do Sul"},22:{code:"RO",name:"Rondonia"},23:{code:"RR",name:"Roraima"},24:{code:"SC",name:"Santa Catarina"},25:{code:"SP",name:"Sao Paulo"},26:{code:"SE",name:"Sergipe"},27:{code:"TO",name:"Tocantins"}},IO:{1:{code:"DG",name:"Diego Garcia"},2:{code:"DI",name:"Danger Island"},3:{code:"EA",name:"Eagle Islands"},4:{code:"EG",name:"Egmont Islands"},5:{code:"NI",name:"Nelsons Island"},6:{code:"PB",name:"Peros Banhos"},7:{code:"SI",name:"Salomon Islands"},8:{code:"TB",name:"Three Brothers"}},BN:{1:{code:"BEL",name:"Belait"},2:{code:"BRM",name:"Brunei and Muara"},3:{code:"TEM",name:"Temburong"},4:{code:"TUT",name:"Tutong"}},BG:{1:{code:"BG-01",name:"Blagoevgrad"},2:{code:"BG-02",name:"Burgas"},3:{code:"BG-03",name:"Dobrich"},4:{code:"BG-04",name:"Gabrovo"},5:{code:"BG-05",name:"Haskovo"},6:{code:"BG-06",name:"Kardjali"},7:{code:"BG-07",name:"Kyustendil"},8:{code:"BG-08",name:"Lovech"},9:{code:"BG-09",name:"Montana"},10:{code:"BG-10",name:"Pazardjik"},11:{code:"BG-11",name:"Pernik"},12:{code:"BG-12",name:"Pleven"},13:{code:"BG-13",name:"Plovdiv"},14:{code:"BG-14",name:"Razgrad"},15:{code:"BG-15",name:"Shumen"},16:{code:"BG-16",name:"Silistra"},17:{code:"BG-17",name:"Sliven"},18:{code:"BG-18",name:"Smolyan"},19:{code:"BG-19",name:"Sofia"},20:{code:"BG-20",name:"Sofia - town"},21:{code:"BG-21",name:"Stara Zagora"},22:{code:"BG-22",name:"Targovishte"},23:{code:"BG-23",name:"Varna"},24:{code:"BG-24",name:"Veliko Tarnovo"},25:{code:"BG-25",name:"Vidin"},26:{code:"BG-26",name:"Vratza"},27:{code:"BG-27",name:"Yambol"}},BF:{1:{code:"BAL",name:"Bale"},2:{code:"BAM",name:"Bam"},3:{code:"BAN",name:"Banwa"},4:{code:"BAZ",name:"Bazega"},5:{code:"BOR",name:"Bougouriba"},6:{code:"BLG",name:"Boulgou"},7:{code:"BOK",name:"Boulkiemde"},8:{code:"COM",name:"Comoe"},9:{code:"GAN",name:"Ganzourgou"},10:{code:"GNA",name:"Gnagna"},11:{code:"GOU",name:"Gourma"},12:{code:"HOU",name:"Houet"},13:{code:"IOA",name:"Ioba"},14:{code:"KAD",name:"Kadiogo"},15:{code:"KEN",name:"Kenedougou"},16:{code:"KOD",name:"Komondjari"},17:{code:"KOP",name:"Kompienga"},18:{code:"KOS",name:"Kossi"},19:{code:"KOL",name:"Koulpelogo"},20:{code:"KOT",name:"Kouritenga"},21:{code:"KOW",name:"Kourweogo"},22:{code:"LER",name:"Leraba"},23:{code:"LOR",name:"Loroum"},24:{code:"MOU",name:"Mouhoun"},25:{code:"NAH",name:"Nahouri"},26:{code:"NAM",name:"Namentenga"},27:{code:"NAY",name:"Nayala"},28:{code:"NOU",name:"Noumbiel"},29:{code:"OUB",name:"Oubritenga"},30:{code:"OUD",name:"Oudalan"},31:{code:"PAS",name:"Passore"},32:{code:"PON",name:"Poni"},33:{code:"SAG",name:"Sanguie"},34:{code:"SAM",name:"Sanmatenga"},35:{code:"SEN",name:"Seno"},36:{code:"SIS",name:"Sissili"},37:{code:"SOM",name:"Soum"},38:{code:"SOR",name:"Sourou"},39:{code:"TAP",name:"Tapoa"},40:{code:"TUY",name:"Tuy"},41:{code:"YAG",name:"Yagha"},42:{code:"YAT",name:"Yatenga"},43:{code:"ZIR",name:"Ziro"},44:{code:"ZOD",name:"Zondoma"},45:{code:"ZOW",name:"Zoundweogo"}},BI:{1:{code:"BB",name:"Bubanza"},2:{code:"BJ",name:"Bujumbura"},3:{code:"BR",name:"Bururi"},4:{code:"CA",name:"Cankuzo"},5:{code:"CI",name:"Cibitoke"},6:{code:"GI",name:"Gitega"},7:{code:"KR",name:"Karuzi"},8:{code:"KY",name:"Kayanza"},9:{code:"KI",name:"Kirundo"},10:{code:"MA",name:"Makamba"},11:{code:"MU",name:"Muramvya"},12:{code:"MY",name:"Muyinga"},13:{code:"MW",name:"Mwaro"},14:{code:"NG",name:"Ngozi"},15:{code:"RT",name:"Rutana"},16:{code:"RY",name:"Ruyigi"}},KH:{1:{code:"BA",name:"Battambang"},2:{code:"BM",name:"Banteay Meanchey"},3:{code:"KB",name:"Keb"},4:{code:"KK",name:"Kaoh Kong"},5:{code:"KL",name:"Kandal"},6:{code:"KM",name:"Kampong Cham"},7:{code:"KN",name:"Kampong Chhnang"},8:{code:"KO",name:"Kampong Som"},9:{code:"KP",name:"Kampot"},10:{code:"KR",name:"Kratie"},11:{code:"KT",name:"Kampong Thom"},12:{code:"KU",name:"Kampong Speu"},13:{code:"MK",name:"Mondul Kiri"},14:{code:"OM",name:"Oddar Meancheay"},15:{code:"PA",name:"Pailin"},16:{code:"PG",name:"Prey Veng"},17:{code:"PP",name:"Phnom Penh"},18:{code:"PR",name:"Preah Vihear"},19:{code:"PS",name:"Preah Seihanu (Kompong Som or Si)"},20:{code:"PU",name:"Pursat"},21:{code:"RK",name:"Ratanak Kiri"},22:{code:"SI",name:"Siemreap"},23:{code:"SR",name:"Svay Rieng"},24:{code:"ST",name:"Stung Treng"},25:{code:"TK",name:"Takeo"}},CM:{1:{code:"ADA",name:"Adamawa (Adamaoua)"},2:{code:"CEN",name:"Centre"},3:{code:"EST",name:"East (Est)"},4:{code:"EXN",name:"Extrême-Nord"},5:{code:"LIT",name:"Littoral"},6:{code:"NOR",name:"North (Nord)"},7:{code:"NOT",name:"Northwest (Nord-Ouest)"},8:{code:"OUE",name:"West (Ouest)"},9:{code:"SUD",name:"South (Sud)"},10:{code:"SOU",name:"Southwest (Sud-Ouest)"}},CA:{1:{code:"AB",name:"Alberta"},2:{code:"BC",name:"British Columbia"},3:{code:"MB",name:"Manitoba"},4:{code:"NB",name:"New Brunswick"},5:{code:"NL",name:"Newfoundland and Labrador"},6:{code:"NT",name:"Northwest Territories"},7:{code:"NS",name:"Nova Scotia"},8:{code:"NU",name:"Nunavut"},9:{code:"ON",name:"Ontario"},10:{code:"PE",name:"Prince Edward Island"},11:{code:"QC",name:"Québec"},12:{code:"SK",name:"Saskatchewan"},13:{code:"YT",name:"Yukon Territory"}},CV:{1:{code:"BV",name:"Boa Vista"},2:{code:"BR",name:"Brava"},3:{code:"CS",name:"Calheta de Sao Miguel"},4:{code:"MA",name:"Maio"},5:{code:"MO",name:"Mosteiros"},6:{code:"PA",name:"Paul"},7:{code:"PN",name:"Porto Novo"},8:{code:"PR",name:"Praia"},9:{code:"RG",name:"Ribeira Grande"},10:{code:"SL",name:"Sal"},11:{code:"CA",name:"Santa Catarina"},12:{code:"CR",name:"Santa Cruz"},13:{code:"SD",name:"Sao Domingos"},14:{code:"SF",name:"Sao Filipe"},15:{code:"SN",name:"Sao Nicolau"},16:{code:"SV",name:"Sao Vicente"},17:{code:"TA",name:"Tarrafal"}},KY:{1:{code:"CR",name:"Creek"},2:{code:"EA",name:"Eastern"},3:{code:"ML",name:"Midland"},4:{code:"ST",name:"South Town"},5:{code:"SP",name:"Spot Bay"},6:{code:"SK",name:"Stake Bay"},7:{code:"WD",name:"West End"},8:{code:"WN",name:"Western"}},CF:{1:{code:"BAN",name:"Bangui"},2:{code:"BBA",name:"Bamingui-Bangoran"},3:{code:"BKO",name:"Basse-Kotto"},4:{code:"HKO",name:"Haute-Kotto"},5:{code:"HMB",name:"Haut-Mbomou"},6:{code:"KEM",name:"Kemo"},7:{code:"LOB",name:"Lobaye"},8:{code:"MBO",name:"Mbomou"},9:{code:"MKD",name:"Mambéré-Kadéï"},10:{code:"NGR",name:"Nana-Grebizi"},11:{code:"NMM",name:"Nana-Mambere"},12:{code:"OMP",name:"Ombella-M'Poko"},13:{code:"OPE",name:"Ouham-Pende"},14:{code:"OUH",name:"Ouham"},15:{code:"OUK",name:"Ouaka"},16:{code:"SMB",name:"Sangha-Mbaere"},17:{code:"VAK",name:"Vakaga"}},TD:{1:{code:"BA",name:"Batha"},2:{code:"BI",name:"Biltine"},3:{code:"BE",name:"Borkou-Ennedi-Tibesti"},4:{code:"CB",name:"Chari-Baguirmi"},5:{code:"GU",name:"Guera"},6:{code:"KA",name:"Kanem"},7:{code:"LA",name:"Lac"},8:{code:"LC",name:"Logone Occidental"},9:{code:"LR",name:"Logone Oriental"},10:{code:"MK",name:"Mayo-Kebbi"},11:{code:"MC",name:"Moyen-Chari"},12:{code:"OU",name:"Ouaddai"},13:{code:"SA",name:"Salamat"},14:{code:"TA",name:"Tandjile"}},CL:{1:{code:"AI",name:"Aisen del General Carlos Ibanez"},2:{code:"AN",name:"Antofagasta"},3:{code:"AR",name:"Araucania"},4:{code:"AT",name:"Atacama"},5:{code:"BI",name:"Bio-Bio"},6:{code:"CO",name:"Coquimbo"},7:{code:"LI",name:"Libertador General Bernardo O'Hi"},8:{code:"LL",name:"Los Lagos"},9:{code:"MA",name:"Magallanes y de la Antartica Chi"},10:{code:"ML",name:"Maule"},11:{code:"RM",name:"Region Metropolitana"},12:{code:"TA",name:"Tarapaca"},13:{code:"VS",name:"Valparaiso"}},CN:{1:{code:"AN",name:"Anhui"},2:{code:"BE",name:"Beijing"},3:{code:"CH",name:"Chongqing"},4:{code:"FU",name:"Fujian"},5:{code:"GA",name:"Gansu"},6:{code:"GU",name:"Guangdong"},7:{code:"GX",name:"Guangxi"},8:{code:"GZ",name:"Guizhou"},9:{code:"HA",name:"Hainan"},10:{code:"HB",name:"Hebei"},11:{code:"HL",name:"Heilongjiang"},12:{code:"HE",name:"Henan"},13:{code:"HK",name:"Hong Kong"},14:{code:"HU",name:"Hubei"},15:{code:"HN",name:"Hunan"},16:{code:"IM",name:"Inner Mongolia"},17:{code:"JI",name:"Jiangsu"},18:{code:"JX",name:"Jiangxi"},19:{code:"JL",name:"Jilin"},20:{code:"LI",name:"Liaoning"},21:{code:"MA",name:"Macau"},22:{code:"NI",name:"Ningxia"},23:{code:"SH",name:"Shaanxi"},24:{code:"SA",name:"Shandong"},25:{code:"SG",name:"Shanghai"},26:{code:"SX",name:"Shanxi"},27:{code:"SI",name:"Sichuan"},28:{code:"TI",name:"Tianjin"},29:{code:"XI",name:"Xinjiang"},30:{code:"YU",name:"Yunnan"},31:{code:"ZH",name:"Zhejiang"}},CC:{1:{code:"D",name:"Direction Island"},2:{code:"H",name:"Home Island"},3:{code:"O",name:"Horsburgh Island"},4:{code:"S",name:"South Island"},5:{code:"W",name:"West Island"}},CO:{1:{code:"AMZ",name:"Amazonas"},2:{code:"ANT",name:"Antioquia"},3:{code:"ARA",name:"Arauca"},4:{code:"ATL",name:"Atlantico"},5:{code:"BDC",name:"Bogota D.C."},6:{code:"BOL",name:"Bolivar"},7:{code:"BOY",name:"Boyaca"},8:{code:"CAL",name:"Caldas"},9:{code:"CAQ",name:"Caqueta"},10:{code:"CAS",name:"Casanare"},11:{code:"CAU",name:"Cauca"},12:{code:"CES",name:"Cesar"},13:{code:"CHO",name:"Choco"},14:{code:"COR",name:"Cordoba"},15:{code:"CAM",name:"Cundinamarca"},16:{code:"GNA",name:"Guainia"},17:{code:"GJR",name:"Guajira"},18:{code:"GVR",name:"Guaviare"},19:{code:"HUI",name:"Huila"},20:{code:"MAG",name:"Magdalena"},21:{code:"MET",name:"Meta"},22:{code:"NAR",name:"Narino"},23:{code:"NDS",name:"Norte de Santander"},24:{code:"PUT",name:"Putumayo"},25:{code:"QUI",name:"Quindio"},26:{code:"RIS",name:"Risaralda"},27:{code:"SAP",name:"San Andres y Providencia"},28:{code:"SAN",name:"Santander"},29:{code:"SUC",name:"Sucre"},30:{code:"TOL",name:"Tolima"},31:{code:"VDC",name:"Valle del Cauca"},32:{code:"VAU",name:"Vaupes"},33:{code:"VIC",name:"Vichada"}},KM:{1:{code:"G",name:"Grande Comore"},2:{code:"A",name:"Anjouan"},3:{code:"M",name:"Moheli"}},CG:{1:{code:"BO",name:"Bouenza"},2:{code:"BR",name:"Brazzaville"},3:{code:"CU",name:"Cuvette"},4:{code:"CO",name:"Cuvette-Ouest"},5:{code:"KO",name:"Kouilou"},6:{code:"LE",name:"Lekoumou"},7:{code:"LI",name:"Likouala"},8:{code:"NI",name:"Niari"},9:{code:"PL",name:"Plateaux"},10:{code:"PO",name:"Pool"},11:{code:"SA",name:"Sangha"}},CK:{1:{code:"AI",name:"Aitutaki"},2:{code:"AT",name:"Atiu"},3:{code:"MA",name:"Manuae"},4:{code:"MG",name:"Mangaia"},5:{code:"MK",name:"Manihiki"},6:{code:"MT",name:"Mitiaro"},7:{code:"MU",name:"Mauke"},8:{code:"NI",name:"Nassau Island"},9:{code:"PA",name:"Palmerston"},10:{code:"PE",name:"Penrhyn"},11:{code:"PU",name:"Pukapuka"},12:{code:"RK",name:"Rakahanga"},13:{code:"RR",name:"Rarotonga"},14:{code:"SU",name:"Surwarrow"},15:{code:"TA",name:"Takutea"}},CR:{1:{code:"AL",name:"Alajuela"},2:{code:"CA",name:"Cartago"},3:{code:"GU",name:"Guanacaste"},4:{code:"HE",name:"Heredia"},5:{code:"LI",name:"Limon"},6:{code:"PU",name:"Puntarenas"},7:{code:"SJ",name:"San Jose"}},CI:{1:{code:"ABE",name:"Abengourou"},2:{code:"ABI",name:"Abidjan"},3:{code:"ABO",name:"Aboisso"},4:{code:"ADI",name:"Adiake"},5:{code:"ADZ",name:"Adzope"},6:{code:"AGB",name:"Agboville"},7:{code:"AGN",name:"Agnibilekrou"},8:{code:"ALE",name:"Alepe"},9:{code:"BOC",name:"Bocanda"},10:{code:"BAN",name:"Bangolo"},11:{code:"BEO",name:"Beoumi"},12:{code:"BIA",name:"Biankouma"},13:{code:"BDK",name:"Bondoukou"},14:{code:"BGN",name:"Bongouanou"},15:{code:"BFL",name:"Bouafle"},16:{code:"BKE",name:"Bouake"},17:{code:"BNA",name:"Bouna"},18:{code:"BDL",name:"Boundiali"},19:{code:"DKL",name:"Dabakala"},20:{code:"DBU",name:"Dabou"},21:{code:"DAL",name:"Daloa"},22:{code:"DAN",name:"Danane"},23:{code:"DAO",name:"Daoukro"},24:{code:"DIM",name:"Dimbokro"},25:{code:"DIV",name:"Divo"},26:{code:"DUE",name:"Duekoue"},27:{code:"FER",name:"Ferkessedougou"},28:{code:"GAG",name:"Gagnoa"},29:{code:"GBA",name:"Grand-Bassam"},30:{code:"GLA",name:"Grand-Lahou"},31:{code:"GUI",name:"Guiglo"},32:{code:"ISS",name:"Issia"},33:{code:"JAC",name:"Jacqueville"},34:{code:"KAT",name:"Katiola"},35:{code:"KOR",name:"Korhogo"},36:{code:"LAK",name:"Lakota"},37:{code:"MAN",name:"Man"},38:{code:"MKN",name:"Mankono"},39:{code:"MBA",name:"Mbahiakro"},40:{code:"ODI",name:"Odienne"},41:{code:"OUM",name:"Oume"},42:{code:"SAK",name:"Sakassou"},43:{code:"SPE",name:"San-Pedro"},44:{code:"SAS",name:"Sassandra"},45:{code:"SEG",name:"Seguela"},46:{code:"SIN",name:"Sinfra"},47:{code:"SOU",name:"Soubre"},48:{code:"TAB",name:"Tabou"},49:{code:"TAN",name:"Tanda"},50:{code:"TIE",name:"Tiebissou"},51:{code:"TIN",name:"Tingrela"},52:{code:"TIA",name:"Tiassale"},53:{code:"TBA",name:"Touba"},54:{code:"TLP",name:"Toulepleu"},55:{code:"TMD",name:"Toumodi"},56:{code:"VAV",name:"Vavoua"},57:{code:"YAM",name:"Yamoussoukro"},58:{code:"ZUE",name:"Zuenoula"}},HR:{1:{code:"BB",name:"Bjelovar-Bilogora"},2:{code:"CZ",name:"City of Zagreb"},3:{code:"DN",name:"Dubrovnik-Neretva"},4:{code:"IS",name:"Istra"},5:{code:"KA",name:"Karlovac"},6:{code:"KK",name:"Koprivnica-Krizevci"},7:{code:"KZ",name:"Krapina-Zagorje"},8:{code:"LS",name:"Lika-Senj"},9:{code:"ME",name:"Medimurje"},10:{code:"OB",name:"Osijek-Baranja"},11:{code:"PS",name:"Pozega-Slavonia"},12:{code:"PG",name:"Primorje-Gorski Kotar"},13:{code:"SI",name:"Sibenik"},14:{code:"SM",name:"Sisak-Moslavina"},15:{code:"SB",name:"Slavonski Brod-Posavina"},16:{code:"SD",name:"Split-Dalmatia"},17:{code:"VA",name:"Varazdin"},18:{code:"VP",name:"Virovitica-Podravina"},19:{code:"VS",name:"Vukovar-Srijem"},20:{code:"ZK",name:"Zadar-Knin"},21:{code:"ZA",name:"Zagreb"}},CU:{1:{code:"CA",name:"Camaguey"},2:{code:"CD",name:"Ciego de Avila"},3:{code:"CI",name:"Cienfuegos"},4:{code:"CH",name:"Ciudad de La Habana"},5:{code:"GR",name:"Granma"},6:{code:"GU",name:"Guantanamo"},7:{code:"HO",name:"Holguin"},8:{code:"IJ",name:"Isla de la Juventud"},9:{code:"LH",name:"La Habana"},10:{code:"LT",name:"Las Tunas"},11:{code:"MA",name:"Matanzas"},12:{code:"PR",name:"Pinar del Rio"},13:{code:"SS",name:"Sancti Spiritus"},14:{code:"SC",name:"Santiago de Cuba"},15:{code:"VC",name:"Villa Clara"}},CY:{1:{code:"F",name:"Famagusta"},2:{code:"K",name:"Kyrenia"},3:{code:"A",name:"Larnaca"},4:{code:"I",name:"Limassol"},5:{code:"N",name:"Nicosia"},6:{code:"P",name:"Paphos"}},CZ:{1:{code:"A",name:"Hlavní město Praha"},2:{code:"B",name:"Jihomoravský"},3:{code:"C",name:"Jihočeský"},4:{code:"E",name:"Pardubický"},5:{code:"H",name:"Královéhradecký"},6:{code:"J",name:"Vysočina"},7:{code:"K",name:"Karlovarský"},8:{code:"L",name:"Liberecký"},9:{code:"M",name:"Olomoucký"},10:{code:"P",name:"Plzeňský"},11:{code:"S",name:"Středočeský"},12:{code:"T",name:"Moravskoslezský"},13:{code:"U",name:"Ústecký"},14:{code:"Z",name:"Zlínský"}},DK:{1:{code:"AR",name:"Arhus"},2:{code:"BH",name:"Bornholm"},3:{code:"CO",name:"Copenhagen"},4:{code:"FO",name:"Faroe Islands"},5:{code:"FR",name:"Frederiksborg"},6:{code:"FY",name:"Fyn"},7:{code:"KO",name:"Kobenhavn"},8:{code:"NO",name:"Nordjylland"},9:{code:"RI",name:"Ribe"},10:{code:"RK",name:"Ringkobing"},11:{code:"RO",name:"Roskilde"},12:{code:"SO",name:"Sonderjylland"},13:{code:"ST",name:"Storstrom"},14:{code:"VK",name:"Vejle"},15:{code:"VJ",name:"Vestjælland"},16:{code:"VB",name:"Viborg"}},DJ:{1:{code:"S",name:"'Ali Sabih"},2:{code:"K",name:"Dikhil"},3:{code:"J",name:"Djibouti"},4:{code:"O",name:"Obock"},5:{code:"T",name:"Tadjoura"}},DM:{1:{code:"AND",name:"Saint Andrew Parish"},2:{code:"DAV",name:"Saint David Parish"},3:{code:"GEO",name:"Saint George Parish"},4:{code:"JOH",name:"Saint John Parish"},5:{code:"JOS",name:"Saint Joseph Parish"},6:{code:"LUK",name:"Saint Luke Parish"},7:{code:"MAR",name:"Saint Mark Parish"},8:{code:"PAT",name:"Saint Patrick Parish"},9:{code:"PAU",name:"Saint Paul Parish"},10:{code:"PET",name:"Saint Peter Parish"}},DO:{1:{code:"DN",name:"Distrito Nacional"},2:{code:"AZ",name:"Azua"},3:{code:"BC",name:"Baoruco"},4:{code:"BH",name:"Barahona"},5:{code:"DJ",name:"Dajabon"},6:{code:"DU",name:"Duarte"},7:{code:"EL",name:"Elias Pina"},8:{code:"SY",name:"El Seybo"},9:{code:"ET",name:"Espaillat"},10:{code:"HM",name:"Hato Mayor"},11:{code:"IN",name:"Independencia"},12:{code:"AL",name:"La Altagracia"},13:{code:"RO",name:"La Romana"},14:{code:"VE",name:"La Vega"},15:{code:"MT",name:"Maria Trinidad Sanchez"},16:{code:"MN",name:"Monsenor Nouel"},17:{code:"MC",name:"Monte Cristi"},18:{code:"MP",name:"Monte Plata"},19:{code:"PD",name:"Pedernales"},20:{code:"PR",name:"Peravia (Bani)"},21:{code:"PP",name:"Puerto Plata"},22:{code:"SL",name:"Salcedo"},23:{code:"SM",name:"Samana"},24:{code:"SH",name:"Sanchez Ramirez"},25:{code:"SC",name:"San Cristobal"},26:{code:"JO",name:"San Jose de Ocoa"},27:{code:"SJ",name:"San Juan"},28:{code:"PM",name:"San Pedro de Macoris"},29:{code:"SA",name:"Santiago"},30:{code:"ST",name:"Santiago Rodriguez"},31:{code:"SD",name:"Santo Domingo"},32:{code:"VA",name:"Valverde"}},TP:{1:{code:"AL",name:"Aileu"},2:{code:"AN",name:"Ainaro"},3:{code:"BA",name:"Baucau"},4:{code:"BO",name:"Bobonaro"},5:{code:"CO",name:"Cova Lima"},6:{code:"DI",name:"Dili"},7:{code:"ER",name:"Ermera"},8:{code:"LA",name:"Lautem"},9:{code:"LI",name:"Liquica"},10:{code:"MT",name:"Manatuto"},11:{code:"MF",name:"Manufahi"},12:{code:"OE",name:"Oecussi"},13:{code:"VI",name:"Viqueque"}},EC:{1:{code:"AZU",name:"Azuay"},2:{code:"BOL",name:"Bolivar"},3:{code:"CAN",name:"Cañar"},4:{code:"CAR",name:"Carchi"},5:{code:"CHI",name:"Chimborazo"},6:{code:"COT",name:"Cotopaxi"},7:{code:"EOR",name:"El Oro"},8:{code:"ESM",name:"Esmeraldas"},9:{code:"GPS",name:"Galápagos"},10:{code:"GUA",name:"Guayas"},11:{code:"IMB",name:"Imbabura"},12:{code:"LOJ",name:"Loja"},13:{code:"LRO",name:"Los Ríos"},14:{code:"MAN",name:"Manabí"},15:{code:"MSA",name:"Morona Santiago"},16:{code:"NAP",name:"Napo"},17:{code:"ORE",name:"Orellana"},18:{code:"PAS",name:"Pastaza"},19:{code:"PIC",name:"Pichincha"},20:{code:"SUC",name:"Sucumbíos"},21:{code:"TUN",name:"Tungurahua"},22:{code:"ZCH",name:"Zamora Chinchipe"}},EG:{1:{code:"DHY",name:"Ad Daqahliyah"},2:{code:"BAM",name:"Al Bahr al Ahmar"},3:{code:"BHY",name:"Al Buhayrah"},4:{code:"FYM",name:"Al Fayyum"},5:{code:"GBY",name:"Al Gharbiyah"},6:{code:"IDR",name:"Al Iskandariyah"},7:{code:"IML",name:"Al Isma 'iliyah"},8:{code:"JZH",name:"Al Jizah"},9:{code:"MFY",name:"Al Minufiyah"},10:{code:"MNY",name:"Al Minya"},11:{code:"QHR",name:"Al Qahirah"},12:{code:"QLY",name:"Al Qalyubiyah"},13:{code:"WJD",name:"Al Wadi al Jadid"},14:{code:"SHQ",name:"Ash Sharqiyah"},15:{code:"SWY",name:"As Suways"},16:{code:"ASW",name:"Aswan"},17:{code:"ASY",name:"Asyut"},18:{code:"BSW",name:"Bani Suwayf"},19:{code:"BSD",name:"Bur Sa'id"},20:{code:"DMY",name:"Dumyat"},21:{code:"JNS",name:"Janub Sina'"},22:{code:"KSH",name:"Kafr ash Shaykh"},23:{code:"MAT",name:"Matruh"},24:{code:"QIN",name:"Qina"},25:{code:"SHS",name:"Shamal Sina'"},26:{code:"SUH",name:"Suhaj"}},SV:{1:{code:"AH",name:"Ahuachapan"},2:{code:"CA",name:"Cabanas"},3:{code:"CH",name:"Chalatenango"},4:{code:"CU",name:"Cuscatlan"},5:{code:"LB",name:"La Libertad"},6:{code:"PZ",name:"La Paz"},7:{code:"UN",name:"La Union"},8:{code:"MO",name:"Morazan"},9:{code:"SM",name:"San Miguel"},10:{code:"SS",name:"San Salvador"},11:{code:"SV",name:"San Vicente"},12:{code:"SA",name:"Santa Ana"},13:{code:"SO",name:"Sonsonate"},14:{code:"US",name:"Usulutan"}},GQ:{1:{code:"AN",name:"Provincia Annobon"},2:{code:"BN",name:"Provincia Bioko Norte"},3:{code:"BS",name:"Provincia Bioko Sur"},4:{code:"CS",name:"Provincia Centro Sur"},5:{code:"KN",name:"Provincia Kie-Ntem"},6:{code:"LI",name:"Provincia Litoral"},7:{code:"WN",name:"Provincia Wele-Nzas"}},ER:{1:{code:"MA",name:"Central (Maekel)"},2:{code:"KE",name:"Anseba (Keren)"},3:{code:"DK",name:"Southern Red Sea (Debub-Keih-Bah)"},4:{code:"SK",name:"Northern Red Sea (Semien-Keih-Ba)"},5:{code:"DE",name:"Southern (Debub)"},6:{code:"BR",name:"Gash-Barka (Barentu)"}},EE:{1:{code:"HA",name:"Harjumaa (Tallinn)"},2:{code:"HI",name:"Hiiumaa (Kardla)"},3:{code:"IV",name:"Ida-Virumaa (Johvi)"},4:{code:"JA",name:"Jarvamaa (Paide)"},5:{code:"JO",name:"Jogevamaa (Jogeva)"},6:{code:"LV",name:"Laane-Virumaa (Rakvere)"},7:{code:"LA",name:"Laanemaa (Haapsalu)"},8:{code:"PA",name:"Parnumaa (Parnu)"},9:{code:"PO",name:"Polvamaa (Polva)"},10:{code:"RA",name:"Raplamaa (Rapla)"},11:{code:"SA",name:"Saaremaa (Kuessaare)"},12:{code:"TA",name:"Tartumaa (Tartu)"},13:{code:"VA",name:"Valgamaa (Valga)"},14:{code:"VI",name:"Viljandimaa (Viljandi)"},15:{code:"VO",name:"Vorumaa (Voru)"}},ET:{1:{code:"AF",name:"Afar"},2:{code:"AH",name:"Amhara"},3:{code:"BG",name:"Benishangul-Gumaz"},4:{code:"GB",name:"Gambela"},5:{code:"HR",name:"Hariai"},6:{code:"OR",name:"Oromia"},7:{code:"SM",name:"Somali"},8:{code:"SN",name:"Southern Nations - Nationalities"},9:{code:"TG",name:"Tigray"},10:{code:"AA",name:"Addis Ababa"},11:{code:"DD",name:"Dire Dawa"}},FO:{1:{code:"TÛR",name:"Tûrshavnar Kommuna"},2:{code:"KLA",name:"Klaksvík"},3:{code:"RUN",name:"Runavík"},4:{code:"TVØ",name:"Tvøroyri"},5:{code:"FUG",name:"Fuglafjørður"},6:{code:"SUN",name:"Sunda Kommuna"},7:{code:"VáG",name:"Vágur"},8:{code:"NES",name:"Nes"},9:{code:"VES",name:"Vestmanna"},10:{code:"MIð",name:"Miðvágur"},11:{code:"SØR",name:"Sørvágur"},12:{code:"GØT",name:"Gøtu Kommuna"},13:{code:"SJû",name:"Sjûvar Kommuna"},14:{code:"LEI",name:"Leirvík"},15:{code:"SAN",name:"Sandavágur"},16:{code:"HVA",name:"Hvalba"},17:{code:"EIð",name:"Eiði"},18:{code:"KVí",name:"Kvívík"},19:{code:"SAN",name:"Sandur"},20:{code:"SKO",name:"Skopun"},21:{code:"HVA",name:"Hvannasund"},22:{code:"SUM",name:"Sumba"},23:{code:"VIð",name:"Viðareiði"},24:{code:"POR",name:"Porkeri"},25:{code:"SKá",name:"Skálavík"},26:{code:"KUN",name:"Kunoy"},27:{code:"HÚS",name:"HÚsavík"},28:{code:"HOV",name:"Hov"},29:{code:"FáM",name:"Fámjin"},30:{code:"FUN",name:"Funningur"},31:{code:"HÚS",name:"HÚsar"},32:{code:"SKÚ",name:"SkÚvoy"},33:{code:"SVí",name:"Svínoy"},34:{code:"FUG",name:"Fugloy"}},FJ:{1:{code:"C",name:"Central Division"},2:{code:"E",name:"Eastern Division"},3:{code:"N",name:"Northern Division"},4:{code:"R",name:"Rotuma"},5:{code:"W",name:"Western Division"}},FI:{1:{code:"AL",name:"Ahvenanmaan Laani"},2:{code:"ES",name:"Etela-Suomen Laani"},3:{code:"IS",name:"Ita-Suomen Laani"},4:{code:"LS",name:"Lansi-Suomen Laani"},5:{code:"LA",name:"Lapin Lanani"},6:{code:"OU",name:"Oulun Laani"}},FR:{1:{code:"AL",name:"Alsace"},2:{code:"AQ",name:"Aquitaine"},3:{code:"AU",name:"Auvergne"},4:{code:"BR",name:"Brittany"},5:{code:"BU",name:"Burgundy"},6:{code:"CE",name:"Center Loire Valley"},7:{code:"CH",name:"Champagne"},8:{code:"CO",name:"Corse"},9:{code:"FR",name:"France Comte"},10:{code:"LA",name:"Languedoc Roussillon"},11:{code:"LI",name:"Limousin"},12:{code:"LO",name:"Lorraine"},13:{code:"MI",name:"Midi Pyrenees"},14:{code:"NO",name:"Nord Pas de Calais"},15:{code:"NR",name:"Normandy"},16:{code:"PA",name:"Paris / Ile de France"},17:{code:"PI",name:"Picardie"},18:{code:"PO",name:"Poitou Charente"},19:{code:"PR",name:"Provence"},20:{code:"RH",name:"Rhone Alps"},21:{code:"RI",name:"Riviera"},22:{code:"WE",name:"Western Loire Valley"}},FX:{1:{code:"Et",name:"Etranger"},2:{code:"01",name:"Ain"},3:{code:"02",name:"Aisne"},4:{code:"03",name:"Allier"},5:{code:"04",name:"Alpes de Haute Provence"},6:{code:"05",name:"Hautes-Alpes"},7:{code:"06",name:"Alpes Maritimes"},8:{code:"07",name:"Ardèche"},9:{code:"08",name:"Ardennes"},10:{code:"09",name:"Ariège"},11:{code:"10",name:"Aube"},12:{code:"11",name:"Aude"},13:{code:"12",name:"Aveyron"},14:{code:"13",name:"Bouches du Rhône"},15:{code:"14",name:"Calvados"},16:{code:"15",name:"Cantal"},17:{code:"16",name:"Charente"},18:{code:"17",name:"Charente Maritime"},19:{code:"18",name:"Cher"},20:{code:"19",name:"Corrèze"},21:{code:"2A",name:"Corse du Sud"},22:{code:"2B",name:"Haute Corse"},23:{code:"21",name:"Côte d'or"},24:{code:"22",name:"Côtes d'Armor"},25:{code:"23",name:"Creuse"},26:{code:"24",name:"Dordogne"},27:{code:"25",name:"Doubs"},28:{code:"26",name:"Drôme"},29:{code:"27",name:"Eure"},30:{code:"28",name:"Eure et Loir"},31:{code:"29",name:"Finistère"},32:{code:"30",name:"Gard"},33:{code:"31",name:"Haute Garonne"},34:{code:"32",name:"Gers"},35:{code:"33",name:"Gironde"},36:{code:"34",name:"Hérault"},37:{code:"35",name:"Ille et Vilaine"},38:{code:"36",name:"Indre"},39:{code:"37",name:"Indre et Loire"},40:{code:"38",name:"Isére"},41:{code:"39",name:"Jura"},42:{code:"40",name:"Landes"},43:{code:"41",name:"Loir et Cher"},44:{code:"42",name:"Loire"},45:{code:"43",name:"Haute Loire"},46:{code:"44",name:"Loire Atlantique"},47:{code:"45",name:"Loiret"},48:{code:"46",name:"Lot"},49:{code:"47",name:"Lot et Garonne"},50:{code:"48",name:"Lozère"},51:{code:"49",name:"Maine et Loire"},52:{code:"50",name:"Manche"},53:{code:"51",name:"Marne"},54:{code:"52",name:"Haute Marne"},55:{code:"53",name:"Mayenne"},56:{code:"54",name:"Meurthe et Moselle"},57:{code:"55",name:"Meuse"},58:{code:"56",name:"Morbihan"},59:{code:"57",name:"Moselle"},60:{code:"58",name:"Nièvre"},61:{code:"59",name:"Nord"},62:{code:"60",name:"Oise"},63:{code:"61",name:"Orne"},64:{code:"62",name:"Pas de Calais"},65:{code:"63",name:"Puy de Dôme"},66:{code:"64",name:"Pyrenees Atlantique"},67:{code:"65",name:"Hautes Pyrenees"},68:{code:"66",name:"Pyrenees Orientale"},69:{code:"67",name:"Bas Rhin"},70:{code:"68",name:"Haut Rhin"},71:{code:"69",name:"Rhône"},72:{code:"70",name:"Haute Saône"},73:{code:"71",name:"Saône et Loire"},74:{code:"72",name:"Sarthe"},75:{code:"73",name:"Savoie"},76:{code:"74",name:"Haute Savoie"},77:{code:"75",name:"Paris"},78:{code:"76",name:"Seine Martitime"},79:{code:"77",name:"Seine et Marne"},80:{code:"78",name:"Yvelines"},81:{code:"79",name:"Deux Sèvres"},82:{code:"80",name:"Somme"},83:{code:"81",name:"Tarn"},84:{code:"82",name:"Tarn et Garonne"},85:{code:"83",name:"Var"},86:{code:"84",name:"Vaucluse"},87:{code:"85",name:"Vendée"},88:{code:"86",name:"Vienne"},89:{code:"87",name:"Haute Vienne"},90:{code:"88",name:"Vosges"},91:{code:"89",name:"Yonne"},92:{code:"90",name:"Territoire de Belfort"},93:{code:"91",name:"Essonne"},94:{code:"92",name:"Hauts de Seine"},95:{code:"93",name:"Seine St-Denis"},96:{code:"94",name:"Val de Marne"},97:{code:"95",name:"Val d'oise"}},GF:{1:{code:"AWA",name:"Awala-Yalimapo"},2:{code:"MAN",name:"Mana"},3:{code:"SAI",name:"Saint-Laurent-Du-Maroni"},4:{code:"APA",name:"Apatou"},5:{code:"GRA",name:"Grand-Santi"},6:{code:"PAP",name:"Papaïchton"},7:{code:"SAÜ",name:"SaÜl"},8:{code:"MAR",name:"Maripasoula"},9:{code:"CAM",name:"Camopi"},10:{code:"SAI",name:"Saint-Georges"},11:{code:"OUA",name:"Ouanary"},12:{code:"RéG",name:"Régina"},13:{code:"ROU",name:"Roura"},14:{code:"SAI",name:"Saint-élie"},15:{code:"IRA",name:"Iracoubo"},16:{code:"SIN",name:"Sinnamary"},17:{code:"KOU",name:"Kourou"},18:{code:"MAC",name:"Macouria"},19:{code:"MON",name:"Montsinéry-Tonnegrande"},20:{code:"MAT",name:"Matoury"},21:{code:"CAY",name:"Cayenne"},22:{code:"REM",name:"Remire-Montjoly"}},PF:{1:{code:"M",name:"Archipel des Marquises"},2:{code:"T",name:"Archipel des Tuamotu"},3:{code:"I",name:"Archipel des Tubuai"},4:{code:"V",name:"Iles du Vent"},5:{code:"S",name:"Iles Sous-le-Vent"}},TF:{1:{code:"C",name:"Iles Crozet"},2:{code:"K",name:"Iles Kerguelen"},3:{code:"A",name:"Ile Amsterdam"},4:{code:"P",name:"Ile Saint-Paul"},5:{code:"D",name:"Adelie Land"}},GA:{1:{code:"ES",name:"Estuaire"},2:{code:"HO",name:"Haut-Ogooue"},3:{code:"MO",name:"Moyen-Ogooue"},4:{code:"NG",name:"Ngounie"},5:{code:"NY",name:"Nyanga"},6:{code:"OI",name:"Ogooue-Ivindo"},7:{code:"OL",name:"Ogooue-Lolo"},8:{code:"OM",name:"Ogooue-Maritime"},9:{code:"WN",name:"Woleu-Ntem"}},GM:{1:{code:"BJ",name:"Banjul"},2:{code:"BS",name:"Basse"},3:{code:"BR",name:"Brikama"},4:{code:"JA",name:"Janjangbure"},5:{code:"KA",name:"Kanifeng"},6:{code:"KE",name:"Kerewan"},7:{code:"KU",name:"Kuntaur"},8:{code:"MA",name:"Mansakonko"},9:{code:"LR",name:"Lower River"},10:{code:"CR",name:"Central River"},11:{code:"NB",name:"North Bank"},12:{code:"UR",name:"Upper River"},13:{code:"WE",name:"Western"}},GE:{1:{code:"AB",name:"Abkhazia"},2:{code:"AJ",name:"Ajaria"},3:{code:"GU",name:"Guria"},4:{code:"IM",name:"Imereti"},5:{code:"KA",name:"Kakheti"},6:{code:"KK",name:"Kvemo Kartli"},7:{code:"MM",name:"Mtskheta-Mtianeti"},8:{code:"RL",name:"Racha Lechkhumi and Kvemo Svanet"},9:{code:"SJ",name:"Samtskhe-Javakheti"},10:{code:"SK",name:"Shida Kartli"},11:{code:"SZ",name:"Samegrelo-Zemo Svaneti"},12:{code:"TB",name:"Tbilisi"}},DE:{1:{code:"BAW",name:"Baden-Württemberg"},2:{code:"BAY",name:"Bayern"},3:{code:"BER",name:"Berlin"},4:{code:"BRG",name:"Brandenburg"},5:{code:"BRE",name:"Bremen"},6:{code:"HAM",name:"Hamburg"},7:{code:"HES",name:"Hessen"},8:{code:"MEC",name:"Mecklenburg-Vorpommern"},9:{code:"NDS",name:"Niedersachsen"},10:{code:"NRW",name:"Nordrhein-Westfalen"},11:{code:"RHE",name:"Rheinland-Pfalz"},12:{code:"SAR",name:"Saarland"},13:{code:"SAS",name:"Sachsen"},14:{code:"SAC",name:"Sachsen-Anhalt"},15:{code:"SCN",name:"Schleswig-Holstein"},16:{code:"THE",name:"Thüringen"}},GH:{1:{code:"AS",name:"Ashanti Region"},2:{code:"BA",name:"Brong-Ahafo Region"},3:{code:"CE",name:"Central Region"},4:{code:"EA",name:"Eastern Region"},5:{code:"GA",name:"Greater Accra Region"},6:{code:"NO",name:"Northern Region"},7:{code:"UE",name:"Upper East Region"},8:{code:"UW",name:"Upper West Region"},9:{code:"VO",name:"Volta Region"},10:{code:"WE",name:"Western Region"}},GI:{1:{code:"EAS",name:"East Side"},2:{code:"NOR",name:"North District"},3:{code:"REC",name:"Reclamation Areas"},4:{code:"SAN",name:"Sandpits Area"},5:{code:"SOU",name:"South District"},6:{code:"TOW",name:"Town Area"},7:{code:"UPP",name:"Upper Town"},8:{code:"OTH",name:"Other"}},GR:{1:{code:"AT",name:"Attica"},2:{code:"CN",name:"Central Greece"},3:{code:"CM",name:"Central Macedonia"},4:{code:"CR",name:"Crete"},5:{code:"EM",name:"East Macedonia and Thrace"},6:{code:"EP",name:"Epirus"},7:{code:"II",name:"Ionian Islands"},8:{code:"NA",name:"North Aegean"},9:{code:"PP",name:"Peloponnesos"},10:{code:"SA",name:"South Aegean"},11:{code:"TH",name:"Thessaly"},12:{code:"WG",name:"West Greece"},13:{code:"WM",name:"West Macedonia"}},GL:{1:{code:"A",name:"Avannaa"},2:{code:"T",name:"Tunu"},3:{code:"K",name:"Kitaa"}},86:{1:{code:"A",name:"Saint Andrew"},2:{code:"D",name:"Saint David"},3:{code:"G",name:"Saint George"},4:{code:"J",name:"Saint John"},5:{code:"M",name:"Saint Mark"},6:{code:"P",name:"Saint Patrick"},7:{code:"C",name:"Carriacou"},8:{code:"Q",name:"Petit Martinique"}},GP:{1:{code:"ARR",name:"Arrondissements Of The Guadeloup"},2:{code:"CAN",name:"Cantons Of The Guadeloup Depart"},3:{code:"COM",name:"Communes Of The Guadeloup Depart"}},GU:{1:{code:"AGA",name:"Agana Heights"},2:{code:"AGA",name:"Agat"},3:{code:"ASA",name:"Asan Maina"},4:{code:"BAR",name:"Barrigada"},5:{code:"CHA",name:"Chalan Pago Ordot"},6:{code:"DED",name:"Dededo"},7:{code:"HAG",name:"HagÅtña"},8:{code:"INA",name:"Inarajan"},9:{code:"MAN",name:"Mangilao"},10:{code:"MER",name:"Merizo"},11:{code:"MON",name:"Mongmong Toto Maite"},12:{code:"PIT",name:"Piti"},13:{code:"SAN",name:"Santa Rita"},14:{code:"SIN",name:"Sinajana"},15:{code:"TAL",name:"Talofofo"},16:{code:"TAM",name:"Tamuning"},17:{code:"UMA",name:"Umatac"},18:{code:"YIG",name:"Yigo"},19:{code:"YON",name:"Yona"}},GT:{1:{code:"AV",name:"Alta Verapaz"},2:{code:"BV",name:"Baja Verapaz"},3:{code:"CM",name:"Chimaltenango"},4:{code:"CQ",name:"Chiquimula"},5:{code:"PE",name:"El Peten"},6:{code:"PR",name:"El Progreso"},7:{code:"QC",name:"El Quiche"},8:{code:"ES",name:"Escuintla"},9:{code:"GU",name:"Guatemala"},10:{code:"HU",name:"Huehuetenango"},11:{code:"IZ",name:"Izabal"},12:{code:"JA",name:"Jalapa"},13:{code:"JU",name:"Jutiapa"},14:{code:"QZ",name:"Quetzaltenango"},15:{code:"RE",name:"Retalhuleu"},16:{code:"ST",name:"Sacatepequez"},17:{code:"SM",name:"San Marcos"},18:{code:"SR",name:"Santa Rosa"},19:{code:"SO",name:"Solola"},20:{code:"SU",name:"Suchitepequez"},21:{code:"TO",name:"Totonicapan"},22:{code:"ZA",name:"Zacapa"}},GN:{1:{code:"CNK",name:"Conakry"},2:{code:"BYL",name:"Beyla"},3:{code:"BFA",name:"Boffa"},4:{code:"BOK",name:"Boke"},5:{code:"COY",name:"Coyah"},6:{code:"DBL",name:"Dabola"},7:{code:"DLB",name:"Dalaba"},8:{code:"DGR",name:"Dinguiraye"},9:{code:"DBR",name:"Dubreka"},10:{code:"FRN",name:"Faranah"},11:{code:"FRC",name:"Forecariah"},12:{code:"FRI",name:"Fria"},13:{code:"GAO",name:"Gaoual"},14:{code:"GCD",name:"Gueckedou"},15:{code:"KNK",name:"Kankan"},16:{code:"KRN",name:"Kerouane"},17:{code:"KND",name:"Kindia"},18:{code:"KSD",name:"Kissidougou"},19:{code:"KBA",name:"Koubia"},20:{code:"KDA",name:"Koundara"},21:{code:"KRA",name:"Kouroussa"},22:{code:"LAB",name:"Labe"},23:{code:"LLM",name:"Lelouma"},24:{code:"LOL",name:"Lola"},25:{code:"MCT",name:"Macenta"},26:{code:"MAL",name:"Mali"},27:{code:"MAM",name:"Mamou"},28:{code:"MAN",name:"Mandiana"},29:{code:"NZR",name:"Nzerekore"},30:{code:"PIT",name:"Pita"},31:{code:"SIG",name:"Siguiri"},32:{code:"TLM",name:"Telimele"},33:{code:"TOG",name:"Tougue"},34:{code:"YOM",name:"Yomou"}},GW:{1:{code:"BF",name:"Bafata Region"},2:{code:"BB",name:"Biombo Region"},3:{code:"BS",name:"Bissau Region"},4:{code:"BL",name:"Bolama Region"},5:{code:"CA",name:"Cacheu Region"},6:{code:"GA",name:"Gabu Region"},7:{code:"OI",name:"Oio Region"},8:{code:"QU",name:"Quinara Region"},9:{code:"TO",name:"Tombali Region"}},GY:{1:{code:"BW",name:"Barima-Waini"},2:{code:"CM",name:"Cuyuni-Mazaruni"},3:{code:"DM",name:"Demerara-Mahaica"},4:{code:"EC",name:"East Berbice-Corentyne"},5:{code:"EW",name:"Essequibo Islands-West Demerara"},6:{code:"MB",name:"Mahaica-Berbice"},7:{code:"PM",name:"Pomeroon-Supenaam"},8:{code:"PI",name:"Potaro-Siparuni"},9:{code:"UD",name:"Upper Demerara-Berbice"},10:{code:"UT",name:"Upper Takutu-Upper Essequibo"}},HT:{1:{code:"AR",name:"Artibonite"},2:{code:"CE",name:"Centre"},3:{code:"GA",name:"Grand'Anse"},4:{code:"ND",name:"Nord"},5:{code:"NE",name:"Nord-Est"},6:{code:"NO",name:"Nord-Ouest"},7:{code:"OU",name:"Ouest"},8:{code:"SD",name:"Sud"},9:{code:"SE",name:"Sud-Est"}},HM:{1:{code:"F",name:"Flat Island"},2:{code:"M",name:"McDonald Island"},3:{code:"S",name:"Shag Island"},4:{code:"H",name:"Heard Island"}},HN:{1:{code:"AT",name:"Atlantida"},2:{code:"CH",name:"Choluteca"},3:{code:"CL",name:"Colon"},4:{code:"CM",name:"Comayagua"},5:{code:"CP",name:"Copan"},6:{code:"CR",name:"Cortes"},7:{code:"PA",name:"El Paraiso"},8:{code:"FM",name:"Francisco Morazan"},9:{code:"GD",name:"Gracias a Dios"},10:{code:"IN",name:"Intibuca"},11:{code:"IB",name:"Islas de la Bahia (Bay Islands)"},12:{code:"PZ",name:"La Paz"},13:{code:"LE",name:"Lempira"},14:{code:"OC",name:"Ocotepeque"},15:{code:"OL",name:"Olancho"},16:{code:"SB",name:"Santa Barbara"},17:{code:"VA",name:"Valle"},18:{code:"YO",name:"Yoro"}},HK:{1:{code:"HCW",name:"Central and Western Hong Kong Is"},2:{code:"HEA",name:"Eastern Hong Kong Island"},3:{code:"HSO",name:"Southern Hong Kong Island"},4:{code:"HWC",name:"Wan Chai Hong Kong Island"},5:{code:"KKC",name:"Kowloon City Kowloon"},6:{code:"KKT",name:"Kwun Tong Kowloon"},7:{code:"KSS",name:"Sham Shui Po Kowloon"},8:{code:"KWT",name:"Wong Tai Sin Kowloon"},9:{code:"KYT",name:"Yau Tsim Mong Kowloon"},10:{code:"NIS",name:"Islands New Territories"},11:{code:"NKT",name:"Kwai Tsing New Territories"},12:{code:"NNO",name:"North New Territories"},13:{code:"NSK",name:"Sai Kung New Territories"},14:{code:"NST",name:"Sha Tin New Territories"},15:{code:"NTP",name:"Tai Po New Territories"},16:{code:"NTW",name:"Tsuen Wan New Territories"},17:{code:"NTM",name:"Tuen Mun New Territories"},18:{code:"NYL",name:"Yuen Long New Territories"}},HU:{1:{code:"BK",name:"Bacs-Kiskun"},2:{code:"BA",name:"Baranya"},3:{code:"BE",name:"Bekes"},4:{code:"BS",name:"Bekescsaba"},5:{code:"BZ",name:"Borsod-Abauj-Zemplen"},6:{code:"BU",name:"Budapest"},7:{code:"CS",name:"Csongrad"},8:{code:"DE",name:"Debrecen"},9:{code:"DU",name:"Dunaujvaros"},10:{code:"EG",name:"Eger"},11:{code:"FE",name:"Fejer"},12:{code:"GY",name:"Gyor"},13:{code:"GM",name:"Gyor-Moson-Sopron"},14:{code:"HB",name:"Hajdu-Bihar"},15:{code:"HE",name:"Heves"},16:{code:"HO",name:"Hodmezovasarhely"},17:{code:"JN",name:"Jasz-Nagykun-Szolnok"},18:{code:"KA",name:"Kaposvar"},19:{code:"KE",name:"Kecskemet"},20:{code:"KO",name:"Komarom-Esztergom"},21:{code:"MI",name:"Miskolc"},22:{code:"NA",name:"Nagykanizsa"},23:{code:"NO",name:"Nograd"},24:{code:"NY",name:"Nyiregyhaza"},25:{code:"PE",name:"Pecs"},26:{code:"PS",name:"Pest"},27:{code:"SO",name:"Somogy"},28:{code:"SP",name:"Sopron"},29:{code:"SS",name:"Szabolcs-Szatmar-Bereg"},30:{code:"SZ",name:"Szeged"},31:{code:"SE",name:"Szekesfehervar"},32:{code:"SL",name:"Szolnok"},33:{code:"SM",name:"Szombathely"},34:{code:"TA",name:"Tatabanya"},35:{code:"TO",name:"Tolna"},36:{code:"VA",name:"Vas"},37:{code:"VE",name:"Veszprem"},38:{code:"ZA",name:"Zala"},39:{code:"ZZ",name:"Zalaegerszeg"}},IS:{1:{code:"AL",name:"Austurland"},2:{code:"HF",name:"Hofuoborgarsvaeoi"},3:{code:"NE",name:"Norourland eystra"},4:{code:"NV",name:"Norourland vestra"},5:{code:"SL",name:"Suourland"},6:{code:"SN",name:"Suournes"},7:{code:"VF",name:"Vestfiroir"},8:{code:"VL",name:"Vesturland"}},IN:{1:{code:"AN",name:"Andaman and Nicobar Islands"},2:{code:"AP",name:"Andhra Pradesh"},3:{code:"AR",name:"Arunachal Pradesh"},4:{code:"AS",name:"Assam"},5:{code:"BI",name:"Bihar"},6:{code:"CH",name:"Chandigarh"},7:{code:"DA",name:"Dadra and Nagar Haveli"},8:{code:"DM",name:"Daman and Diu"},9:{code:"DE",name:"Delhi"},10:{code:"GO",name:"Goa"},11:{code:"GU",name:"Gujarat"},12:{code:"HA",name:"Haryana"},13:{code:"HP",name:"Himachal Pradesh"},14:{code:"JA",name:"Jammu and Kashmir"},15:{code:"KA",name:"Karnataka"},16:{code:"KE",name:"Kerala"},17:{code:"LI",name:"Lakshadweep Islands"},18:{code:"MP",name:"Madhya Pradesh"},19:{code:"MA",name:"Maharashtra"},20:{code:"MN",name:"Manipur"},21:{code:"ME",name:"Meghalaya"},22:{code:"MI",name:"Mizoram"},23:{code:"NA",name:"Nagaland"},24:{code:"OR",name:"Orissa"},25:{code:"PO",name:"Pondicherry"},26:{code:"PU",name:"Punjab"},27:{code:"RA",name:"Rajasthan"},28:{code:"SI",name:"Sikkim"},29:{code:"TN",name:"Tamil Nadu"},30:{code:"TR",name:"Tripura"},31:{code:"UP",name:"Uttar Pradesh"},32:{code:"WB",name:"West Bengal"}},ID:{1:{code:"DA",name:"Daista Aceh"},2:{code:"SU",name:"Sumatera Utara"},3:{code:"SB",name:"Sumatera Barat"},4:{code:"SI",name:"Riau"},5:{code:"JA",name:"Jambi"},6:{code:"SS",name:"Sumatera Selatan"},7:{code:"BE",name:"Bengkulu"},8:{code:"LA",name:"Lampung"},9:{code:"JK",name:"Dki Jakarta"},10:{code:"JB",name:"Jawa Barat"},11:{code:"JT",name:"Jawa Tengah"},12:{code:"DY",name:"Daista Yogyakarta"},13:{code:"JT",name:"Jawa Timur"},14:{code:"KB",name:"Kalimantan Barat"},15:{code:"KT",name:"Kalimantan Tengah"},16:{code:"KI",name:"Kalimantan Timur"},17:{code:"KS",name:"Kalimantan Selatan"},18:{code:"BA",name:"Bali"},19:{code:"NB",name:"Nusa Tenggara Barat"},20:{code:"NT",name:"Nusa Tenggara Timur"},21:{code:"SN",name:"Sulawesi Selatan"},22:{code:"ST",name:"Sulawesi Tengah"},23:{code:"SA",name:"Sulawesi Utara"},24:{code:"SG",name:"Sulawesi Tenggara"},25:{code:"MA",name:"Maluku"},26:{code:"MU",name:"Maluku Utara"},27:{code:"IJ",name:"Irian Jaya Timur"},28:{code:"IT",name:"Irian Jaya Tengah"},29:{code:"IB",name:"Irian Jawa Barat"},30:{code:"BT",name:"Banten"},31:{code:"BB",name:"Bangka Belitung"},32:{code:"GO",name:"Gorontalo"}},IR:{1:{code:"ARD",name:"Ardabil"},2:{code:"BSH",name:"Bushehr"},3:{code:"CMB",name:"Chahar Mahaal and Bakhtiari"},4:{code:"EAZ",name:"East Azarbaijan"},5:{code:"EFH",name:"Esfahan"},6:{code:"FAR",name:"Fars"},7:{code:"GIL",name:"Gilan"},8:{code:"GLS",name:"Golestan"},9:{code:"HMD",name:"Hamadan"},10:{code:"HRM",name:"Hormozgan"},11:{code:"ILM",name:"Ilam"},12:{code:"KBA",name:"Kohkiluyeh and Buyer Ahmad"},13:{code:"KRB",name:"Kerman"},14:{code:"KRD",name:"Kurdistan"},15:{code:"KRM",name:"Kermanshah"},16:{code:"KZT",name:"Khuzestan"},17:{code:"LRS",name:"Lorestan"},18:{code:"MKZ",name:"Markazi"},19:{code:"MZD",name:"Mazandaran"},20:{code:"NKH",name:"North Khorasan"},21:{code:"QAZ",name:"Qazvin"},22:{code:"QOM",name:"Qom"},23:{code:"RKH",name:"Razavi Khorasan"},24:{code:"SBL",name:"Sistan and Baluchistan"},25:{code:"SKH",name:"South Khorasan"},26:{code:"SMN",name:"Semnan"},27:{code:"TEH",name:"Tehran"},28:{code:"WEZ",name:"West Azarbaijan"},29:{code:"YZD",name:"Yazd"},30:{code:"ZAN",name:"Zanjan"}},IQ:{1:{code:"AB",name:"Al Anbar"},2:{code:"AL",name:"Arbil"},3:{code:"BA",name:"Al Basrah"},4:{code:"BB",name:"Babil"},5:{code:"BD",name:"Baghdad"},6:{code:"DH",name:"Dahuk"},7:{code:"DQ",name:"Dhi Qar"},8:{code:"DY",name:"Diyala"},9:{code:"KB",name:"Al Karbala"},10:{code:"MU",name:"Al Muthanna"},11:{code:"MY",name:"Maysan"},12:{code:"NJ",name:"An Najaf"},13:{code:"NN",name:"Ninawa"},14:{code:"QA",name:"Al Qadisyah"},15:{code:"SD",name:"Salah ad Din"},16:{code:"SL",name:"As Sulaymaniyah"},17:{code:"TM",name:"At Ta'mim"},18:{code:"WS",name:"Wasit"}},IE:{1:{code:"CA",name:"Carlow"},2:{code:"CV",name:"Cavan"},3:{code:"CL",name:"Clare"},4:{code:"CO",name:"Cork"},5:{code:"DO",name:"Donegal"},6:{code:"DU",name:"Dublin"},7:{code:"GA",name:"Galway"},8:{code:"KE",name:"Kerry"},9:{code:"KI",name:"Kildare"},10:{code:"KL",name:"Kilkenny"},11:{code:"LA",name:"Laois"},12:{code:"LE",name:"Leitrim"},13:{code:"LI",name:"Limerick"},14:{code:"LO",name:"Longford"},15:{code:"LU",name:"Louth"},16:{code:"MA",name:"Mayo"},17:{code:"ME",name:"Meath"},18:{code:"MO",name:"Monaghan"},19:{code:"OF",name:"Offaly"},20:{code:"RO",name:"Roscommon"},21:{code:"SL",name:"Sligo"},22:{code:"TI",name:"Tipperary"},23:{code:"WA",name:"Waterford"},24:{code:"WE",name:"Westmeath"},25:{code:"WX",name:"Wexford"},26:{code:"WI",name:"Wicklow"}},IL:{1:{code:"BS",name:"Be'er Sheva"},2:{code:"BH",name:"Bika'at Hayarden"},3:{code:"EA",name:"Eilat and Arava"},4:{code:"GA",name:"Galil"},5:{code:"HA",name:"Haifa"},6:{code:"JM",name:"Jehuda Mountains"},7:{code:"JE",name:"Jerusalem"},8:{code:"NE",name:"Negev"},10:{code:"SE",name:"Semaria"},11:{code:"SH",name:"Sharon"},12:{code:"TA",name:"Tel Aviv (Gosh Dan)"}},IT:{1:{code:"AG",name:"Agrigento"},2:{code:"AL",name:"Alessandria"},3:{code:"AN",name:"Ancona"},4:{code:"AO",name:"Aosta"},5:{code:"AR",name:"Arezzo"},6:{code:"AP",name:"Ascoli Piceno"},7:{code:"AT",name:"Asti"},8:{code:"AV",name:"Avellino"},9:{code:"BA",name:"Bari"},10:{code:"BL",name:"Belluno"},11:{code:"BN",name:"Benevento"},12:{code:"BG",name:"Bergamo"},13:{code:"BI",name:"Biella"},14:{code:"BO",name:"Bologna"},15:{code:"BZ",name:"Bolzano"},16:{code:"BS",name:"Brescia"},17:{code:"BR",name:"Brindisi"},18:{code:"CA",name:"Cagliari"},19:{code:"CL",name:"Caltanissetta"},20:{code:"CB",name:"Campobasso"},21:{code:"CE",name:"Caserta"},22:{code:"CT",name:"Catania"},23:{code:"CZ",name:"Catanzaro"},24:{code:"CH",name:"Chieti"},25:{code:"CO",name:"Como"},26:{code:"CS",name:"Cosenza"},27:{code:"CR",name:"Cremona"},28:{code:"KR",name:"Crotone"},29:{code:"CN",name:"Cuneo"},30:{code:"EN",name:"Enna"},31:{code:"FE",name:"Ferrara"},32:{code:"FI",name:"Firenze"},33:{code:"FG",name:"Foggia"},34:{code:"FO",name:"Forlì"},35:{code:"FR",name:"Frosinone"},36:{code:"GE",name:"Genova"},37:{code:"GO",name:"Gorizia"},38:{code:"GR",name:"Grosseto"},39:{code:"IM",name:"Imperia"},40:{code:"IS",name:"Isernia"},41:{code:"AQ",name:"Aquila"},42:{code:"SP",name:"La Spezia"},43:{code:"LT",name:"Latina"},44:{code:"LE",name:"Lecce"},45:{code:"LC",name:"Lecco"},46:{code:"LI",name:"Livorno"},47:{code:"LO",name:"Lodi"},48:{code:"LU",name:"Lucca"},49:{code:"MC",name:"Macerata"},50:{code:"MN",name:"Mantova"},51:{code:"MS",name:"Massa-Carrara"},52:{code:"MT",name:"Matera"},53:{code:"ME",name:"Messina"},54:{code:"MI",name:"Milano"},55:{code:"MO",name:"Modena"},56:{code:"NA",name:"Napoli"},57:{code:"NO",name:"Novara"},58:{code:"NU",name:"Nuoro"},59:{code:"OR",name:"Oristano"},60:{code:"PD",name:"Padova"},61:{code:"PA",name:"Palermo"},62:{code:"PR",name:"Parma"},63:{code:"PG",name:"Perugia"},64:{code:"PV",name:"Pavia"},65:{code:"PU",name:"Pesaro Urbino"},66:{code:"PE",name:"Pescara"},67:{code:"PC",name:"Piacenza"},68:{code:"PI",name:"Pisa"},69:{code:"PT",name:"Pistoia"},70:{code:"PN",name:"Pordenone"},71:{code:"PZ",name:"Potenza"},72:{code:"PO",name:"Prato"},73:{code:"RG",name:"Ragusa"},74:{code:"RA",name:"Ravenna"},75:{code:"RC",name:"Reggio Calabria"},76:{code:"RE",name:"Reggio Emilia"},77:{code:"RI",name:"Rieti"},78:{code:"RN",name:"Rimini"},79:{code:"RM",name:"Roma"},80:{code:"RO",name:"Rovigo"},81:{code:"SA",name:"Salerno"},82:{code:"SS",name:"Sassari"},83:{code:"SV",name:"Savona"},84:{code:"SI",name:"Siena"},85:{code:"SR",name:"Siracusa"},86:{code:"SO",name:"Sondrio"},87:{code:"TA",name:"Taranto"},88:{code:"TE",name:"Teramo"},89:{code:"TR",name:"Terni"},90:{code:"TO",name:"Torino"},91:{code:"TP",name:"Trapani"},92:{code:"TN",name:"Trento"},93:{code:"TV",name:"Treviso"},94:{code:"TS",name:"Trieste"},95:{code:"UD",name:"Udine"},96:{code:"VA",name:"Varese"},97:{code:"VE",name:"Venezia"},98:{code:"VB",name:"Verbania"},99:{code:"VC",name:"Vercelli"},100:{code:"VR",name:"Verona"},101:{code:"VV",name:"Vibo Valentia"},102:{code:"VI",name:"Vicenza"},103:{code:"VT",name:"Viterbo"},104:{code:"CI",name:"Carbonia-Iglesias"},105:{code:"VS",name:"Medio Campidano"},106:{code:"OG",name:"Ogliastra"},107:{code:"OT",name:"Olbia-Tempio"},108:{code:"MB",name:"Monza e Brianza"},109:{code:"FM",name:"Fermo"},110:{code:"BT",name:"Barletta-Andria-Trani"}},JM:{1:{code:"CLA",name:"Clarendon Parish"},2:{code:"HAN",name:"Hanover Parish"},3:{code:"KIN",name:"Kingston Parish"},4:{code:"MAN",name:"Manchester Parish"},5:{code:"POR",name:"Portland Parish"},6:{code:"AND",name:"Saint Andrew Parish"},7:{code:"ANN",name:"Saint Ann Parish"},8:{code:"CAT",name:"Saint Catherine Parish"},9:{code:"ELI",name:"Saint Elizabeth Parish"},10:{code:"JAM",name:"Saint James Parish"},11:{code:"MAR",name:"Saint Mary Parish"},12:{code:"THO",name:"Saint Thomas Parish"},13:{code:"TRL",name:"Trelawny Parish"},14:{code:"WML",name:"Westmoreland Parish"}},JP:{1:{code:"AI",name:"Aichi"},2:{code:"AK",name:"Akita"},3:{code:"AO",name:"Aomori"},4:{code:"CH",name:"Chiba"},5:{code:"EH",name:"Ehime"},6:{code:"FK",name:"Fukui"},7:{code:"FU",name:"Fukuoka"},8:{code:"FS",name:"Fukushima"},9:{code:"GI",name:"Gifu"},10:{code:"GU",name:"Gumma"},11:{code:"HI",name:"Hiroshima"},12:{code:"HO",name:"Hokkaido"},13:{code:"HY",name:"Hyogo"},14:{code:"IB",name:"Ibaraki"},15:{code:"IS",name:"Ishikawa"},16:{code:"IW",name:"Iwate"},17:{code:"KA",name:"Kagawa"},18:{code:"KG",name:"Kagoshima"},19:{code:"KN",name:"Kanagawa"},20:{code:"KO",name:"Kochi"},21:{code:"KU",name:"Kumamoto"},22:{code:"KY",name:"Kyoto"},23:{code:"MI",name:"Mie"},24:{code:"MY",name:"Miyagi"},25:{code:"MZ",name:"Miyazaki"},26:{code:"NA",name:"Nagano"},27:{code:"NG",name:"Nagasaki"},28:{code:"NR",name:"Nara"},29:{code:"NI",name:"Niigata"},30:{code:"OI",name:"Oita"},31:{code:"OK",name:"Okayama"},32:{code:"ON",name:"Okinawa"},33:{code:"OS",name:"Osaka"},34:{code:"SA",name:"Saga"},35:{code:"SI",name:"Saitama"},36:{code:"SH",name:"Shiga"},37:{code:"SM",name:"Shimane"},38:{code:"SZ",name:"Shizuoka"},39:{code:"TO",name:"Tochigi"},40:{code:"TS",name:"Tokushima"},41:{code:"TK",name:"Tokyo"},42:{code:"TT",name:"Tottori"},43:{code:"TY",name:"Toyama"},44:{code:"WA",name:"Wakayama"},45:{code:"YA",name:"Yamagata"},46:{code:"YM",name:"Yamaguchi"},47:{code:"YN",name:"Yamanashi"}},JO:{1:{code:"AM",name:"'Amman"},2:{code:"AJ",name:"Ajlun"},3:{code:"AA",name:"Al'Aqabah"},4:{code:"AB",name:"Al Balqa'"},5:{code:"AK",name:"Al Karak"},6:{code:"AL",name:"Al Mafraq"},7:{code:"AT",name:"At Tafilah"},8:{code:"AZ",name:"Az Zarqa'"},9:{code:"IR",name:"Irbid"},10:{code:"JA",name:"Jarash"},11:{code:"MA",name:"Ma'an"},12:{code:"MD",name:"Madaba"}},KZ:{1:{code:"AL",name:"Almaty"},2:{code:"AC",name:"Almaty City"},3:{code:"AM",name:"Aqmola"},4:{code:"AQ",name:"Aqtobe"},5:{code:"AS",name:"Astana City"},6:{code:"AT",name:"Atyrau"},7:{code:"BA",name:"Batys Qazaqstan"},8:{code:"BY",name:"Bayqongyr City"},9:{code:"MA",name:"Mangghystau"},10:{code:"ON",name:"Ongtustik Qazaqstan"},11:{code:"PA",name:"Pavlodar"},12:{code:"QA",name:"Qaraghandy"},13:{code:"QO",name:"Qostanay"},14:{code:"QY",name:"Qyzylorda"},15:{code:"SH",name:"Shyghys Qazaqstan"},16:{code:"SO",name:"Soltustik Qazaqstan"},17:{code:"ZH",name:"Zhambyl"}},KE:{1:{code:"CE",name:"Central"},2:{code:"CO",name:"Coast"},3:{code:"EA",name:"Eastern"},4:{code:"NA",name:"Nairobi Area"},5:{code:"NE",name:"North Eastern"},6:{code:"NY",name:"Nyanza"},7:{code:"RV",name:"Rift Valley"},8:{code:"WE",name:"Western"}},KI:{1:{code:"AG",name:"Abaiang"},2:{code:"AM",name:"Abemama"},3:{code:"AK",name:"Aranuka"},4:{code:"AO",name:"Arorae"},5:{code:"BA",name:"Banaba"},6:{code:"BE",name:"Beru"},7:{code:"bT",name:"Butaritari"},8:{code:"KA",name:"Kanton"},9:{code:"KR",name:"Kiritimati"},10:{code:"KU",name:"Kuria"},11:{code:"MI",name:"Maiana"},12:{code:"MN",name:"Makin"},13:{code:"ME",name:"Marakei"},14:{code:"NI",name:"Nikunau"},15:{code:"NO",name:"Nonouti"},16:{code:"ON",name:"Onotoa"},17:{code:"TT",name:"Tabiteuea"},18:{code:"TR",name:"Tabuaeran"},19:{code:"TM",name:"Tamana"},20:{code:"TW",name:"Tarawa"},21:{code:"TE",name:"Teraina"}},KP:{1:{code:"CHA",name:"Chagang-do"},2:{code:"HAB",name:"Hamgyong-bukto"},3:{code:"HAN",name:"Hamgyong-namdo"},4:{code:"HWB",name:"Hwanghae-bukto"},5:{code:"HWN",name:"Hwanghae-namdo"},6:{code:"KAN",name:"Kangwon-do"},7:{code:"PYB",name:"P'yongan-bukto"},8:{code:"PYN",name:"P'yongan-namdo"},9:{code:"YAN",name:"Ryanggang-do (Yanggang-do)"},10:{code:"NAJ",name:"Rason Directly Governed City"},11:{code:"PYO",name:"P'yongyang Special City"}},KR:{1:{code:"CO",name:"Ch'ungch'ong-bukto"},2:{code:"CH",name:"Ch'ungch'ong-namdo"},3:{code:"CD",name:"Cheju-do"},4:{code:"CB",name:"Cholla-bukto"},5:{code:"CN",name:"Cholla-namdo"},6:{code:"IG",name:"Inch'on-gwangyoksi"},7:{code:"KA",name:"Kangwon-do"},8:{code:"KG",name:"Kwangju-gwangyoksi"},9:{code:"KD",name:"Kyonggi-do"},10:{code:"KB",name:"Kyongsang-bukto"},11:{code:"KN",name:"Kyongsang-namdo"},12:{code:"PG",name:"Pusan-gwangyoksi"},13:{code:"SO",name:"Soul-t'ukpyolsi"},14:{code:"TA",name:"Taegu-gwangyoksi"},15:{code:"TG",name:"Taejon-gwangyoksi"}},KW:{1:{code:"AL",name:"Al'Asimah"},2:{code:"AA",name:"Al Ahmadi"},3:{code:"AF",name:"Al Farwaniyah"},4:{code:"AJ",name:"Al Jahra'"},5:{code:"HA",name:"Hawalli"}},KG:{1:{code:"GB",name:"Bishkek"},2:{code:"B",name:"Batken"},3:{code:"C",name:"Chu"},4:{code:"J",name:"Jalal-Abad"},5:{code:"N",name:"Naryn"},6:{code:"O",name:"Osh"},7:{code:"T",name:"Talas"},8:{code:"Y",name:"Ysyk-Kol"}},LA:{1:{code:"VT",name:"Vientiane"},2:{code:"AT",name:"Attapu"},3:{code:"BK",name:"Bokeo"},4:{code:"BL",name:"Bolikhamxai"},5:{code:"CH",name:"Champasak"},6:{code:"HO",name:"Houaphan"},7:{code:"KH",name:"Khammouan"},8:{code:"LM",name:"Louang Namtha"},9:{code:"LP",name:"Louangphabang"},10:{code:"OU",name:"Oudomxai"},11:{code:"PH",name:"Phongsali"},12:{code:"SL",name:"Salavan"},13:{code:"SV",name:"Savannakhet"},14:{code:"VI",name:"Vientiane"},15:{code:"XA",name:"Xaignabouli"},16:{code:"XE",name:"Xekong"},17:{code:"XI",name:"Xiangkhoang"},18:{code:"XN",name:"Xaisomboun"}},LV:{1:{code:"AIZ",name:"Aizkraukles Rajons"},2:{code:"ALU",name:"Aluksnes Rajons"},3:{code:"BAL",name:"Balvu Rajons"},4:{code:"BAU",name:"Bauskas Rajons"},5:{code:"CES",name:"Cesu Rajons"},6:{code:"DGR",name:"Daugavpils Rajons"},7:{code:"DOB",name:"Dobeles Rajons"},8:{code:"GUL",name:"Gulbenes Rajons"},9:{code:"JEK",name:"Jekabpils Rajons"},10:{code:"JGR",name:"Jelgavas Rajons"},11:{code:"KRA",name:"Kraslavas Rajons"},12:{code:"KUL",name:"Kuldigas Rajons"},13:{code:"LPR",name:"Liepajas Rajons"},14:{code:"LIM",name:"Limbazu Rajons"},15:{code:"LUD",name:"Ludzas Rajons"},16:{code:"MAD",name:"Madonas Rajons"},17:{code:"OGR",name:"Ogres Rajons"},18:{code:"PRE",name:"Preilu Rajons"},19:{code:"RZR",name:"Rezeknes Rajons"},20:{code:"RGR",name:"Rigas Rajons"},21:{code:"SAL",name:"Saldus Rajons"},22:{code:"TAL",name:"Talsu Rajons"},23:{code:"TUK",name:"Tukuma Rajons"},24:{code:"VLK",name:"Valkas Rajons"},25:{code:"VLM",name:"Valmieras Rajons"},26:{code:"VSR",name:"Ventspils Rajons"},27:{code:"DGV",name:"Daugavpils"},28:{code:"JGV",name:"Jelgava"},29:{code:"JUR",name:"Jurmala"},30:{code:"LPK",name:"Liepaja"},31:{code:"RZK",name:"Rezekne"},32:{code:"RGA",name:"Riga"},33:{code:"VSL",name:"Ventspils"}},LB:{1:{code:"BIN",name:"Bint Jbeil"},2:{code:"HAS",name:"Hasbaya"},3:{code:"MAR",name:"Marjeyoun"},4:{code:"NAB",name:"Nabatieh"},5:{code:"BAA",name:"Baalbek"},6:{code:"HER",name:"Hermel"},7:{code:"RAS",name:"Rashaya"},8:{code:"WES",name:"Western Beqaa"},9:{code:"ZAH",name:"Zahle"},10:{code:"AKK",name:"Akkar"},11:{code:"BAT",name:"Batroun"},12:{code:"BSH",name:"Bsharri"},13:{code:"KOU",name:"Koura"},14:{code:"MIN",name:"Miniyeh-Danniyeh"},15:{code:"TRI",name:"Tripoli"},16:{code:"ZGH",name:"Zgharta"},17:{code:"ALE",name:"Aley"},18:{code:"BAA",name:"Baabda"},19:{code:"BYB",name:"Byblos"},20:{code:"CHO",name:"Chouf"},21:{code:"KES",name:"Kesrwan"},22:{code:"MAT",name:"Matn"},23:{code:"JEZ",name:"Jezzine"},24:{code:"SID",name:"Sidon"},25:{code:"TYR",name:"Tyre"}},LS:{1:{code:"BE",name:"Berea"},2:{code:"BB",name:"Butha-Buthe"},3:{code:"LE",name:"Leribe"},4:{code:"MF",name:"Mafeteng"},5:{code:"MS",name:"Maseru"},6:{code:"MH",name:"Mohale's Hoek"},7:{code:"MK",name:"Mokhotlong"},8:{code:"QN",name:"Qacha's Nek"},9:{code:"QT",name:"Quthing"},10:{code:"TT",name:"Thaba-Tseka"}},LR:{1:{code:"BI",name:"Bomi"},2:{code:"BG",name:"Bong"},3:{code:"GB",name:"Grand Bassa"},4:{code:"CM",name:"Grand Cape Mount"},5:{code:"GG",name:"Grand Gedeh"},6:{code:"GK",name:"Grand Kru"},7:{code:"LO",name:"Lofa"},8:{code:"MG",name:"Margibi"},9:{code:"ML",name:"Maryland"},10:{code:"MS",name:"Montserrado"},11:{code:"NB",name:"Nimba"},12:{code:"RC",name:"River Cess"},13:{code:"SN",name:"Sinoe"}},LY:{1:{code:"AJ",name:"Ajdabiya"},2:{code:"AZ",name:"Al 'Aziziyah"},3:{code:"FA",name:"Al Fatih"},4:{code:"JA",name:"Al Jabal al Akhdar"},5:{code:"JU",name:"Al Jufrah"},6:{code:"KH",name:"Al Khums"},7:{code:"KU",name:"Al Kufrah"},8:{code:"NK",name:"An Nuqat al Khams"},9:{code:"AS",name:"Ash Shati'"},10:{code:"AW",name:"Awbari"},11:{code:"ZA",name:"Az Zawiyah"},12:{code:"BA",name:"Banghazi"},13:{code:"DA",name:"Darnah"},14:{code:"GD",name:"Ghadamis"},15:{code:"GY",name:"Gharyan"},16:{code:"MI",name:"Misratah"},17:{code:"MZ",name:"Murzuq"},18:{code:"SB",name:"Sabha"},19:{code:"SW",name:"Sawfajjin"},20:{code:"SU",name:"Surt"},21:{code:"TL",name:"Tarabulus (Tripoli)"},22:{code:"TH",name:"Tarhunah"},23:{code:"TU",name:"Tubruq"},24:{code:"YA",name:"Yafran"},25:{code:"ZL",name:"Zlitan"}},LI:{1:{code:"V",name:"Vaduz"},2:{code:"A",name:"Schaan"},3:{code:"B",name:"Balzers"},4:{code:"N",name:"Triesen"},5:{code:"E",name:"Eschen"},6:{code:"M",name:"Mauren"},7:{code:"T",name:"Triesenberg"},8:{code:"R",name:"Ruggell"},9:{code:"G",name:"Gamprin"},10:{code:"L",name:"Schellenberg"},11:{code:"P",name:"Planken"}},LT:{1:{code:"AL",name:"Alytus"},2:{code:"KA",name:"Kaunas"},3:{code:"KL",name:"Klaipeda"},4:{code:"MA",name:"Marijampole"},5:{code:"PA",name:"Panevezys"},6:{code:"SI",name:"Siauliai"},7:{code:"TA",name:"Taurage"},8:{code:"TE",name:"Telsiai"},9:{code:"UT",name:"Utena"},10:{code:"VI",name:"Vilnius"}},LU:{1:{code:"DD",name:"Diekirch"},2:{code:"DC",name:"Clervaux"},3:{code:"DR",name:"Redange"},4:{code:"DV",name:"Vianden"},5:{code:"DW",name:"Wiltz"},6:{code:"GG",name:"Grevenmacher"},7:{code:"GE",name:"Echternach"},8:{code:"GR",name:"Remich"},9:{code:"LL",name:"Luxembourg"},10:{code:"LC",name:"Capellen"},11:{code:"LE",name:"Esch-sur-Alzette"},12:{code:"LM",name:"Mersch"}},MO:{1:{code:"OLF",name:"Our Lady Fatima Parish"},2:{code:"ANT",name:"St. Anthony Parish"},3:{code:"LAZ",name:"St. Lazarus Parish"},4:{code:"CAT",name:"Cathedral Parish"},5:{code:"LAW",name:"St. Lawrence Parish"}},MK:{1:{code:"AER",name:"Aerodrom"},2:{code:"ARA",name:"Aračinovo"},3:{code:"BER",name:"Berovo"},4:{code:"BIT",name:"Bitola"},5:{code:"BOG",name:"Bogdanci"},6:{code:"BOG",name:"Bogovinje"},7:{code:"BOS",name:"Bosilovo"},8:{code:"BRV",name:"Brvenica"},9:{code:"BUT",name:"Butel"},10:{code:"ČAI",name:"Čair"},11:{code:"ČAš",name:"Čaška"},12:{code:"CEN",name:"Centar"},13:{code:"CEN",name:"Centar Župa"},14:{code:"Češ",name:"Češinovo-Obleš"},15:{code:"ČUČ",name:"Čučer-Sandevo"},16:{code:"DEB",name:"Debar"},17:{code:"DEB",name:"Debarca"},18:{code:"DEL",name:"Delčevo"},19:{code:"DEM",name:"Demir Hisar"},20:{code:"DEM",name:"Demir Kapija"},21:{code:"DOL",name:"Dolneni"},22:{code:"DRU",name:"Drugovo"},23:{code:"GAZ",name:"Gazi Baba"},24:{code:"GEV",name:"Gevgelija"},25:{code:"GJO",name:"Gjorče Petrov"},26:{code:"GOS",name:"Gostivar"},27:{code:"GRA",name:"Gradsko"},28:{code:"ILI",name:"Ilinden"},29:{code:"JEG",name:"Jegunovce"},30:{code:"KAR",name:"Karbinci"},31:{code:"KAR",name:"Karpoš"},32:{code:"KAV",name:"Kavadarci"},33:{code:"KIČ",name:"Kičevo"},34:{code:"KIS",name:"Kisela Voda"},35:{code:"KOč",name:"Kočani"},36:{code:"KON",name:"Konče"},37:{code:"KRA",name:"Kratovo"},38:{code:"KRI",name:"Kriva Palanka"},39:{code:"KRI",name:"Krivogaštani"},40:{code:"KRU",name:"Kruševo"},41:{code:"KUM",name:"Kumanovo"},42:{code:"LIP",name:"Lipkovo"},43:{code:"LOZ",name:"Lozovo"},44:{code:"MAK",name:"Makedonska Kamenica"},45:{code:"MAK",name:"Makedonski Brod"},46:{code:"MAV",name:"Mavrovo and Rostuša"},47:{code:"MOG",name:"Mogila"},48:{code:"NEG",name:"Negotino"},49:{code:"NOV",name:"Novaci"},50:{code:"NOV",name:"Novo Selo"},51:{code:"OHR",name:"Ohrid"},52:{code:"OSL",name:"Oslomej"},53:{code:"PEH",name:"Pehčevo"},54:{code:"PET",name:"Petrovec"},55:{code:"PLA",name:"Plasnica"},56:{code:"PRI",name:"Prilep"},57:{code:"PRO",name:"Probištip"},58:{code:"RAD",name:"Radoviš"},59:{code:"RAN",name:"Rankovce"},60:{code:"RES",name:"Resen"},61:{code:"ROS",name:"Rosoman"},62:{code:"SAR",name:"Saraj"},63:{code:"SOP",name:"Sopište"},64:{code:"STA",name:"Star Dojran"},65:{code:"STA",name:"Staro Nagoričane"},66:{code:"ŠTI",name:"Štip"},67:{code:"STR",name:"Struga"},68:{code:"STR",name:"Strumica"},69:{code:"STU",name:"Studeničani"},70:{code:"ŠUT",name:"Šuto Orizari"},71:{code:"SVE",name:"Sveti Nikole"},72:{code:"TEA",name:"Tearce"},73:{code:"TET",name:"Tetovo"},74:{code:"VAL",name:"Valandovo"},75:{code:"VAS",name:"Vasilevo"},76:{code:"VEL",name:"Veles"},77:{code:"VEV",name:"Vevčani"},78:{code:"VIN",name:"Vinica"},79:{code:"VRA",name:"Vraneštica"},80:{code:"VRA",name:"Vrapčište"},81:{code:"ZAJ",name:"Zajas"},82:{code:"ZEL",name:"Zelenikovo"},83:{code:"ŽEL",name:"Želino"},84:{code:"ZRN",name:"Zrnovci"}},MG:{1:{code:"AN",name:"Antananarivo"},2:{code:"AS",name:"Antsiranana"},3:{code:"FN",name:"Fianarantsoa"},4:{code:"MJ",name:"Mahajanga"},5:{code:"TM",name:"Toamasina"},6:{code:"TL",name:"Toliara"}},MW:{1:{code:"BLK",name:"Balaka"},2:{code:"BLT",name:"Blantyre"},3:{code:"CKW",name:"Chikwawa"},4:{code:"CRD",name:"Chiradzulu"},5:{code:"CTP",name:"Chitipa"},6:{code:"DDZ",name:"Dedza"},7:{code:"DWA",name:"Dowa"},8:{code:"KRG",name:"Karonga"},9:{code:"KSG",name:"Kasungu"},10:{code:"LKM",name:"Likoma"},11:{code:"LLG",name:"Lilongwe"},12:{code:"MCG",name:"Machinga"},13:{code:"MGC",name:"Mangochi"},14:{code:"MCH",name:"Mchinji"},15:{code:"MLJ",name:"Mulanje"},16:{code:"MWZ",name:"Mwanza"},17:{code:"MZM",name:"Mzimba"},18:{code:"NTU",name:"Ntcheu"},19:{code:"NKB",name:"Nkhata Bay"},20:{code:"NKH",name:"Nkhotakota"},21:{code:"NSJ",name:"Nsanje"},22:{code:"NTI",name:"Ntchisi"},23:{code:"PHL",name:"Phalombe"},24:{code:"RMP",name:"Rumphi"},25:{code:"SLM",name:"Salima"},26:{code:"THY",name:"Thyolo"},27:{code:"ZBA",name:"Zomba"}},MY:{1:{code:"Johor",name:"Johor"},2:{code:"Kedah",name:"Kedah"},3:{code:"Kelantan",name:"Kelantan"},4:{code:"Labuan",name:"Labuan"},5:{code:"Melaka",name:"Melaka"},6:{code:"Negeri Sembilan",name:"Negeri Sembilan"},7:{code:"Pahang",name:"Pahang"},8:{code:"Perak",name:"Perak"},9:{code:"Perlis",name:"Perlis"},10:{code:"Pulau Pinang",name:"Pulau Pinang"},11:{code:"Sabah",name:"Sabah"},12:{code:"Sarawak",name:"Sarawak"},13:{code:"Selangor",name:"Selangor"},14:{code:"Terengganu",name:"Terengganu"},15:{code:"Kuala Lumpur",name:"Kuala Lumpur"}},MV:{1:{code:"AAD",name:"Ari Atoll Dheknu"},2:{code:"AAU",name:"Ari Atoll Uthuru"},3:{code:"ADD",name:"Addu"},4:{code:"FAA",name:"Faadhippolhu"},5:{code:"FEA",name:"Felidhe Atoll"},6:{code:"FMU",name:"Fua Mulaku"},7:{code:"HAD",name:"Huvadhu Atoll Dhekunu"},8:{code:"HAU",name:"Huvadhu Atoll Uthuru"},9:{code:"HDH",name:"Hadhdhunmathi"},10:{code:"KLH",name:"Kolhumadulu"},11:{code:"MAA",name:"Male Atoll"},12:{code:"MAD",name:"Maalhosmadulu Dhekunu"},13:{code:"MAU",name:"Maalhosmadulu Uthuru"},14:{code:"MLD",name:"Miladhunmadulu Dhekunu"},15:{code:"MLU",name:"Miladhunmadulu Uthuru"},16:{code:"MUA",name:"Mulaku Atoll"},17:{code:"NAD",name:"Nilandhe Atoll Dhekunu"},18:{code:"NAU",name:"Nilandhe Atoll Uthuru"},19:{code:"THD",name:"Thiladhunmathi Dhekunu"},20:{code:"THU",name:"Thiladhunmathi Uthuru"}},ML:{1:{code:"GA",name:"Gao"},2:{code:"KY",name:"Kayes"},3:{code:"KD",name:"Kidal"},4:{code:"KL",name:"Koulikoro"},5:{code:"MP",name:"Mopti"},6:{code:"SG",name:"Segou"},7:{code:"SK",name:"Sikasso"},8:{code:"TB",name:"Tombouctou"},9:{code:"CD",name:"Bamako Capital District"}},MT:{1:{code:"ATT",name:"Attard"},2:{code:"BAL",name:"Balzan"},3:{code:"BGU",name:"Birgu"},4:{code:"BKK",name:"Birkirkara"},5:{code:"BRZ",name:"Birzebbuga"},6:{code:"BOR",name:"Bormla"},7:{code:"DIN",name:"Dingli"},8:{code:"FGU",name:"Fgura"},9:{code:"FLO",name:"Floriana"},10:{code:"GDJ",name:"Gudja"},11:{code:"GZR",name:"Gzira"},12:{code:"GRG",name:"Gargur"},13:{code:"GXQ",name:"Gaxaq"},14:{code:"HMR",name:"Hamrun"},15:{code:"IKL",name:"Iklin"},16:{code:"ISL",name:"Isla"},17:{code:"KLK",name:"Kalkara"},18:{code:"KRK",name:"Kirkop"},19:{code:"LIJ",name:"Lija"},20:{code:"LUQ",name:"Luqa"},21:{code:"MRS",name:"Marsa"},22:{code:"MKL",name:"Marsaskala"},23:{code:"MXL",name:"Marsaxlokk"},24:{code:"MDN",name:"Mdina"},25:{code:"MEL",name:"Melliea"},26:{code:"MGR",name:"Mgarr"},27:{code:"MST",name:"Mosta"},28:{code:"MQA",name:"Mqabba"},29:{code:"MSI",name:"Msida"},30:{code:"MTF",name:"Mtarfa"},31:{code:"NAX",name:"Naxxar"},32:{code:"PAO",name:"Paola"},33:{code:"PEM",name:"Pembroke"},34:{code:"PIE",name:"Pieta"},35:{code:"QOR",name:"Qormi"},36:{code:"QRE",name:"Qrendi"},37:{code:"RAB",name:"Rabat"},38:{code:"SAF",name:"Safi"},39:{code:"SGI",name:"San Giljan"},40:{code:"SLU",name:"Santa Lucija"},41:{code:"SPB",name:"San Pawl il-Bahar"},42:{code:"SGW",name:"San Gwann"},43:{code:"SVE",name:"Santa Venera"},44:{code:"SIG",name:"Siggiewi"},45:{code:"SLM",name:"Sliema"},46:{code:"SWQ",name:"Swieqi"},47:{code:"TXB",name:"Ta Xbiex"},48:{code:"TRX",name:"Tarxien"},49:{code:"VLT",name:"Valletta"},50:{code:"XGJ",name:"Xgajra"},51:{code:"ZBR",name:"Zabbar"},52:{code:"ZBG",name:"Zebbug"},53:{code:"ZJT",name:"Zejtun"},54:{code:"ZRQ",name:"Zurrieq"},55:{code:"FNT",name:"Fontana"},56:{code:"GHJ",name:"Ghajnsielem"},57:{code:"GHR",name:"Gharb"},58:{code:"GHS",name:"Ghasri"},59:{code:"KRC",name:"Kercem"},60:{code:"MUN",name:"Munxar"},61:{code:"NAD",name:"Nadur"},62:{code:"QAL",name:"Qala"},63:{code:"VIC",name:"Victoria"},64:{code:"SLA",name:"San Lawrenz"},65:{code:"SNT",name:"Sannat"},66:{code:"ZAG",name:"Xagra"},67:{code:"XEW",name:"Xewkija"},68:{code:"ZEB",name:"Zebbug"}},MH:{1:{code:"ALG",name:"Ailinginae"},2:{code:"ALL",name:"Ailinglaplap"},3:{code:"ALK",name:"Ailuk"},4:{code:"ARN",name:"Arno"},5:{code:"AUR",name:"Aur"},6:{code:"BKR",name:"Bikar"},7:{code:"BKN",name:"Bikini"},8:{code:"BKK",name:"Bokak"},9:{code:"EBN",name:"Ebon"},10:{code:"ENT",name:"Enewetak"},11:{code:"EKB",name:"Erikub"},12:{code:"JBT",name:"Jabat"},13:{code:"JLT",name:"Jaluit"},14:{code:"JEM",name:"Jemo"},15:{code:"KIL",name:"Kili"},16:{code:"KWJ",name:"Kwajalein"},17:{code:"LAE",name:"Lae"},18:{code:"LIB",name:"Lib"},19:{code:"LKP",name:"Likiep"},20:{code:"MJR",name:"Majuro"},21:{code:"MLP",name:"Maloelap"},22:{code:"MJT",name:"Mejit"},23:{code:"MIL",name:"Mili"},24:{code:"NMK",name:"Namorik"},25:{code:"NAM",name:"Namu"},26:{code:"RGL",name:"Rongelap"},27:{code:"RGK",name:"Rongrik"},28:{code:"TOK",name:"Toke"},29:{code:"UJA",name:"Ujae"},30:{code:"UJL",name:"Ujelang"},31:{code:"UTK",name:"Utirik"},32:{code:"WTH",name:"Wotho"},33:{code:"WTJ",name:"Wotje"}},MQ:{1:{code:"LAJ",name:"L'Ajoupa-Bouillon"},2:{code:"LES",name:"Les Anses-d'Arlet"},3:{code:"BAS",name:"Basse-Pointe"},4:{code:"BEL",name:"Bellefontaine"},5:{code:"LE",name:"Le Carbet"},6:{code:"CAS",name:"Case-Pilote"},7:{code:"LE",name:"Le Diamant"},8:{code:"DUC",name:"Ducos"},9:{code:"FON",name:"Fonds-Saint-Denis"},10:{code:"FOR",name:"Fort-De-France"},11:{code:"LE",name:"Le François"},12:{code:"GRA",name:"Grand'Rivière"},13:{code:"GRO",name:"Gros-Morne"},14:{code:"LE",name:"Le Lamentin"},15:{code:"LE",name:"Le Lorrain"},16:{code:"MAC",name:"Macouba"},17:{code:"LE",name:"Le Marigot"},18:{code:"LE",name:"Le Marin"},19:{code:"LE",name:"Le Morne-Rouge"},20:{code:"LE",name:"Le Morne-Vert"},21:{code:"LE",name:"Le Prêcheur"},22:{code:"RIV",name:"Rivière-Pilote"},23:{code:"RIV",name:"Rivière-Salée"},24:{code:"LE",name:"Le Robert"},25:{code:"SAI",name:"Sainte-Anne"},26:{code:"SAI",name:"Sainte-Luce"},27:{code:"SAI",name:"Sainte-Marie"},28:{code:"SAI",name:"Saint-Esprit"},29:{code:"SAI",name:"Saint-Joseph"},30:{code:"SAI",name:"Saint-Pierre"},31:{code:"SCH",name:"Schœlcher"},32:{code:"LA",name:"La Trinité"},33:{code:"LES",name:"Les Trois-Îlets"},34:{code:"LE",name:"Le Vauclin"}},MR:{1:{code:"AD",name:"Adrar"},2:{code:"AS",name:"Assaba"},3:{code:"BR",name:"Brakna"},4:{code:"DN",name:"Dakhlet Nouadhibou"},5:{code:"GO",name:"Gorgol"},6:{code:"GM",name:"Guidimaka"},7:{code:"HC",name:"Hodh Ech Chargui"},8:{code:"HG",name:"Hodh El Gharbi"},9:{code:"IN",name:"Inchiri"},10:{code:"TA",name:"Tagant"},11:{code:"TZ",name:"Tiris Zemmour"},12:{code:"TR",name:"Trarza"},13:{code:"NO",name:"Nouakchott"}},MU:{1:{code:"AG",name:"Agalega Islands"},2:{code:"BL",name:"Black River"},3:{code:"BR",name:"Beau Bassin-Rose Hill"},4:{code:"CC",name:"Cargados Carajos Shoals (Saint B)"},5:{code:"CU",name:"Curepipe"},6:{code:"FL",name:"Flacq"},7:{code:"GP",name:"Grand Port"},8:{code:"MO",name:"Moka"},9:{code:"PA",name:"Pamplemousses"},10:{code:"PL",name:"Port Louis"},11:{code:"PU",name:"Port Louis"},12:{code:"PW",name:"Plaines Wilhems"},13:{code:"QB",name:"Quatre Bornes"},14:{code:"RO",name:"Rodrigues"},15:{code:"RR",name:"Riviere du Rempart"},16:{code:"SA",name:"Savanne"},17:{code:"VP",name:"Vacoas-Phoenix"}},YT:{1:{code:"DZA",name:"Dzaoudzi"},2:{code:"PAM",name:"Pamandzi"},3:{code:"MAM",name:"Mamoudzou"},4:{code:"DEM",name:"Dembeni"},5:{code:"BAN",name:"Bandrele"},6:{code:"KAN",name:"Kani-Kéli"},7:{code:"BOU",name:"Bouéni"},8:{code:"CHI",name:"Chirongui"},9:{code:"SAD",name:"Sada"},10:{code:"OUA",name:"Ouangani"},11:{code:"CHI",name:"Chiconi"},12:{code:"TSI",name:"Tsingoni"},13:{code:"MTS",name:"M'Tsangamouji"},14:{code:"ACO",name:"Acoua"},15:{code:"MTS",name:"Mtsamboro"},16:{code:"BAN",name:"Bandraboua"},17:{code:"KOU",name:"Koungou"}},MX:{1:{code:"AGU",name:"Aguascalientes"},2:{code:"BCN",name:"Baja California Norte"},3:{code:"BCS",name:"Baja California Sur"},4:{code:"CAM",name:"Campeche"},5:{code:"CHP",name:"Chiapas"},6:{code:"CHH",name:"Chihuahua"},7:{code:"COA",name:"Coahuila de Zaragoza"},8:{code:"COL",name:"Colima"},9:{code:"DIF",name:"Distrito Federal"},10:{code:"DUR",name:"Durango"},11:{code:"GUA",name:"Guanajuato"},12:{code:"GRO",name:"Guerrero"},13:{code:"HID",name:"Hidalgo"},14:{code:"JAL",name:"Jalisco"},15:{code:"MEX",name:"Mexico"},16:{code:"MIC",name:"Michoacan de Ocampo"},17:{code:"MOR",name:"Morelos"},18:{code:"NAY",name:"Nayarit"},19:{code:"NLE",name:"Nuevo Leon"},20:{code:"OAX",name:"Oaxaca"},21:{code:"PUE",name:"Puebla"},22:{code:"QUE",name:"Queretaro de Arteaga"},23:{code:"ROO",name:"Quintana Roo"},24:{code:"SLP",name:"San Luis Potosi"},25:{code:"SIN",name:"Sinaloa"},26:{code:"SON",name:"Sonora"},27:{code:"TAB",name:"Tabasco"},28:{code:"TAM",name:"Tamaulipas"},29:{code:"TLA",name:"Tlaxcala"},30:{code:"VER",name:"Veracruz-Llave"},31:{code:"YUC",name:"Yucatan"},32:{code:"ZAC",name:"Zacatecas"}},FM:{1:{code:"C",name:"Chuuk"},2:{code:"K",name:"Kosrae"},3:{code:"P",name:"Pohnpei"},4:{code:"Y",name:"Yap"}},MD:{1:{code:"GA",name:"Gagauzia"},2:{code:"CU",name:"Chisinau"},3:{code:"BA",name:"Balti"},4:{code:"CA",name:"Cahul"},5:{code:"ED",name:"Edinet"},6:{code:"LA",name:"Lapusna"},7:{code:"OR",name:"Orhei"},8:{code:"SO",name:"Soroca"},9:{code:"TI",name:"Tighina"},10:{code:"UN",name:"Ungheni"},11:{code:"SN",name:"Stânga Nistrului"}},MC:{1:{code:"FV",name:"Fontvieille"},2:{code:"LC",name:"La Condamine"},3:{code:"MV",name:"Monaco-Ville"},4:{code:"MC",name:"Monte-Carlo"}},MN:{1:{code:"1",name:"Ulanbaatar"},2:{code:"035",name:"Orhon"},3:{code:"037",name:"Darhan uul"},4:{code:"039",name:"Hentiy"},5:{code:"041",name:"Hovsgol"},6:{code:"043",name:"Hovd"},7:{code:"046",name:"Uvs"},8:{code:"047",name:"Tov"},9:{code:"049",name:"Selenge"},10:{code:"051",name:"Suhbaatar"},11:{code:"053",name:"Omnogovi"},12:{code:"055",name:"Ovorhangay"},13:{code:"057",name:"Dzavhan"},14:{code:"059",name:"DundgovL"},15:{code:"061",name:"Dornod"},16:{code:"063",name:"Dornogov"},17:{code:"064",name:"Govi-Sumber"},18:{code:"065",name:"Govi-Altay"},19:{code:"067",name:"Bulgan"},20:{code:"069",name:"Bayanhongor"},21:{code:"071",name:"Bayan-Olgiy"},22:{code:"073",name:"Arhangay"}},MS:{1:{code:"A",name:"Saint Anthony"},2:{code:"G",name:"Saint Georges"},3:{code:"P",name:"Saint Peter"}},MA:{1:{code:"AGD",name:"Agadir"},2:{code:"HOC",name:"Al Hoceima"},3:{code:"AZI",name:"Azilal"},4:{code:"BME",name:"Beni Mellal"},5:{code:"BSL",name:"Ben Slimane"},6:{code:"BLM",name:"Boulemane"},7:{code:"CBL",name:"Casablanca"},8:{code:"CHA",name:"Chaouen"},9:{code:"EJA",name:"El Jadida"},10:{code:"EKS",name:"El Kelaa des Sraghna"},11:{code:"ERA",name:"Er Rachidia"},12:{code:"ESS",name:"Essaouira"},13:{code:"FES",name:"Fes"},14:{code:"FIG",name:"Figuig"},15:{code:"GLM",name:"Guelmim"},16:{code:"IFR",name:"Ifrane"},17:{code:"KEN",name:"Kenitra"},18:{code:"KHM",name:"Khemisset"},19:{code:"KHN",name:"Khenifra"},20:{code:"KHO",name:"Khouribga"},21:{code:"LYN",name:"Laayoune"},22:{code:"LAR",name:"Larache"},23:{code:"MRK",name:"Marrakech"},24:{code:"MKN",name:"Meknes"},25:{code:"NAD",name:"Nador"},26:{code:"ORZ",name:"Ouarzazate"},27:{code:"OUJ",name:"Oujda"},28:{code:"RSA",name:"Rabat-Sale"},29:{code:"SAF",name:"Safi"},30:{code:"SET",name:"Settat"},31:{code:"SKA",name:"Sidi Kacem"},32:{code:"TGR",name:"Tangier"},33:{code:"TAN",name:"Tan-Tan"},34:{code:"TAO",name:"Taounate"},35:{code:"TRD",name:"Taroudannt"},36:{code:"TAT",name:"Tata"},37:{code:"TAZ",name:"Taza"},38:{code:"TET",name:"Tetouan"},39:{code:"TIZ",name:"Tiznit"},40:{code:"ADK",name:"Ad Dakhla"},41:{code:"BJD",name:"Boujdour"},42:{code:"ESM",name:"Es Smara"}},MZ:{1:{code:"CD",name:"Cabo Delgado"},2:{code:"GZ",name:"Gaza"},3:{code:"IN",name:"Inhambane"},4:{code:"MN",name:"Manica"},5:{code:"MC",name:"Maputo (city)"},6:{code:"MP",name:"Maputo"},7:{code:"NA",name:"Nampula"},8:{code:"NI",name:"Niassa"},9:{code:"SO",name:"Sofala"},10:{code:"TE",name:"Tete"},11:{code:"ZA",name:"Zambezia"}},MM:{1:{code:"AY",name:"Ayeyarwady"},2:{code:"BG",name:"Bago"},3:{code:"MG",name:"Magway"},4:{code:"MD",name:"Mandalay"},5:{code:"SG",name:"Sagaing"},6:{code:"TN",name:"Tanintharyi"},7:{code:"YG",name:"Yangon"},8:{code:"CH",name:"Chin State"},9:{code:"KC",name:"Kachin State"},10:{code:"KH",name:"Kayah State"},11:{code:"KN",name:"Kayin State"},12:{code:"MN",name:"Mon State"},13:{code:"RK",name:"Rakhine State"},14:{code:"SH",name:"Shan State"}},NA:{1:{code:"CA",name:"Caprivi"},2:{code:"ER",name:"Erongo"},3:{code:"HA",name:"Hardap"},4:{code:"KR",name:"Karas"},5:{code:"KV",name:"Kavango"},6:{code:"KH",name:"Khomas"},7:{code:"KU",name:"Kunene"},8:{code:"OW",name:"Ohangwena"},9:{code:"OK",name:"Omaheke"},10:{code:"OT",name:"Omusati"},11:{code:"ON",name:"Oshana"},12:{code:"OO",name:"Oshikoto"},13:{code:"OJ",name:"Otjozondjupa"}},NR:{1:{code:"AO",name:"Aiwo"},2:{code:"AA",name:"Anabar"},3:{code:"AT",name:"Anetan"},4:{code:"AI",name:"Anibare"},5:{code:"BA",name:"Baiti"},6:{code:"BO",name:"Boe"},7:{code:"BU",name:"Buada"},8:{code:"DE",name:"Denigomodu"},9:{code:"EW",name:"Ewa"},10:{code:"IJ",name:"Ijuw"},11:{code:"ME",name:"Meneng"},12:{code:"NI",name:"Nibok"},13:{code:"UA",name:"Uaboe"},14:{code:"YA",name:"Yaren"}},NP:{1:{code:"BA",name:"Bagmati"},2:{code:"BH",name:"Bheri"},3:{code:"DH",name:"Dhawalagiri"},4:{code:"GA",name:"Gandaki"},5:{code:"JA",name:"Janakpur"},6:{code:"KA",name:"Karnali"},7:{code:"KO",name:"Kosi"},8:{code:"LU",name:"Lumbini"},9:{code:"MA",name:"Mahakali"},10:{code:"ME",name:"Mechi"},11:{code:"NA",name:"Narayani"},12:{code:"RA",name:"Rapti"},13:{code:"SA",name:"Sagarmatha"},14:{code:"SE",name:"Seti"}},NL:{1:{code:"DR",name:"Drenthe"},2:{code:"FL",name:"Flevoland"},3:{code:"FR",name:"Friesland"},4:{code:"GE",name:"Gelderland"},5:{code:"GR",name:"Groningen"},6:{code:"LI",name:"Limburg"},7:{code:"NB",name:"Noord Brabant"},8:{code:"NH",name:"Noord Holland"},9:{code:"OV",name:"Overijssel"},10:{code:"UT",name:"Utrecht"},11:{code:"ZE",name:"Zeeland"},12:{code:"ZH",name:"Zuid Holland"}},AN:{1:{code:"BON",name:"Bonaire"},2:{code:"CUR",name:"Curaçao"},3:{code:"SAB",name:"Saba"},4:{code:"SEU",name:"Sint Eustatius"},5:{code:"SMA",name:"Sint Maarten"}},NC:{1:{code:"L",name:"Iles Loyaute"},2:{code:"N",name:"Nord"},3:{code:"S",name:"Sud"}},NZ:{1:{code:"AUK",name:"Auckland"},2:{code:"BOP",name:"Bay of Plenty"},3:{code:"CAN",name:"Canterbury"},4:{code:"COR",name:"Coromandel"},5:{code:"GIS",name:"Gisborne"},6:{code:"FIO",name:"Fiordland"},7:{code:"HKB",name:"Hawke's Bay"},8:{code:"MBH",name:"Marlborough"},9:{code:"MWT",name:"Manawatu-Wanganui"},10:{code:"MCM",name:"Mt Cook-Mackenzie"},11:{code:"NSN",name:"Nelson"},12:{code:"NTL",name:"Northland"},13:{code:"OTA",name:"Otago"},14:{code:"STL",name:"Southland"},15:{code:"TKI",name:"Taranaki"},16:{code:"WGN",name:"Wellington"},17:{code:"WKO",name:"Waikato"},18:{code:"WAI",name:"Wairprarapa"},19:{code:"WTC",name:"West Coast"}},NI:{1:{code:"AN",name:"Atlantico Norte"},2:{code:"AS",name:"Atlantico Sur"},3:{code:"BO",name:"Boaco"},4:{code:"CA",name:"Carazo"},5:{code:"CI",name:"Chinandega"},6:{code:"CO",name:"Chontales"},7:{code:"ES",name:"Esteli"},8:{code:"GR",name:"Granada"},9:{code:"JI",name:"Jinotega"},10:{code:"LE",name:"Leon"},11:{code:"MD",name:"Madriz"},12:{code:"MN",name:"Managua"},13:{code:"MS",name:"Masaya"},14:{code:"MT",name:"Matagalpa"},15:{code:"NS",name:"Nuevo Segovia"},16:{code:"RS",name:"Rio San Juan"},17:{code:"RI",name:"Rivas"}},NE:{1:{code:"AG",name:"Agadez"},2:{code:"DF",name:"Diffa"},3:{code:"DS",name:"Dosso"},4:{code:"MA",name:"Maradi"},5:{code:"NM",name:"Niamey"},6:{code:"TH",name:"Tahoua"},7:{code:"TL",name:"Tillaberi"},8:{code:"ZD",name:"Zinder"}},NG:{1:{code:"AB",name:"Abia"},2:{code:"CT",name:"Abuja Federal Capital Territory"},3:{code:"AD",name:"Adamawa"},4:{code:"AK",name:"Akwa Ibom"},5:{code:"AN",name:"Anambra"},6:{code:"BC",name:"Bauchi"},7:{code:"BY",name:"Bayelsa"},8:{code:"BN",name:"Benue"},9:{code:"BO",name:"Borno"},10:{code:"CR",name:"Cross River"},11:{code:"DE",name:"Delta"},12:{code:"EB",name:"Ebonyi"},13:{code:"ED",name:"Edo"},14:{code:"EK",name:"Ekiti"},15:{code:"EN",name:"Enugu"},16:{code:"GO",name:"Gombe"},17:{code:"IM",name:"Imo"},18:{code:"JI",name:"Jigawa"},19:{code:"KD",name:"Kaduna"},20:{code:"KN",name:"Kano"},21:{code:"KT",name:"Katsina"},22:{code:"KE",name:"Kebbi"},23:{code:"KO",name:"Kogi"},24:{code:"KW",name:"Kwara"},25:{code:"LA",name:"Lagos"},26:{code:"NA",name:"Nassarawa"},27:{code:"NI",name:"Niger"},28:{code:"OG",name:"Ogun"},29:{code:"ONG",name:"Ondo"},30:{code:"OS",name:"Osun"},31:{code:"OY",name:"Oyo"},32:{code:"PL",name:"Plateau"},33:{code:"RI",name:"Rivers"},34:{code:"SO",name:"Sokoto"},35:{code:"TA",name:"Taraba"},36:{code:"YO",name:"Yobe"},37:{code:"ZA",name:"Zamfara"}},NU:{1:{code:"MAK",name:"Makefu"},2:{code:"TUA",name:"Tuapa"},3:{code:"NAM",name:"Namukulu"},4:{code:"HIK",name:"Hikutavake"},5:{code:"TOI",name:"Toi"},6:{code:"MUT",name:"Mutalau"},7:{code:"LAK",name:"Lakepa"},8:{code:"LIK",name:"Liku"},9:{code:"HAK",name:"Hakupu"},10:{code:"VAI",name:"Vaiea"},11:{code:"AVA",name:"Avatele"},12:{code:"TAM",name:"Tamakautoga"},13:{code:"ALO",name:"Alofi South"},14:{code:"ALO",name:"Alofi North"}},NF:{1:{code:"NOR",name:"Norfolk Island"}},MP:{1:{code:"N",name:"Northern Islands"},2:{code:"R",name:"Rota"},3:{code:"S",name:"Saipan"},4:{code:"T",name:"Tinian"}},NO:{1:{code:"AK",name:"Akershus"},2:{code:"AA",name:"Aust-Agder"},3:{code:"BU",name:"Buskerud"},4:{code:"FM",name:"Finnmark"},5:{code:"HM",name:"Hedmark"},6:{code:"HL",name:"Hordaland"},7:{code:"MR",name:"Møre og Romsdal"},8:{code:"NL",name:"Nordland"},9:{code:"NT",name:"Nord-Trøndelag"},10:{code:"OP",name:"Oppland"},11:{code:"OL",name:"Oslo"},12:{code:"RL",name:"Rogaland"},13:{code:"SJ",name:"Sogn og Fjordane"},14:{code:"ST",name:"Sør-Trøndelag"},15:{code:"SV",name:"Svalbard"},16:{code:"TM",name:"Telemark"},17:{code:"TR",name:"Troms"},18:{code:"VA",name:"Vest-Agder"},19:{code:"VF",name:"Vestfold"},20:{code:"OF",name:"Østfold"}},OM:{1:{code:"DA",name:"Ad Dakhiliyah"},2:{code:"BA",name:"Al Batinah"},3:{code:"WU",name:"Al Wusta"},4:{code:"SH",name:"Ash Sharqiyah"},5:{code:"ZA",name:"Az Zahirah"},6:{code:"MA",name:"Masqat"},7:{code:"MU",name:"Musandam"},8:{code:"ZU",name:"Zufar"}},PK:{1:{code:"B",name:"Balochistan"},2:{code:"T",name:"Federally Administered Tribal Ar"},3:{code:"I",name:"Islamabad Capital Territory"},4:{code:"N",name:"North-West Frontier"},5:{code:"P",name:"Punjab"},6:{code:"S",name:"Sindh"}},PW:{1:{code:"AM",name:"Aimeliik"},2:{code:"AR",name:"Airai"},3:{code:"AN",name:"Angaur"},4:{code:"HA",name:"Hatohobei"},5:{code:"KA",name:"Kayangel"},6:{code:"KO",name:"Koror"},7:{code:"ME",name:"Melekeok"},8:{code:"NA",name:"Ngaraard"},9:{code:"NG",name:"Ngarchelong"},10:{code:"ND",name:"Ngardmau"},11:{code:"NT",name:"Ngatpang"},12:{code:"NC",name:"Ngchesar"},13:{code:"NR",name:"Ngeremlengui"},14:{code:"NW",name:"Ngiwal"},15:{code:"PE",name:"Peleliu"},16:{code:"SO",name:"Sonsorol"}},PA:{1:{code:"BT",name:"Bocas del Toro"},2:{code:"CH",name:"Chiriqui"},3:{code:"CC",name:"Cocle"},4:{code:"CL",name:"Colon"},5:{code:"DA",name:"Darien"},6:{code:"HE",name:"Herrera"},7:{code:"LS",name:"Los Santos"},8:{code:"PA",name:"Panama"},9:{code:"SB",name:"San Blas"},10:{code:"VG",name:"Veraguas"}},PG:{1:{code:"BV",name:"Bougainville"},2:{code:"CE",name:"Central"},3:{code:"CH",name:"Chimbu"},4:{code:"EH",name:"Eastern Highlands"},5:{code:"EB",name:"East New Britain"},6:{code:"ES",name:"East Sepik"},7:{code:"EN",name:"Enga"},8:{code:"GU",name:"Gulf"},9:{code:"MD",name:"Madang"},10:{code:"MN",name:"Manus"},11:{code:"MB",name:"Milne Bay"},12:{code:"MR",name:"Morobe"},13:{code:"NC",name:"National Capital"},14:{code:"NI",name:"New Ireland"},15:{code:"NO",name:"Northern"},16:{code:"SA",name:"Sandaun"},17:{code:"SH",name:"Southern Highlands"},18:{code:"WE",name:"Western"},19:{code:"WH",name:"Western Highlands"},20:{code:"WB",name:"West New Britain"}},PY:{1:{code:"AG",name:"Alto Paraguay"},2:{code:"AN",name:"Alto Parana"},3:{code:"AM",name:"Amambay"},4:{code:"AS",name:"Asuncion"},5:{code:"BO",name:"Boqueron"},6:{code:"CG",name:"Caaguazu"},7:{code:"CZ",name:"Caazapa"},8:{code:"CN",name:"Canindeyu"},9:{code:"CE",name:"Central"},10:{code:"CC",name:"Concepcion"},11:{code:"CD",name:"Cordillera"},12:{code:"GU",name:"Guaira"},13:{code:"IT",name:"Itapua"},14:{code:"MI",name:"Misiones"},15:{code:"NE",name:"Neembucu"},16:{code:"PA",name:"Paraguari"},17:{code:"PH",name:"Presidente Hayes"},18:{code:"SP",name:"San Pedro"}},PE:{1:{code:"AM",name:"Amazonas"},2:{code:"AN",name:"Ancash"},3:{code:"AP",name:"Apurimac"},4:{code:"AR",name:"Arequipa"},5:{code:"AY",name:"Ayacucho"},6:{code:"CJ",name:"Cajamarca"},7:{code:"CL",name:"Callao"},8:{code:"CU",name:"Cusco"},9:{code:"HV",name:"Huancavelica"},10:{code:"HO",name:"Huanuco"},11:{code:"IC",name:"Ica"},12:{code:"JU",name:"Junin"},13:{code:"LD",name:"La Libertad"},14:{code:"LY",name:"Lambayeque"},15:{code:"LI",name:"Lima"},16:{code:"LO",name:"Loreto"},17:{code:"MD",name:"Madre de Dios"},18:{code:"MO",name:"Moquegua"},19:{code:"PA",name:"Pasco"},20:{code:"PI",name:"Piura"},21:{code:"PU",name:"Puno"},22:{code:"SM",name:"San Martin"},23:{code:"TA",name:"Tacna"},24:{code:"TU",name:"Tumbes"},25:{code:"UC",name:"Ucayali"}},PH:{1:{code:"ABR",name:"Abra"},2:{code:"ANO",name:"Agusan del Norte"},3:{code:"ASU",name:"Agusan del Sur"},4:{code:"AKL",name:"Aklan"},5:{code:"ALB",name:"Albay"},6:{code:"ANT",name:"Antique"},7:{code:"APY",name:"Apayao"},8:{code:"AUR",name:"Aurora"},9:{code:"BAS",name:"Basilan"},10:{code:"BTA",name:"Bataan"},11:{code:"BTE",name:"Batanes"},12:{code:"BTG",name:"Batangas"},13:{code:"BLR",name:"Biliran"},14:{code:"BEN",name:"Benguet"},15:{code:"BOL",name:"Bohol"},16:{code:"BUK",name:"Bukidnon"},17:{code:"BUL",name:"Bulacan"},18:{code:"CAG",name:"Cagayan"},19:{code:"CNO",name:"Camarines Norte"},20:{code:"CSU",name:"Camarines Sur"},21:{code:"CAM",name:"Camiguin"},22:{code:"CAP",name:"Capiz"},23:{code:"CAT",name:"Catanduanes"},24:{code:"CAV",name:"Cavite"},25:{code:"CEB",name:"Cebu"},26:{code:"CMP",name:"Compostela"},27:{code:"DNO",name:"Davao del Norte"},28:{code:"DSU",name:"Davao del Sur"},29:{code:"DOR",name:"Davao Oriental"},30:{code:"ESA",name:"Eastern Samar"},31:{code:"GUI",name:"Guimaras"},32:{code:"IFU",name:"Ifugao"},33:{code:"INO",name:"Ilocos Norte"},34:{code:"ISU",name:"Ilocos Sur"},35:{code:"ILO",name:"Iloilo"},36:{code:"ISA",name:"Isabela"},37:{code:"KAL",name:"Kalinga"},38:{code:"LAG",name:"Laguna"},39:{code:"LNO",name:"Lanao del Norte"},40:{code:"LSU",name:"Lanao del Sur"},41:{code:"UNI",name:"La Union"},42:{code:"LEY",name:"Leyte"},43:{code:"MAG",name:"Maguindanao"},44:{code:"MRN",name:"Marinduque"},45:{code:"MSB",name:"Masbate"},46:{code:"MIC",name:"Mindoro Occidental"},47:{code:"MIR",name:"Mindoro Oriental"},48:{code:"MSC",name:"Misamis Occidental"},49:{code:"MOR",name:"Misamis Oriental"},50:{code:"MOP",name:"Mountain"},51:{code:"NOC",name:"Negros Occidental"},52:{code:"NOR",name:"Negros Oriental"},53:{code:"NCT",name:"North Cotabato"},54:{code:"NSM",name:"Northern Samar"},55:{code:"NEC",name:"Nueva Ecija"},56:{code:"NVZ",name:"Nueva Vizcaya"},57:{code:"PLW",name:"Palawan"},58:{code:"PMP",name:"Pampanga"},59:{code:"PNG",name:"Pangasinan"},60:{code:"QZN",name:"Quezon"},61:{code:"QRN",name:"Quirino"},62:{code:"RIZ",name:"Rizal"},63:{code:"ROM",name:"Romblon"},64:{code:"SMR",name:"Samar"},65:{code:"SRG",name:"Sarangani"},66:{code:"SQJ",name:"Siquijor"},67:{code:"SRS",name:"Sorsogon"},68:{code:"SCO",name:"South Cotabato"},69:{code:"SLE",name:"Southern Leyte"},70:{code:"SKU",name:"Sultan Kudarat"},71:{code:"SLU",name:"Sulu"},72:{code:"SNO",name:"Surigao del Norte"},73:{code:"SSU",name:"Surigao del Sur"},74:{code:"TAR",name:"Tarlac"},75:{code:"TAW",name:"Tawi-Tawi"},76:{code:"ZBL",name:"Zambales"},77:{code:"ZNO",name:"Zamboanga del Norte"},78:{code:"ZSU",name:"Zamboanga del Sur"},79:{code:"ZSI",name:"Zamboanga Sibugay"}},PN:{1:{code:"PIT",name:"Pitcairn Island"}},PL:{1:{code:"DO",name:"Dolnośląskie"},2:{code:"KP",name:"Kujawsko-Pomorskie"},3:{code:"LL",name:"Lubelskie"},4:{code:"LU",name:"Lubuskie"},5:{code:"LO",name:"Łódzkie"},6:{code:"ML",name:"Małopolskie"},7:{code:"MZ",name:"Mazowieckie"},8:{code:"OP",name:"Opolskie"},9:{code:"PP",name:"Podkarpackie"},10:{code:"PL",name:"Podlaskie"},11:{code:"PM",name:"Pomorskie"},12:{code:"SL",name:"Śląskie"},13:{code:"SW",name:"Świętokrzyskie"},14:{code:"WM",name:"Warmińsko-Mazurskie"},15:{code:"WP",name:"Wielkopolskie"},16:{code:"ZA",name:"Zachodniopomorskie"}},PT:{1:{code:"AC",name:"Açores"},2:{code:"AV",name:"Aveiro"},3:{code:"BE",name:"Beja"},4:{code:"BR",name:"Braga"},5:{code:"BA",name:"Bragança"},6:{code:"CB",name:"Castelo Branco"},7:{code:"CO",name:"Coimbra"},8:{code:"EV",name:"évora"},9:{code:"FA",name:"Faro"},10:{code:"GU",name:"Guarda"},12:{code:"LE",name:"Leiria"},13:{code:"LI",name:"Lisboa"},14:{code:"ME",name:"Madeira"},15:{code:"PO",name:"Portalegre"},16:{code:"PR",name:"Porto"},17:{code:"SA",name:"Santarém"},18:{code:"SE",name:"SetÚbal"},19:{code:"VC",name:"Viana do Castelo"},20:{code:"VR",name:"Vila Real"},21:{code:"VI",name:"Viseu"}},PR:{1:{code:"A-A",name:"Añasco"},2:{code:"ADJ",name:"Adjuntas"},3:{code:"AGU",name:"Aguada"},4:{code:"AGU",name:"Aguadilla"},5:{code:"AGU",name:"Aguas Buenas"},6:{code:"AIB",name:"Aibonito"},7:{code:"ARE",name:"Arecibo"},8:{code:"ARR",name:"Arroyo"},9:{code:"BAR",name:"Barceloneta"},10:{code:"BAR",name:"Barranquitas"},11:{code:"BAY",name:"Bayamón"},12:{code:"CAB",name:"Cabo Rojo"},13:{code:"CAG",name:"Caguas"},14:{code:"CAM",name:"Camuy"},15:{code:"CAN",name:"Canóvanas"},16:{code:"CAR",name:"Carolina"},17:{code:"CAT",name:"Cataño"},18:{code:"CAY",name:"Cayey"},19:{code:"CEI",name:"Ceiba"},20:{code:"CIA",name:"Ciales"},21:{code:"CID",name:"Cidra"},22:{code:"COA",name:"Coamo"},23:{code:"COM",name:"Comerío"},24:{code:"COR",name:"Corozal"},25:{code:"CUL",name:"Culebra"},26:{code:"DOR",name:"Dorado"},27:{code:"FAJ",name:"Fajardo"},28:{code:"FLO",name:"Florida"},29:{code:"GUA",name:"Guayama"},30:{code:"GUA",name:"Guayanilla"},31:{code:"GUA",name:"Guaynabo"},32:{code:"GUR",name:"Gurabo"},33:{code:"GU¡",name:"Guánica"},34:{code:"HAT",name:"Hatillo"},35:{code:"HOR",name:"Hormigueros"},36:{code:"HUM",name:"Humacao"},37:{code:"ISA",name:"Isabela"},38:{code:"JAY",name:"Jayuya"},39:{code:"JUA",name:"Juana Díaz"},40:{code:"JUN",name:"Juncos"},41:{code:"LAJ",name:"Lajas"},42:{code:"LAR",name:"Lares"},43:{code:"LAS",name:"Las Marías"},44:{code:"LAS",name:"Las Piedras"},45:{code:"LOÕ",name:"Loíza"},46:{code:"LUQ",name:"Luquillo"},47:{code:"MAN",name:"Manatí"},48:{code:"MAR",name:"Maricao"},49:{code:"MAU",name:"Maunabo"},50:{code:"MAY",name:"Mayagüez"},51:{code:"MOC",name:"Moca"},52:{code:"MOR",name:"Morovis"},53:{code:"NAG",name:"Naguabo"},54:{code:"NAR",name:"Naranjito"},55:{code:"ORO",name:"Orocovis"},56:{code:"PAT",name:"Patillas"},57:{code:"PE-",name:"Peñuelas"},58:{code:"PON",name:"Ponce"},59:{code:"QUE",name:"Quebradillas"},60:{code:"RIN",name:"Rincón"},61:{code:"RIO",name:"Rio Grande"},62:{code:"SAB",name:"Sabana Grande"},63:{code:"SAL",name:"Salinas"},64:{code:"SAN",name:"San Germàn"},65:{code:"SAN",name:"San Juan"},66:{code:"SAN",name:"San Lorenzo"},67:{code:"SAN",name:"San Sebastiàn"},68:{code:"SAN",name:"Santa Isabel"},69:{code:"TOA",name:"Toa Alta"},70:{code:"TOA",name:"Toa Baja"},71:{code:"TRU",name:"Trujillo Alto"},72:{code:"UTU",name:"Utuado"},73:{code:"VEG",name:"Vega Alta"},74:{code:"VEG",name:"Vega Baja"},75:{code:"VIE",name:"Vieques"},76:{code:"VIL",name:"Villalba"},77:{code:"YAB",name:"Yabucoa"},78:{code:"YAU",name:"Yauco"}},QA:{1:{code:"DW",name:"Ad Dawhah"},2:{code:"GW",name:"Al Ghuwayriyah"},3:{code:"JM",name:"Al Jumayliyah"},4:{code:"KR",name:"Al Khawr"},5:{code:"WK",name:"Al Wakrah"},6:{code:"RN",name:"Ar Rayyan"},7:{code:"JB",name:"Jarayan al Batinah"},8:{code:"MS",name:"Madinat ash Shamal"},9:{code:"UD",name:"Umm Sa'id"},10:{code:"UL",name:"Umm Salal"}},RO:{1:{code:"AB",name:"Alba"},2:{code:"AR",name:"Arad"},3:{code:"AG",name:"Arges"},4:{code:"BC",name:"Bacau"},5:{code:"BH",name:"Bihor"},6:{code:"BN",name:"Bistrita-Nasaud"},7:{code:"BT",name:"Botosani"},8:{code:"BV",name:"Brasov"},9:{code:"BR",name:"Braila"},10:{code:"B",name:"Bucuresti"},11:{code:"BZ",name:"Buzau"},12:{code:"CS",name:"Caras-Severin"},13:{code:"CL",name:"Calarasi"},14:{code:"CJ",name:"Cluj"},15:{code:"CT",name:"Constanta"},16:{code:"CV",name:"Covasna"},17:{code:"DB",name:"Dimbovita"},18:{code:"DJ",name:"Dolj"},19:{code:"GL",name:"Galati"},20:{code:"GR",name:"Giurgiu"},21:{code:"GJ",name:"Gorj"},22:{code:"HR",name:"Harghita"},23:{code:"HD",name:"Hunedoara"},24:{code:"IL",name:"Ialomita"},25:{code:"IS",name:"Iasi"},26:{code:"IF",name:"Ilfov"},27:{code:"MM",name:"Maramures"},28:{code:"MH",name:"Mehedinti"},29:{code:"MS",name:"Mures"},30:{code:"NT",name:"Neamt"},31:{code:"OT",name:"Olt"},32:{code:"PH",name:"Prahova"},33:{code:"SM",name:"Satu-Mare"},34:{code:"SJ",name:"Salaj"},35:{code:"SB",name:"Sibiu"},36:{code:"SV",name:"Suceava"},37:{code:"TR",name:"Teleorman"},38:{code:"TM",name:"Timis"},39:{code:"TL",name:"Tulcea"},40:{code:"VS",name:"Vaslui"},41:{code:"VL",name:"Valcea"},42:{code:"VN",name:"Vrancea"}},RU:{1:{code:"AB",name:"Abakan"},2:{code:"AG",name:"Aginskoye"},3:{code:"AN",name:"Anadyr"},4:{code:"AR",name:"Arkahangelsk"},5:{code:"AS",name:"Astrakhan"},6:{code:"BA",name:"Barnaul"},7:{code:"BE",name:"Belgorod"},8:{code:"BI",name:"Birobidzhan"},9:{code:"BL",name:"Blagoveshchensk"},10:{code:"BR",name:"Bryansk"},11:{code:"CH",name:"Cheboksary"},12:{code:"CL",name:"Chelyabinsk"},13:{code:"CR",name:"Cherkessk"},14:{code:"CI",name:"Chita"},15:{code:"DU",name:"Dudinka"},16:{code:"EL",name:"Elista"},17:{code:"GO",name:"Gomo-Altaysk"},18:{code:"GA",name:"Gorno-Altaysk"},19:{code:"GR",name:"Groznyy"},20:{code:"IR",name:"Irkutsk"},21:{code:"IV",name:"Ivanovo"},22:{code:"IZ",name:"Izhevsk"},23:{code:"KA",name:"Kalinigrad"},24:{code:"KL",name:"Kaluga"},25:{code:"KS",name:"Kasnodar"},26:{code:"KZ",name:"Kazan"},27:{code:"KE",name:"Kemerovo"},28:{code:"KH",name:"Khabarovsk"},29:{code:"KM",name:"Khanty-Mansiysk"},30:{code:"KO",name:"Kostroma"},31:{code:"KR",name:"Krasnodar"},32:{code:"KN",name:"Krasnoyarsk"},33:{code:"KU",name:"Kudymkar"},34:{code:"KG",name:"Kurgan"},35:{code:"KK",name:"Kursk"},36:{code:"KY",name:"Kyzyl"},37:{code:"LI",name:"Lipetsk"},38:{code:"MA",name:"Magadan"},39:{code:"MK",name:"Makhachkala"},40:{code:"MY",name:"Maykop"},41:{code:"MO",name:"Moscow"},42:{code:"MU",name:"Murmansk"},43:{code:"NA",name:"Nalchik"},44:{code:"NR",name:"Naryan Mar"},45:{code:"NZ",name:"Nazran"},46:{code:"NI",name:"Nizhniy Novgorod"},47:{code:"NO",name:"Novgorod"},48:{code:"NV",name:"Novosibirsk"},49:{code:"OM",name:"Omsk"},50:{code:"OR",name:"Orel"},51:{code:"OE",name:"Orenburg"},52:{code:"PA",name:"Palana"},53:{code:"PE",name:"Penza"},54:{code:"PR",name:"Perm"},55:{code:"PK",name:"Petropavlovsk-Kamchatskiy"},56:{code:"PT",name:"Petrozavodsk"},57:{code:"PS",name:"Pskov"},58:{code:"RO",name:"Rostov-na-Donu"},59:{code:"RY",name:"Ryazan"},60:{code:"SL",name:"Salekhard"},61:{code:"SA",name:"Samara"},62:{code:"SR",name:"Saransk"},63:{code:"SV",name:"Saratov"},64:{code:"SM",name:"Smolensk"},65:{code:"SP",name:"St. Petersburg"},66:{code:"ST",name:"Stavropol"},67:{code:"SY",name:"Syktyvkar"},68:{code:"TA",name:"Tambov"},69:{code:"TO",name:"Tomsk"},70:{code:"TU",name:"Tula"},71:{code:"TR",name:"Tura"},72:{code:"TV",name:"Tver"},73:{code:"TY",name:"Tyumen"},74:{code:"UF",name:"Ufa"},75:{code:"UL",name:"Ul'yanovsk"},76:{code:"UU",name:"Ulan-Ude"},77:{code:"US",name:"Ust'-Ordynskiy"},78:{code:"VL",name:"Vladikavkaz"},79:{code:"VA",name:"Vladimir"},80:{code:"VV",name:"Vladivostok"},81:{code:"VG",name:"Volgograd"},82:{code:"VD",name:"Vologda"},83:{code:"VO",name:"Voronezh"},84:{code:"VY",name:"Vyatka"},85:{code:"YA",name:"Yakutsk"},86:{code:"YR",name:"Yaroslavl"},87:{code:"YE",name:"Yekaterinburg"},88:{code:"YO",name:"Yoshkar-Ola"}},RW:{1:{code:"BU",name:"Butare"},2:{code:"BY",name:"Byumba"},3:{code:"CY",name:"Cyangugu"},4:{code:"GK",name:"Gikongoro"},5:{code:"GS",name:"Gisenyi"},6:{code:"GT",name:"Gitarama"},7:{code:"KG",name:"Kibungo"},8:{code:"KY",name:"Kibuye"},9:{code:"KR",name:"Kigali Rurale"},10:{code:"KV",name:"Kigali-ville"},11:{code:"RU",name:"Ruhengeri"},12:{code:"UM",name:"Umutara"}},KN:{1:{code:"CCN",name:"Christ Church Nichola Town"},2:{code:"SAS",name:"Saint Anne Sandy Point"},3:{code:"SGB",name:"Saint George Basseterre"},4:{code:"SGG",name:"Saint George Gingerland"},5:{code:"SJW",name:"Saint James Windward"},6:{code:"SJC",name:"Saint John Capesterre"},7:{code:"SJF",name:"Saint John Figtree"},8:{code:"SMC",name:"Saint Mary Cayon"},9:{code:"CAP",name:"Saint Paul Capesterre"},10:{code:"CHA",name:"Saint Paul Charlestown"},11:{code:"SPB",name:"Saint Peter Basseterre"},12:{code:"STL",name:"Saint Thomas Lowland"},13:{code:"STM",name:"Saint Thomas Middle Island"},14:{code:"TPP",name:"Trinity Palmetto Point"}},LC:{1:{code:"AR",name:"Anse-la-Raye"},2:{code:"CA",name:"Castries"},3:{code:"CH",name:"Choiseul"},4:{code:"DA",name:"Dauphin"},5:{code:"DE",name:"Dennery"},6:{code:"GI",name:"Gros-Islet"},7:{code:"LA",name:"Laborie"},8:{code:"MI",name:"Micoud"},9:{code:"PR",name:"Praslin"},10:{code:"SO",name:"Soufriere"},11:{code:"VF",name:"Vieux-Fort"}},VC:{1:{code:"C",name:"Charlotte"},2:{code:"R",name:"Grenadines"},3:{code:"A",name:"Saint Andrew"},4:{code:"D",name:"Saint David"},5:{code:"G",name:"Saint George"},6:{code:"P",name:"Saint Patrick"}},WS:{1:{code:"AN",name:"A'ana"},2:{code:"AI",name:"Aiga-i-le-Tai"},3:{code:"AT",name:"Atua"},4:{code:"FA",name:"Fa'asaleleaga"},5:{code:"GE",name:"Gaga'emauga"},6:{code:"GF",name:"Gagaifomauga"},7:{code:"PA",name:"Palauli"},8:{code:"SA",name:"Satupa'itea"},9:{code:"TU",name:"Tuamasaga"},10:{code:"VF",name:"Va'a-o-Fonoti"},11:{code:"VS",name:"Vaisigano"}},SM:{1:{code:"AC",name:"Acquaviva"},2:{code:"BM",name:"Borgo Maggiore"},3:{code:"CH",name:"Chiesanuova"},4:{code:"DO",name:"Domagnano"},5:{code:"FA",name:"Faetano"},6:{code:"FI",name:"Fiorentino"},7:{code:"MO",name:"Montegiardino"},8:{code:"SM",name:"Citta di San Marino"},9:{code:"SE",name:"Serravalle"}},ST:{1:{code:"S",name:"Sao Tome"},2:{code:"P",name:"Principe"}},SA:{1:{code:"BH",name:"Al Bahah"},2:{code:"HS",name:"Al Hudud ash Shamaliyah"},3:{code:"JF",name:"Al Jawf"},4:{code:"MD",name:"Al Madinah"},5:{code:"QS",name:"Al Qasim"},6:{code:"RD",name:"Ar Riyad"},7:{code:"AQ",name:"Ash Sharqiyah (Eastern)"},8:{code:"AS",name:"'Asir"},9:{code:"HL",name:"Ha'il"},10:{code:"JZ",name:"Jizan"},11:{code:"ML",name:"Makkah"},12:{code:"NR",name:"Najran"},13:{code:"TB",name:"Tabuk"}},SN:{1:{code:"DA",name:"Dakar"},2:{code:"DI",name:"Diourbel"},3:{code:"FA",name:"Fatick"},4:{code:"KA",name:"Kaolack"},5:{code:"KO",name:"Kolda"},6:{code:"LO",name:"Louga"},7:{code:"MA",name:"Matam"},8:{code:"SL",name:"Saint-Louis"},9:{code:"TA",name:"Tambacounda"},10:{code:"TH",name:"Thies"},11:{code:"ZI",name:"Ziguinchor"}},SC:{1:{code:"AP",name:"Anse aux Pins"},2:{code:"AB",name:"Anse Boileau"},3:{code:"AE",name:"Anse Etoile"},4:{code:"AL",name:"Anse Louis"},5:{code:"AR",name:"Anse Royale"},6:{code:"BL",name:"Baie Lazare"},7:{code:"BS",name:"Baie Sainte Anne"},8:{code:"BV",name:"Beau Vallon"},9:{code:"BA",name:"Bel Air"},10:{code:"BO",name:"Bel Ombre"},11:{code:"CA",name:"Cascade"},12:{code:"GL",name:"Glacis"},13:{code:"GM",name:"Grand' Anse (on Mahe)"},14:{code:"GP",name:"Grand' Anse (on Praslin)"},15:{code:"DG",name:"La Digue"},16:{code:"RA",name:"La Riviere Anglaise"},17:{code:"MB",name:"Mont Buxton"},18:{code:"MF",name:"Mont Fleuri"},19:{code:"PL",name:"Plaisance"},20:{code:"PR",name:"Pointe La Rue"},21:{code:"PG",name:"Port Glaud"},22:{code:"SL",name:"Saint Louis"},23:{code:"TA",name:"Takamaka"}},SL:{1:{code:"E",name:"Eastern"},2:{code:"N",name:"Northern"},3:{code:"S",name:"Southern"},4:{code:"W",name:"Western"}},SK:{1:{code:"BA",name:"Banskobystricky"},2:{code:"BR",name:"Bratislavsky"},3:{code:"KO",name:"Kosicky"},4:{code:"NI",name:"Nitriansky"},5:{code:"PR",name:"Presovsky"},6:{code:"TC",name:"Trenciansky"},7:{code:"TV",name:"Trnavsky"},8:{code:"ZI",name:"Zilinsky"}},SI:{1:{code:"4",name:"Štajerska"},2:{code:"2A",name:"Gorenjska"},3:{code:"5",name:"Prekmurje"},4:{code:"3",name:"Koroška"},5:{code:"2B",name:"Notranjska"},6:{code:"1",name:"Primorska"},7:{code:"2C",name:"Dolenjska"},8:{code:"2C",name:"Bela Krajina"}},SB:{1:{code:"CE",name:"Central"},2:{code:"CH",name:"Choiseul"},3:{code:"GC",name:"Guadalcanal"},4:{code:"HO",name:"Honiara"},5:{code:"IS",name:"Isabel"},6:{code:"MK",name:"Makira"},7:{code:"ML",name:"Malaita"},8:{code:"RB",name:"Rennell and Bellona"},9:{code:"TM",name:"Temotu"},10:{code:"WE",name:"Western"}},SO:{1:{code:"AW",name:"Awdal"},2:{code:"BK",name:"Bakool"},3:{code:"BN",name:"Banaadir"},4:{code:"BR",name:"Bari"},5:{code:"BY",name:"Bay"},6:{code:"GA",name:"Galguduud"},7:{code:"GE",name:"Gedo"},8:{code:"HI",name:"Hiiraan"},9:{code:"JD",name:"Jubbada Dhexe"},10:{code:"JH",name:"Jubbada Hoose"},11:{code:"MU",name:"Mudug"},12:{code:"NU",name:"Nugaal"},13:{code:"SA",name:"Sanaag"},14:{code:"SD",name:"Shabeellaha Dhexe"},15:{code:"SH",name:"Shabeellaha Hoose"},16:{code:"SL",name:"Sool"},17:{code:"TO",name:"Togdheer"},18:{code:"WG",name:"Woqooyi Galbeed"}},ZA:{1:{code:"EC",name:"Eastern Cape"},2:{code:"FS",name:"Free State"},3:{code:"GT",name:"Gauteng"},4:{code:"KN",name:"KwaZulu-Natal"},5:{code:"LP",name:"Limpopo"},6:{code:"MP",name:"Mpumalanga"},7:{code:"NW",name:"North West"},8:{code:"NC",name:"Northern Cape"},9:{code:"WC",name:"Western Cape"}},ES:{1:{code:"CA",name:"La Coruña"},2:{code:"AL",name:"Álava"},3:{code:"AB",name:"Albacete"},4:{code:"AC",name:"Alicante"},5:{code:"AM",name:"Almeria"},6:{code:"AS",name:"Asturias"},7:{code:"AV",name:"Ávila"},8:{code:"BJ",name:"Badajoz"},9:{code:"IB",name:"Baleares"},10:{code:"BA",name:"Barcelona"},11:{code:"BU",name:"Burgos"},12:{code:"CC",name:"Cáceres"},13:{code:"CZ",name:"Cádiz"},14:{code:"CT",name:"Cantabria"},15:{code:"CL",name:"Castellón"},16:{code:"CE",name:"Ceuta"},17:{code:"CR",name:"Ciudad Real"},18:{code:"CD",name:"Córdoba"},19:{code:"CU",name:"Cuenca"},20:{code:"GI",name:"Gerona"},21:{code:"GD",name:"Granada"},22:{code:"GJ",name:"Guadalajara"},23:{code:"GP",name:"Guipúzcoa"},24:{code:"HL",name:"Huelva"},25:{code:"HS",name:"Huesca"},26:{code:"JN",name:"Jaén"},27:{code:"RJ",name:"La Rioja"},28:{code:"PM",name:"Las Palmas"},29:{code:"LE",name:"León"},30:{code:"LL",name:"Lérida"},31:{code:"LG",name:"Lugo"},32:{code:"MD",name:"Madrid"},33:{code:"MA",name:"Málaga"},34:{code:"ML",name:"Melilla"},35:{code:"MU",name:"Murcia"},36:{code:"NV",name:"Navarra"},37:{code:"OU",name:"Ourense"},38:{code:"PL",name:"Palencia"},39:{code:"PO",name:"Pontevedra"},40:{code:"SL",name:"Salamanca"},41:{code:"SC",name:"Santa Cruz de Tenerife"},42:{code:"SG",name:"Segovia"},43:{code:"SV",name:"Sevilla"},44:{code:"SO",name:"Soria"},45:{code:"TA",name:"Tarragona"},46:{code:"TE",name:"Teruel"},47:{code:"TO",name:"Toledo"},48:{code:"VC",name:"Valencia"},49:{code:"VD",name:"Valladolid"},50:{code:"VZ",name:"Vizcaya"},51:{code:"ZM",name:"Zamora"},52:{code:"ZR",name:"Zaragoza"}},LK:{1:{code:"CE",name:"Central"},2:{code:"EA",name:"Eastern"},3:{code:"NC",name:"North Central"},4:{code:"NO",name:"Northern"},5:{code:"NW",name:"North Western"},6:{code:"SA",name:"Sabaragamuwa"},7:{code:"SO",name:"Southern"},8:{code:"UV",name:"Uva"},9:{code:"WE",name:"Western"}},SH:{1:{code:"A",name:"Ascension"},2:{code:"S",name:"Saint Helena"},3:{code:"T",name:"Tristan da Cunha"}},PM:{1:{code:"P",name:"Saint Pierre"},2:{code:"M",name:"Miquelon"}},SD:{1:{code:"ANL",name:"A'ali an Nil"},2:{code:"BAM",name:"Al Bahr al Ahmar"},3:{code:"BRT",name:"Al Buhayrat"},4:{code:"JZR",name:"Al Jazirah"},5:{code:"KRT",name:"Al Khartum"},6:{code:"QDR",name:"Al Qadarif"},7:{code:"WDH",name:"Al Wahdah"},8:{code:"ANB",name:"An Nil al Abyad"},9:{code:"ANZ",name:"An Nil al Azraq"},10:{code:"ASH",name:"Ash Shamaliyah"},11:{code:"BJA",name:"Bahr al Jabal"},12:{code:"GIS",name:"Gharb al Istiwa'iyah"},13:{code:"GBG",name:"Gharb Bahr al Ghazal"},14:{code:"GDA",name:"Gharb Darfur"},15:{code:"GKU",name:"Gharb Kurdufan"},16:{code:"JDA",name:"Janub Darfur"},17:{code:"JKU",name:"Janub Kurdufan"},18:{code:"JQL",name:"Junqali"},19:{code:"KSL",name:"Kassala"},20:{code:"NNL",name:"Nahr an Nil"},21:{code:"SBG",name:"Shamal Bahr al Ghazal"},22:{code:"SDA",name:"Shamal Darfur"},23:{code:"SKU",name:"Shamal Kurdufan"},24:{code:"SIS",name:"Sharq al Istiwa'iyah"},25:{code:"SNR",name:"Sinnar"},26:{code:"WRB",name:"Warab"}},SR:{1:{code:"BR",name:"Brokopondo"},2:{code:"CM",name:"Commewijne"},3:{code:"CR",name:"Coronie"},4:{code:"MA",name:"Marowijne"},5:{code:"NI",name:"Nickerie"},6:{code:"PA",name:"Para"},7:{code:"PM",name:"Paramaribo"},9:{code:"SA",name:"Saramacca"},10:{code:"SI",name:"Sipaliwini"},11:{code:"WA",name:"Wanica"}},SZ:{1:{code:"H",name:"Hhohho"},2:{code:"L",name:"Lubombo"},3:{code:"M",name:"Manzini"},4:{code:"S",name:"Shishelweni"}},SE:{1:{code:"K",name:"Blekinge"},2:{code:"W",name:"Dalama"},3:{code:"I",name:"Gotland"},4:{code:"X",name:"Gävleborg"},5:{code:"N",name:"Halland"},6:{code:"Z",name:"Jämtland"},7:{code:"F",name:"Jönköping"},8:{code:"H",name:"Kalmar"},9:{code:"G",name:"Kronoberg"},10:{code:"BD",name:"Norrbotten"},11:{code:"M",name:"Skåne"},12:{code:"AB",name:"Stockholm"},13:{code:"D",name:"Södermanland"},14:{code:"C",name:"Uppsala"},15:{code:"S",name:"Värmland"},16:{code:"AC",name:"Västerbotten"},17:{code:"Y",name:"Västernorrland"},18:{code:"U",name:"Västmanland"},19:{code:"O",name:"Västra Götaland"},20:{code:"T",name:"Örebro"},21:{code:"E",name:"Östergötland"}},CH:{1:{code:"AG",name:"Aargau"},2:{code:"AR",name:"Appenzell Ausserrhoden"},3:{code:"AI",name:"Appenzell Innerrhoden"},4:{code:"BS",name:"Basel-Stadt"},5:{code:"BL",name:"Basel-Landschaft"},6:{code:"BE",name:"Bern"},7:{code:"FR",name:"Fribourg"},8:{code:"GE",name:"Genève"},9:{code:"GL",name:"Glarus"},10:{code:"GR",name:"Graubünden"},11:{code:"JU",name:"Jura"},12:{code:"LU",name:"Lucerne"},13:{code:"NE",name:"Neuchâtel"},14:{code:"NW",name:"Nidwalden"},15:{code:"OW",name:"Obwalden"},16:{code:"SG",name:"St. Gallen"},17:{code:"SH",name:"Schaffhausen"},18:{code:"SZ",name:"Schwyz"},19:{code:"SO",name:"Solothurn"},20:{code:"TG",name:"Thurgau"},21:{code:"TI",name:"Ticino"},22:{code:"UR",name:"Uri"},23:{code:"VS",name:"Valais"},24:{code:"VD",name:"Vaud"},25:{code:"ZG",name:"Zug"},26:{code:"ZH",name:"Zürich"}},SY:{1:{code:"HA",name:"Al Hasakah"},2:{code:"LA",name:"Al Ladhiqiyah"},3:{code:"QU",name:"Al Qunaytirah"},4:{code:"RQ",name:"Ar Raqqah"},5:{code:"SU",name:"As Suwayda"},6:{code:"DA",name:"Dara"},7:{code:"DZ",name:"Dayr az Zawr"},8:{code:"DI",name:"Dimashq"},9:{code:"HL",name:"Halab"},10:{code:"HM",name:"Hamah"},11:{code:"HI",name:"Hims"},12:{code:"ID",name:"Idlib"},13:{code:"RD",name:"Rif Dimashq"},14:{code:"TA",name:"Tartus"}},TW:{1:{code:"CH",name:"Chang-hua"},2:{code:"CI",name:"Chia-i"},3:{code:"HS",name:"Hsin-chu"},4:{code:"HL",name:"Hua-lien"},5:{code:"IL",name:"I-lan"},6:{code:"KH",name:"Kao-hsiung county"},7:{code:"KM",name:"Kin-men"},8:{code:"LC",name:"Lien-chiang"},9:{code:"ML",name:"Miao-li"},10:{code:"NT",name:"Nan-t'ou"},11:{code:"PH",name:"P'eng-hu"},12:{code:"PT",name:"P'ing-tung"},13:{code:"TG",name:"T'ai-chung"},14:{code:"TA",name:"T'ai-nan"},15:{code:"TP",name:"T'ai-pei county"},16:{code:"TT",name:"T'ai-tung"},17:{code:"TY",name:"T'ao-yuan"},18:{code:"YL",name:"Yun-lin"},19:{code:"CC",name:"Chia-i city"},20:{code:"CL",name:"Chi-lung"},21:{code:"HC",name:"Hsin-chu"},22:{code:"TH",name:"T'ai-chung"},23:{code:"TN",name:"T'ai-nan"},24:{code:"KC",name:"Kao-hsiung city"},25:{code:"TC",name:"T'ai-pei city"}},TJ:{1:{code:"GB",name:"Gorno-Badakhstan"},2:{code:"KT",name:"Khatlon"},3:{code:"SU",name:"Sughd"}},TZ:{1:{code:"AR",name:"Arusha"},2:{code:"DS",name:"Dar es Salaam"},3:{code:"DO",name:"Dodoma"},4:{code:"IR",name:"Iringa"},5:{code:"KA",name:"Kagera"},6:{code:"KI",name:"Kigoma"},7:{code:"KJ",name:"Kilimanjaro"},8:{code:"LN",name:"Lindi"},9:{code:"MY",name:"Manyara"},10:{code:"MR",name:"Mara"},11:{code:"MB",name:"Mbeya"},12:{code:"MO",name:"Morogoro"},13:{code:"MT",name:"Mtwara"},14:{code:"MW",name:"Mwanza"},15:{code:"PN",name:"Pemba North"},16:{code:"PS",name:"Pemba South"},17:{code:"PW",name:"Pwani"},18:{code:"RK",name:"Rukwa"},19:{code:"RV",name:"Ruvuma"},20:{code:"SH",name:"Shinyanga"},21:{code:"SI",name:"Singida"},22:{code:"TB",name:"Tabora"},23:{code:"TN",name:"Tanga"},24:{code:"ZC",name:"Zanzibar Central/South"},25:{code:"ZN",name:"Zanzibar North"},26:{code:"ZU",name:"Zanzibar Urban/West"}},TH:{1:{code:"Amnat Charoen",name:"Amnat Charoen"},2:{code:"Ang Thong",name:"Ang Thong"},3:{code:"Ayutthaya",name:"Ayutthaya"},4:{code:"Bangkok",name:"Bangkok"},5:{code:"Buriram",name:"Buriram"},6:{code:"Chachoengsao",name:"Chachoengsao"},7:{code:"Chai Nat",name:"Chai Nat"},8:{code:"Chaiyaphum",name:"Chaiyaphum"},9:{code:"Chanthaburi",name:"Chanthaburi"},10:{code:"Chiang Mai",name:"Chiang Mai"},11:{code:"Chiang Rai",name:"Chiang Rai"},12:{code:"Chon Buri",name:"Chon Buri"},13:{code:"Chumphon",name:"Chumphon"},14:{code:"Kalasin",name:"Kalasin"},15:{code:"Kamphaeng Phet",name:"Kamphaeng Phet"},16:{code:"Kanchanaburi",name:"Kanchanaburi"},17:{code:"Khon Kaen",name:"Khon Kaen"},18:{code:"Krabi",name:"Krabi"},19:{code:"Lampang",name:"Lampang"},20:{code:"Lamphun",name:"Lamphun"},21:{code:"Loei",name:"Loei"},22:{code:"Lop Buri",name:"Lop Buri"},23:{code:"Mae Hong Son",name:"Mae Hong Son"},24:{code:"Maha Sarakham",name:"Maha Sarakham"},25:{code:"Mukdahan",name:"Mukdahan"},26:{code:"Nakhon Nayok",name:"Nakhon Nayok"},27:{code:"Nakhon Pathom",name:"Nakhon Pathom"},28:{code:"Nakhon Phanom",name:"Nakhon Phanom"},29:{code:"Nakhon Ratchasima",name:"Nakhon Ratchasima"},30:{code:"Nakhon Sawan",name:"Nakhon Sawan"},31:{code:"Nakhon Si Thammarat",name:"Nakhon Si Thammarat"},32:{code:"Nan",name:"Nan"},33:{code:"Narathiwat",name:"Narathiwat"},34:{code:"Nong Bua Lamphu",name:"Nong Bua Lamphu"},35:{code:"Nong Khai",name:"Nong Khai"},36:{code:"Nonthaburi",name:"Nonthaburi"},37:{code:"Pathum Thani",name:"Pathum Thani"},38:{code:"Pattani",name:"Pattani"},39:{code:"Phangnga",name:"Phangnga"},40:{code:"Phatthalung",name:"Phatthalung"},41:{code:"Phayao",name:"Phayao"},42:{code:"Phetchabun",name:"Phetchabun"},43:{code:"Phetchaburi",name:"Phetchaburi"},44:{code:"Phichit",name:"Phichit"},45:{code:"Phitsanulok",name:"Phitsanulok"},46:{code:"Phrae",name:"Phrae"},47:{code:"Phuket",name:"Phuket"},48:{code:"Prachin Buri",name:"Prachin Buri"},49:{code:"Prachuap Khiri Khan",name:"Prachuap Khiri Khan"},50:{code:"Ranong",name:"Ranong"},51:{code:"Ratchaburi",name:"Ratchaburi"},52:{code:"Rayong",name:"Rayong"},53:{code:"Roi Et",name:"Roi Et"},54:{code:"Sa Kaeo",name:"Sa Kaeo"},55:{code:"Sakon Nakhon",name:"Sakon Nakhon"},56:{code:"Samut Prakan",name:"Samut Prakan"},57:{code:"Samut Sakhon",name:"Samut Sakhon"},58:{code:"Samut Songkhram",name:"Samut Songkhram"},59:{code:"Sara Buri",name:"Sara Buri"},60:{code:"Satun",name:"Satun"},61:{code:"Sing Buri",name:"Sing Buri"},62:{code:"Sisaket",name:"Sisaket"},63:{code:"Songkhla",name:"Songkhla"},64:{code:"Sukhothai",name:"Sukhothai"},65:{code:"Suphan Buri",name:"Suphan Buri"},66:{code:"Surat Thani",name:"Surat Thani"},67:{code:"Surin",name:"Surin"},68:{code:"Tak",name:"Tak"},69:{code:"Trang",name:"Trang"},70:{code:"Trat",name:"Trat"},71:{code:"Ubon Ratchathani",name:"Ubon Ratchathani"},72:{code:"Udon Thani",name:"Udon Thani"},73:{code:"Uthai Thani",name:"Uthai Thani"},74:{code:"Uttaradit",name:"Uttaradit"},75:{code:"Yala",name:"Yala"},76:{code:"Yasothon",name:"Yasothon"}},TG:{1:{code:"K",name:"Kara"},2:{code:"P",name:"Plateaux"},3:{code:"S",name:"Savanes"},4:{code:"C",name:"Centrale"},5:{code:"M",name:"Maritime"}},TK:{1:{code:"A",name:"Atafu"},2:{code:"F",name:"Fakaofo"},3:{code:"N",name:"Nukunonu"}},TO:{1:{code:"H",name:"Ha'apai"},2:{code:"T",name:"Tongatapu"},3:{code:"V",name:"Vava'u"}},TT:{1:{code:"CT",name:"Couva/Tabaquite/Talparo"},2:{code:"DM",name:"Diego Martin"},3:{code:"MR",name:"Mayaro/Rio Claro"},4:{code:"PD",name:"Penal/Debe"},5:{code:"PT",name:"Princes Town"},6:{code:"SG",name:"Sangre Grande"},7:{code:"SL",name:"San Juan/Laventille"},8:{code:"SI",name:"Siparia"},9:{code:"TP",name:"Tunapuna/Piarco"},10:{code:"PS",name:"Port of Spain"},11:{code:"SF",name:"San Fernando"},12:{code:"AR",name:"Arima"},13:{code:"PF",name:"Point Fortin"},14:{code:"CH",name:"Chaguanas"},15:{code:"TO",name:"Tobago"}},TN:{1:{code:"AR",name:"Ariana"},2:{code:"BJ",name:"Beja"},3:{code:"BA",name:"Ben Arous"},4:{code:"BI",name:"Bizerte"},5:{code:"GB",name:"Gabes"},6:{code:"GF",name:"Gafsa"},7:{code:"JE",name:"Jendouba"},8:{code:"KR",name:"Kairouan"},9:{code:"KS",name:"Kasserine"},10:{code:"KB",name:"Kebili"},11:{code:"KF",name:"Kef"},12:{code:"MH",name:"Mahdia"},13:{code:"MN",name:"Manouba"},14:{code:"ME",name:"Medenine"},15:{code:"MO",name:"Monastir"},16:{code:"NA",name:"Nabeul"},17:{code:"SF",name:"Sfax"},18:{code:"SD",name:"Sidi"},19:{code:"SL",name:"Siliana"},20:{code:"SO",name:"Sousse"},21:{code:"TA",name:"Tataouine"},22:{code:"TO",name:"Tozeur"},23:{code:"TU",name:"Tunis"},24:{code:"ZA",name:"Zaghouan"}},TR:{1:{code:"ADA",name:"Adana"},2:{code:"ADI",name:"Adiyaman"},3:{code:"AFY",name:"Afyonkarahisar"},4:{code:"AGR",name:"Agri"},5:{code:"AKS",name:"Aksaray"},6:{code:"AMA",name:"Amasya"},7:{code:"ANK",name:"Ankara"},8:{code:"ANT",name:"Antalya"},9:{code:"ARD",name:"Ardahan"},10:{code:"ART",name:"Artvin"},11:{code:"AYI",name:"Aydin"},12:{code:"BAL",name:"Balikesir"},13:{code:"BAR",name:"Bartin"},14:{code:"BAT",name:"Batman"},15:{code:"BAY",name:"Bayburt"},16:{code:"BIL",name:"Bilecik"},17:{code:"BIN",name:"Bingol"},18:{code:"BIT",name:"Bitlis"},19:{code:"BOL",name:"Bolu"},20:{code:"BRD",name:"Burdur"},21:{code:"BRS",name:"Bursa"},22:{code:"CKL",name:"Canakkale"},23:{code:"CKR",name:"Cankiri"},24:{code:"COR",name:"Corum"},25:{code:"DEN",name:"Denizli"},26:{code:"DIY",name:"Diyarbakir"},27:{code:"DUZ",name:"Duzce"},28:{code:"EDI",name:"Edirne"},29:{code:"ELA",name:"Elazig"},30:{code:"EZC",name:"Erzincan"},31:{code:"EZR",name:"Erzurum"},32:{code:"ESK",name:"Eskisehir"},33:{code:"GAZ",name:"Gaziantep"},34:{code:"GIR",name:"Giresun"},35:{code:"GMS",name:"Gumushane"},36:{code:"HKR",name:"Hakkari"},37:{code:"HTY",name:"Hatay"},38:{code:"IGD",name:"Igdir"},39:{code:"ISP",name:"Isparta"},40:{code:"IST",name:"Istanbul"},41:{code:"IZM",name:"Izmir"},42:{code:"KAH",name:"Kahramanmaras"},43:{code:"KRB",name:"Karabuk"},44:{code:"KRM",name:"Karaman"},45:{code:"KRS",name:"Kars"},46:{code:"KAS",name:"Kastamonu"},47:{code:"KAY",name:"Kayseri"},48:{code:"KLS",name:"Kilis"},49:{code:"KRK",name:"Kirikkale"},50:{code:"KLR",name:"Kirklareli"},51:{code:"KRH",name:"Kirsehir"},52:{code:"KOC",name:"Kocaeli"},53:{code:"KON",name:"Konya"},54:{code:"KUT",name:"Kutahya"},55:{code:"MAL",name:"Malatya"},56:{code:"MAN",name:"Manisa"},57:{code:"MAR",name:"Mardin"},58:{code:"MER",name:"Mersin"},59:{code:"MUG",name:"Mugla"},60:{code:"MUS",name:"Mus"},61:{code:"NEV",name:"Nevsehir"},62:{code:"NIG",name:"Nigde"},63:{code:"ORD",name:"Ordu"},64:{code:"OSM",name:"Osmaniye"},65:{code:"RIZ",name:"Rize"},66:{code:"SAK",name:"Sakarya"},67:{code:"SAM",name:"Samsun"},68:{code:"SAN",name:"Sanliurfa"},69:{code:"SII",name:"Siirt"},70:{code:"SIN",name:"Sinop"},71:{code:"SIR",name:"Sirnak"},72:{code:"SIV",name:"Sivas"},73:{code:"TEL",name:"Tekirdag"},74:{code:"TOK",name:"Tokat"},75:{code:"TRA",name:"Trabzon"},76:{code:"TUN",name:"Tunceli"},77:{code:"USK",name:"Usak"},78:{code:"VAN",name:"Van"},79:{code:"YAL",name:"Yalova"},80:{code:"YOZ",name:"Yozgat"},81:{code:"ZON",name:"Zonguldak"}},TM:{1:{code:"A",name:"Ahal Welayaty"},2:{code:"B",name:"Balkan Welayaty"},3:{code:"D",name:"Dashhowuz Welayaty"},4:{code:"L",name:"Lebap Welayaty"},5:{code:"M",name:"Mary Welayaty"}},TC:{1:{code:"AC",name:"Ambergris Cays"},2:{code:"DC",name:"Dellis Cay"},3:{code:"FC",name:"French Cay"},4:{code:"LW",name:"Little Water Cay"},5:{code:"RC",name:"Parrot Cay"},6:{code:"PN",name:"Pine Cay"},7:{code:"SL",name:"Salt Cay"},8:{code:"GT",name:"Grand Turk"},9:{code:"SC",name:"South Caicos"},10:{code:"EC",name:"East Caicos"},11:{code:"MC",name:"Middle Caicos"},12:{code:"NC",name:"North Caicos"},13:{code:"PR",name:"Providenciales"},14:{code:"WC",name:"West Caicos"}},TV:{1:{code:"NMG",name:"Nanumanga"},2:{code:"NLK",name:"Niulakita"},3:{code:"NTO",name:"Niutao"},4:{code:"FUN",name:"Funafuti"},5:{code:"NME",name:"Nanumea"},6:{code:"NUI",name:"Nui"},7:{code:"NFT",name:"Nukufetau"},8:{code:"NLL",name:"Nukulaelae"},9:{code:"VAI",name:"Vaitupu"}},UG:{1:{code:"KAL",name:"Kalangala"},2:{code:"KMP",name:"Kampala"},3:{code:"KAY",name:"Kayunga"},4:{code:"KIB",name:"Kiboga"},5:{code:"LUW",name:"Luwero"},6:{code:"MAS",name:"Masaka"},7:{code:"MPI",name:"Mpigi"},8:{code:"MUB",name:"Mubende"},9:{code:"MUK",name:"Mukono"},10:{code:"NKS",name:"Nakasongola"},11:{code:"RAK",name:"Rakai"},12:{code:"SEM",name:"Sembabule"},13:{code:"WAK",name:"Wakiso"},14:{code:"BUG",name:"Bugiri"},15:{code:"BUS",name:"Busia"},16:{code:"IGA",name:"Iganga"},17:{code:"JIN",name:"Jinja"},18:{code:"KAB",name:"Kaberamaido"},19:{code:"KML",name:"Kamuli"},20:{code:"KPC",name:"Kapchorwa"},21:{code:"KTK",name:"Katakwi"},22:{code:"KUM",name:"Kumi"},23:{code:"MAY",name:"Mayuge"},24:{code:"MBA",name:"Mbale"},25:{code:"PAL",name:"Pallisa"},26:{code:"SIR",name:"Sironko"},27:{code:"SOR",name:"Soroti"},28:{code:"TOR",name:"Tororo"},29:{code:"ADJ",name:"Adjumani"},30:{code:"APC",name:"Apac"},31:{code:"ARU",name:"Arua"},32:{code:"GUL",name:"Gulu"},33:{code:"KIT",name:"Kitgum"},34:{code:"KOT",name:"Kotido"},35:{code:"LIR",name:"Lira"},36:{code:"MRT",name:"Moroto"},37:{code:"MOY",name:"Moyo"},38:{code:"NAK",name:"Nakapiripirit"},39:{code:"NEB",name:"Nebbi"},40:{code:"PAD",name:"Pader"},41:{code:"YUM",name:"Yumbe"},42:{code:"BUN",name:"Bundibugyo"},43:{code:"BSH",name:"Bushenyi"},44:{code:"HOI",name:"Hoima"},45:{code:"KBL",name:"Kabale"},46:{code:"KAR",name:"Kabarole"},47:{code:"KAM",name:"Kamwenge"},48:{code:"KAN",name:"Kanungu"},49:{code:"KAS",name:"Kasese"},50:{code:"KBA",name:"Kibaale"},51:{code:"KIS",name:"Kisoro"},52:{code:"KYE",name:"Kyenjojo"},53:{code:"MSN",name:"Masindi"},54:{code:"MBR",name:"Mbarara"},55:{code:"NTU",name:"Ntungamo"},56:{code:"RUK",name:"Rukungiri"}},UA:{1:{code:"CK",name:"Cherkasy"},2:{code:"CH",name:"Chernihiv"},3:{code:"CV",name:"Chernivtsi"},4:{code:"CR",name:"Crimea"},5:{code:"DN",name:"Dnipropetrovs'k"},6:{code:"DO",name:"Donets'k"},7:{code:"IV",name:"Ivano-Frankivs'k"},8:{code:"KL",name:"Kharkiv Kherson"},9:{code:"KM",name:"Khmel'nyts'kyy"},10:{code:"KR",name:"Kirovohrad"},11:{code:"KV",name:"Kiev"},12:{code:"KY",name:"Kyyiv"},13:{code:"LU",name:"Luhans'k"},14:{code:"LV",name:"L'viv"},15:{code:"MY",name:"Mykolayiv"},16:{code:"OD",name:"Odesa"},17:{code:"PO",name:"Poltava"},18:{code:"RI",name:"Rivne"},19:{code:"SE",name:"Sevastopol"},20:{code:"SU",name:"Sumy"},21:{code:"TE",name:"Ternopil'"},22:{code:"VI",name:"Vinnytsya"},23:{code:"VO",name:"Volyn'"},24:{code:"ZK",name:"Zakarpattya"},25:{code:"ZA",name:"Zaporizhzhya"},26:{code:"ZH",name:"Zhytomyr"}},AE:{1:{code:"AZ",name:"Abu Zaby"},2:{code:"AJ",name:"'Ajman"},3:{code:"FU",name:"Al Fujayrah"},4:{code:"SH",name:"Ash Shariqah"},5:{code:"DU",name:"Dubayy"},6:{code:"RK",name:"R'as al Khaymah"},7:{code:"UQ",name:"Umm al Qaywayn"}},GB:{1:{code:"ABN",name:"Aberdeen"},2:{code:"ABNS",name:"Aberdeenshire"},3:{code:"ANG",name:"Anglesey"},4:{code:"AGS",name:"Angus"},5:{code:"ARY",name:"Argyll and Bute"},6:{code:"BEDS",name:"Bedfordshire"},7:{code:"BERKS",name:"Berkshire"},8:{code:"BLA",name:"Blaenau Gwent"},9:{code:"BRI",name:"Bridgend"},10:{code:"BSTL",name:"Bristol"},11:{code:"BUCKS",name:"Buckinghamshire"},12:{code:"CAE",name:"Caerphilly"},13:{code:"CAMBS",name:"Cambridgeshire"},14:{code:"CDF",name:"Cardiff"},15:{code:"CARM",name:"Carmarthenshire"},16:{code:"CDGN",name:"Ceredigion"},17:{code:"CHES",name:"Cheshire"},18:{code:"CLACK",name:"Clackmannanshire"},19:{code:"CON",name:"Conwy"},20:{code:"CORN",name:"Cornwall"},21:{code:"DNBG",name:"Denbighshire"},22:{code:"DERBY",name:"Derbyshire"},23:{code:"DVN",name:"Devon"},24:{code:"DOR",name:"Dorset"},25:{code:"DGL",name:"Dumfries and Galloway"},26:{code:"DUND",name:"Dundee"},27:{code:"DHM",name:"Durham"},28:{code:"ARYE",name:"East Ayrshire"},29:{code:"DUNBE",name:"East Dunbartonshire"},30:{code:"LOTE",name:"East Lothian"},31:{code:"RENE",name:"East Renfrewshire"},32:{code:"ERYS",name:"East Riding of Yorkshire"},33:{code:"SXE",name:"East Sussex"},34:{code:"EDIN",name:"Edinburgh"},35:{code:"ESX",name:"Essex"},36:{code:"FALK",name:"Falkirk"},37:{code:"FFE",name:"Fife"},38:{code:"FLINT",name:"Flintshire"},39:{code:"GLAS",name:"Glasgow"},40:{code:"GLOS",name:"Gloucestershire"},41:{code:"LDN",name:"Greater London"},42:{code:"MCH",name:"Greater Manchester"},43:{code:"GDD",name:"Gwynedd"},44:{code:"HANTS",name:"Hampshire"},45:{code:"HWR",name:"Herefordshire"},46:{code:"HERTS",name:"Hertfordshire"},47:{code:"HLD",name:"Highlands"},48:{code:"IVER",name:"Inverclyde"},49:{code:"IOW",name:"Isle of Wight"},50:{code:"KNT",name:"Kent"},51:{code:"LANCS",name:"Lancashire"},52:{code:"LEICS",name:"Leicestershire"},53:{code:"LINCS",name:"Lincolnshire"},54:{code:"MSY",name:"Merseyside"},55:{code:"MERT",name:"Merthyr Tydfil"},56:{code:"MLOT",name:"Midlothian"},57:{code:"MMOUTH",name:"Monmouthshire"},58:{code:"MORAY",name:"Moray"},59:{code:"NPRTAL",name:"Neath Port Talbot"},60:{code:"NEWPT",name:"Newport"},61:{code:"NOR",name:"Norfolk"},62:{code:"ARYN",name:"North Ayrshire"},63:{code:"LANN",name:"North Lanarkshire"},64:{code:"YSN",name:"North Yorkshire"},65:{code:"NHM",name:"Northamptonshire"},66:{code:"NLD",name:"Northumberland"},67:{code:"NOT",name:"Nottinghamshire"},68:{code:"ORK",name:"Orkney Islands"},69:{code:"OFE",name:"Oxfordshire"},70:{code:"PEM",name:"Pembrokeshire"},71:{code:"PERTH",name:"Perth and Kinross"},72:{code:"PWS",name:"Powys"},73:{code:"REN",name:"Renfrewshire"},74:{code:"RHON",name:"Rhondda Cynon Taff"},75:{code:"RUT",name:"Rutland"},76:{code:"BOR",name:"Scottish Borders"},77:{code:"SHET",name:"Shetland Islands"},78:{code:"SPE",name:"Shropshire"},79:{code:"SOM",name:"Somerset"},80:{code:"ARYS",name:"South Ayrshire"},81:{code:"LANS",name:"South Lanarkshire"},82:{code:"YSS",name:"South Yorkshire"},83:{code:"SFD",name:"Staffordshire"},84:{code:"STIR",name:"Stirling"},85:{code:"SFK",name:"Suffolk"},86:{code:"SRY",name:"Surrey"},87:{code:"SWAN",name:"Swansea"},88:{code:"TORF",name:"Torfaen"},89:{code:"TWR",name:"Tyne and Wear"},90:{code:"VGLAM",name:"Vale of Glamorgan"},91:{code:"WARKS",name:"Warwickshire"},92:{code:"WDUN",name:"West Dunbartonshire"},93:{code:"WLOT",name:"West Lothian"},94:{code:"WMD",name:"West Midlands"},95:{code:"SXW",name:"West Sussex"},96:{code:"YSW",name:"West Yorkshire"},97:{code:"WIL",name:"Western Isles"},98:{code:"WLT",name:"Wiltshire"},99:{code:"WORCS",name:"Worcestershire"},100:{code:"WRX",name:"Wrexham"}},US:{1:{code:"AL",name:"Alabama"},2:{code:"AK",name:"Alaska"},3:{code:"AS",name:"American Samoa"},4:{code:"AZ",name:"Arizona"},5:{code:"AR",name:"Arkansas"},6:{code:"AF",name:"Armed Forces Africa"},7:{code:"AA",name:"Armed Forces Americas"},8:{code:"AC",name:"Armed Forces Canada"},9:{code:"AE",name:"Armed Forces Europe"},10:{code:"AM",name:"Armed Forces Middle East"},11:{code:"AP",name:"Armed Forces Pacific"},12:{code:"CA",name:"California"},13:{code:"CO",name:"Colorado"},14:{code:"CT",name:"Connecticut"},15:{code:"DE",name:"Delaware"},16:{code:"DC",name:"District of Columbia"},17:{code:"FM",name:"Federated States Of Micronesia"},18:{code:"FL",name:"Florida"},19:{code:"GA",name:"Georgia"},20:{code:"GU",name:"Guam"},21:{code:"HI",name:"Hawaii"},22:{code:"ID",name:"Idaho"},23:{code:"IL",name:"Illinois"},24:{code:"IN",name:"Indiana"},25:{code:"IA",name:"Iowa"},26:{code:"KS",name:"Kansas"},27:{code:"KY",name:"Kentucky"},28:{code:"LA",name:"Louisiana"},29:{code:"ME",name:"Maine"},30:{code:"MH",name:"Marshall Islands"},31:{code:"MD",name:"Maryland"},32:{code:"MA",name:"Massachusetts"},33:{code:"MI",name:"Michigan"},34:{code:"MN",name:"Minnesota"},35:{code:"MS",name:"Mississippi"},36:{code:"MO",name:"Missouri"},37:{code:"MT",name:"Montana"},38:{code:"NE",name:"Nebraska"},39:{code:"NV",name:"Nevada"},40:{code:"NH",name:"New Hampshire"},41:{code:"NJ",name:"New Jersey"},42:{code:"NM",name:"New Mexico"},43:{code:"NY",name:"New York"},44:{code:"NC",name:"North Carolina"},45:{code:"ND",name:"North Dakota"},46:{code:"MP",name:"Northern Mariana Islands"},47:{code:"OH",name:"Ohio"},48:{code:"OK",name:"Oklahoma"},49:{code:"OR",name:"Oregon"},50:{code:"PW",name:"Palau"},51:{code:"PA",name:"Pennsylvania"},52:{code:"PR",name:"Puerto Rico"},53:{code:"RI",name:"Rhode Island"},54:{code:"SC",name:"South Carolina"},55:{code:"SD",name:"South Dakota"},56:{code:"TN",name:"Tennessee"},57:{code:"TX",name:"Texas"},58:{code:"UT",name:"Utah"},59:{code:"VT",name:"Vermont"},60:{code:"VI",name:"Virgin Islands"},61:{code:"VA",name:"Virginia"},62:{code:"WA",name:"Washington"},63:{code:"WV",name:"West Virginia"},64:{code:"WI",name:"Wisconsin"},65:{code:"WY",name:"Wyoming"}},UM:{1:{code:"BI",name:"Baker Island"},2:{code:"HI",name:"Howland Island"},3:{code:"JI",name:"Jarvis Island"},4:{code:"JA",name:"Johnston Atoll"},5:{code:"KR",name:"Kingman Reef"},6:{code:"MA",name:"Midway Atoll"},7:{code:"NI",name:"Navassa Island"},8:{code:"PA",name:"Palmyra Atoll"},9:{code:"WI",name:"Wake Island"}},UY:{1:{code:"AR",name:"Artigas"},2:{code:"CA",name:"Canelones"},3:{code:"CL",name:"Cerro Largo"},4:{code:"CO",name:"Colonia"},5:{code:"DU",name:"Durazno"},6:{code:"FS",name:"Flores"},7:{code:"FA",name:"Florida"},8:{code:"LA",name:"Lavalleja"},9:{code:"MA",name:"Maldonado"},10:{code:"MO",name:"Montevideo"},11:{code:"PA",name:"Paysandu"},12:{code:"RN",name:"Rio Negro"},13:{code:"RV",name:"Rivera"},14:{code:"RO",name:"Rocha"},15:{code:"SL",name:"Salto"},16:{code:"SJ",name:"San Jose"},17:{code:"SO",name:"Soriano"},18:{code:"TA",name:"Tacuarembo"},19:{code:"TT",name:"Treinta y Tres"}},UZ:{1:{code:"AN",name:"Andijon"},2:{code:"BU",name:"Buxoro"},3:{code:"FA",name:"Farg'ona"},4:{code:"JI",name:"Jizzax"},5:{code:"NG",name:"Namangan"},6:{code:"NW",name:"Navoiy"},7:{code:"QA",name:"Qashqadaryo"},8:{code:"QR",name:"Qoraqalpog'iston Republikasi"},9:{code:"SA",name:"Samarqand"},10:{code:"SI",name:"Sirdaryo"},11:{code:"SU",name:"Surxondaryo"},12:{code:"TK",name:"Toshkent City"},13:{code:"TO",name:"Toshkent Region"},14:{code:"XO",name:"Xorazm"}},VU:{1:{code:"MA",name:"Malampa"},2:{code:"PE",name:"Penama"},3:{code:"SA",name:"Sanma"},4:{code:"SH",name:"Shefa"},5:{code:"TA",name:"Tafea"},6:{code:"TO",name:"Torba"}},VE:{1:{code:"AM",name:"Amazonas"},2:{code:"AN",name:"Anzoategui"},3:{code:"AP",name:"Apure"},4:{code:"AR",name:"Aragua"},5:{code:"BA",name:"Barinas"},6:{code:"BO",name:"Bolivar"},7:{code:"CA",name:"Carabobo"},8:{code:"CO",name:"Cojedes"},9:{code:"DA",name:"Delta Amacuro"},10:{code:"DF",name:"Dependencias Federales"},11:{code:"DI",name:"Distrito Federal"},12:{code:"FA",name:"Falcon"},13:{code:"GU",name:"Guarico"},14:{code:"LA",name:"Lara"},15:{code:"ME",name:"Merida"},16:{code:"MI",name:"Miranda"},17:{code:"MO",name:"Monagas"},18:{code:"NE",name:"Nueva Esparta"},19:{code:"PO",name:"Portuguesa"},20:{code:"SU",name:"Sucre"},21:{code:"TA",name:"Tachira"},22:{code:"TR",name:"Trujillo"},23:{code:"VA",name:"Vargas"},24:{code:"YA",name:"Yaracuy"},25:{code:"ZU",name:"Zulia"}},VN:{1:{code:"AG",name:"An Giang"},2:{code:"BG",name:"Bac Giang"},3:{code:"BK",name:"Bac Kan"},4:{code:"BL",name:"Bac Lieu"},5:{code:"BC",name:"Bac Ninh"},6:{code:"BR",name:"Ba Ria-Vung Tau"},7:{code:"BN",name:"Ben Tre"},8:{code:"BH",name:"Binh Dinh"},9:{code:"BU",name:"Binh Duong"},10:{code:"BP",name:"Binh Phuoc"},11:{code:"BT",name:"Binh Thuan"},12:{code:"CM",name:"Ca Mau"},13:{code:"CT",name:"Can Tho"},14:{code:"CB",name:"Cao Bang"},15:{code:"DL",name:"Dak Lak"},16:{code:"DG",name:"Dak Nong"},17:{code:"DN",name:"Da Nang"},18:{code:"DB",name:"Dien Bien"},19:{code:"DI",name:"Dong Nai"},20:{code:"DT",name:"Dong Thap"},21:{code:"GL",name:"Gia Lai"},22:{code:"HG",name:"Ha Giang"},23:{code:"HD",name:"Hai Duong"},24:{code:"HP",name:"Hai Phong"},25:{code:"HM",name:"Ha Nam"},26:{code:"HI",name:"Ha Noi"},27:{code:"HT",name:"Ha Tay"},28:{code:"HH",name:"Ha Tinh"},29:{code:"HB",name:"Hoa Binh"},30:{code:"HC",name:"Ho Chin Minh"},31:{code:"HU",name:"Hau Giang"},32:{code:"HY",name:"Hung Yen"}},VI:{1:{code:"C",name:"Saint Croix"},2:{code:"J",name:"Saint John"},3:{code:"T",name:"Saint Thomas"}},WF:{1:{code:"A",name:"Alo"},2:{code:"S",name:"Sigave"},3:{code:"W",name:"Wallis"}},YE:{1:{code:"AB",name:"Abyan"},2:{code:"AD",name:"Adan"},3:{code:"AM",name:"Amran"},4:{code:"BA",name:"Al Bayda"},5:{code:"DA",name:"Ad Dali"},6:{code:"DH",name:"Dhamar"},7:{code:"HD",name:"Hadramawt"},8:{code:"HJ",name:"Hajjah"},9:{code:"HU",name:"Al Hudaydah"},10:{code:"IB",name:"Ibb"},11:{code:"JA",name:"Al Jawf"},12:{code:"LA",name:"Lahij"},13:{code:"MA",name:"Ma'rib"},14:{code:"MR",name:"Al Mahrah"},15:{code:"MW",name:"Al Mahwit"},16:{code:"SD",name:"Sa'dah"},17:{code:"SN",name:"San'a"},18:{code:"SH",name:"Shabwah"},19:{code:"TA",name:"Ta'izz"}},YU:{1:{code:"KOS",name:"Kosovo"},2:{code:"MON",name:"Montenegro"},3:{code:"SER",name:"Serbia"},4:{code:"VOJ",name:"Vojvodina"}},ZR:{1:{code:"BC",name:"Bas-Congo"},2:{code:"BN",name:"Bandundu"},3:{code:"EQ",name:"Equateur"},4:{code:"KA",name:"Katanga"},5:{code:"KE",name:"Kasai-Oriental"},6:{code:"KN",name:"Kinshasa"},7:{code:"KW",name:"Kasai-Occidental"},8:{code:"MA",name:"Maniema"},9:{code:"NK",name:"Nord-Kivu"},10:{code:"OR",name:"Orientale"},11:{code:"SK",name:"Sud-Kivu"}},ZM:{1:{code:"CE",name:"Central"},2:{code:"CB",name:"Copperbelt"},3:{code:"EA",name:"Eastern"},4:{code:"LP",name:"Luapula"},5:{code:"LK",name:"Lusaka"},6:{code:"NO",name:"Northern"},7:{code:"NW",name:"North-Western"},8:{code:"SO",name:"Southern"},9:{code:"WE",name:"Western"}},ZW:{1:{code:"BU",name:"Bulawayo"},2:{code:"HA",name:"Harare"},3:{code:"ML",name:"Manicaland"},4:{code:"MC",name:"Mashonaland Central"},5:{code:"ME",name:"Mashonaland East"},6:{code:"MW",name:"Mashonaland West"},7:{code:"MV",name:"Masvingo"},8:{code:"MN",name:"Matabeleland North"},9:{code:"MS",name:"Matabeleland South"},10:{code:"MD",name:"Midlands"}}},BFHTimePickerDelimiter=":",BFHTimePickerModes={am:"AM",pm:"PM"},BFHTimezonesList={AF:{"Asia/Kabul":"Kabul"},AL:{"Europe/Tirane":"Tirane"},DZ:{"Africa/Algiers":"Algiers"},AS:{"Pacific/Pago_Pago":"Pago Pago"},AD:{"Europe/Andorra":"Andorra"},AO:{"Africa/Luanda":"Luanda"},AI:{"America/Anguilla":"Anguilla"},AQ:{"Antarctica/Casey":"Casey","Antarctica/Davis":"Davis","Antarctica/DumontDUrville":"DumontDUrville","Antarctica/Macquarie":"Macquarie","Antarctica/Mawson":"Mawson","Antarctica/McMurdo":"McMurdo","Antarctica/Palmer":"Palmer","Antarctica/Rothera":"Rothera","Antarctica/South_Pole":"South Pole","Antarctica/Syowa":"Syowa","Antarctica/Vostok":"Vostok"},AG:{"America/Antigua":"Antigua"},AR:{"America/Argentina/Buenos_Aires":"Argentina / Buenos Aires","America/Argentina/Catamarca":"Argentina / Catamarca","America/Argentina/Cordoba":"Argentina / Cordoba","America/Argentina/Jujuy":"Argentina / Jujuy","America/Argentina/La_Rioja":"Argentina / La Rioja","America/Argentina/Mendoza":"Argentina / Mendoza","America/Argentina/Rio_Gallegos":"Argentina / Rio Gallegos","America/Argentina/Salta":"Argentina / Salta","America/Argentina/San_Juan":"Argentina / San Juan","America/Argentina/San_Luis":"Argentina / San Luis","America/Argentina/Tucuman":"Argentina / Tucuman","America/Argentina/Ushuaia":"Argentina / Ushuaia"},AM:{"Asia/Yerevan":"Yerevan"},AW:{"America/Aruba":"Aruba"},AU:{"Australia/Adelaide":"Adelaide","Australia/Brisbane":"Brisbane","Australia/Broken_Hill":"Broken Hill","Australia/Currie":"Currie","Australia/Darwin":"Darwin","Australia/Eucla":"Eucla","Australia/Hobart":"Hobart","Australia/Lindeman":"Lindeman","Australia/Lord_Howe":"Lord Howe","Australia/Melbourne":"Melbourne","Australia/Perth":"Perth","Australia/Sydney":"Sydney"},AT:{"Europe/Vienna":"Vienna"},AZ:{"Asia/Baku":"Baku"},BH:{"Asia/Bahrain":"Bahrain"},BD:{"Asia/Dhaka":"Dhaka"},BB:{"America/Barbados":"Barbados"},BY:{"Europe/Minsk":"Minsk"},BE:{"Europe/Brussels":"Brussels"},BZ:{"America/Belize":"Belize"},BJ:{"Africa/Porto-Novo":"Porto-Novo"},BM:{"Atlantic/Bermuda":"Bermuda"},BT:{"Asia/Thimphu":"Thimphu"},BO:{"America/La_Paz":"La Paz"},BA:{"Europe/Sarajevo":"Sarajevo"},BW:{"Africa/Gaborone":"Gaborone"},BR:{"America/Araguaina":"Araguaina","America/Bahia":"Bahia","America/Belem":"Belem","America/Boa_Vista":"Boa Vista","America/Campo_Grande":"Campo Grande","America/Cuiaba":"Cuiaba","America/Eirunepe":"Eirunepe","America/Fortaleza":"Fortaleza","America/Maceio":"Maceio","America/Manaus":"Manaus","America/Noronha":"Noronha","America/Porto_Velho":"Porto Velho","America/Recife":"Recife","America/Rio_Branco":"Rio Branco","America/Santarem":"Santarem","America/Sao_Paulo":"Sao Paulo"},VG:{"America/Tortola":"Tortola"},BN:{"Asia/Brunei":"Brunei"},BG:{"Europe/Sofia":"Sofia"},BF:{"Africa/Ouagadougou":"Ouagadougou"},BI:{"Africa/Bujumbura":"Bujumbura"},CI:{"Africa/Abidjan":"Abidjan"},KH:{"Asia/Phnom_Penh":"Phnom Penh"},CM:{"Africa/Douala":"Douala"},CA:{"America/Atikokan":"Atikokan","America/Blanc-Sablon":"Blanc-Sablon","America/Cambridge_Bay":"Cambridge Bay","America/Creston":"Creston","America/Dawson":"Dawson","America/Dawson_Creek":"Dawson Creek","America/Edmonton":"Edmonton","America/Glace_Bay":"Glace Bay","America/Goose_Bay":"Goose Bay","America/Halifax":"Halifax","America/Inuvik":"Inuvik","America/Iqaluit":"Iqaluit","America/Moncton":"Moncton","America/Montreal":"Montreal","America/Nipigon":"Nipigon","America/Pangnirtung":"Pangnirtung","America/Rainy_River":"Rainy River","America/Rankin_Inlet":"Rankin Inlet","America/Regina":"Regina","America/Resolute":"Resolute","America/St_Johns":"St Johns","America/Swift_Current":"Swift Current","America/Thunder_Bay":"Thunder Bay","America/Toronto":"Toronto","America/Vancouver":"Vancouver","America/Whitehorse":"Whitehorse","America/Winnipeg":"Winnipeg","America/Yellowknife":"Yellowknife"},CV:{"Atlantic/Cape_Verde":"Cape Verde"},KY:{"America/Cayman":"Cayman"},CF:{"Africa/Bangui":"Bangui"},TD:{"Africa/Ndjamena":"Ndjamena"},CL:{"America/Santiago":"Santiago","Pacific/Easter":"Easter"},CN:{"Asia/Chongqing":"Chongqing","Asia/Harbin":"Harbin","Asia/Kashgar":"Kashgar","Asia/Shanghai":"Shanghai","Asia/Urumqi":"Urumqi"},CO:{"America/Bogota":"Bogota"},KM:{"Indian/Comoro":"Comoro"},CG:{"Africa/Brazzaville":"Brazzaville"},CR:{"America/Costa_Rica":"Costa Rica"},HR:{"Europe/Zagreb":"Zagreb"},CU:{"America/Havana":"Havana"},CY:{"Asia/Nicosia":"Nicosia"},CZ:{"Europe/Prague":"Prague"},CD:{"Africa/Kinshasa":"Kinshasa","Africa/Lubumbashi":"Lubumbashi"},DK:{"Europe/Copenhagen":"Copenhagen"},DJ:{"Africa/Djibouti":"Djibouti"},DM:{"America/Dominica":"Dominica"},DO:{"America/Santo_Domingo":"Santo Domingo"},TP:{},EC:{"America/Guayaquil":"Guayaquil","Pacific/Galapagos":"Galapagos"},EG:{"Africa/Cairo":"Cairo"},SV:{"America/El_Salvador":"El Salvador"},GQ:{"Africa/Malabo":"Malabo"},ER:{"Africa/Asmara":"Asmara"},EE:{"Europe/Tallinn":"Tallinn"},ET:{"Africa/Addis_Ababa":"Addis Ababa"},FO:{"Atlantic/Faroe":"Faroe"},FK:{"Atlantic/Stanley":"Stanley"},FJ:{"Pacific/Fiji":"Fiji"},FI:{"Europe/Helsinki":"Helsinki"},MK:{"Europe/Skopje":"Skopje"},FR:{"Europe/Paris":"Paris"},GA:{"Africa/Libreville":"Libreville"},GE:{"Asia/Tbilisi":"Tbilisi"},DE:{"Europe/Berlin":"Berlin"},GH:{"Africa/Accra":"Accra"},GR:{"Europe/Athens":"Athens"},GL:{"America/Danmarkshavn":"Danmarkshavn","America/Godthab":"Godthab","America/Scoresbysund":"Scoresbysund","America/Thule":"Thule"},GD:{"America/Grenada":"Grenada"},GU:{"Pacific/Guam":"Guam"},GT:{"America/Guatemala":"Guatemala"},GN:{"Africa/Conakry":"Conakry"},GW:{"Africa/Bissau":"Bissau"},GY:{"America/Guyana":"Guyana"},HT:{"America/Port-au-Prince":"Port-au-Prince"},HN:{"America/Tegucigalpa":"Tegucigalpa"},HK:{"Asia/Hong_Kong":"Hong Kong"},HU:{"Europe/Budapest":"Budapest"},IS:{"Atlantic/Reykjavik":"Reykjavik"},IN:{"Asia/Kolkata":"Kolkata"},ID:{"Asia/Jakarta":"Jakarta","Asia/Jayapura":"Jayapura","Asia/Makassar":"Makassar","Asia/Pontianak":"Pontianak"},IR:{"Asia/Tehran":"Tehran"},IQ:{"Asia/Baghdad":"Baghdad"},IE:{"Europe/Dublin":"Dublin"},IL:{"Asia/Jerusalem":"Jerusalem"},IT:{"Europe/Rome":"Rome"},JM:{"America/Jamaica":"Jamaica"},JP:{"Asia/Tokyo":"Tokyo"},JO:{"Asia/Amman":"Amman"},KZ:{"Asia/Almaty":"Almaty","Asia/Aqtau":"Aqtau","Asia/Aqtobe":"Aqtobe","Asia/Oral":"Oral","Asia/Qyzylorda":"Qyzylorda"},KE:{"Africa/Nairobi":"Nairobi"},KI:{"Pacific/Enderbury":"Enderbury","Pacific/Kiritimati":"Kiritimati","Pacific/Tarawa":"Tarawa"},KW:{"Asia/Kuwait":"Kuwait"},KG:{"Asia/Bishkek":"Bishkek"},LA:{"Asia/Vientiane":"Vientiane"},LV:{"Europe/Riga":"Riga"},LB:{"Asia/Beirut":"Beirut"},LS:{"Africa/Maseru":"Maseru"},LR:{"Africa/Monrovia":"Monrovia"},LY:{"Africa/Tripoli":"Tripoli"},LI:{"Europe/Vaduz":"Vaduz"},LT:{"Europe/Vilnius":"Vilnius"},LU:{"Europe/Luxembourg":"Luxembourg"},MO:{"Asia/Macau":"Macau"},MG:{"Indian/Antananarivo":"Antananarivo"},MW:{"Africa/Blantyre":"Blantyre"},MY:{"Asia/Kuala_Lumpur":"Kuala Lumpur","Asia/Kuching":"Kuching"},MV:{"Indian/Maldives":"Maldives"},ML:{"Africa/Bamako":"Bamako"},MT:{"Europe/Malta":"Malta"},MH:{"Pacific/Kwajalein":"Kwajalein","Pacific/Majuro":"Majuro"},MR:{"Africa/Nouakchott":"Nouakchott"},MU:{"Indian/Mauritius":"Mauritius"},MX:{"America/Bahia_Banderas":"Bahia Banderas","America/Cancun":"Cancun","America/Chihuahua":"Chihuahua","America/Hermosillo":"Hermosillo","America/Matamoros":"Matamoros","America/Mazatlan":"Mazatlan","America/Merida":"Merida","America/Mexico_City":"Mexico City","America/Monterrey":"Monterrey","America/Ojinaga":"Ojinaga","America/Santa_Isabel":"Santa Isabel","America/Tijuana":"Tijuana"},FM:{"Pacific/Chuuk":"Chuuk","Pacific/Kosrae":"Kosrae","Pacific/Pohnpei":"Pohnpei"},MD:{"Europe/Chisinau":"Chisinau"},MC:{"Europe/Monaco":"Monaco"},MN:{"Asia/Choibalsan":"Choibalsan","Asia/Hovd":"Hovd","Asia/Ulaanbaatar":"Ulaanbaatar"},ME:{"Europe/Podgorica":"Podgorica"},MS:{"America/Montserrat":"Montserrat"},MA:{"Africa/Casablanca":"Casablanca"},MZ:{"Africa/Maputo":"Maputo"},MM:{"Asia/Rangoon":"Rangoon"},NA:{"Africa/Windhoek":"Windhoek"},NR:{"Pacific/Nauru":"Nauru"},NP:{"Asia/Kathmandu":"Kathmandu"},NL:{"Europe/Amsterdam":"Amsterdam"},AN:{},NZ:{"Pacific/Auckland":"Auckland","Pacific/Chatham":"Chatham"},NI:{"America/Managua":"Managua"},NE:{"Africa/Niamey":"Niamey"},NG:{"Africa/Lagos":"Lagos"},NF:{"Pacific/Norfolk":"Norfolk"},KP:{"Asia/Pyongyang":"Pyongyang"},MP:{"Pacific/Saipan":"Saipan"},NO:{"Europe/Oslo":"Oslo"},OM:{"Asia/Muscat":"Muscat"},PK:{"Asia/Karachi":"Karachi"},PW:{"Pacific/Palau":"Palau"},PA:{"America/Panama":"Panama"},PG:{"Pacific/Port_Moresby":"Port Moresby"},PY:{"America/Asuncion":"Asuncion"},PE:{"America/Lima":"Lima"},PH:{"Asia/Manila":"Manila"},PN:{"Pacific/Pitcairn":"Pitcairn"},PL:{"Europe/Warsaw":"Warsaw"},PT:{"Atlantic/Azores":"Azores","Atlantic/Madeira":"Madeira","Europe/Lisbon":"Lisbon"},PR:{"America/Puerto_Rico":"Puerto Rico"},QA:{"Asia/Qatar":"Qatar"},RO:{"Europe/Bucharest":"Bucharest"},RU:{"Asia/Anadyr":"Anadyr","Asia/Irkutsk":"Irkutsk","Asia/Kamchatka":"Kamchatka","Asia/Krasnoyarsk":"Krasnoyarsk","Asia/Magadan":"Magadan","Asia/Novokuznetsk":"Novokuznetsk","Asia/Novosibirsk":"Novosibirsk","Asia/Omsk":"Omsk","Asia/Sakhalin":"Sakhalin","Asia/Vladivostok":"Vladivostok","Asia/Yakutsk":"Yakutsk","Asia/Yekaterinburg":"Yekaterinburg","Europe/Kaliningrad":"Kaliningrad","Europe/Moscow":"Moscow","Europe/Samara":"Samara","Europe/Volgograd":"Volgograd"},RW:{"Africa/Kigali":"Kigali"},ST:{"Africa/Sao_Tome":"Sao Tome"},SH:{"Atlantic/St_Helena":"St Helena"},KN:{"America/St_Kitts":"St Kitts"},LC:{"America/St_Lucia":"St Lucia"},VC:{"America/St_Vincent":"St Vincent"},WS:{"Pacific/Apia":"Apia"},SM:{"Europe/San_Marino":"San Marino"},SA:{"Asia/Riyadh":"Riyadh"},SN:{"Africa/Dakar":"Dakar"},RS:{"Europe/Belgrade":"Belgrade"},SC:{"Indian/Mahe":"Mahe"},SL:{"Africa/Freetown":"Freetown"},SG:{"Asia/Singapore":"Singapore"},SK:{"Europe/Bratislava":"Bratislava"},SI:{"Europe/Ljubljana":"Ljubljana"},SB:{"Pacific/Guadalcanal":"Guadalcanal"},SO:{"Africa/Mogadishu":"Mogadishu"},ZA:{"Africa/Johannesburg":"Johannesburg"},GS:{"Atlantic/South_Georgia":"South Georgia"},KR:{"Asia/Seoul":"Seoul"},ES:{"Africa/Ceuta":"Ceuta","Atlantic/Canary":"Canary","Europe/Madrid":"Madrid"},LK:{"Asia/Colombo":"Colombo"},SD:{"Africa/Khartoum":"Khartoum"},SR:{"America/Paramaribo":"Paramaribo"},SZ:{"Africa/Mbabane":"Mbabane"},SE:{"Europe/Stockholm":"Stockholm"},CH:{"Europe/Zurich":"Zurich"},SY:{"Asia/Damascus":"Damascus"},TW:{"Asia/Taipei":"Taipei"},TJ:{"Asia/Dushanbe":"Dushanbe"},TZ:{"Africa/Dar_es_Salaam":"Dar es Salaam"},TH:{"Asia/Bangkok":"Bangkok"},BS:{"America/Nassau":"Nassau"},GM:{"Africa/Banjul":"Banjul"},TG:{"Africa/Lome":"Lome"},TO:{"Pacific/Tongatapu":"Tongatapu"},TT:{"America/Port_of_Spain":"Port of Spain"},TN:{"Africa/Tunis":"Tunis"},TR:{"Europe/Istanbul":"Istanbul"},TM:{"Asia/Ashgabat":"Ashgabat"},TC:{"America/Grand_Turk":"Grand Turk"},TV:{"Pacific/Funafuti":"Funafuti"},VI:{"America/St_Thomas":"St Thomas"},UG:{"Africa/Kampala":"Kampala"},UA:{"Europe/Kiev":"Kiev","Europe/Simferopol":"Simferopol","Europe/Uzhgorod":"Uzhgorod","Europe/Zaporozhye":"Zaporozhye"},AE:{"Asia/Dubai":"Dubai"},GB:{"Europe/London":"London"},US:{"America/Adak":"Adak","America/Anchorage":"Anchorage","America/Boise":"Boise","America/Chicago":"Chicago","America/Denver":"Denver","America/Detroit":"Detroit","America/Indiana/Indianapolis":"Indiana / Indianapolis","America/Indiana/Knox":"Indiana / Knox","America/Indiana/Marengo":"Indiana / Marengo","America/Indiana/Petersburg":"Indiana / Petersburg","America/Indiana/Tell_City":"Indiana / Tell City","America/Indiana/Vevay":"Indiana / Vevay","America/Indiana/Vincennes":"Indiana / Vincennes","America/Indiana/Winamac":"Indiana / Winamac","America/Juneau":"Juneau","America/Kentucky/Louisville":"Kentucky / Louisville","America/Kentucky/Monticello":"Kentucky / Monticello","America/Los_Angeles":"Los Angeles","America/Menominee":"Menominee","America/Metlakatla":"Metlakatla","America/New_York":"New York","America/Nome":"Nome","America/North_Dakota/Beulah":"North Dakota / Beulah","America/North_Dakota/Center":"North Dakota / Center","America/North_Dakota/New_Salem":"North Dakota / New Salem","America/Phoenix":"Phoenix","America/Shiprock":"Shiprock","America/Sitka":"Sitka","America/Yakutat":"Yakutat","Pacific/Honolulu":"Honolulu"},UY:{"America/Montevideo":"Montevideo"},UZ:{"Asia/Samarkand":"Samarkand","Asia/Tashkent":"Tashkent"},VU:{"Pacific/Efate":"Efate"},VA:{"Europe/Vatican":"Vatican"},VE:{"America/Caracas":"Caracas"},VN:{"Asia/Ho_Chi_Minh":"Ho Chi Minh"},EH:{"Africa/El_Aaiun":"El Aaiun"},YE:{"Asia/Aden":"Aden"},ZM:{"Africa/Lusaka":"Lusaka"},ZW:{"Africa/Harare":"Harare"}};
-+function(a){"use strict";function b(a){var b=a.toString(16);return 1===b.length?"0"+b:b}function c(a,c,d){return"#"+b(a)+b(c)+b(d)}function d(){var b;a(f).each(function(c){return b=e(a(this)),b.hasClass("open")?(b.trigger(c=a.Event("hide.bfhcolorpicker")),c.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhcolorpicker"),void 0)):!0})}function e(a){return a.closest(".bfh-colorpicker")}var f="[data-toggle=bfh-colorpicker]",g=function(b,c){this.options=a.extend({},a.fn.bfhcolorpicker.defaults,c),this.$element=a(b),this.initPopover()};g.prototype={constructor:g,initPalette:function(){var a,b,c;a=this.$element.find("canvas"),b=a[0].getContext("2d"),c=b.createLinearGradient(0,0,a.width(),0),c.addColorStop(0,"rgb(255, 255, 255)"),c.addColorStop(.1,"rgb(255,   0,   0)"),c.addColorStop(.25,"rgb(255,   0, 255)"),c.addColorStop(.4,"rgb(0,     0, 255)"),c.addColorStop(.55,"rgb(0,   255, 255)"),c.addColorStop(.7,"rgb(0,   255,   0)"),c.addColorStop(.85,"rgb(255, 255,   0)"),c.addColorStop(1,"rgb(255,   0,   0)"),b.fillStyle=c,b.fillRect(0,0,b.canvas.width,b.canvas.height),c=b.createLinearGradient(0,0,0,a.height()),c.addColorStop(0,"rgba(255, 255, 255, 1)"),c.addColorStop(.5,"rgba(255, 255, 255, 0)"),c.addColorStop(.5,"rgba(0,     0,   0, 0)"),c.addColorStop(1,"rgba(0,     0,   0, 1)"),b.fillStyle=c,b.fillRect(0,0,b.canvas.width,b.canvas.height)},initPopover:function(){var a,b;a="",b="","right"===this.options.align?b='<span class="input-group-addon"><span class="bfh-colorpicker-icon"></span></span>':a='<span class="input-group-addon"><span class="bfh-colorpicker-icon"></span></span>',this.$element.html('<div class="input-group bfh-colorpicker-toggle" data-toggle="bfh-colorpicker">'+a+'<input type="text" name="'+this.options.name+'" class="'+this.options.input+'" placeholder="'+this.options.placeholder+'" readonly>'+b+"</div>"+'<div class="bfh-colorpicker-popover">'+'<canvas class="bfh-colorpicker-palette" width="384" height="256"></canvas>'+"</div>"),this.$element.on("click.bfhcolorpicker.data-api touchstart.bfhcolorpicker.data-api",f,g.prototype.toggle).on("mousedown.bfhcolorpicker.data-api","canvas",g.prototype.mouseDown).on("click.bfhcolorpicker.data-api touchstart.bfhcolorpicker.data-api",".bfh-colorpicker-popover",function(){return!1}),this.initPalette(),this.$element.val(this.options.color)},updateVal:function(a,b){var d,e,f,g,h,i,j;h=5,d=this.$element.find("canvas"),e=d[0].getContext("2d"),f=a-d.offset().left,g=b-d.offset().top,f=Math.round(f/h)*h,g=Math.round(g/h)*h,0>f&&(f=0),f>=d.width()&&(f=d.width()-1),0>g&&(g=0),g>d.height()&&(g=d.height()),i=e.getImageData(f,g,1,1),j=c(i.data[0],i.data[1],i.data[2]),j!==this.$element.val()&&(this.$element.val(j),this.$element.trigger("change.bfhcolorpicker"))},mouseDown:function(){var b,c;b=a(this),c=e(b),a(document).on("mousemove.bfhcolorpicker.data-api",{colorpicker:c},g.prototype.mouseMove).one("mouseup.bfhcolorpicker.data-api",{colorpicker:c},g.prototype.mouseUp)},mouseMove:function(a){var b;b=a.data.colorpicker,b.data("bfhcolorpicker").updateVal(a.pageX,a.pageY)},mouseUp:function(b){var c;c=b.data.colorpicker,c.data("bfhcolorpicker").updateVal(b.pageX,b.pageY),a(document).off("mousemove.bfhcolorpicker.data-api"),c.data("bfhcolorpicker").options.close===!0&&d()},toggle:function(b){var c,f,g;if(c=a(this),f=e(c),f.is(".disabled")||void 0!==f.attr("disabled"))return!0;if(g=f.hasClass("open"),d(),!g){if(f.trigger(b=a.Event("show.bfhcolorpicker")),b.isDefaultPrevented())return!0;f.toggleClass("open").trigger("shown.bfhcolorpicker"),c.focus()}return!1}};var h=a.fn.bfhcolorpicker;a.fn.bfhcolorpicker=function(b){return this.each(function(){var c,d,e;c=a(this),d=c.data("bfhcolorpicker"),e="object"==typeof b&&b,this.type="bfhcolorpicker",d||c.data("bfhcolorpicker",d=new g(this,e)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhcolorpicker.Constructor=g,a.fn.bfhcolorpicker.defaults={align:"left",input:"form-control",placeholder:"",name:"",color:"#000000",close:!0},a.fn.bfhcolorpicker.noConflict=function(){return a.fn.bfhcolorpicker=h,this};var i;a.valHooks.div&&(i=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-colorpicker")?a(b).find('input[type="text"]').val():i?i.get(b):void 0},set:function(b,c){if(a(b).hasClass("bfh-colorpicker"))a(b).find(".bfh-colorpicker-icon").css("background-color",c),a(b).find('input[type="text"]').val(c);else if(i)return i.set(b,c)}},a(document).ready(function(){a("div.bfh-colorpicker").each(function(){var b;b=a(this),b.bfhcolorpicker(b.data())})}),a(document).on("click.bfhcolorpicker.data-api",d)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhcountries.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addCountries(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapCountries(),this.$element.is("span")&&this.displayCountry()};b.prototype={constructor:b,getCountries:function(){var b,c;if(this.options.available){if("string"==typeof this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHCountriesList)BFHCountriesList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHCountriesList[b])}else c=this.options.available;return c}return BFHCountriesList},addCountries:function(){var a,b,c;a=this.options.country,c=this.getCountries(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+c[b]+"</option>");this.$element.val(a)},addBootstrapCountries:function(){var a,b,c,d,e,f;d=this.options.country,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getCountries(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&(this.options.flags===!0?c.append('<li><a tabindex="-1" href="#" data-option="'+e+'"><i class="glyphicon bfh-flag-'+e+'"></i>'+f[e]+"</a></li>"):c.append('<li><a tabindex="-1" href="#" data-option="'+e+'">'+f[e]+"</a></li>"));this.$element.val(d)},displayCountry:function(){var a;a=this.options.country,this.options.flags===!0?this.$element.html('<i class="glyphicon bfh-flag-'+a+'"></i> '+BFHCountriesList[a]):this.$element.html(BFHCountriesList[a])}};var c=a.fn.bfhcountries;a.fn.bfhcountries=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhcountries"),f="object"==typeof c&&c,e||d.data("bfhcountries",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhcountries.Constructor=b,a.fn.bfhcountries.defaults={country:"",available:"",flags:!1,blank:!0},a.fn.bfhcountries.noConflict=function(){return a.fn.bfhcountries=c,this},a(document).ready(function(){a("form select.bfh-countries, span.bfh-countries, div.bfh-countries").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhcountries(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhcurrencies.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addCurrencies(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapCurrencies(),this.$element.is("span")&&this.displayCurrency()};b.prototype={constructor:b,getCurrencies:function(){var b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHCurrenciesList)BFHCurrenciesList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHCurrenciesList[b]);return c}return BFHCurrenciesList},addCurrencies:function(){var a,b,c;a=this.options.currency,c=this.getCurrencies(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+c[b].label+"</option>");this.$element.val(a)},addBootstrapCurrencies:function(){var a,b,c,d,e,f,g;d=this.options.currency,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getCurrencies(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&(this.options.flags===!0?(g=f[e].currencyflag?f[e].currencyflag:e.substr(0,2),c.append('<li><a tabindex="-1" href="#" data-option="'+e+'"><i class="glyphicon bfh-flag-'+g+'"></i>'+f[e].label+"</a></li>")):c.append('<li><a tabindex="-1" href="#" data-option="'+e+'">'+f[e].label+"</a></li>"));this.$element.val(d)},displayCurrency:function(){var a,b;a=this.options.currency,this.options.flags===!0?(b=BFHCurrenciesList[a].currencyflag?BFHCurrenciesList[a].currencyflag:a.substr(0,2),this.$element.html('<i class="glyphicon bfh-flag-'+b+'"></i> '+BFHCurrenciesList[a].label)):this.$element.html(BFHCurrenciesList[a].label)}};var c=a.fn.bfhcurrencies;a.fn.bfhcurrencies=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhcurrencies"),f="object"==typeof c&&c,e||d.data("bfhcurrencies",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhcurrencies.Constructor=b,a.fn.bfhcurrencies.defaults={currency:"",available:"",flags:!1,blank:!0},a.fn.bfhcurrencies.noConflict=function(){return a.fn.bfhcurrencies=c,this},a(document).ready(function(){a("form select.bfh-currencies, span.bfh-currencies, div.bfh-currencies").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhcurrencies(b.data())})})}(window.jQuery),+function(a){"use strict";function b(a,b){return new Date(b,a,0).getDate()}function c(a,b,c){return new Date(b,a,c).getDay()}function d(a,b,c,d){return b+=1,b=String(b),d=String(d),1===b.length&&(b="0"+b),1===d.length&&(d="0"+d),a.replace("m",b).replace("y",c).replace("d",d)}function e(a,b,c){var d,e,f;d=[{part:"m",position:a.indexOf("m")},{part:"y",position:a.indexOf("y")},{part:"d",position:a.indexOf("d")}],d.sort(function(a,b){return a.position-b.position}),f=b.match(/(\d+)/g);for(e in d)if(d.hasOwnProperty(e)&&d[e].part===c)return Number(f[e]).toString()}function f(){var b;a(h).each(function(c){return b=g(a(this)),b.hasClass("open")?(b.trigger(c=a.Event("hide.bfhdatepicker")),c.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhdatepicker"),void 0)):!0})}function g(a){return a.closest(".bfh-datepicker")}var h="[data-toggle=bfh-datepicker]",i=function(b,c){this.options=a.extend({},a.fn.bfhdatepicker.defaults,c),this.$element=a(b),this.initCalendar()};i.prototype={constructor:i,setDate:function(){var a,b,c;a=this.options.date,c=this.options.format,""===a||"today"===a||void 0===a?(b=new Date,"today"===a&&this.$element.val(d(c,b.getMonth(),b.getFullYear(),b.getDate())),this.$element.data("month",b.getMonth()),this.$element.data("year",b.getFullYear())):(this.$element.val(a),this.$element.data("month",Number(e(c,a,"m")-1)),this.$element.data("year",Number(e(c,a,"y"))))},setDateLimit:function(a,b){var c,d;d=this.options.format,""!==a?(this.$element.data(b+"limit",!0),"today"===a?(c=new Date,this.$element.data(b+"day",c.getDate()),this.$element.data(b+"month",c.getMonth()),this.$element.data(b+"year",c.getFullYear())):(this.$element.data(b+"day",Number(e(d,a,"d"))),this.$element.data(b+"month",Number(e(d,a,"m")-1)),this.$element.data(b+"year",Number(e(d,a,"y"))))):this.$element.data(b+"limit",!1)},initCalendar:function(){var a,b,c;a="",b="",c="",""!==this.options.icon&&("right"===this.options.align?b='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>':a='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>',c="input-group"),this.$element.html('<div class="'+c+' bfh-datepicker-toggle" data-toggle="bfh-datepicker">'+a+'<input type="text" name="'+this.options.name+'" class="'+this.options.input+'" placeholder="'+this.options.placeholder+'" readonly>'+b+"</div>"+'<div class="bfh-datepicker-calendar">'+'<table class="calendar table table-bordered">'+"<thead>"+'<tr class="months-header">'+'<th class="month" colspan="4">'+'<a class="previous" href="#"><i class="glyphicon glyphicon-chevron-left"></i></a>'+"<span></span>"+'<a class="next" href="#"><i class="glyphicon glyphicon-chevron-right"></i></a>'+"</th>"+'<th class="year" colspan="3">'+'<a class="previous" href="#"><i class="glyphicon glyphicon-chevron-left"></i></a>'+"<span></span>"+'<a class="next" href="#"><i class="glyphicon glyphicon-chevron-right"></i></a>'+"</th>"+"</tr>"+'<tr class="days-header">'+"</tr>"+"</thead>"+"<tbody>"+"</tbody>"+"</table>"+"</div>"),this.$element.on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",h,i.prototype.toggle).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .month > .previous",i.prototype.previousMonth).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .month > .next",i.prototype.nextMonth).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .year > .previous",i.prototype.previousYear).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar .year > .next",i.prototype.nextYear).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar td:not(.off)",i.prototype.select).on("click.bfhdatepicker.data-api touchstart.bfhdatepicker.data-api",".bfh-datepicker-calendar > table.calendar",function(){return!1}),this.setDate(),this.setDateLimit(this.options.min,"lower"),this.setDateLimit(this.options.max,"higher"),this.updateCalendar()},updateCalendarHeader:function(a,b,c){var d,e;for(a.find("table > thead > tr > th.month > span").text(BFHMonthsList[b]),a.find("table > thead > tr > th.year > span").text(c),d=a.find("table > thead > tr.days-header"),d.html(""),e=BFHDayOfWeekStart;e<BFHDaysList.length;e+=1)d.append("<th>"+BFHDaysList[e]+"</th>");for(e=0;BFHDayOfWeekStart>e;e+=1)d.append("<th>"+BFHDaysList[e]+"</th>")},checkMinDate:function(a,b,c){var d,e,f,g;return d=this.$element.data("lowerlimit"),d===!0&&(e=this.$element.data("lowerday"),f=this.$element.data("lowermonth"),g=this.$element.data("loweryear"),e>a&&b===f&&c===g||f>b&&c===g||g>c)?!0:!1},checkMaxDate:function(a,b,c){var d,e,f,g;return d=this.$element.data("higherlimit"),d===!0&&(e=this.$element.data("higherday"),f=this.$element.data("highermonth"),g=this.$element.data("higheryear"),a>e&&b===f&&c===g||b>f&&c===g||c>g)?!0:!1},checkToday:function(a,b,c){var d;return d=new Date,a===d.getDate()&&b===d.getMonth()&&c===d.getFullYear()?!0:!1},updateCalendarDays:function(a,d,e){var f,g,h,i,j,k,l;for(f=a.find("table > tbody").html(""),g=b(d,e),h=b(d+1,e),i=c(d,e,1),j=c(d,e,h),k="",l=0;(i-BFHDayOfWeekStart+7)%7>l;l+=1)k+='<td class="off">'+(g-(i-BFHDayOfWeekStart+7)%7+l+1)+"</td>";for(l=1;h>=l;l+=1)k+=this.checkMinDate(l,d,e)?'<td data-day="'+l+'" class="off">'+l+"</td>":this.checkMaxDate(l,d,e)?'<td data-day="'+l+'" class="off">'+l+"</td>":this.checkToday(l,d,e)?'<td data-day="'+l+'" class="today">'+l+"</td>":'<td data-day="'+l+'">'+l+"</td>",c(d,e,l)===(6+BFHDayOfWeekStart)%7&&(f.append("<tr>"+k+"</tr>"),k="");for(l=1;(7-(j+1-BFHDayOfWeekStart+7)%7)%7+1>=l;l+=1)k+='<td class="off">'+l+"</td>",l===(7-(j+1-BFHDayOfWeekStart+7)%7)%7&&f.append("<tr>"+k+"</tr>")},updateCalendar:function(){var a,b,c;a=this.$element.find(".bfh-datepicker-calendar"),b=this.$element.data("month"),c=this.$element.data("year"),this.updateCalendarHeader(a,b,c),this.updateCalendarDays(a,b,c)},previousMonth:function(){var b,c,d;return b=a(this),c=g(b),0===Number(c.data("month"))?(c.data("month",11),c.data("year",Number(c.data("year"))-1)):c.data("month",Number(c.data("month"))-1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},nextMonth:function(){var b,c,d;return b=a(this),c=g(b),11===Number(c.data("month"))?(c.data("month",0),c.data("year",Number(c.data("year"))+1)):c.data("month",Number(c.data("month"))+1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},previousYear:function(){var b,c,d;return b=a(this),c=g(b),c.data("year",Number(c.data("year"))-1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},nextYear:function(){var b,c,d;return b=a(this),c=g(b),c.data("year",Number(c.data("year"))+1),d=c.data("bfhdatepicker"),d.updateCalendar(),!1},select:function(b){var c,e,h,i,j,k;c=a(this),b.preventDefault(),b.stopPropagation(),e=g(c),h=e.data("bfhdatepicker"),i=e.data("month"),j=e.data("year"),k=c.data("day"),e.val(d(h.options.format,i,j,k)),e.trigger("change.bfhdatepicker"),h.options.close===!0&&f()},toggle:function(b){var c,d,e;if(c=a(this),d=g(c),d.is(".disabled")||void 0!==d.attr("disabled"))return!0;if(e=d.hasClass("open"),f(),!e){if(d.trigger(b=a.Event("show.bfhdatepicker")),b.isDefaultPrevented())return!0;d.toggleClass("open").trigger("shown.bfhdatepicker"),c.focus()}return!1}};var j=a.fn.bfhdatepicker;a.fn.bfhdatepicker=function(b){return this.each(function(){var c,d,e;c=a(this),d=c.data("bfhdatepicker"),e="object"==typeof b&&b,this.type="bfhdatepicker",d||c.data("bfhdatepicker",d=new i(this,e)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhdatepicker.Constructor=i,a.fn.bfhdatepicker.defaults={icon:"glyphicon glyphicon-calendar",align:"left",input:"form-control",placeholder:"",name:"",date:"today",format:"m/d/y",min:"",max:"",close:!0},a.fn.bfhdatepicker.noConflict=function(){return a.fn.bfhdatepicker=j,this};var k;a.valHooks.div&&(k=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-datepicker")?a(b).find('input[type="text"]').val():k?k.get(b):void 0},set:function(b,c){if(a(b).hasClass("bfh-datepicker"))a(b).find('input[type="text"]').val(c);else if(k)return k.set(b,c)}},a(document).ready(function(){a("div.bfh-datepicker").each(function(){var b;b=a(this),b.bfhdatepicker(b.data())})}),a(document).on("click.bfhdatepicker.data-api",f)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhfonts.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addFonts(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapFonts()};b.prototype={constructor:b,getFonts:function(){var b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHFontsList)BFHFontsList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHFontsList[b]);return c}return BFHFontsList},addFonts:function(){var a,b,c;a=this.options.font,c=this.getFonts(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+b+"</option>");this.$element.val(a)},addBootstrapFonts:function(){var a,b,c,d,e,f;d=this.options.font,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getFonts(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&c.append('<li><a tabindex="-1" href="#" style=\'font-family: '+f[e]+"' data-option=\""+e+'">'+e+"</a></li>");this.$element.val(d)}};var c=a.fn.bfhfonts;a.fn.bfhfonts=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhfonts"),f="object"==typeof c&&c,e||d.data("bfhfonts",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhfonts.Constructor=b,a.fn.bfhfonts.defaults={font:"",available:"",blank:!0},a.fn.bfhfonts.noConflict=function(){return a.fn.bfhfonts=c,this},a(document).ready(function(){a("form select.bfh-fonts, span.bfh-fonts, div.bfh-fonts").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhfonts(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhfontsizes.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addFontSizes(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapFontSizes()};b.prototype={constructor:b,getFontsizes:function(){var b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in BFHFontSizesList)BFHFontSizesList.hasOwnProperty(b)&&a.inArray(b,this.options.available)>=0&&(c[b]=BFHFontSizesList[b]);return c}return BFHFontSizesList},addFontSizes:function(){var a,b,c;a=this.options.fontsize,c=this.getFontsizes(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+b+'">'+c[b]+"</option>");this.$element.val(a)},addBootstrapFontSizes:function(){var a,b,c,d,e,f;d=this.options.fontsize,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getFontsizes(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(e in f)f.hasOwnProperty(e)&&c.append('<li><a tabindex="-1" href="#" data-option="'+e+'">'+f[e]+"</a></li>");this.$element.val(d)}};var c=a.fn.bfhfontsizes;a.fn.bfhfontsizes=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhfontsizes"),f="object"==typeof c&&c,e||d.data("bfhfontsizes",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhfontsizes.Constructor=b,a.fn.bfhfontsizes.defaults={fontsize:"",available:"",blank:!0},a.fn.bfhfontsizes.noConflict=function(){return a.fn.bfhfontsizes=c,this},a(document).ready(function(){a("form select.bfh-fontsizes, span.bfh-fontsizes, div.bfh-fontsizes").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhfontsizes(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhgooglefonts.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addFonts(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapFonts()};b.prototype={constructor:b,getFonts:function(){var b,c;if(c=[],this.options.subset)for(b in BFHGoogleFontsList.items)BFHGoogleFontsList.items.hasOwnProperty(b)&&a.inArray(this.options.subset,BFHGoogleFontsList.items[b].subsets)>=0&&(c[BFHGoogleFontsList.items[b].family]={info:BFHGoogleFontsList.items[b],index:parseInt(b,10)});else if(this.options.available){this.options.available=this.options.available.split(",");for(b in BFHGoogleFontsList.items)BFHGoogleFontsList.items.hasOwnProperty(b)&&a.inArray(BFHGoogleFontsList.items[b].family,this.options.available)>=0&&(c[BFHGoogleFontsList.items[b].family]={info:BFHGoogleFontsList.items[b],index:parseInt(b,10)})}else for(b in BFHGoogleFontsList.items)BFHGoogleFontsList.items.hasOwnProperty(b)&&(c[BFHGoogleFontsList.items[b].family]={info:BFHGoogleFontsList.items[b],index:parseInt(b,10)});return c},addFonts:function(){var a,b,c;a=this.options.font,c=this.getFonts(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(b in c)c.hasOwnProperty(b)&&this.$element.append('<option value="'+c[b].info.family+'">'+c[b].info.family+"</option>");this.$element.val(a)},addBootstrapFonts:function(){var a,b,c,d,e,f;d=this.options.font,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),f=this.getFonts(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option="" style="background-image: none;"></a></li>');for(e in f)f.hasOwnProperty(e)&&c.append('<li><a tabindex="-1" href="#" style="background-position: 0 -'+(30*f[e].index-2)+'px;" data-option="'+f[e].info.family+'">'+f[e].info.family+"</a></li>");this.$element.val(d)}};var c=a.fn.bfhgooglefonts;a.fn.bfhgooglefonts=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhgooglefonts"),f="object"==typeof c&&c,e||d.data("bfhgooglefonts",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhgooglefonts.Constructor=b,a.fn.bfhgooglefonts.defaults={font:"",available:"",subset:"",blank:!0},a.fn.bfhgooglefonts.noConflict=function(){return a.fn.bfhgooglefonts=c,this},a(document).ready(function(){a("form select.bfh-googlefonts, span.bfh-googlefonts, div.bfh-googlefonts").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhgooglefonts(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhlanguages.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addLanguages(),this.$element.is("span")&&this.displayLanguage(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapLanguages()};b.prototype={constructor:b,getLanguages:function(){var a,b,c;if(this.options.available){c=[],this.options.available=this.options.available.split(",");for(b in this.options.available)this.options.available.hasOwnProperty(b)&&(-1!==this.options.available[b].indexOf("_")?(a=this.options.available[b].split("_"),c[a[0]]={name:BFHLanguagesList[a[0]],country:a[1]}):c[this.options.available[b]]=BFHLanguagesList[this.options.available[b]]);return c}return BFHLanguagesList},addLanguages:function(){var a,b,c;a=this.options.language,b=this.getLanguages(),this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(c in b)b.hasOwnProperty(c)&&(b[c].hasOwnProperty("name")?this.$element.append('<option value="'+c+"_"+b[c].country+'">'+b[c].name.toProperCase()+" ("+BFHCountriesList[b[c].country]+")</option>"):this.$element.append('<option value="'+c+'">'+b[c].toProperCase()+"</option>"));this.$element.val(a)},addBootstrapLanguages:function(){var a,b,c,d,e,f;d=this.options.language,a=this.$element.find('input[type="hidden"]'),b=this.$element.find(".bfh-selectbox-option"),c=this.$element.find("[role=option]"),e=this.getLanguages(),c.html(""),this.options.blank===!0&&c.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(f in e)e.hasOwnProperty(f)&&(e[f].hasOwnProperty("name")?this.options.flags===!0?c.append('<li><a tabindex="-1" href="#" data-option="'+f+"_"+e[f].country+'"><i class="glyphicon bfh-flag-'+e[f].country+'"></i>'+e[f].name.toProperCase()+"</a></li>"):c.append('<li><a tabindex="-1" href="#" data-option="'+f+"_"+e[f].country+'">'+e[f].name.toProperCase()+" ("+BFHCountriesList[e[f].country]+")</a></li>"):c.append('<li><a tabindex="-1" href="#" data-option="'+f+'">'+e[f]+"</a></li>"));this.$element.val(d)},displayLanguage:function(){var a;a=this.options.language,-1!==a.indexOf("_")?(a=a.split("_"),this.options.flags===!0?this.$element.html('<i class="glyphicon bfh-flag-'+a[1]+'"></i> '+BFHLanguagesList[a[0]].toProperCase()):this.$element.html(BFHLanguagesList[a[0]].toProperCase()+" ("+BFHCountriesList[a[1]]+")")):this.$element.html(BFHLanguagesList[a].toProperCase())}};var c=a.fn.bfhlanguages;a.fn.bfhlanguages=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhlanguages"),f="object"==typeof c&&c,e||d.data("bfhlanguages",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhlanguages.Constructor=b,a.fn.bfhlanguages.defaults={language:"",available:"",flags:!1,blank:!0},a.fn.bfhlanguages.noConflict=function(){return a.fn.bfhlanguages=c,this},a(document).ready(function(){a("form select.bfh-languages, span.bfh-languages, div.bfh-languages").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhlanguages(b.data())})}),String.prototype.toProperCase=function(){return this.replace(/\w\S*/g,function(a){return a.charAt(0).toUpperCase()+a.substr(1).toLowerCase()})}}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhnumber.defaults,c),this.$element=a(b),this.initInput()};b.prototype={constructor:b,initInput:function(){this.options.buttons===!0&&(this.$element.wrap('<div class="input-group"></div>'),this.$element.parent().append('<span class="input-group-addon bfh-number-btn inc"><span class="glyphicon glyphicon-chevron-up"></span></span>'),this.$element.parent().append('<span class="input-group-addon bfh-number-btn dec"><span class="glyphicon glyphicon-chevron-down"></span></span>')),this.$element.on("change.bfhnumber.data-api",b.prototype.change),this.options.keyboard===!0&&this.$element.on("keydown.bfhnumber.data-api",b.prototype.keydown),this.options.buttons===!0&&this.$element.parent().on("mousedown.bfhnumber.data-api",".inc",b.prototype.btninc).on("mousedown.bfhnumber.data-api",".dec",b.prototype.btndec),this.formatNumber()},keydown:function(b){var c;if(c=a(this).data("bfhnumber"),c.$element.is(".disabled")||void 0!==c.$element.attr("disabled"))return!0;switch(b.which){case 38:c.increment();break;case 40:c.decrement()}return!0},mouseup:function(a){var b,c,d;b=a.data.btn,c=b.$element.data("timer"),d=b.$element.data("interval"),clearTimeout(c),clearInterval(d)},btninc:function(){var c,d;return c=a(this).parent().find(".bfh-number").data("bfhnumber"),c.$element.is(".disabled")||void 0!==c.$element.attr("disabled")?!0:(c.increment(),d=setTimeout(function(){var a;a=setInterval(function(){c.increment()},80),c.$element.data("interval",a)},750),c.$element.data("timer",d),a(document).one("mouseup",{btn:c},b.prototype.mouseup),!0)},btndec:function(){var c,d;return c=a(this).parent().find(".bfh-number").data("bfhnumber"),c.$element.is(".disabled")||void 0!==c.$element.attr("disabled")?!0:(c.decrement(),d=setTimeout(function(){var a;a=setInterval(function(){c.decrement()},80),c.$element.data("interval",a)},750),c.$element.data("timer",d),a(document).one("mouseup",{btn:c},b.prototype.mouseup),!0)},change:function(){var b;return b=a(this).data("bfhnumber"),b.$element.is(".disabled")||void 0!==b.$element.attr("disabled")?!0:(b.formatNumber(),!0)},increment:function(){var a;a=this.getValue(),a+=1,this.$element.val(a).change()},decrement:function(){var a;a=this.getValue(),a-=1,this.$element.val(a).change()},getValue:function(){var a;return a=this.$element.val(),"-1"!==a&&(a=String(a).replace(/\D/g,"")),0===String(a).length&&(a=this.options.min),parseInt(a)},formatNumber:function(){var a,b,c,d;if(a=this.getValue(),a>this.options.max&&(a=this.options.wrap===!0?this.options.min:this.options.max),a<this.options.min&&(a=this.options.wrap===!0?this.options.max:this.options.min),this.options.zeros===!0)for(b=String(this.options.max).length,c=String(a).length,d=c;b>d;d+=1)a="0"+a;a!==this.$element.val()&&this.$element.val(a)}};var c=a.fn.bfhnumber;a.fn.bfhnumber=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhnumber"),f="object"==typeof c&&c,e||d.data("bfhnumber",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhnumber.Constructor=b,a.fn.bfhnumber.defaults={min:0,max:9999,zeros:!1,keyboard:!0,buttons:!0,wrap:!1},a.fn.bfhnumber.noConflict=function(){return a.fn.bfhnumber=c,this},a(document).ready(function(){a('form input[type="text"].bfh-number, form input[type="number"].bfh-number').each(function(){var b;b=a(this),b.bfhnumber(b.data())})})}(window.jQuery),+function(a){"use strict";function b(a,b){var c,d,e,f;for(c="",b=String(b).replace(/\D/g,""),d=0,e=0;d<a.length;d+=1)/\d/g.test(a.charAt(d))?a.charAt(d)===b.charAt(e)?(c+=b.charAt(e),e+=1):c+=a.charAt(d):"d"!==a.charAt(d)?(""!==b.charAt(e)||"+"===a.charAt(d))&&(c+=a.charAt(d)):""===b.charAt(e)?c+="":(c+=b.charAt(e),e+=1);return f=a.charAt(c.length),"d"!==f&&(c+=f),c}function c(a){var b,c=0;return document.selection?(a.focus(),b=document.selection.createRange(),b.moveStart("character",-a.value.length),c=b.text.length):(a.selectionStart||0===a.selectionStart)&&(c=a.selectionStart),c}function d(a,b){var c;document.selection?(a.focus(),c=document.selection.createRange(),c.moveStart("character",-a.value.length),c.moveStart("character",b),c.moveEnd("character",0),c.select()):(a.selectionStart||0===a.selectionStart)&&(a.selectionStart=b,a.selectionEnd=b,a.focus())}var e=function(b,c){this.options=a.extend({},a.fn.bfhphone.defaults,c),this.$element=a(b),(this.$element.is('input[type="text"]')||this.$element.is('input[type="tel"]'))&&this.addFormatter(),this.$element.is("span")&&this.displayFormatter()
-};e.prototype={constructor:e,addFormatter:function(){var b;""!==this.options.country&&(b=a(document).find("#"+this.options.country),0!==b.length?(this.options.format=BFHPhoneFormatList[b.val()],b.on("change",{phone:this},this.changeCountry)):this.options.format=BFHPhoneFormatList[this.options.country]),this.$element.on("keyup.bfhphone.data-api",e.prototype.change),this.loadFormatter()},loadFormatter:function(){var a;a=b(this.options.format,this.$element.val()),this.$element.val(a)},displayFormatter:function(){var a;""!==this.options.country&&(this.options.format=BFHPhoneFormatList[this.options.country]),a=b(this.options.format,this.options.number),this.$element.html(a)},changeCountry:function(b){var c,d;c=a(this),d=b.data.phone,d.$element.val(String(d.$element.val()).replace(/\+\d*/g,"")),d.options.format=BFHPhoneFormatList[c.val()],d.loadFormatter()},change:function(e){var f,g,h,i;return f=a(this).data("bfhphone"),f.$element.is(".disabled")||void 0!==f.$element.attr("disabled")?!0:(g=c(f.$element[0]),h=!1,g===f.$element.val().length&&(h=!0),8===e.which&&"d"!==f.options.format.charAt(f.$element.val().length)&&f.$element.val(String(f.$element.val()).substring(0,f.$element.val().length-1)),i=b(f.options.format,f.$element.val()),i===f.$element.val()?!0:(f.$element.val(i),h&&(g=f.$element.val().length),d(f.$element[0],g),!0))}};var f=a.fn.bfhphone;a.fn.bfhphone=function(b){return this.each(function(){var c,d,f;c=a(this),d=c.data("bfhphone"),f="object"==typeof b&&b,d||c.data("bfhphone",d=new e(this,f)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhphone.Constructor=e,a.fn.bfhphone.defaults={format:"",number:"",country:""},a.fn.bfhphone.noConflict=function(){return a.fn.bfhphone=f,this},a(document).ready(function(){a('form input[type="text"].bfh-phone, form input[type="tel"].bfh-phone, span.bfh-phone').each(function(){var b;b=a(this),b.bfhphone(b.data())})})}(window.jQuery),+function(a){"use strict";function b(){var b;a(d).each(function(d){return b=c(a(this)),b.hasClass("open")?(b.trigger(d=a.Event("hide.bfhselectbox")),d.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhselectbox"),void 0)):!0})}function c(a){return a.closest(".bfh-selectbox")}var d="[data-toggle=bfh-selectbox]",e=function(b,c){this.options=a.extend({},a.fn.bfhselectbox.defaults,c),this.$element=a(b),this.initSelectBox()};e.prototype={constructor:e,initSelectBox:function(){var b;b="",this.$element.find("div").each(function(){b=b+'<li><a tabindex="-1" href="#" data-option="'+a(this).data("value")+'">'+a(this).html()+"</a></li>"}),this.$element.html('<input type="hidden" name="'+this.options.name+'" value="">'+'<a class="bfh-selectbox-toggle '+this.options.input+'" role="button" data-toggle="bfh-selectbox" href="#">'+'<span class="bfh-selectbox-option"></span>'+'<span class="'+this.options.icon+' selectbox-caret"></span>'+"</a>"+'<div class="bfh-selectbox-options">'+'<div role="listbox">'+'<ul role="option">'+"</ul>"+"</div>"+"</div>"),this.$element.find("[role=option]").html(b),this.options.filter===!0&&this.$element.find(".bfh-selectbox-options").prepend('<div class="bfh-selectbox-filter-container"><input type="text" class="bfh-selectbox-filter form-control"></div>'),this.$element.val(this.options.value),this.$element.on("click.bfhselectbox.data-api touchstart.bfhselectbox.data-api",d,e.prototype.toggle).on("keydown.bfhselectbox.data-api",d+", [role=option]",e.prototype.keydown).on("mouseenter.bfhselectbox.data-api","[role=option] > li > a",e.prototype.mouseenter).on("click.bfhselectbox.data-api","[role=option] > li > a",e.prototype.select).on("click.bfhselectbox.data-api",".bfh-selectbox-filter",function(){return!1}).on("propertychange.bfhselectbox.data-api change.bfhselectbox.data-api input.bfhselectbox.data-api paste.bfhselectbox.data-api",".bfh-selectbox-filter",e.prototype.filter)},toggle:function(d){var e,f,g;if(e=a(this),f=c(e),f.is(".disabled")||void 0!==f.attr("disabled"))return!0;if(g=f.hasClass("open"),b(),!g){if(f.trigger(d=a.Event("show.bfhselectbox")),d.isDefaultPrevented())return!0;f.toggleClass("open").trigger("shown.bfhselectbox").find('[role=option] > li > [data-option="'+f.val()+'"]').focus()}return!1},filter:function(){var b,d,e;b=a(this),d=c(b),e=a("[role=option] li a",d),e.hide().filter(function(){return-1!==a(this).text().toUpperCase().indexOf(b.val().toUpperCase())}).show()},keydown:function(b){var f,g,h,i,j;return/(38|40|27)/.test(b.keyCode)?(f=a(this),b.preventDefault(),b.stopPropagation(),h=c(f),i=h.hasClass("open"),!i||i&&27===b.keyCode?(27===b.which&&h.find(d).focus(),f.click()):(g=a("[role=option] li:not(.divider) a:visible",h),g.length?(a("body").off("mouseenter.bfh-selectbox.data-api","[role=option] > li > a",e.prototype.mouseenter),j=g.index(g.filter(":focus")),38===b.keyCode&&j>0&&(j-=1),40===b.keyCode&&j<g.length-1&&(j+=1),j||(j=0),g.eq(j).focus(),a("body").on("mouseenter.bfh-selectbox.data-api","[role=option] > li > a",e.prototype.mouseenter),void 0):!0)):!0},mouseenter:function(){var b;b=a(this),b.focus()},select:function(d){var e,f;return e=a(this),d.preventDefault(),d.stopPropagation(),e.is(".disabled")||void 0!==e.attr("disabled")?!0:(f=c(e),f.val(e.data("option")),f.trigger("change.bfhselectbox"),b(),void 0)}};var f=a.fn.bfhselectbox;a.fn.bfhselectbox=function(b){return this.each(function(){var c,d,f;c=a(this),d=c.data("bfhselectbox"),f="object"==typeof b&&b,this.type="bfhselectbox",d||c.data("bfhselectbox",d=new e(this,f)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhselectbox.Constructor=e,a.fn.bfhselectbox.defaults={icon:"caret",input:"form-control",name:"",value:"",filter:!1},a.fn.bfhselectbox.noConflict=function(){return a.fn.bfhselectbox=f,this};var g;a.valHooks.div&&(g=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-selectbox")?a(b).find('input[type="hidden"]').val():g?g.get(b):void 0},set:function(b,c){var d,e;if(a(b).hasClass("bfh-selectbox"))d=a(b),d.find("li a[data-option='"+c+"']").length>0?e=d.find("li a[data-option='"+c+"']").html():d.find("li a").length>0?e=d.find("li a").eq(0).html():(c="",e=""),d.find('input[type="hidden"]').val(c),d.find(".bfh-selectbox-option").html(e);else if(g)return g.set(b,c)}},a(document).ready(function(){a("div.bfh-selectbox").each(function(){var b;b=a(this),b.bfhselectbox(b.data())})}),a(document).on("click.bfhselectbox.data-api",b)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhslider.defaults,c),this.$element=a(b),this.initSlider()};b.prototype={constructor:b,initSlider:function(){""===this.options.value&&(this.options.value=this.options.min),this.$element.html('<input type="hidden" name="'+this.options.name+'" value="">'+'<div class="bfh-slider-handle"><div class="bfh-slider-value"></div></div>'),this.$element.find('input[type="hidden"]').val(this.options.value),this.updateHandle(this.options.value),this.$element.on("mousedown.bfhslider.data-api",b.prototype.mouseDown)},updateHandle:function(a){var b,c,d,e;e=this.options.max-this.options.min,c=this.$element.width(),d=this.$element.position().left,b=Math.round((a-this.options.min)*(c-20)/e+d),this.$element.find(".bfh-slider-handle").css("left",b+"px"),this.$element.find(".bfh-slider-value").text(a)},updateVal:function(a){var b,c,d,e,f;return f=this.options.max-this.options.min,b=this.$element.width(),c=this.$element.offset().left,d=c+b,c>a&&(a=c),a+20>d&&(a=d),e=(a-c)/b,e=Math.ceil(e*f+this.options.min),e===this.$element.val()?!0:(this.$element.val(e),this.$element.trigger("change.bfhslider"),void 0)},mouseDown:function(){var c;return c=a(this),c.is(".disabled")||void 0!==c.attr("disabled")?!0:(a(document).on("mousemove.bfhslider.data-api",{slider:c},b.prototype.mouseMove).one("mouseup.bfhslider.data-api",{slider:c},b.prototype.mouseUp),void 0)},mouseMove:function(a){var b;b=a.data.slider,b.data("bfhslider").updateVal(a.pageX)},mouseUp:function(b){var c;c=b.data.slider,c.data("bfhslider").updateVal(b.pageX),a(document).off("mousemove.bfhslider.data-api")}};var c=a.fn.bfhslider;a.fn.bfhslider=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhslider"),f="object"==typeof c&&c,this.type="bfhslider",e||d.data("bfhslider",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhslider.Constructor=b,a.fn.bfhslider.defaults={name:"",value:"",min:0,max:100},a.fn.bfhslider.noConflict=function(){return a.fn.bfhslider=c,this};var d;a.valHooks.div&&(d=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-slider")?a(b).find('input[type="hidden"]').val():d?d.get(b):void 0},set:function(b,c){if(a(b).hasClass("bfh-slider"))a(b).find('input[type="hidden"]').val(c),a(b).data("bfhslider").updateHandle(c);else if(d)return d.set(b,c)}},a(document).ready(function(){a("div.bfh-slider").each(function(){var b;b=a(this),b.bfhslider(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhstates.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addStates(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapStates(),this.$element.is("span")&&this.displayState()};b.prototype={constructor:b,addStates:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.val(),c.on("change",{state:this},this.changeCountry))),this.loadStates(b)},loadStates:function(a){var b,c;b=this.options.state,this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(c in BFHStatesList[a])BFHStatesList[a].hasOwnProperty(c)&&this.$element.append('<option value="'+BFHStatesList[a][c].code+'">'+BFHStatesList[a][c].name+"</option>");this.$element.val(b)},changeCountry:function(b){var c,d,e;c=a(this),d=b.data.state,e=c.val(),d.loadStates(e)},addBootstrapStates:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.find('input[type="hidden"]').val(),c.on("change.bfhselectbox",{state:this},this.changeBootstrapCountry))),this.loadBootstrapStates(b)},loadBootstrapStates:function(a){var b,c,d,e,f,g;e=this.options.state,f="",b=this.$element.find('input[type="hidden"]'),c=this.$element.find(".bfh-selectbox-option"),d=this.$element.find("[role=option]"),d.html(""),this.options.blank===!0&&d.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(g in BFHStatesList[a])BFHStatesList[a].hasOwnProperty(g)&&(d.append('<li><a tabindex="-1" href="#" data-option="'+BFHStatesList[a][g].code+'">'+BFHStatesList[a][g].name+"</a></li>"),BFHStatesList[a][g].code===e&&(f=BFHStatesList[a][g].name));this.$element.val(e)},changeBootstrapCountry:function(b){var c,d,e;c=a(this),d=b.data.state,e=c.val(),d.loadBootstrapStates(e)},displayState:function(){var a,b,c,d;a=this.options.country,b=this.options.state,c="";for(d in BFHStatesList[a])if(BFHStatesList[a].hasOwnProperty(d)&&BFHStatesList[a][d].code===b){c=BFHStatesList[a][d].name;break}this.$element.html(c)}};var c=a.fn.bfhstates;a.fn.bfhstates=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhstates"),f="object"==typeof c&&c,e||d.data("bfhstates",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhstates.Constructor=b,a.fn.bfhstates.defaults={country:"",state:"",blank:!0},a.fn.bfhstates.noConflict=function(){return a.fn.bfhstates=c,this},a(document).ready(function(){a("form select.bfh-states, span.bfh-states, div.bfh-states").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhstates(b.data())})})}(window.jQuery),+function(a){"use strict";function b(a,b){return a=String(a),1===a.length&&(a="0"+a),b=String(b),1===b.length&&(b="0"+b),a+BFHTimePickerDelimiter+b}function c(){var b;a(e).each(function(c){return b=d(a(this)),b.hasClass("open")?(b.trigger(c=a.Event("hide.bfhtimepicker")),c.isDefaultPrevented()?!0:(b.removeClass("open").trigger("hidden.bfhtimepicker"),void 0)):!0})}function d(a){return a.closest(".bfh-timepicker")}var e="[data-toggle=bfh-timepicker]",f=function(b,c){this.options=a.extend({},a.fn.bfhtimepicker.defaults,c),this.$element=a(b),this.initPopover()};f.prototype={constructor:f,setTime:function(){var a,c,d,e,f,g,h;a=this.options.time,g="",h="",""===a||"now"===a||void 0===a?(c=new Date,e=c.getHours(),f=c.getMinutes(),"12h"===this.options.mode&&(e>12?(e-=12,g=" "+BFHTimePickerModes.pm,h="pm"):(g=" "+BFHTimePickerModes.am,h="am")),"now"===a&&this.$element.find('.bfh-timepicker-toggle > input[type="text"]').val(b(e,f)+g),this.$element.data("hour",e),this.$element.data("minute",f),this.$element.data("mode",h)):(d=String(a).split(BFHTimePickerDelimiter),e=d[0],f=d[1],"12h"===this.options.mode&&(d=String(f).split(" "),f=d[0],h=d[1]===BFHTimePickerModes.pm?"pm":"am"),this.$element.find('.bfh-timepicker-toggle > input[type="text"]').val(a),this.$element.data("hour",e),this.$element.data("minute",f),this.$element.data("mode",h))},initPopover:function(){var b,c,d,g,h;b="",c="",d="",""!==this.options.icon&&("right"===this.options.align?c='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>':b='<span class="input-group-addon"><i class="'+this.options.icon+'"></i></span>',d="input-group"),g="",h="23","12h"===this.options.mode&&(g='<td><div class="bfh-selectbox" data-input="'+this.options.input+'" data-value="am">'+'<div data-value="am">'+BFHTimePickerModes.am+"</div>"+'<div data-value="pm">'+BFHTimePickerModes.pm+"</div>"+"</div>",h="11"),this.$element.html('<div class="'+d+' bfh-timepicker-toggle" data-toggle="bfh-timepicker">'+b+'<input type="text" name="'+this.options.name+'" class="'+this.options.input+'" placeholder="'+this.options.placeholder+'" readonly>'+c+"</div>"+'<div class="bfh-timepicker-popover">'+'<table class="table">'+"<tbody>"+"<tr>"+'<td class="hour">'+'<input type="text" class="'+this.options.input+' bfh-number"  data-min="0" data-max="'+h+'" data-zeros="true" data-wrap="true">'+"</td>"+'<td class="separator">'+BFHTimePickerDelimiter+"</td>"+'<td class="minute">'+'<input type="text" class="'+this.options.input+' bfh-number"  data-min="0" data-max="59" data-zeros="true" data-wrap="true">'+"</td>"+g+"</tr>"+"</tbody>"+"</table>"+"</div>"),this.$element.on("click.bfhtimepicker.data-api touchstart.bfhtimepicker.data-api",e,f.prototype.toggle).on("click.bfhtimepicker.data-api touchstart.bfhtimepicker.data-api",".bfh-timepicker-popover > table",function(){return!1}),this.$element.find(".bfh-number").each(function(){var b;b=a(this),b.bfhnumber(b.data()),b.on("change",f.prototype.change)}),this.$element.find(".bfh-selectbox").each(function(){var b;b=a(this),b.bfhselectbox(b.data()),b.on("change.bfhselectbox",f.prototype.change)}),this.setTime(),this.updatePopover()},updatePopover:function(){var a,b,c;a=this.$element.data("hour"),b=this.$element.data("minute"),c=this.$element.data("mode"),this.$element.find(".hour input[type=text]").val(a).change(),this.$element.find(".minute input[type=text]").val(b).change(),this.$element.find(".bfh-selectbox").val(c)},change:function(){var b,c,e,f;return b=a(this),c=d(b),e=c.data("bfhtimepicker"),e&&"undefined"!==e&&(f="","12h"===e.options.mode&&(f=" "+BFHTimePickerModes[c.find(".bfh-selectbox").val()]),c.find('.bfh-timepicker-toggle > input[type="text"]').val(c.find(".hour input[type=text]").val()+BFHTimePickerDelimiter+c.find(".minute input[type=text]").val()+f),c.trigger("change.bfhtimepicker")),!1},toggle:function(b){var e,f,g;if(e=a(this),f=d(e),f.is(".disabled")||void 0!==f.attr("disabled"))return!0;if(g=f.hasClass("open"),c(),!g){if(f.trigger(b=a.Event("show.bfhtimepicker")),b.isDefaultPrevented())return!0;f.toggleClass("open").trigger("shown.bfhtimepicker"),e.focus()}return!1}};var g=a.fn.bfhtimepicker;a.fn.bfhtimepicker=function(b){return this.each(function(){var c,d,e;c=a(this),d=c.data("bfhtimepicker"),e="object"==typeof b&&b,this.type="bfhtimepicker",d||c.data("bfhtimepicker",d=new f(this,e)),"string"==typeof b&&d[b].call(c)})},a.fn.bfhtimepicker.Constructor=f,a.fn.bfhtimepicker.defaults={icon:"glyphicon glyphicon-time",align:"left",input:"form-control",placeholder:"",name:"",time:"now",mode:"24h"},a.fn.bfhtimepicker.noConflict=function(){return a.fn.bfhtimepicker=g,this};var h;a.valHooks.div&&(h=a.valHooks.div),a.valHooks.div={get:function(b){return a(b).hasClass("bfh-timepicker")?a(b).find('.bfh-timepicker-toggle > input[type="text"]').val():h?h.get(b):void 0},set:function(b,c){var d;if(a(b).hasClass("bfh-timepicker"))d=a(b).data("bfhtimepicker"),d.options.time=c,d.setTime(),d.updatePopover();else if(h)return h.set(b,c)}},a(document).ready(function(){a("div.bfh-timepicker").each(function(){var b;b=a(this),b.bfhtimepicker(b.data())})}),a(document).on("click.bfhtimepicker.data-api",c)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=a.extend({},a.fn.bfhtimezones.defaults,c),this.$element=a(b),this.$element.is("select")&&this.addTimezones(),this.$element.hasClass("bfh-selectbox")&&this.addBootstrapTimezones()};b.prototype={constructor:b,addTimezones:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.val(),c.on("change",{timezone:this},this.changeCountry))),this.loadTimezones(b)},loadTimezones:function(a){var b,c;b=this.options.timezone,this.$element.html(""),this.options.blank===!0&&this.$element.append('<option value=""></option>');for(c in BFHTimezonesList[a])BFHTimezonesList[a].hasOwnProperty(c)&&this.$element.append('<option value="'+c+'">'+BFHTimezonesList[a][c]+"</option>");this.$element.val(b)},changeCountry:function(b){var c,d,e;c=a(this),d=b.data.timezone,e=c.val(),d.loadTimezones(e)},addBootstrapTimezones:function(){var b,c;b=this.options.country,""!==b&&(c=a(document).find("#"+b),0!==c.length&&(b=c.find('input[type="hidden"]').val(),c.on("change.bfhselectbox",{timezone:this},this.changeBootstrapCountry))),this.loadBootstrapTimezones(b)},loadBootstrapTimezones:function(a){var b,c,d,e,f;e=this.options.timezone,b=this.$element.find('input[type="hidden"]'),c=this.$element.find(".bfh-selectbox-option"),d=this.$element.find("[role=option]"),d.html(""),this.options.blank===!0&&d.append('<li><a tabindex="-1" href="#" data-option=""></a></li>');for(f in BFHTimezonesList[a])BFHTimezonesList[a].hasOwnProperty(f)&&d.append('<li><a tabindex="-1" href="#" data-option="'+f+'">'+BFHTimezonesList[a][f]+"</a></li>");this.$element.val(e)},changeBootstrapCountry:function(b){var c,d,e;c=a(this),d=b.data.timezone,e=c.val(),d.loadBootstrapTimezones(e)}};var c=a.fn.bfhtimezones;a.fn.bfhtimezones=function(c){return this.each(function(){var d,e,f;d=a(this),e=d.data("bfhtimezones"),f="object"==typeof c&&c,e||d.data("bfhtimezones",e=new b(this,f)),"string"==typeof c&&e[c].call(d)})},a.fn.bfhtimezones.Constructor=b,a.fn.bfhtimezones.defaults={country:"",timezone:"",blank:!0},a.fn.bfhtimezones.noConflict=function(){return a.fn.bfhtimezones=c,this},a(document).ready(function(){a("form select.bfh-timezones, div.bfh-timezones").each(function(){var b;b=a(this),b.hasClass("bfh-selectbox")&&b.bfhselectbox(b.data()),b.bfhtimezones(b.data())})})}(window.jQuery);
\ No newline at end of file
diff --git a/gui/slick/js/lib/bootstrap-hover-dropdown.min.js b/gui/slick/js/lib/bootstrap-hover-dropdown.min.js
deleted file mode 100644
index 0f5f1d1318116a86b4af68eb28adff332f4fe62d..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/lib/bootstrap-hover-dropdown.min.js and /dev/null differ
diff --git a/gui/slick/js/lib/bootstrap.min.js b/gui/slick/js/lib/bootstrap.min.js
deleted file mode 100644
index 133aeecb98aa2b05d2dc1fcd623afcb37204828a..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/lib/bootstrap.min.js and /dev/null differ
diff --git a/gui/slick/js/lib/bootstrap3-typeahead.min.js b/gui/slick/js/lib/bootstrap3-typeahead.min.js
deleted file mode 100644
index 89959ab83d2f84143b287846dcf0c5c41d39200d..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/lib/bootstrap3-typeahead.min.js and /dev/null differ
diff --git a/gui/slick/js/lib/jquery-2.1.4.min.js b/gui/slick/js/lib/jquery-2.1.4.min.js
deleted file mode 100644
index 49990d6e14503798f142dcb0d5b23cb0c8f80244..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/lib/jquery-2.1.4.min.js and /dev/null differ
diff --git a/gui/slick/js/lib/jquery-ui-1.10.4.custom.min.js b/gui/slick/js/lib/jquery-ui-1.10.4.custom.min.js
deleted file mode 100644
index ce23cf3e604b1ce1abbdf84d3cb40d6bf3eaa2af..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/lib/jquery-ui-1.10.4.custom.min.js and /dev/null differ
diff --git a/gui/slick/js/lib/jquery.confirm.js b/gui/slick/js/lib/jquery.confirm.js
deleted file mode 100644
index 7eb12024361940b51c37421b061f246c79008509..0000000000000000000000000000000000000000
--- a/gui/slick/js/lib/jquery.confirm.js
+++ /dev/null
@@ -1,56 +0,0 @@
-(function($){
-	
-	$.confirm = function(params){
-		
-		if($('#confirmOverlay').length){
-			// A confirm is already shown on the page:
-			return false;
-		}
-		
-		var buttonHTML = '';
-		$.each(params.buttons,function(name,obj){
-			
-			// Generating the markup for the buttons:
-			
-			buttonHTML += '<a href="#" class="button '+obj['class']+'">'+name+'<span></span></a>';
-			
-			if(!obj.action){
-				obj.action = function(){};
-			}
-		});
-		
-		var markup = [
-			'<div id="confirmOverlay">',
-			'<div id="confirmBox">',
-			'<h1>',params.title,'</h1>',
-			'<p>',params.message,'</p>',
-			'<div id="confirmButtons">',
-			buttonHTML,
-			'</div></div></div>'
-		].join('');
-		
-		$(markup).hide().appendTo('body').fadeIn();
-		
-		var buttons = $('#confirmBox .button'),
-			i = 0;
-
-		$.each(params.buttons,function(name,obj){
-			buttons.eq(i++).click(function(){
-				
-				// Calling the action attribute when a
-				// click occurs, and hiding the confirm.
-				
-				obj.action();
-				$.confirm.hide();
-				return false;
-			});
-		});
-	}
-
-	$.confirm.hide = function(){
-		$('#confirmOverlay').fadeOut(function(){
-			$(this).remove();
-		});
-	}
-	
-})(jQuery);
\ No newline at end of file
diff --git a/gui/slick/js/lib/jquery.cookie.js b/gui/slick/js/lib/jquery.cookie.js
deleted file mode 100644
index dc031611f2c0c3c9b70b7cfa9e317f5f17ccacd7..0000000000000000000000000000000000000000
--- a/gui/slick/js/lib/jquery.cookie.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * jQuery Cookie plugin
- *
- * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- *
- */
-(function($) {
-    $.cookie = function(key, value, options) {
-
-        // key and at least value given, set cookie...
-        if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) {
-            options = $.extend({}, options);
-
-            if (value === null || value === undefined) {
-                options.expires = -1;
-            }
-
-            if (typeof options.expires === 'number') {
-                var days = options.expires, t = options.expires = new Date();
-                t.setDate(t.getDate() + days);
-            }
-
-            value = String(value);
-
-            return (document.cookie = [
-                encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),
-                options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
-                options.path    ? '; path=' + options.path : '',
-                options.domain  ? '; domain=' + options.domain : '',
-                options.secure  ? '; secure' : ''
-            ].join(''));
-        }
-
-        // key and possibly options given, get cookie...
-        options = value || {};
-        var decode = options.raw ? function(s) { return s; } : decodeURIComponent;
-
-        var pairs = document.cookie.split('; ');
-        for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) {
-            if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined
-        }
-        return null;
-    };
-})(jQuery);
diff --git a/gui/slick/js/lib/jquery.qtip-2.2.1.min.js b/gui/slick/js/lib/jquery.qtip-2.2.1.min.js
deleted file mode 100644
index 411a0f8f98f112b9319f0d6696d6951641d587ec..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/lib/jquery.qtip-2.2.1.min.js and /dev/null differ
diff --git a/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js b/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js
index a914012a03db2ea885fff998706878bb4a4735ae..c53a58f7caf2f932f8430f700c12773c9191bfd1 100644
--- a/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js
+++ b/gui/slick/js/lib/jquery.scrolltopcontrol-1.1.js
@@ -2,75 +2,78 @@
 //** Available/ usage terms at http://www.dynamicdrive.com (March 30th, 09')
 //** v1.1 (April 7th, 09'):
 //** 1) Adds ability to scroll to an absolute position (from top of page) or specific element on the page instead.
-//** 2) Fixes scroll animation not working in Opera. 
+//** 2) Fixes scroll animation not working in Opera.
 
 
 var scrolltotop={
-	//startline: Integer. Number of pixels from top of doc scrollbar is scrolled before showing control
-	//scrollto: Keyword (Integer, or "Scroll_to_Element_ID"). How far to scroll document up when control is clicked on (0=top).
-	setting: {startline:100, scrollto: 0, scrollduration:1000, fadeduration:[500, 100]},
-	controlHTML: top_image_html,//set in inc_top.tmpl so it can be $srRooted
-	controlattrs: {offsetx:10, offsety:10}, //offset of control relative to right/ bottom of window corner
-	anchorkeyword: '#top', //Enter href value of HTML anchors on the page that should also act as "Scroll Up" links
+    //startline: Integer. Number of pixels from top of doc scrollbar is scrolled before showing control
+    //scrollto: Keyword (Integer, or "Scroll_to_Element_ID"). How far to scroll document up when control is clicked on (0=top).
+    setting: {startline:100, scrollto: 0, scrollduration:1000, fadeduration:[500, 100]},
+    controlHTML: topImageHtml, // jshint ignore:line
+    controlattrs: {offsetx:10, offsety:10}, //offset of control relative to right/ bottom of window corner
+    anchorkeyword: '#top', //Enter href value of HTML anchors on the page that should also act as "Scroll Up" links
 
-	state: {isvisible:false, shouldvisible:false},
+    state: {isvisible:false, shouldvisible:false},
 
-	scrollup:function(){
-		if (!this.cssfixedsupport) //if control is positioned using JavaScript
-			this.$control.css({opacity:0}) //hide control immediately after clicking it
-		var dest=isNaN(this.setting.scrollto)? this.setting.scrollto : parseInt(this.setting.scrollto)
-		if (typeof dest=="string" && jQuery('#'+dest).length==1) //check element set by string exists
-			dest=jQuery('#'+dest).offset().top
-		else
-			dest=0
-		this.$body.animate({scrollTop: dest}, this.setting.scrollduration);
-	},
+    scrollup:function(){
+        if (!this.cssfixedsupport) { //if control is positioned using JavaScript
+            this.$control.css({opacity:0}); //hide control immediately after clicking it
+        }
+        var dest=isNaN(this.setting.scrollto)? this.setting.scrollto : parseInt(this.setting.scrollto);
+        if (typeof dest === "string" && jQuery('#'+dest).length === 1){ //check element set by string exists
+            dest=jQuery('#'+dest).offset().top;
+        } else {
+            dest = 0;
+        }
+        this.$body.animate({scrollTop: dest}, this.setting.scrollduration);
+    },
 
-	keepfixed:function(){
-		var $window=jQuery(window)
-		var controlx=$window.scrollLeft() + $window.width() - this.$control.width() - this.controlattrs.offsetx
-		var controly=$window.scrollTop() + $window.height() - this.$control.height() - this.controlattrs.offsety
-		this.$control.css({left:controlx+'px', top:controly+'px'})
-	},
+    keepfixed:function(){
+        var $window=jQuery(window);
+        var controlx=$window.scrollLeft() + $window.width() - this.$control.width() - this.controlattrs.offsetx;
+        var controly=$window.scrollTop() + $window.height() - this.$control.height() - this.controlattrs.offsety;
+        this.$control.css({left:controlx+'px', top:controly+'px'});
+    },
 
-	togglecontrol:function(){
-		var scrolltop=jQuery(window).scrollTop()
-		if (!this.cssfixedsupport)
-			this.keepfixed()
-		this.state.shouldvisible=(scrolltop>=this.setting.startline)? true : false
-		if (this.state.shouldvisible && !this.state.isvisible){
-			this.$control.stop().animate({opacity:1}, this.setting.fadeduration[0])
-			this.state.isvisible=true
-		}
-		else if (this.state.shouldvisible==false && this.state.isvisible){
-			this.$control.stop().animate({opacity:0}, this.setting.fadeduration[1])
-			this.state.isvisible=false
-		}
-	},
-	
-	init:function(){
-		jQuery(document).ready(function($){
-			var mainobj=scrolltotop
-			var iebrws=document.all
-			mainobj.cssfixedsupport=!iebrws || iebrws && document.compatMode=="CSS1Compat" && window.XMLHttpRequest //not IE or IE7+ browsers in standards mode
-			mainobj.$body=(window.opera)? (document.compatMode=="CSS1Compat"? $('html') : $('body')) : $('html,body')
-			mainobj.$control=$('<div id="topcontrol">'+mainobj.controlHTML+'</div>')
-				.css({position:mainobj.cssfixedsupport? 'fixed' : 'absolute', bottom:mainobj.controlattrs.offsety, right:mainobj.controlattrs.offsetx, opacity:0, cursor:'pointer'})
-				.attr({title:'Scroll Back to Top'})
-				.click(function(){mainobj.scrollup(); return false})
-				.appendTo('body')
-			if (document.all && !window.XMLHttpRequest && mainobj.$control.text()!='') //loose check for IE6 and below, plus whether control contains any text
-				mainobj.$control.css({width:mainobj.$control.width()}) //IE6- seems to require an explicit width on a DIV containing text
-			mainobj.togglecontrol()
-			$('a[href="' + mainobj.anchorkeyword +'"]').click(function(){
-				mainobj.scrollup()
-				return false
-			})
-			$(window).bind('scroll resize', function(e){
-				mainobj.togglecontrol()
-			})
-		})
-	}
-}
+    togglecontrol:function(){
+        var scrolltop=jQuery(window).scrollTop();
+        if (!this.cssfixedsupport) {
+            this.keepfixed();
+        }
+        this.state.shouldvisible=(scrolltop>=this.setting.startline)? true : false;
+        if (this.state.shouldvisible && !this.state.isvisible){
+            this.$control.stop().animate({opacity:1}, this.setting.fadeduration[0]);
+            this.state.isvisible = true;
+        } else if (this.state.shouldvisible === false && this.state.isvisible){
+            this.$control.stop().animate({opacity:0}, this.setting.fadeduration[1]);
+            this.state.isvisible=false;
+        }
+    },
 
-scrolltotop.init()
\ No newline at end of file
+    init:function(){
+        jQuery(document).ready(function($){
+            var mainobj = scrolltotop;
+            var iebrws = document.all;
+            mainobj.cssfixedsupport=!iebrws || iebrws && document.compatMode.toLowerCase() === "CSS1Compat".toLowerCase() && window.XMLHttpRequest; //not IE or IE7+ browsers in standards mode
+            mainobj.$body=(window.opera)? (document.compatMode.toLowerCase() === "CSS1Compat".toLowerCase() ? $('html') : $('body')) : $('html,body');
+            mainobj.$control=$('<div id="topcontrol">'+mainobj.controlHTML+'</div>')
+                .css({position:mainobj.cssfixedsupport? 'fixed' : 'absolute', bottom:mainobj.controlattrs.offsety, right:mainobj.controlattrs.offsetx, opacity:0, cursor:'pointer'})
+                .attr({title:'Scroll Back to Top'})
+                .click(function(){mainobj.scrollup(); return false;})
+                .appendTo('body');
+            if (document.all && !window.XMLHttpRequest && mainobj.$control.text()!==''){ //loose check for IE6 and below, plus whether control contains any text
+                mainobj.$control.css({width:mainobj.$control.width()}); //IE6- seems to require an explicit width on a DIV containing text
+            }
+            mainobj.togglecontrol();
+            $('a[href="' + mainobj.anchorkeyword +'"]').click(function(){
+                mainobj.scrollup();
+                return false;
+            });
+            $(window).bind('scroll resize', function(){
+                mainobj.togglecontrol();
+            });
+        });
+    }
+};
+
+scrolltotop.init();
diff --git a/gui/slick/js/lib/jquery.tablesorter-2.17.7.min.js b/gui/slick/js/lib/jquery.tablesorter-2.17.7.min.js
deleted file mode 100644
index 8ac7a9c071f3c9d92d57b2fbd61e53a1654a3e62..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/lib/jquery.tablesorter-2.17.7.min.js and /dev/null differ
diff --git a/gui/slick/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js b/gui/slick/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js
deleted file mode 100644
index 22d641b83eeda0c3453995426da262916872ec58..0000000000000000000000000000000000000000
--- a/gui/slick/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js
+++ /dev/null
@@ -1,317 +0,0 @@
-/* Column Selector/Responsive table widget (beta) for TableSorter 5/22/2014 (v2.17.0)
- * Requires tablesorter v2.8+ and jQuery 1.7+
- * by Justin Hallett & Rob Garrison
- */
-/*jshint browser:true, jquery:true, unused:false */
-/*global jQuery: false */
-;(function($){
-"use strict";
-
-var ts = $.tablesorter,
-namespace = '.tscolsel',
-tsColSel = ts.columnSelector = {
-
-	queryAll   : '@media only all { [columns] { display: none; } }',
-	queryBreak : '@media all and (min-width: [size]) { [columns] { display: table-cell; } }',
-
-	init: function(table, c, wo) {
-		var $t, colSel;
-
-		// abort if no input is contained within the layout
-		$t = $(wo.columnSelector_layout);
-		if (!$t.find('input').add( $t.filter('input') ).length) {
-			if (c.debug) {
-				ts.log('*** ERROR: Column Selector aborting, no input found in the layout! ***');
-			}
-			return;
-		}
-
-		// unique table class name
-		c.tableId = 'tablesorter' + new Date().getTime();
-		c.$table.addClass( c.tableId );
-
-		// build column selector/state array
-		colSel = c.selector = { $container : $(wo.columnSelector_container || '<div>') };
-		colSel.$style = $('<style></style>').prop('disabled', true).appendTo('head');
-		colSel.$breakpoints = $('<style></style>').prop('disabled', true).appendTo('head');
-
-		colSel.isInitializing = true;
-		tsColSel.setupSelector(table, c, wo);
-
-		if (wo.columnSelector_mediaquery) {
-			tsColSel.setupBreakpoints(c, wo);
-		}
-
-		colSel.isInitializing = false;
-		if (colSel.$container.length) {
-			tsColSel.updateCols(c, wo);
-		}
-
-		c.$table
-			.off('refreshColumnSelector' + namespace)
-			.on('refreshColumnSelector' + namespace, function(){
-				// make sure we're using current config settings
-				var c = this.config;
-				tsColSel.updateBreakpoints(c, c.widgetOptions);
-				tsColSel.updateCols(c, c.widgetOptions);
-			});
-
-	},
-
-	setupSelector: function(table, c, wo) {
-		var name,
-			colSel = c.selector,
-			$container = colSel.$container,
-			useStorage = wo.columnSelector_saveColumns && ts.storage,
-			// get stored column states
-			saved = useStorage ? ts.storage( table, 'tablesorter-columnSelector' ) : [],
-			state = useStorage ? ts.storage( table, 'tablesorter-columnSelector-auto') : {};
-
-		// initial states
-		colSel.auto = $.isEmptyObject(state) || $.type(state.auto) !== "boolean" ? wo.columnSelector_mediaqueryState : state.auto;
-		colSel.states = [];
-		colSel.$column = [];
-		colSel.$wrapper = [];
-		colSel.$checkbox = [];
-		// populate the selector container
-		c.$table.children('thead').find('tr:first th', table).each(function() {
-			var $this = $(this),
-				// if no data-priority is assigned, default to 1, but don't remove it from the selector list
-				priority = $this.attr(wo.columnSelector_priority) || 1,
-				colId = $this.attr('data-column'),
-				state = ts.getData(this, c.headers[colId], 'columnSelector');
-
-
-			// if this column not hidable at all
-			// include getData check (includes "columnSelector-false" class, data attribute, etc)
-			if ( isNaN(priority) && priority.length > 0 || state === 'disable' ||
-				( wo.columnSelector_columns[colId] && wo.columnSelector_columns[colId] === 'disable') ) {
-				return true; // goto next
-			}
-
-			// set default state; storage takes priority
-			colSel.states[colId] = saved && typeof(saved[colId]) !== 'undefined' ?
-				saved[colId] : typeof(wo.columnSelector_columns[colId]) !== 'undefined' ?
-				wo.columnSelector_columns[colId] : (state === 'true' || !(state === 'false'));
-			colSel.$column[colId] = $(this);
-
-			// set default col title
-			name = $this.attr(wo.columnSelector_name) || $this.text();
-
-			if ($container.length) {
-				colSel.$wrapper[colId] = $(wo.columnSelector_layout.replace(/\{name\}/g, name)).appendTo($container);
-				colSel.$checkbox[colId] = colSel.$wrapper[colId]
-					// input may not be wrapped within the layout template
-					.find('input').add( colSel.$wrapper[colId].filter('input') )
-					.attr('data-column', colId)
-					.prop('checked', colSel.states[colId])
-					.on('change', function(){
-						colSel.states[colId] = this.checked;
-						tsColSel.updateCols(c, wo);
-					}).change();
-			}
-		});
-
-	},
-
-	setupBreakpoints: function(c, wo){
-		var colSel = c.selector;
-
-		// add responsive breakpoints
-		if (wo.columnSelector_mediaquery) {
-			// used by window resize function
-			colSel.lastIndex = -1;
-			wo.columnSelector_breakpoints.sort();
-			tsColSel.updateBreakpoints(c, wo);
-			c.$table
-				.off('updateAll' + namespace)
-				.on('updateAll' + namespace, function(){
-					tsColSel.updateBreakpoints(c, wo);
-					tsColSel.updateCols(c, wo);
-				});
-		}
-
-		if (colSel.$container.length) {
-			// Add media queries toggle
-			if (wo.columnSelector_mediaquery) {
-				colSel.$auto = $( wo.columnSelector_layout.replace(/\{name\}/g, wo.columnSelector_mediaqueryName) ).prependTo(colSel.$container);
-				colSel.$auto
-					// needed in case the input in the layout is not wrapped
-					.find('input').add( colSel.$auto.filter('input') )
-					.attr('data-column', 'auto')
-					.prop('checked', colSel.auto)
-					.on('change', function(){
-						colSel.auto = this.checked;
-						$.each( colSel.$checkbox, function(i, $cb){
-							if ($cb) {
-								$cb[0].disabled = colSel.auto;
-								colSel.$wrapper[i].toggleClass('disabled', colSel.auto);
-							}
-						});
-						if (wo.columnSelector_mediaquery) {
-							tsColSel.updateBreakpoints(c, wo);
-						}
-						tsColSel.updateCols(c, wo);
-						// copy the column selector to a popup/tooltip
-						if (c.selector.$popup) {
-							c.selector.$popup.find('.tablesorter-column-selector')
-								.html( colSel.$container.html() )
-								.find('input').each(function(){
-									var indx = $(this).attr('data-column');
-									$(this).prop( 'checked', indx === 'auto' ? colSel.auto : colSel.states[indx] );
-								});
-						}
-						if (wo.columnSelector_saveColumns && ts.storage) {
-							ts.storage( c.$table[0], 'tablesorter-columnSelector-auto', { auto : colSel.auto } );
-						}
-					}).change();
-			}
-			// Add a bind on update to re-run col setup
-			c.$table.off('update' + namespace).on('update' + namespace, function() {
-				tsColSel.updateCols(c, wo);
-			});
-		}
-	},
-
-	updateBreakpoints: function(c, wo) {
-		var priority, column, breaks,
-			colSel = c.selector,
-			prefix = '.' + c.tableId,
-			mediaAll = [],
-			breakpts = '';
-		if (wo.columnSelector_mediaquery && !colSel.auto) {
-			colSel.$breakpoints.prop('disabled', true);
-			colSel.$style.prop('disabled', false);
-			return;
-		}
-
-		// only 6 breakpoints (same as jQuery Mobile)
-		for (priority = 0; priority < 6; priority++){
-			/*jshint loopfunc:true */
-			breaks = [];
-			c.$headers.filter('[' + wo.columnSelector_priority + '=' + (priority + 1) + ']').each(function(){
-				column = parseInt($(this).attr('data-column'), 10) + 1;
-				breaks.push(prefix + ' tr th:nth-child(' + column + ')');
-				breaks.push(prefix + ' tr td:nth-child(' + column + ')');
-			});
-			if (breaks.length) {
-				mediaAll = mediaAll.concat( breaks );
-				breakpts += tsColSel.queryBreak
-					.replace(/\[size\]/g, wo.columnSelector_breakpoints[priority])
-					.replace(/\[columns\]/g, breaks.join(','));
-			}
-		}
-		if (colSel.$style) {
-			colSel.$style.prop('disabled', true);
-		}
-		colSel.$breakpoints
-			.prop('disabled', false)
-			.html( tsColSel.queryAll.replace(/\[columns\]/g, mediaAll.join(',')) + breakpts );
-	},
-
-	updateCols: function(c, wo) {
-		if (wo.columnSelector_mediaquery && c.selector.auto || c.selector.isInitializing) {
-			return;
-		}
-		var column,
-			colSel = c.selector,
-			styles = [],
-			prefix = '.' + c.tableId;
-		colSel.$container.find('input[data-column]').filter('[data-column!="auto"]').each(function(){
-			if (!this.checked) {
-				column = parseInt( $(this).attr('data-column'), 10 ) + 1;
-				styles.push(prefix + ' tr th:nth-child(' + column + ')');
-				styles.push(prefix + ' tr td:nth-child(' + column + ')');
-			}
-		});
-		if (wo.columnSelector_mediaquery){
-			colSel.$breakpoints.prop('disabled', true);
-		}
-		if (colSel.$style) {
-			colSel.$style.prop('disabled', false).html( styles.length ? styles.join(',') + ' { display: none; }' : '' );
-		}
-		if (wo.columnSelector_saveColumns && ts.storage) {
-			ts.storage( c.$table[0], 'tablesorter-columnSelector', colSel.states );
-		}
-	},
-
-	attachTo : function(table, elm) {
-		table = $(table)[0];
-		var colSel, wo, indx,
-			c = table.config,
-			$popup = $(elm);
-		if ($popup.length && c) {
-			if (!$popup.find('.tablesorter-column-selector').length) {
-				// add a wrapper to add the selector into, in case the popup has other content
-				$popup.append('<span class="tablesorter-column-selector"></span>');
-			}
-			colSel = c.selector;
-			wo = c.widgetOptions;
-			$popup.find('.tablesorter-column-selector')
-				.html( colSel.$container.html() )
-				.find('input').each(function(){
-					var indx = $(this).attr('data-column');
-					$(this).prop( 'checked', indx === 'auto' ? colSel.auto : colSel.states[indx] );
-				});
-			colSel.$popup = $popup.on('change', 'input', function(){
-				// data input
-				indx = $(this).attr('data-column');
-				// update original popup
-				colSel.$container.find('input[data-column="' + indx + '"]')
-					.prop('checked', this.checked)
-					.trigger('change');
-			});
-		}
-	}
-
-};
-
-ts.addWidget({
-	id: "columnSelector",
-	priority: 10,
-	options: {
-		// target the column selector markup
-		columnSelector_container : null,
-		// column status, true = display, false = hide
-		// disable = do not display on list
-		columnSelector_columns : {},
-		// remember selected columns
-		columnSelector_saveColumns: true,
-
-		// container layout
-		columnSelector_layout : '<label><input type="checkbox">{name}</label>',
-		// data attribute containing column name to use in the selector container
-		columnSelector_name  : 'data-selector-name',
-
-		/* Responsive Media Query settings */
-		// enable/disable mediaquery breakpoints
-		columnSelector_mediaquery: true,
-		// toggle checkbox name
-		columnSelector_mediaqueryName: 'Auto: ',
-		// breakpoints checkbox initial setting
-		columnSelector_mediaqueryState: true,
-		// responsive table hides columns with priority 1-6 at these breakpoints
-		// see http://view.jquerymobile.com/1.3.2/dist/demos/widgets/table-column-toggle/#Applyingapresetbreakpoint
-		// *** set to false to disable ***
-		columnSelector_breakpoints : [ '20em', '30em', '40em', '50em', '60em', '70em' ],
-		// data attribute containing column priority
-		// duplicates how jQuery mobile uses priorities:
-		// http://view.jquerymobile.com/1.3.2/dist/demos/widgets/table-column-toggle/
-		columnSelector_priority : 'data-priority'
-
-	},
-	init: function(table, thisWidget, c, wo) {
-		tsColSel.init(table, c, wo);
-	},
-	remove: function(table, c){
-		var csel = c.selector;
-		csel.$container.empty();
-		if (csel.$popup) { csel.$popup.empty(); }
-		csel.$style.remove();
-		csel.$breakpoints.remove();
-		c.$table.off('updateAll' + namespace + ' update' + namespace);
-	}
-
-});
-
-})(jQuery);
diff --git a/gui/slick/js/lib/jquery.tablesorter.widgets-2.17.7.min.js b/gui/slick/js/lib/jquery.tablesorter.widgets-2.17.7.min.js
deleted file mode 100644
index 18996733f54b6a0ddd4a7c38a870633426d3a447..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/lib/jquery.tablesorter.widgets-2.17.7.min.js and /dev/null differ
diff --git a/gui/slick/js/lib/jquery.timeago.js b/gui/slick/js/lib/jquery.timeago.js
deleted file mode 100644
index a8ad067eb39da390b62df845fdf4a36240a86b4f..0000000000000000000000000000000000000000
--- a/gui/slick/js/lib/jquery.timeago.js
+++ /dev/null
@@ -1,223 +0,0 @@
-/**
- * Timeago is a jQuery plugin that makes it easy to support automatically
- * updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
- *
- * @name timeago
- * @version 1.4.2
- * @requires jQuery v1.2.3+
- * @author Ryan McGeary
- * @license MIT License - http://www.opensource.org/licenses/mit-license.php
- *
- * For usage and examples, visit:
- * http://timeago.yarp.com/
- *
- * Copyright (c) 2008-2015, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
- */
-
-(function (factory) {
-  if (typeof define === 'function' && define.amd) {
-    // AMD. Register as an anonymous module.
-    define(['jquery'], factory);
-  } if (typeof module === 'object' && typeof module.exports === 'object') {
-    factory(require('jquery'));
-  } else {
-    // Browser globals
-    factory(jQuery);
-  }
-}(function ($) {
-  $.timeago = function(timestamp) {
-    if (timestamp instanceof Date) {
-      return inWords(timestamp);
-    } else if (typeof timestamp === "string") {
-      return inWords($.timeago.parse(timestamp));
-    } else if (typeof timestamp === "number") {
-      return inWords(new Date(timestamp));
-    } else {
-      return inWords($.timeago.datetime(timestamp));
-    }
-  };
-  var $t = $.timeago;
-
-  $.extend($.timeago, {
-    settings: {
-      refreshMillis: 60000,
-      allowPast: true,
-      allowFuture: false,
-      localeTitle: false,
-      cutoff: 0,
-      strings: {
-        prefixAgo: null,
-        prefixFromNow: null,
-        suffixAgo: "ago",
-        suffixFromNow: "from now",
-        inPast: 'any moment now',
-        seconds: "less than a minute",
-        minute: "about a minute",
-        minutes: "%d minutes",
-        hour: "about an hour",
-        hours: "about %d hours",
-        day: "a day",
-        days: "%d days",
-        month: "about a month",
-        months: "%d months",
-        year: "about a year",
-        years: "%d years",
-        wordSeparator: " ",
-        numbers: []
-      }
-    },
-
-    inWords: function(distanceMillis) {
-      if(!this.settings.allowPast && ! this.settings.allowFuture) {
-          throw 'timeago allowPast and allowFuture settings can not both be set to false.';
-      }
-
-      var $l = this.settings.strings;
-      var prefix = $l.prefixAgo;
-      var suffix = $l.suffixAgo;
-      if (this.settings.allowFuture) {
-        if (distanceMillis < 0) {
-          prefix = $l.prefixFromNow;
-          suffix = $l.suffixFromNow;
-        }
-      }
-
-      if(!this.settings.allowPast && distanceMillis >= 0) {
-        return this.settings.strings.inPast;
-      }
-
-      var seconds = Math.abs(distanceMillis) / 1000;
-      var minutes = seconds / 60;
-      var hours = minutes / 60;
-      var days = hours / 24;
-      var years = days / 365;
-
-      function substitute(stringOrFunction, number) {
-        var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
-        var value = ($l.numbers && $l.numbers[number]) || number;
-        return string.replace(/%d/i, value);
-      }
-
-      var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
-        seconds < 90 && substitute($l.minute, 1) ||
-        minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
-        minutes < 90 && substitute($l.hour, 1) ||
-        hours < 24 && substitute($l.hours, Math.round(hours)) ||
-        hours < 42 && substitute($l.day, 1) ||
-        days < 30 && substitute($l.days, Math.round(days)) ||
-        days < 45 && substitute($l.month, 1) ||
-        days < 365 && substitute($l.months, Math.round(days / 30)) ||
-        years < 1.5 && substitute($l.year, 1) ||
-        substitute($l.years, Math.round(years));
-
-      var separator = $l.wordSeparator || "";
-      if ($l.wordSeparator === undefined) { separator = " "; }
-      return $.trim([prefix, words, suffix].join(separator));
-    },
-
-    parse: function(iso8601) {
-      var s = $.trim(iso8601);
-      s = s.replace(/\.\d+/,""); // remove milliseconds
-      s = s.replace(/-/,"/").replace(/-/,"/");
-      s = s.replace(/T/," ").replace(/Z/," UTC");
-      s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
-      s = s.replace(/([\+\-]\d\d)$/," $100"); // +09 -> +0900
-      return new Date(s);
-    },
-    datetime: function(elem) {
-      var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
-      return $t.parse(iso8601);
-    },
-    isTime: function(elem) {
-      // jQuery's `is()` doesn't play well with HTML5 in IE
-      return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
-    }
-  });
-
-  // functions that can be called via $(el).timeago('action')
-  // init is default when no action is given
-  // functions are called with context of a single element
-  var functions = {
-    init: function(){
-      var refresh_el = $.proxy(refresh, this);
-      refresh_el();
-      var $s = $t.settings;
-      if ($s.refreshMillis > 0) {
-        this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);
-      }
-    },
-    update: function(time){
-      var parsedTime = $t.parse(time);
-      $(this).data('timeago', { datetime: parsedTime });
-      if($t.settings.localeTitle) $(this).attr("title", parsedTime.toLocaleString());
-      refresh.apply(this);
-    },
-    updateFromDOM: function(){
-      $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr("datetime") : $(this).attr("title") ) });
-      refresh.apply(this);
-    },
-    dispose: function () {
-      if (this._timeagoInterval) {
-        window.clearInterval(this._timeagoInterval);
-        this._timeagoInterval = null;
-      }
-    }
-  };
-
-  $.fn.timeago = function(action, options) {
-    var fn = action ? functions[action] : functions.init;
-    if(!fn){
-      throw new Error("Unknown function name '"+ action +"' for timeago");
-    }
-    // each over objects here and call the requested function
-    this.each(function(){
-      fn.call(this, options);
-    });
-    return this;
-  };
-
-  function refresh() {
-    //check if it's still visible
-    if(!$.contains(document.documentElement,this)){
-      //stop if it has been removed
-      $(this).timeago("dispose");
-      return this;
-    }
-
-    var data = prepareData(this);
-    var $s = $t.settings;
-
-    if (!isNaN(data.datetime)) {
-      if ( $s.cutoff == 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {
-        $(this).text(inWords(data.datetime));
-      }
-    }
-    return this;
-  }
-
-  function prepareData(element) {
-    element = $(element);
-    if (!element.data("timeago")) {
-      element.data("timeago", { datetime: $t.datetime(element) });
-      var text = $.trim(element.text());
-      if ($t.settings.localeTitle) {
-        element.attr("title", element.data('timeago').datetime.toLocaleString());
-      } else if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
-        element.attr("title", text);
-      }
-    }
-    return element.data("timeago");
-  }
-
-  function inWords(date) {
-    return $t.inWords(distance(date));
-  }
-
-  function distance(date) {
-    return (new Date().getTime() - date.getTime());
-  }
-
-  // fix for IE6 suckage
-  document.createElement("abbr");
-  document.createElement("time");
-}));
diff --git a/gui/slick/js/lib/jquery.tokeninput.js b/gui/slick/js/lib/jquery.tokeninput.js
deleted file mode 100644
index 5eec491e16278debb91c5e53173a7583382b408c..0000000000000000000000000000000000000000
--- a/gui/slick/js/lib/jquery.tokeninput.js
+++ /dev/null
@@ -1,861 +0,0 @@
-/*
- * jQuery Plugin: Tokenizing Autocomplete Text Entry
- * Version 1.6.0
- *
- * Copyright (c) 2009 James Smith (http://loopj.com)
- * Licensed jointly under the GPL and MIT licenses,
- * choose which one suits your project best!
- *
- */
-
-(function ($) {
-// Default settings
-var DEFAULT_SETTINGS = {
-	// Search settings
-    method: "GET",
-    contentType: "json",
-    queryParam: "q",
-    searchDelay: 300,
-    minChars: 1,
-    propertyToSearch: "name",
-    jsonContainer: null,
-
-	// Display settings
-    hintText: "Type in a search term",
-    noResultsText: "No results",
-    searchingText: "Searching...",
-    deleteText: "&times;",
-    animateDropdown: true,
-
-	// Tokenization settings
-    tokenLimit: null,
-    tokenDelimiter: ",",
-    preventDuplicates: false,
-
-	// Output settings
-    tokenValue: "id",
-
-	// Prepopulation settings
-    prePopulate: null,
-    processPrePopulate: true,
-
-	// Manipulation settings
-    idPrefix: "token-input-",
-
-	// Formatters
-    resultsFormatter: function(item){ return "<li><img src='"+srRoot+"/images/subtitles/flags/"+item["id"]+".png' onError=this.onerror=null;this.src='"+srRoot+"/images/flags/unknown.png'; /> " + item[this.propertyToSearch]+ "</li>" },
-    tokenFormatter: function(item) { return "<li><img src='"+srRoot+"/images/subtitles/flags/"+item["id"]+".png' onError=this.onerror=null;this.src='"+srRoot+"/images/flags/unknown.png'; /> <p>" + item[this.propertyToSearch] + "</p></li>" },
-    flag: "flag",
-
-	// Callbacks
-    onResult: null,
-    onAdd: null,
-    onDelete: null,
-    onReady: null
-};
-
-// Default classes to use when theming
-var DEFAULT_CLASSES = {
-    tokenList: "token-input-list",
-    token: "token-input-token",
-    tokenDelete: "token-input-delete-token",
-    selectedToken: "token-input-selected-token",
-    highlightedToken: "token-input-highlighted-token",
-    dropdown: "token-input-dropdown",
-    dropdownItem: "token-input-dropdown-item",
-    dropdownItem2: "token-input-dropdown-item2",
-    selectedDropdownItem: "token-input-selected-dropdown-item",
-    inputToken: "token-input-input-token"
-};
-
-// Input box position "enum"
-var POSITION = {
-    BEFORE: 0,
-    AFTER: 1,
-    END: 2
-};
-
-// Keys "enum"
-var KEY = {
-    BACKSPACE: 8,
-    TAB: 9,
-    ENTER: 13,
-    ESCAPE: 27,
-    SPACE: 32,
-    PAGE_UP: 33,
-    PAGE_DOWN: 34,
-    END: 35,
-    HOME: 36,
-    LEFT: 37,
-    UP: 38,
-    RIGHT: 39,
-    DOWN: 40,
-    NUMPAD_ENTER: 108,
-    COMMA: 188
-};
-
-// Additional public (exposed) methods
-var methods = {
-    init: function(url_or_data_or_function, options) {
-        var settings = $.extend({}, DEFAULT_SETTINGS, options || {});
-
-        return this.each(function () {
-            $(this).data("tokenInputObject", new $.TokenList(this, url_or_data_or_function, settings));
-        });
-    },
-    clear: function() {
-        this.data("tokenInputObject").clear();
-        return this;
-    },
-    add: function(item) {
-        this.data("tokenInputObject").add(item);
-        return this;
-    },
-    remove: function(item) {
-        this.data("tokenInputObject").remove(item);
-        return this;
-    },
-    get: function() {
-    	return this.data("tokenInputObject").getTokens();
-   	}
-}
-
-// Expose the .tokenInput function to jQuery as a plugin
-$.fn.tokenInput = function (method) {
-    // Method calling and initialization logic
-    if(methods[method]) {
-        return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
-    } else {
-        return methods.init.apply(this, arguments);
-    }
-};
-
-// TokenList class for each input
-$.TokenList = function (input, url_or_data, settings) {
-    //
-    // Initialization
-    //
-
-    // Configure the data source
-    if($.type(url_or_data) === "string" || $.type(url_or_data) === "function") {
-        // Set the url to query against
-        settings.url = url_or_data;
-
-        // If the URL is a function, evaluate it here to do our initalization work
-        var url = computeURL();
-
-        // Make a smart guess about cross-domain if it wasn't explicitly specified
-        if(settings.crossDomain === undefined) {
-            if(url.indexOf("://") === -1) {
-                settings.crossDomain = false;
-            } else {
-                settings.crossDomain = (location.href.split(/\/+/g)[1] !== url.split(/\/+/g)[1]);
-            }
-        }
-    } else if(typeof(url_or_data) === "object") {
-        // Set the local data to search through
-        settings.local_data = url_or_data;
-    }
-
-    // Build class names
-    if(settings.classes) {
-        // Use custom class names
-        settings.classes = $.extend({}, DEFAULT_CLASSES, settings.classes);
-    } else if(settings.theme) {
-        // Use theme-suffixed default class names
-        settings.classes = {};
-        $.each(DEFAULT_CLASSES, function(key, value) {
-            settings.classes[key] = value + "-" + settings.theme;
-        });
-    } else {
-        settings.classes = DEFAULT_CLASSES;
-    }
-
-
-    // Save the tokens
-    var saved_tokens = [];
-
-    // Keep track of the number of tokens in the list
-    var token_count = 0;
-
-    // Basic cache to save on db hits
-    var cache = new $.TokenList.Cache();
-
-    // Keep track of the timeout, old vals
-    var timeout;
-    var input_val;
-
-    // Create a new text input an attach keyup events
-    var input_box = $("<input type=\"text\"  autocomplete=\"off\" >")
-        .css({
-            outline: "none"
-        })
-        .attr("id", settings.idPrefix + input.id)
-        .focus(function () {
-            if (settings.tokenLimit === null || settings.tokenLimit !== token_count) {
-                show_dropdown_hint();
-            }
-        })
-        .blur(function () {
-            hide_dropdown();
-            $(this).val("");
-        })
-        .bind("keyup keydown blur update", resize_input)
-        .keydown(function (event) {
-            var previous_token;
-            var next_token;
-
-            switch(event.keyCode) {
-                case KEY.LEFT:
-                case KEY.RIGHT:
-                case KEY.UP:
-                case KEY.DOWN:
-                    if(!$(this).val()) {
-                        previous_token = input_token.prev();
-                        next_token = input_token.next();
-
-                        if((previous_token.length && previous_token.get(0) === selected_token) || (next_token.length && next_token.get(0) === selected_token)) {
-                            // Check if there is a previous/next token and it is selected
-                            if(event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) {
-                                deselect_token($(selected_token), POSITION.BEFORE);
-                            } else {
-                                deselect_token($(selected_token), POSITION.AFTER);
-                            }
-                        } else if((event.keyCode === KEY.LEFT || event.keyCode === KEY.UP) && previous_token.length) {
-                            // We are moving left, select the previous token if it exists
-                            select_token($(previous_token.get(0)));
-                        } else if((event.keyCode === KEY.RIGHT || event.keyCode === KEY.DOWN) && next_token.length) {
-                            // We are moving right, select the next token if it exists
-                            select_token($(next_token.get(0)));
-                        }
-                    } else {
-                        var dropdown_item = null;
-
-                        if(event.keyCode === KEY.DOWN || event.keyCode === KEY.RIGHT) {
-                            dropdown_item = $(selected_dropdown_item).next();
-                        } else {
-                            dropdown_item = $(selected_dropdown_item).prev();
-                        }
-
-                        if(dropdown_item.length) {
-                            select_dropdown_item(dropdown_item);
-                        }
-                        return false;
-                    }
-                    break;
-
-                case KEY.BACKSPACE:
-                    previous_token = input_token.prev();
-
-                    if(!$(this).val().length) {
-                        if(selected_token) {
-                            delete_token($(selected_token));
-                            hidden_input.change();
-                        } else if(previous_token.length) {
-                            select_token($(previous_token.get(0)));
-                        }
-
-                        return false;
-                    } else if($(this).val().length === 1) {
-                        hide_dropdown();
-                    } else {
-                        // set a timeout just long enough to let this function finish.
-                        setTimeout(function(){do_search();}, 5);
-                    }
-                    break;
-
-                case KEY.TAB:
-                case KEY.ENTER:
-                case KEY.NUMPAD_ENTER:
-                case KEY.COMMA:
-                  if(selected_dropdown_item) {
-                    add_token($(selected_dropdown_item).data("tokeninput"));
-                    hidden_input.change();
-                    return false;
-                  }
-                  break;
-
-                case KEY.ESCAPE:
-                  hide_dropdown();
-                  return true;
-
-                default:
-                    if(String.fromCharCode(event.which)) {
-                        // set a timeout just long enough to let this function finish.
-                        setTimeout(function(){do_search();}, 5);
-                    }
-                    break;
-            }
-        });
-
-    // Keep a reference to the original input box
-    var hidden_input = $(input)
-                           .hide()
-                           .val("")
-                           .focus(function () {
-                               input_box.focus();
-                           })
-                           .blur(function () {
-                               input_box.blur();
-                           });
-
-    // Keep a reference to the selected token and dropdown item
-    var selected_token = null;
-    var selected_token_index = 0;
-    var selected_dropdown_item = null;
-
-    // The list to store the token items in
-    var token_list = $("<ul />")
-        .addClass(settings.classes.tokenList)
-        .click(function (event) {
-            var li = $(event.target).closest("li");
-            if(li && li.get(0) && $.data(li.get(0), "tokeninput")) {
-                toggle_select_token(li);
-            } else {
-                // Deselect selected token
-                if(selected_token) {
-                    deselect_token($(selected_token), POSITION.END);
-                }
-
-                // Focus input box
-                input_box.focus();
-            }
-        })
-        .mouseover(function (event) {
-            var li = $(event.target).closest("li");
-            if(li && selected_token !== this) {
-                li.addClass(settings.classes.highlightedToken);
-            }
-        })
-        .mouseout(function (event) {
-            var li = $(event.target).closest("li");
-            if(li && selected_token !== this) {
-                li.removeClass(settings.classes.highlightedToken);
-            }
-        })
-        .insertBefore(hidden_input);
-
-    // The token holding the input box
-    var input_token = $("<li />")
-        .addClass(settings.classes.inputToken)
-        .appendTo(token_list)
-        .append(input_box);
-
-    // The list to store the dropdown items in
-    var dropdown = $("<div>")
-        .addClass(settings.classes.dropdown)
-        .appendTo("body")
-        .hide();
-
-    // Magic element to help us resize the text input
-    var input_resizer = $("<tester/>")
-        .insertAfter(input_box)
-        .css({
-            position: "absolute",
-            top: -9999,
-            left: -9999,
-            width: "auto",
-            fontSize: input_box.css("fontSize"),
-            fontFamily: input_box.css("fontFamily"),
-            fontWeight: input_box.css("fontWeight"),
-            letterSpacing: input_box.css("letterSpacing"),
-            whiteSpace: "nowrap"
-        });
-
-    // Pre-populate list if items exist
-    hidden_input.val("");
-    var li_data = settings.prePopulate || hidden_input.data("pre");
-    if(settings.processPrePopulate && $.isFunction(settings.onResult)) {
-        li_data = settings.onResult.call(hidden_input, li_data);
-    }
-    if(li_data && li_data.length) {
-        $.each(li_data, function (index, value) {
-            insert_token(value);
-            checkTokenLimit();
-        });
-    }
-
-    // Initialization is done
-    if($.isFunction(settings.onReady)) {
-        settings.onReady.call();
-    }
-
-    //
-    // Public functions
-    //
-
-    this.clear = function() {
-        token_list.children("li").each(function() {
-            if ($(this).children("input").length === 0) {
-                delete_token($(this));
-            }
-        });
-    }
-
-    this.add = function(item) {
-        add_token(item);
-    }
-
-    this.remove = function(item) {
-        token_list.children("li").each(function() {
-            if ($(this).children("input").length === 0) {
-                var currToken = $(this).data("tokeninput");
-                var match = true;
-                for (var prop in item) {
-                    if (item[prop] !== currToken[prop]) {
-                        match = false;
-                        break;
-                    }
-                }
-                if (match) {
-                    delete_token($(this));
-                }
-            }
-        });
-    }
-    
-    this.getTokens = function() {
-   		return saved_tokens;
-   	}
-
-    //
-    // Private functions
-    //
-
-    function checkTokenLimit() {
-        if(settings.tokenLimit !== null && token_count >= settings.tokenLimit) {
-            input_box.hide();
-            hide_dropdown();
-            return;
-        }
-    }
-
-    function resize_input() {
-        if(input_val === (input_val = input_box.val())) {return;}
-
-        // Enter new content into resizer and resize input accordingly
-        var escaped = input_val.replace(/&/g, '&amp;').replace(/\s/g,' ').replace(/</g, '&lt;').replace(/>/g, '&gt;');
-        input_resizer.html(escaped);
-        input_box.width(input_resizer.width() + 30);
-    }
-
-    function is_printable_character(keycode) {
-        return ((keycode >= 48 && keycode <= 90) ||     // 0-1a-z
-                (keycode >= 96 && keycode <= 111) ||    // numpad 0-9 + - / * .
-                (keycode >= 186 && keycode <= 192) ||   // ; = , - . / ^
-                (keycode >= 219 && keycode <= 222));    // ( \ ) '
-    }
-
-    // Inner function to a token to the list
-    function insert_token(item) {
-        var this_token = settings.tokenFormatter(item);
-        this_token = $(this_token)
-          .addClass(settings.classes.token)
-          .insertBefore(input_token);
-
-        // The 'delete token' button
-        $("<span>" + settings.deleteText + "</span>")
-            .addClass(settings.classes.tokenDelete)
-            .appendTo(this_token)
-            .click(function () {
-                delete_token($(this).parent());
-                hidden_input.change();
-                return false;
-            });
-
-        // Store data on the token
-        var token_data = {"id": item.id};
-        token_data[settings.propertyToSearch] = item[settings.propertyToSearch];
-        $.data(this_token.get(0), "tokeninput", item);
-
-        // Save this token for duplicate checking
-        saved_tokens = saved_tokens.slice(0,selected_token_index).concat([token_data]).concat(saved_tokens.slice(selected_token_index));
-        selected_token_index++;
-
-        // Update the hidden input
-        update_hidden_input(saved_tokens, hidden_input);
-
-        token_count += 1;
-
-        // Check the token limit
-        if(settings.tokenLimit !== null && token_count >= settings.tokenLimit) {
-            input_box.hide();
-            hide_dropdown();
-        }
-
-        return this_token;
-    }
-
-    // Add a token to the token list based on user input
-    function add_token (item) {
-        var callback = settings.onAdd;
-
-        // See if the token already exists and select it if we don't want duplicates
-        if(token_count > 0 && settings.preventDuplicates) {
-            var found_existing_token = null;
-            token_list.children().each(function () {
-                var existing_token = $(this);
-                var existing_data = $.data(existing_token.get(0), "tokeninput");
-                if(existing_data && existing_data.id === item.id) {
-                    found_existing_token = existing_token;
-                    return false;
-                }
-            });
-
-            if(found_existing_token) {
-                select_token(found_existing_token);
-                input_token.insertAfter(found_existing_token);
-                input_box.focus();
-                return;
-            }
-        }
-
-        // Insert the new tokens
-        if(settings.tokenLimit == null || token_count < settings.tokenLimit) {
-            insert_token(item);
-            checkTokenLimit();
-        }
-
-        // Clear input box
-        input_box.val("");
-
-        // Don't show the help dropdown, they've got the idea
-        hide_dropdown();
-
-        // Execute the onAdd callback if defined
-        if($.isFunction(callback)) {
-            callback.call(hidden_input,item);
-        }
-    }
-
-    // Select a token in the token list
-    function select_token (token) {
-        token.addClass(settings.classes.selectedToken);
-        selected_token = token.get(0);
-
-        // Hide input box
-        input_box.val("");
-
-        // Hide dropdown if it is visible (eg if we clicked to select token)
-        hide_dropdown();
-    }
-
-    // Deselect a token in the token list
-    function deselect_token (token, position) {
-        token.removeClass(settings.classes.selectedToken);
-        selected_token = null;
-
-        if(position === POSITION.BEFORE) {
-            input_token.insertBefore(token);
-            selected_token_index--;
-        } else if(position === POSITION.AFTER) {
-            input_token.insertAfter(token);
-            selected_token_index++;
-        } else {
-            input_token.appendTo(token_list);
-            selected_token_index = token_count;
-        }
-
-        // Show the input box and give it focus again
-        input_box.focus();
-    }
-
-    // Toggle selection of a token in the token list
-    function toggle_select_token(token) {
-        var previous_selected_token = selected_token;
-
-        if(selected_token) {
-            deselect_token($(selected_token), POSITION.END);
-        }
-
-        if(previous_selected_token === token.get(0)) {
-            deselect_token(token, POSITION.END);
-        } else {
-            select_token(token);
-        }
-    }
-
-    // Delete a token from the token list
-    function delete_token (token) {
-        // Remove the id from the saved list
-        var token_data = $.data(token.get(0), "tokeninput");
-        var callback = settings.onDelete;
-
-        var index = token.prevAll().length;
-        if(index > selected_token_index) index--;
-
-        // Delete the token
-        token.remove();
-        selected_token = null;
-
-        // Show the input box and give it focus again
-        input_box.focus();
-
-        // Remove this token from the saved list
-        saved_tokens = saved_tokens.slice(0,index).concat(saved_tokens.slice(index+1));
-        if(index < selected_token_index) selected_token_index--;
-
-        // Update the hidden input
-        update_hidden_input(saved_tokens, hidden_input);
-
-        token_count -= 1;
-
-        if(settings.tokenLimit !== null) {
-            input_box
-                .show()
-                .val("")
-                .focus();
-        }
-
-        // Execute the onDelete callback if defined
-        if($.isFunction(callback)) {
-            callback.call(hidden_input,token_data);
-        }
-    }
-
-    // Update the hidden input box value
-    function update_hidden_input(saved_tokens, hidden_input) {
-        var token_values = $.map(saved_tokens, function (el) {
-            return el[settings.tokenValue];
-        });
-        hidden_input.val(token_values.join(settings.tokenDelimiter));
-
-    }
-
-    // Hide and clear the results dropdown
-    function hide_dropdown () {
-        dropdown.hide().empty();
-        selected_dropdown_item = null;
-    }
-
-    function show_dropdown() {
-        dropdown
-            .css({
-                position: "absolute",
-                top: $(token_list).offset().top + $(token_list).outerHeight(),
-                left: $(token_list).offset().left,
-                zindex: 999
-            })
-            .show();
-    }
-
-    function show_dropdown_searching () {
-        if(settings.searchingText) {
-            dropdown.html("<p>"+settings.searchingText+"</p>");
-            show_dropdown();
-        }
-    }
-
-    function show_dropdown_hint () {
-        if(settings.hintText) {
-            dropdown.html("<p>"+settings.hintText+"</p>");
-            show_dropdown();
-        }
-    }
-
-    // Highlight the query part of the search term
-    function highlight_term(value, term) {
-        return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<b>$1</b>");
-    }
-    
-    function find_value_and_highlight_term(template, value, term) {
-        return template.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + value + ")(?![^<>]*>)(?![^&;]+;)", "g"), highlight_term(value, term));
-    }
-
-    // Populate the results dropdown with some results
-    function populate_dropdown (query, results) {
-        if(results && results.length) {
-            dropdown.empty();
-            var dropdown_ul = $("<ul>")
-                .appendTo(dropdown)
-                .mouseover(function (event) {
-                    select_dropdown_item($(event.target).closest("li"));
-                })
-                .mousedown(function (event) {
-                    add_token($(event.target).closest("li").data("tokeninput"));
-                    hidden_input.change();
-                    return false;
-                })
-                .hide();
-
-            $.each(results, function(index, value) {
-                var this_li = settings.resultsFormatter(value);
-                
-                this_li = find_value_and_highlight_term(this_li ,value[settings.propertyToSearch], query);            
-                
-                this_li = $(this_li).appendTo(dropdown_ul);
-                
-                if(index % 2) {
-                    this_li.addClass(settings.classes.dropdownItem);
-                } else {
-                    this_li.addClass(settings.classes.dropdownItem2);
-                }
-
-                if(index === 0) {
-                    select_dropdown_item(this_li);
-                }
-
-                $.data(this_li.get(0), "tokeninput", value);
-            });
-
-            show_dropdown();
-
-            if(settings.animateDropdown) {
-                dropdown_ul.slideDown("fast");
-            } else {
-                dropdown_ul.show();
-            }
-        } else {
-            if(settings.noResultsText) {
-                dropdown.html("<p>"+settings.noResultsText+"</p>");
-                show_dropdown();
-            }
-        }
-    }
-
-    // Highlight an item in the results dropdown
-    function select_dropdown_item (item) {
-        if(item) {
-            if(selected_dropdown_item) {
-                deselect_dropdown_item($(selected_dropdown_item));
-            }
-
-            item.addClass(settings.classes.selectedDropdownItem);
-            selected_dropdown_item = item.get(0);
-        }
-    }
-
-    // Remove highlighting from an item in the results dropdown
-    function deselect_dropdown_item (item) {
-        item.removeClass(settings.classes.selectedDropdownItem);
-        selected_dropdown_item = null;
-    }
-
-    // Do a search and show the "searching" dropdown if the input is longer
-    // than settings.minChars
-    function do_search() {
-        var query = input_box.val().toLowerCase();
-
-        if(query && query.length) {
-            if(selected_token) {
-                deselect_token($(selected_token), POSITION.AFTER);
-            }
-
-            if(query.length >= settings.minChars) {
-                show_dropdown_searching();
-                clearTimeout(timeout);
-
-                timeout = setTimeout(function(){
-                    run_search(query);
-                }, settings.searchDelay);
-            } else {
-                hide_dropdown();
-            }
-        }
-    }
-
-    // Do the actual search
-    function run_search(query) {
-        var cache_key = query + computeURL();
-        var cached_results = cache.get(cache_key);
-        if(cached_results) {
-            populate_dropdown(query, cached_results);
-        } else {
-            // Are we doing an ajax search or local data search?
-            if(settings.url) {
-                var url = computeURL();
-                // Extract exisiting get params
-                var ajax_params = {};
-                ajax_params.data = {};
-                if(url.indexOf("?") > -1) {
-                    var parts = url.split("?");
-                    ajax_params.url = parts[0];
-
-                    var param_array = parts[1].split("&");
-                    $.each(param_array, function (index, value) {
-                        var kv = value.split("=");
-                        ajax_params.data[kv[0]] = kv[1];
-                    });
-                } else {
-                    ajax_params.url = url;
-                }
-
-                // Prepare the request
-                ajax_params.data[settings.queryParam] = query;
-                ajax_params.type = settings.method;
-                ajax_params.dataType = settings.contentType;
-                if(settings.crossDomain) {
-                    ajax_params.dataType = "jsonp";
-                }
-
-                // Attach the success callback
-                ajax_params.success = function(results) {
-                  if($.isFunction(settings.onResult)) {
-                      results = settings.onResult.call(hidden_input, results);
-                  }
-                  cache.add(cache_key, settings.jsonContainer ? results[settings.jsonContainer] : results);
-
-                  // only populate the dropdown if the results are associated with the active search query
-                  if(input_box.val().toLowerCase() === query) {
-                      populate_dropdown(query, settings.jsonContainer ? results[settings.jsonContainer] : results);
-                  }
-                };
-
-                // Make the request
-                $.ajax(ajax_params);
-            } else if(settings.local_data) {
-                // Do the search through local data
-                var results = $.grep(settings.local_data, function (row) {
-                    return row[settings.propertyToSearch].toLowerCase().indexOf(query.toLowerCase()) > -1;
-                });
-
-                if($.isFunction(settings.onResult)) {
-                    results = settings.onResult.call(hidden_input, results);
-                }
-                cache.add(cache_key, results);
-                populate_dropdown(query, results);
-            }
-        }
-    }
-
-    // compute the dynamic URL
-    function computeURL() {
-        var url = settings.url;
-        if(typeof settings.url == 'function') {
-            url = settings.url.call();
-        }
-        return url;
-    }
-};
-
-// Really basic cache for the results
-$.TokenList.Cache = function (options) {
-    var settings = $.extend({
-        max_size: 500
-    }, options);
-
-    var data = {};
-    var size = 0;
-
-    var flush = function () {
-        data = {};
-        size = 0;
-    };
-
-    this.add = function (query, results) {
-        if(size > settings.max_size) {
-            flush();
-        }
-
-        if(!data[query]) {
-            size += 1;
-        }
-
-        data[query] = results;
-    };
-
-    this.get = function (query) {
-        return data[query];
-    };
-};
-}(jQuery));
diff --git a/gui/slick/js/lib/jquery.ui.touch-punch-0.2.2.min.js b/gui/slick/js/lib/jquery.ui.touch-punch-0.2.2.min.js
deleted file mode 100644
index 33d6f97e5e6da98a226d5c223e70b014932fd3de..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/lib/jquery.ui.touch-punch-0.2.2.min.js and /dev/null differ
diff --git a/gui/slick/js/lib/pnotify.custom.min.js b/gui/slick/js/lib/pnotify.custom.min.js
deleted file mode 100644
index f927d92712aa970d3baeabde56c84448bb888a33..0000000000000000000000000000000000000000
Binary files a/gui/slick/js/lib/pnotify.custom.min.js and /dev/null differ
diff --git a/gui/slick/js/manageEpisodeStatuses.js b/gui/slick/js/manageEpisodeStatuses.js
index 313087e304d70118e8fce0284910cea75c99af3d..74b148338d32cf28fd0317b39e5b3fc9955e6953 100644
--- a/gui/slick/js/manageEpisodeStatuses.js
+++ b/gui/slick/js/manageEpisodeStatuses.js
@@ -1,75 +1,4 @@
 $(document).ready(function() {
 
-    function make_row(indexer_id, season, episode, name, checked) {
-        checked = checked ? ' checked' : '';
-
-        var row_class = $('#row_class').val();
-
-        var row = '';
-        row += ' <tr class="'+row_class+' show-'+indexer_id+'">';
-        row += '  <td class="tableleft" align="center"><input type="checkbox" class="'+indexer_id+'-epcheck" name="'+indexer_id+'-'+season+'x'+episode+'"'+checked+'></td>';
-        row += '  <td>'+season+'x'+episode+'</td>';
-        row += '  <td class="tableright" style="width: 100%">'+name+'</td>';
-        row += ' </tr>';
-
-        return row;
-    }
-
-    $('.allCheck').click(function(){
-        var indexer_id = $(this).attr('id').split('-')[1];
-        $('.'+indexer_id+'-epcheck').prop('checked', $(this).prop('checked'));
-    });
-
-    $('.get_more_eps').click(function(){
-        var cur_indexer_id = $(this).attr('id');
-        var checked = $('#allCheck-'+cur_indexer_id).prop('checked');
-        var last_row = $('tr#'+cur_indexer_id);
-        var clicked = $(this).attr('data-clicked');
-        var action = $(this).attr('value');
-
-        if (!clicked)  {
-            $.getJSON(srRoot+'/manage/showEpisodeStatuses',{
-                indexer_id: cur_indexer_id,
-                whichStatus: $('#oldStatus').val()
-            }, function (data) {
-                $.each(data, function(season,eps){
-                    $.each(eps, function(episode, name) {
-                        //alert(season+'x'+episode+': '+name);
-                        last_row.after(make_row(cur_indexer_id, season, episode, name, checked));
-                    });
-                });
-            });
-            $(this).attr('data-clicked',1);
-            $(this).prop('value', 'Collapse');
-        } else {
-            if (action === 'Collapse') {
-                $('table tr').filter('.show-'+cur_indexer_id).hide();
-                $(this).prop('value', 'Expand');
-            } else if (action === 'Expand') {
-                $('table tr').filter('.show-'+cur_indexer_id).show();
-                $(this).prop('value', 'Collapse');
-            }
-        }
-    });
-
-    // selects all visible episode checkboxes.
-    $('.selectAllShows').click(function(){
-        $('.allCheck').each(function(){
-                this.checked = true;
-        });
-        $('input[class*="-epcheck"]').each(function(){
-                this.checked = true;
-        });
-    });
-
-    // clears all visible episode checkboxes and the season selectors
-    $('.unselectAllShows').click(function(){
-        $('.allCheck').each(function(){
-                this.checked = false;
-        });
-        $('input[class*="-epcheck"]').each(function(){
-                this.checked = false;
-        });
-    });
 
 });
diff --git a/gui/slick/js/manageSubtitleMissed.js b/gui/slick/js/manageSubtitleMissed.js
index 228b3f171a3368379f88dce97151b63586483493..2f6d65c2b74364ddb304ebfe3ac94c45c58c2b9c 100644
--- a/gui/slick/js/manageSubtitleMissed.js
+++ b/gui/slick/js/manageSubtitleMissed.js
@@ -1,11 +1,11 @@
 $(document).ready(function() {
 
-    function make_row(indexer_id, season, episode, name, subtitles, checked) {
+    function makeRow(indexerId, season, episode, name, subtitles, checked) {
         checked = checked ? ' checked' : '';
 
         var row = '';
-        row += ' <tr class="good show-' + indexer_id + '">';
-        row += '  <td align="center"><input type="checkbox" class="'+indexer_id+'-epcheck" name="'+indexer_id+'-'+season+'x'+episode+'"'+checked+'></td>';
+        row += ' <tr class="good show-' + indexerId + '">';
+        row += '  <td align="center"><input type="checkbox" class="'+indexerId+'-epcheck" name="'+indexerId+'-'+season+'x'+episode+'"'+checked+'></td>';
         row += '  <td style="width: 1%;">'+season+'x'+episode+'</td>';
         row += '  <td>'+name+'</td>';
         row += ' </tr>';
@@ -14,26 +14,26 @@ $(document).ready(function() {
     }
 
     $('.allCheck').click(function(){
-        var indexer_id = $(this).attr('id').split('-')[1];
-        $('.'+indexer_id+'-epcheck').prop('checked', $(this).prop('checked'));
+        var indexerId = $(this).attr('id').split('-')[1];
+        $('.'+indexerId+'-epcheck').prop('checked', $(this).prop('checked'));
     });
 
     $('.get_more_eps').click(function(){
-        var cur_indexer_id = $(this).attr('id');
-        var checked = $('#allCheck-'+cur_indexer_id).prop('checked');
-        var last_row = $('tr#'+cur_indexer_id);
+        var indexerId = $(this).attr('id');
+        var checked = $('#allCheck-'+indexerId).prop('checked');
+        var lastRow = $('tr#'+indexerId);
         var clicked = $(this).attr('data-clicked');
         var action = $(this).attr('value');
 
         if (!clicked) {
             $.getJSON(srRoot + '/manage/showSubtitleMissed', {
-                indexer_id: cur_indexer_id,
+                indexer_id: indexerId, // jshint ignore:line
                 whichSubs: $('#selectSubLang').val()
             }, function(data) {
                 $.each(data, function(season, eps) {
                     $.each(eps, function(episode, data) {
                         //alert(season+'x'+episode+': '+name);
-                        last_row.after(make_row(cur_indexer_id, season, episode, data.name, data.subtitles, checked));
+                        lastRow.after(makeRow(indexerId, season, episode, data.name, data.subtitles, checked));
                     });
                 });
             });
@@ -41,10 +41,10 @@ $(document).ready(function() {
             $(this).prop('value', 'Collapse');
         } else {
             if (action === 'Collapse') {
-                $('table tr').filter('.show-' + cur_indexer_id).hide();
+                $('table tr').filter('.show-' + indexerId).hide();
                 $(this).prop('value', 'Expand');
             } else if (action === 'Expand') {
-                $('table tr').filter('.show-' + cur_indexer_id).show();
+                $('table tr').filter('.show-' + indexerId).show();
                 $(this).prop('value', 'Collapse');
             }
         }
diff --git a/gui/slick/js/massEdit.js b/gui/slick/js/massEdit.js
index 116792887eaf4d95a1bce6655e8b532a143e0108..1a8c7b334cd4d0d5cadaaa20acdbe164cc22cd2a 100644
--- a/gui/slick/js/massEdit.js
+++ b/gui/slick/js/massEdit.js
@@ -1,28 +1,28 @@
 $(document).ready(function(){
-    function find_dir_index(which){
-        var dir_parts = which.split('_');
-        return dir_parts[dir_parts.length-1];
+    function findDirIndex(which){
+        var dirParts = which.split('_');
+        return dirParts[dirParts.length-1];
     }
 
-    function edit_root_dir(path, options){
-        $('#new_root_dir_'+options.which_id).val(path);
-        $('#new_root_dir_'+options.which_id).change();
+    function editRootDir(path, options){
+        $('#new_root_dir_'+options.whichId).val(path);
+        $('#new_root_dir_'+options.whichId).change();
     }
 
     $('.new_root_dir').change(function(){
-        var cur_index = find_dir_index($(this).attr('id'));
-        $('#display_new_root_dir_'+cur_index).html('<b>'+$(this).val()+'</b>');
+        var curIndex = findDirIndex($(this).attr('id'));
+        $('#display_new_root_dir_'+curIndex).html('<b>'+$(this).val()+'</b>');
     });
 
     $('.edit_root_dir').click(function(){
-        var cur_id = find_dir_index($(this).attr('id'));
-        var initial_dir = $("#new_root_dir_"+cur_id).val();
-        $(this).nFileBrowser(edit_root_dir, {initialDir: initial_dir, which_id: cur_id});
+        var curIndex = findDirIndex($(this).attr('id'));
+        var initialDir = $("#new_root_dir_"+curIndex).val();
+        $(this).nFileBrowser(editRootDir, {initialDir: initialDir, whichId: curIndex});
     });
 
     $('.delete_root_dir').click(function(){
-        var cur_id = find_dir_index($(this).attr('id'));
-        $('#new_root_dir_'+cur_id).val(null);
-        $('#display_new_root_dir_'+cur_id).html('<b>DELETED</b>');
+        var curIndex = findDirIndex($(this).attr('id'));
+        $('#new_root_dir_'+curIndex).val(null);
+        $('#display_new_root_dir_'+curIndex).html('<b>DELETED</b>');
     });
 });
diff --git a/gui/slick/js/massUpdate.js b/gui/slick/js/massUpdate.js
index 3d390c9cc1502b795b784e2ae20c840d98cb5d0f..b539e1ef6d66f65cc6d77b6359badf075e799269 100644
--- a/gui/slick/js/massUpdate.js
+++ b/gui/slick/js/massUpdate.js
@@ -3,85 +3,74 @@ $(document).ready(function(){
         var editArr = [];
 
         $('.editCheck').each(function() {
-            if(this.checked === true) editArr.push($(this).attr('id').split('-')[1]);
+            if(this.checked === true) { editArr.push($(this).attr('id').split('-')[1]); }
         });
 
-        if(editArr.length === 0) return;
+        if(editArr.length === 0) { return; }
 
-        url = 'massEdit?toEdit='+editArr.join('|');
-        window.location.href = url;
+        window.location.href = 'massEdit?toEdit='+editArr.join('|');
     });
 
     $('#submitMassUpdate').on('click', function(){
+        var updateArr = [];
+        var refreshArr = [];
+        var renameArr = [];
+        var subtitleArr = [];
+        var deleteArr = [];
+        var removeArr = [];
+        var metadataArr = [];
+
+        $('.updateCheck').each(function() {
+            if(this.checked === true) { updateArr.push($(this).attr('id').split('-')[1]); }
+        });
 
-    var updateArr = [];
-    var refreshArr = [];
-    var renameArr = [];
-    var subtitleArr = [];
-    var deleteArr = [];
-    var removeArr = [];
-    var metadataArr = [];
-
-    $('.updateCheck').each(function() {
-        if(this.checked === true) updateArr.push($(this).attr('id').split('-')[1]);
-    });
+        $('.refreshCheck').each(function() {
+            if(this.checked === true) { refreshArr.push($(this).attr('id').split('-')[1]); }
+        });
 
-    $('.refreshCheck').each(function() {
-        if(this.checked === true) refreshArr.push($(this).attr('id').split('-')[1]);
-    });
+        $('.renameCheck').each(function() {
+            if(this.checked === true) { renameArr.push($(this).attr('id').split('-')[1]); }
+        });
 
-    $('.renameCheck').each(function() {
-        if(this.checked === true) renameArr.push($(this).attr('id').split('-')[1]);
-    });
+        $('.subtitleCheck').each(function() {
+            if(this.checked === true) { subtitleArr.push($(this).attr('id').split('-')[1]); }
+        });
 
-    $('.subtitleCheck').each(function() {
-        if(this.checked === true) subtitleArr.push($(this).attr('id').split('-')[1]);
-    });
+        $('.removeCheck').each(function() {
+            if(this.checked === true) { removeArr.push($(this).attr('id').split('-')[1]); }
+        });
 
-    $('.removeCheck').each(function() {
-        if(this.checked === true) removeArr.push($(this).attr('id').split('-')[1]);
-    });
+        var deleteCount = 0;
 
-    var deleteCount = 0;
+        $('.deleteCheck').each(function() {
+            if(this.checked === true) { deleteCount++; }
+        });
 
-    $('.deleteCheck').each(function() {
-        if(this.checked === true) deleteCount++;
-    });
+        if(deleteCount >= 1) {
+            bootbox.confirm("You have selected to delete " + deleteCount + " show(s).  Are you sure you wish to continue? All files will be removed from your system.", function(result) {
+                if(result) {
+                    $('.deleteCheck').each(function() {
+                        if(this.checked === true) {
+                            deleteArr.push($(this).attr('id').split('-')[1]);
+                        }
+                    });
+                }
+                if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) { return false; }
 
-    if(deleteCount >= 1) {
-        bootbox.confirm("You have selected to delete " + deleteCount + " show(s).  Are you sure you wish to continue? All files will be removed from your system.", function(result) {
-            if(result) {
-                $('.deleteCheck').each(function() {
-                    if(this.checked === true) {
-                        deleteArr.push($(this).attr('id').split('-')[1]);
-                    }
-                });
-            }
-            if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) return false;
-            url = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|');
-            window.location.href = url;
-        });
-    } else {
-        if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) return false;
-        url = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|');
-        window.location.href = url;
-    }
-/*
-    $('.metadataCheck').each(function() {
-      if(this.checked == true) {
-        metadataArr.push($(this).attr('id').split('-')[1])
-      }
+                window.location.href = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|');
+            });
+        } else {
+            if(updateArr.length+refreshArr.length+renameArr.length+subtitleArr.length+deleteArr.length+removeArr.length+metadataArr.length === 0) { return false; }
+            window.location.href = 'massUpdate?toUpdate='+updateArr.join('|')+'&toRefresh='+refreshArr.join('|')+'&toRename='+renameArr.join('|')+'&toSubtitle='+subtitleArr.join('|')+'&toDelete='+deleteArr.join('|')+'&toRemove='+removeArr.join('|')+'&toMetadata='+metadataArr.join('|');
+        }
     });
-*/
-
-  });
 
     $('.bulkCheck').on('click', function(){
         var bulkCheck = this;
         var whichBulkCheck = $(bulkCheck).attr('id');
 
         $('.'+whichBulkCheck).each(function(){
-            if(!this.disabled) this.checked = !this.checked;
+            if(!this.disabled) { this.checked = !this.checked; }
         });
     });
 
@@ -101,11 +90,10 @@ $(document).ready(function(){
                 switch (found) {
                     case 2: return false;
                     case 1:
-                    if(!this.disabled) this.checked = lastCheck.checked;
+                    if(!this.disabled) { this.checked = lastCheck.checked; }
                 }
-                if(this == check || this == lastCheck) found++;
+                if(this === check || this === lastCheck) { found++; }
             });
-            lastClick = this;
         });
     });
 });
diff --git a/gui/slick/js/new/config_backuprestore.js b/gui/slick/js/new/config_backuprestore.js
deleted file mode 100644
index b721fac147cc1fea041a1b08c7a84f4e3b948618..0000000000000000000000000000000000000000
--- a/gui/slick/js/new/config_backuprestore.js
+++ /dev/null
@@ -1,119 +0,0 @@
-$(document).ready(function(){
-    $('#backupDir').fileBrowser({ title: 'Select backup folder to save to', key: 'backupPath' });
-    $('#backupFile').fileBrowser({ title: 'Select backup files to restore', key: 'backupFile', includeFiles: 1 });
-    $('#config-components').tabs();
-
-    $(".enabler").each(function(){
-        if (!$(this).prop('checked')) $('#content_'+$(this).attr('id')).hide();
-    });
-
-    $(".enabler").click(function() {
-        if ($(this).prop('checked')){
-            $('#content_'+$(this).attr('id')).fadeIn("fast", "linear");
-        } else {
-            $('#content_'+$(this).attr('id')).fadeOut("fast", "linear");
-        }
-    });
-
-    $(".viewIf").click(function() {
-        if ($(this).prop('checked')) {
-            $('.hide_if_'+$(this).attr('id')).css('display','none');
-            $('.show_if_'+$(this).attr('id')).fadeIn("fast", "linear");
-        } else {
-            $('.show_if_'+$(this).attr('id')).css('display','none');
-            $('.hide_if_'+$(this).attr('id')).fadeIn("fast", "linear");
-        }
-    });
-
-    $(".datePresets").click(function() {
-        var def = $('#date_presets').val();
-        if ($(this).prop('checked') && '%x' == def) {
-            def = '%a, %b %d, %Y';
-            $('#date_use_system_default').html('1');
-        } else if (!$(this).prop('checked') && '1' == $('#date_use_system_default').html()){
-            def = '%x';
-        }
-
-        $('#date_presets').attr('name', 'date_preset_old');
-        $('#date_presets').attr('id', 'date_presets_old');
-
-        $('#date_presets_na').attr('name', 'date_preset');
-        $('#date_presets_na').attr('id', 'date_presets');
-
-        $('#date_presets_old').attr('name', 'date_preset_na');
-        $('#date_presets_old').attr('id', 'date_presets_na');
-
-        if (def) $('#date_presets').val(def);
-    });
-
-    // bind 'myForm' and provide a simple callback function
-    $('#configForm').ajaxForm({
-        beforeSubmit: function(){
-            $('.config_submitter .config_submitter_refresh').each(function(){
-                $(this).attr("disabled", "disabled");
-                $(this).after('<span><img src="' + srRoot + '/images/loading16' + themeSpinner + '.gif"> Saving...</span>');
-                $(this).hide();
-            });
-        },
-        success: function(){
-            setTimeout(function () {
-                "use strict";
-                config_success();
-            }, 2000);
-        }
-    });
-
-    $('#api_key').click(function(){
-        $('#api_key').select();
-    });
-
-    $("#generate_new_apikey").click(function(){
-        $.get(srRoot + '/config/general/generateApiKey',
-            function(data){
-                if (data.error !== undefined) {
-                    alert(data.error);
-                    return;
-                }
-                $('#api_key').val(data);
-        });
-    });
-
-    $('#branchCheckout').click(function() {
-        var url = srRoot+'/home/branchCheckout?branch='+$("#branchVersion").val();
-        var checkDBversion = srRoot + "/home/getDBcompare";
-        $.getJSON(checkDBversion, function(data){
-            if (data.status == "success") {
-                if (data.message == "equal") {
-                    //Checkout Branch
-                    window.location.href = url;
-                }
-                if (data.message == "upgrade") {
-                    if ( confirm("Changing branch will upgrade your database.\nYou won't be able to downgrade afterward.\nDo you want to continue?") ) {
-                        //Checkout Branch
-                        window.location.href = url;
-                    }
-                }
-                if (data.message == "downgrade") {
-                    alert("Can't switch branch as this will result in a database downgrade.");
-                }
-            }
-        });
-    });
-
-});
-
-function config_success(){
-    $('.config_submitter').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-    });
-    $('.config_submitter_refresh').each(function(){
-        $(this).removeAttr("disabled");
-        $(this).next().remove();
-        $(this).show();
-        url = srRoot+'/config/providers/';
-        window.location.href = url;
-    });
-    $('#email_show').trigger('notify');
-}
diff --git a/gui/slick/js/new/config_general.js b/gui/slick/js/new/config_general.js
deleted file mode 100644
index 98b5a603ce851ec8a6643d9abd1c682cdcdb485a..0000000000000000000000000000000000000000
--- a/gui/slick/js/new/config_general.js
+++ /dev/null
@@ -1,18 +0,0 @@
-$(document).ready(function(){
-    if ($("input[name='proxy_setting']").val().length === 0) {
-        $("input[id='proxy_indexers']").prop('checked', false);
-        $("label[for='proxy_indexers']").hide();
-    }
-
-    $("input[name='proxy_setting']").on('input', function() {
-        if($(this).val().length === 0) {
-            $("input[id='proxy_indexers']").prop('checked', false);
-            $("label[for='proxy_indexers']").hide();
-        } else {
-            $("label[for='proxy_indexers']").show();
-        }
-    });
-
-    $('#log_dir').fileBrowser({ title: 'Select log file folder location' });
-    $('#config-components').tabs();
-});
diff --git a/gui/slick/js/new/config_notifications.js b/gui/slick/js/new/config_notifications.js
deleted file mode 100644
index c9762b0429a8f53ef0ce419bba01c493bd9eedc1..0000000000000000000000000000000000000000
--- a/gui/slick/js/new/config_notifications.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$(document).load(function(){
-    $('#config-components').tabs();
-});
diff --git a/gui/slick/js/new/config_postProcessing.js b/gui/slick/js/new/config_postProcessing.js
deleted file mode 100644
index b09818bbde162ac33d4ccf2226e67b51f05a3a58..0000000000000000000000000000000000000000
--- a/gui/slick/js/new/config_postProcessing.js
+++ /dev/null
@@ -1,2 +0,0 @@
-$('#config-components').tabs();
-$('#tv_download_dir').fileBrowser({ title: 'Select TV Download Directory' });
diff --git a/gui/slick/js/new/config_search.js b/gui/slick/js/new/config_search.js
deleted file mode 100644
index 0c706f7da055fa4edc217225f169d57f2db60efa..0000000000000000000000000000000000000000
--- a/gui/slick/js/new/config_search.js
+++ /dev/null
@@ -1,4 +0,0 @@
-$('#config-components').tabs();
-$('#nzb_dir').fileBrowser({ title: 'Select .nzb black hole/watch location' });
-$('#torrent_dir').fileBrowser({ title: 'Select .torrent black hole/watch location' });
-$('#torrent_path').fileBrowser({ title: 'Select .torrent download location' });
diff --git a/gui/slick/js/new/core.js b/gui/slick/js/new/core.js
deleted file mode 100644
index 69215279dcb135eceb91ce3c511b9e2bf99f14aa..0000000000000000000000000000000000000000
--- a/gui/slick/js/new/core.js
+++ /dev/null
@@ -1,73 +0,0 @@
-var srRoot = getMeta('srRoot'),
-    themeSpinner = getMeta('themeSpinner'),
-    anonURL = getMeta('anonURL'),
-    top_image_html = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />';
-
-$(document).ready(function () {
-    $("#config-components").tabs({
-        activate: function (event, ui) {
-            var lastOpenedPanel = $(this).data("lastOpenedPanel"),
-                selected = $(this).tabs('option', 'selected');
-
-            if (!lastOpenedPanel) lastOpenedPanel = $(ui.oldPanel);
-
-            if (!$(this).data("topPositionTab")) $(this).data("topPositionTab", $(ui.newPanel).position().top);
-
-            //Dont use the builtin fx effects. This will fade in/out both tabs, we dont want that
-            //Fadein the new tab yourself
-            $(ui.newPanel).hide().fadeIn(0);
-
-            if (lastOpenedPanel) {
-                // 1. Show the previous opened tab by removing the jQuery UI class
-                // 2. Make the tab temporary position:absolute so the two tabs will overlap
-                // 3. Set topposition so they will overlap if you go from tab 1 to tab 0
-                // 4. Remove position:absolute after animation
-                lastOpenedPanel
-                    .toggleClass("ui-tabs-hide")
-                    .css("position", "absolute")
-                    .css("top", $(this).data("topPositionTab") + "px")
-                    .fadeOut(0, function () {
-                        $(this)
-                            .css("position", "");
-                    });
-            }
-
-            //Saving the last tab has been opened
-            $(this).data("lastOpenedPanel", $(ui.newPanel));
-        }
-    });
-
-    // hack alert: if we don't have a touchscreen, and we are already hovering the mouse, then click should link instead of toggle
-    if ((navigator.maxTouchPoints || 0) < 2) {
-        $('.dropdown-toggle').on('click', function(e) {
-            var $this = $(this);
-            if ($this.attr('aria-expanded') === 'true') {
-                window.location.href = $this.attr('href');
-            }
-        });
-    }
-
-    if(metaToBool('sickbeard.FUZZY_DATING')){
-        $.timeago.settings.allowFuture = true;
-        $.timeago.settings.strings = {
-            prefixAgo: null,
-            prefixFromNow: 'In ',
-            suffixAgo: "ago",
-            suffixFromNow: "",
-            seconds: "less than a minute",
-            minute: "about a minute",
-            minutes: "%d minutes",
-            hour: "an hour",
-            hours: "%d hours",
-            day: "a day",
-            days: "%d days",
-            month: "a month",
-            months: "%d months",
-            year: "a year",
-            years: "%d years",
-            wordSeparator: " ",
-            numbers: []
-        };
-        $("[datetime]").timeago();
-    }
-});
diff --git a/gui/slick/js/new/displayShow.js b/gui/slick/js/new/displayShow.js
index 17344f7c692cf79bd3389eec25f05b4f0e090d11..dc83839e81d842a9384c5050a03c2750f57d8cbe 100644
--- a/gui/slick/js/new/displayShow.js
+++ b/gui/slick/js/new/displayShow.js
@@ -1,4 +1,247 @@
 $(document).ready(function(){
+
+    $('#srRoot').ajaxEpSearch({'colorRow': true});
+
+    $('#srRoot').ajaxEpSubtitlesSearch();
+
+    $('#seasonJump').on('change', function(){
+        var id = $('#seasonJump option:selected').val();
+        if (id && id !== 'jump') {
+            var season = $('#seasonJump option:selected').data('season');
+            $('html,body').animate({scrollTop: $('[name ="' + id.substring(1) + '"]').offset().top - 50}, 'slow');
+            $('#collapseSeason-' + season).collapse('show');
+            location.hash = id;
+        }
+        $(this).val('jump');
+    });
+
+    $("#prevShow").on('click', function(){
+        $('#pickShow option:selected').prev('option').prop('selected', 'selected');
+        $("#pickShow").change();
+    });
+
+    $("#nextShow").on('click', function(){
+        $('#pickShow option:selected').next('option').prop('selected', 'selected');
+        $("#pickShow").change();
+    });
+
+    $('#changeStatus').on('click', function(){
+        var srRoot = $('#srRoot').val();
+        var epArr = [];
+
+        $('.epCheck').each(function () {
+            if (this.checked === true) {
+                epArr.push($(this).attr('id'));
+            }
+        });
+
+        if (epArr.length === 0) { return false; }
+
+        window.location.href = srRoot + '/home/setStatus?show=' + $('#showID').attr('value') + '&eps=' + epArr.join('|') + '&status=' + $('#statusSelect').val();
+    });
+
+    $('.seasonCheck').on('click', function(){
+        var seasCheck = this;
+        var seasNo = $(seasCheck).attr('id');
+
+        $('#collapseSeason-' + seasNo).collapse('show');
+        $('.epCheck:visible').each(function () {
+            var epParts = $(this).attr('id').split('x');
+            if (epParts[0] === seasNo) {
+                this.checked = seasCheck.checked;
+            }
+        });
+    });
+
+    var lastCheck = null;
+    $('.epCheck').on('click', function (event) {
+
+        if (!lastCheck || !event.shiftKey) {
+            lastCheck = this;
+            return;
+        }
+
+        var check = this;
+        var found = 0;
+
+        $('.epCheck').each(function() {
+            switch (found) {
+                case 2:
+                    return false;
+                case 1:
+                    this.checked = lastCheck.checked;
+            }
+
+            if (this === check || this === lastCheck) {
+                found++;
+            }
+        });
+    });
+
+    // selects all visible episode checkboxes.
+    $('.seriesCheck').on('click', function () {
+        $('.epCheck:visible').each(function () {
+            this.checked = true;
+        });
+        $('.seasonCheck:visible').each(function () {
+            this.checked = true;
+        });
+    });
+
+    // clears all visible episode checkboxes and the season selectors
+    $('.clearAll').on('click', function () {
+        $('.epCheck:visible').each(function () {
+            this.checked = false;
+        });
+        $('.seasonCheck:visible').each(function () {
+            this.checked = false;
+        });
+    });
+
+    // handle the show selection dropbox
+    $('#pickShow').on('change', function () {
+        var srRoot = $('#srRoot').val();
+        var val = $(this).val();
+        if (val === 0) {
+            return;
+        }
+        window.location.href = srRoot + '/home/displayShow?show=' + val;
+    });
+
+    // show/hide different types of rows when the checkboxes are changed
+    $("#checkboxControls input").change(function () {
+        var whichClass = $(this).attr('id');
+        $(this).showHideRows(whichClass);
+    });
+
+    // initially show/hide all the rows according to the checkboxes
+    $("#checkboxControls input").each(function() {
+        var status = $(this).prop('checked');
+        $("tr." + $(this).attr('id')).each(function() {
+            if(status) {
+                $(this).show();
+            } else {
+                $(this).hide();
+            }
+        });
+    });
+
+    $.fn.showHideRows = function(whichClass) {
+        var status = $('#checkboxControls > input, #' + whichClass).prop('checked');
+        $("tr." + whichClass).each(function() {
+            if (status) {
+                $(this).show();
+            } else {
+                $(this).hide();
+            }
+        });
+
+        // hide season headers with no episodes under them
+        $('tr.seasonheader').each(function () {
+            var numRows = 0;
+            var seasonNo = $(this).attr('id');
+            $('tr.' + seasonNo + ' :visible').each(function () {
+                numRows++;
+            });
+            if (numRows === 0) {
+                $(this).hide();
+                $('#' + seasonNo + '-cols').hide();
+            } else {
+                $(this).show();
+                $('#' + seasonNo + '-cols').show();
+            }
+        });
+    };
+
+    function setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode) {
+        var srRoot = $('#srRoot').val();
+        var showId = $('#showID').val();
+        var indexer = $('#indexer').val();
+
+        if (sceneSeason === '') { sceneSeason = null; }
+        if (sceneEpisode === '') { sceneEpisode = null; }
+
+        $.getJSON(srRoot + '/home/setSceneNumbering',{
+            'show': showId,
+            'indexer': indexer,
+            'forSeason': forSeason,
+            'forEpisode': forEpisode,
+            'sceneSeason': sceneSeason,
+            'sceneEpisode': sceneEpisode
+        }, function(data) {
+            //	Set the values we get back
+            if (data.sceneSeason === null || data.sceneEpisode === null) {
+                $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val('');
+            } else {
+                $('#sceneSeasonXEpisode_' + showId + '_' + forSeason + '_' + forEpisode).val(data.sceneSeason + 'x' + data.sceneEpisode);
+            }
+            if (!data.success) {
+                if (data.errorMessage) {
+                    alert(data.errorMessage);
+                } else {
+                    alert('Update failed.');
+                }
+            }
+        });
+    }
+
+    function setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute) {
+        var srRoot = $('#srRoot').val();
+        var showId = $('#showID').val();
+        var indexer = $('#indexer').val();
+
+        if (sceneAbsolute === '') { sceneAbsolute = null; }
+
+        $.getJSON(srRoot + '/home/setSceneNumbering', {
+            'show': showId,
+            'indexer': indexer,
+            'forAbsolute': forAbsolute,
+            'sceneAbsolute': sceneAbsolute
+        },
+        function(data) {
+            //	Set the values we get back
+            if (data.sceneAbsolute === null) {
+                $('#sceneAbsolute_' + showId + '_' + forAbsolute).val('');
+            } else {
+                $('#sceneAbsolute_' + showId + '_' + forAbsolute).val(data.sceneAbsolute);
+            }
+            if (!data.success) {
+                if (data.errorMessage) {
+                    alert(data.errorMessage);
+                } else {
+                    alert('Update failed.');
+                }
+            }
+        });
+    }
+
+    $('.sceneSeasonXEpisode').on('change', function() {
+        //	Strip non-numeric characters
+        $(this).val($(this).val().replace(/[^0-9xX]*/g, ''));
+        var forSeason = $(this).attr('data-for-season');
+        var forEpisode = $(this).attr('data-for-episode');
+        var m = $(this).val().match(/^(\d+)x(\d+)$/i);
+        var sceneSeason = null, sceneEpisode = null;
+        if (m) {
+            sceneSeason = m[1];
+            sceneEpisode = m[2];
+        }
+        setEpisodeSceneNumbering(forSeason, forEpisode, sceneSeason, sceneEpisode);
+    });
+
+    $('.sceneAbsolute').on('change', function() {
+        //	Strip non-numeric characters
+        $(this).val($(this).val().replace(/[^0-9xX]*/g, ''));
+        var forAbsolute = $(this).attr('data-for-absolute');
+
+        var m = $(this).val().match(/^(\d{1,3})$/i);
+        var sceneAbsolute = null;
+        if (m) {
+            sceneAbsolute = m[1];
+        }
+        setAbsoluteSceneNumbering(forAbsolute, sceneAbsolute);
+    });
+
     $('.addQTip').each(function () {
         $(this).css({'cursor':'help', 'text-shadow':'0px 0px 0.5px #666'});
         $(this).qtip({
@@ -16,11 +259,11 @@ $(document).ready(function(){
     $("#showTable, #animeTable").tablesorter({
         widgets: ['saveSort', 'stickyHeaders', 'columnSelector'],
         widgetOptions : {
-            columnSelector_saveColumns: true,
-            columnSelector_layout : '<br/><label><input type="checkbox">{name}</label>',
-            columnSelector_mediaquery: false,
-            columnSelector_cssChecked : 'checked'
-        },
+            columnSelector_saveColumns: true, // jshint ignore:line
+            columnSelector_layout : '<br><label><input type="checkbox">{name}</label>', // jshint ignore:line
+            columnSelector_mediaquery: false, // jshint ignore:line
+            columnSelector_cssChecked : 'checked' // jshint ignore:line
+        }
     });
 
     $('#popover').popover({
@@ -29,7 +272,7 @@ $(document).ready(function(){
         content: '<div id="popover-target"></div>'
     })
     // bootstrap popover event triggered when the popover opens
-    .on('shown.bs.popover', function () {
-        $.tablesorter.columnSelector.attachTo( $("#showTable, #animeTable"), '#popover-target');
+    .on('shown.bs.popover', function (){
+        $.tablesorter.columnSelector.attachTo($("#showTable, #animeTable"), '#popover-target');
     });
 });
diff --git a/gui/slick/js/new/editShow.js b/gui/slick/js/new/editShow.js
index 3b566547940e47aa57064ba8666a27356bde7c91..73789ef0d67dfec3fc2278ffea6ce8b1800272c3 100644
--- a/gui/slick/js/new/editShow.js
+++ b/gui/slick/js/new/editShow.js
@@ -1,56 +1,56 @@
-var all_exceptions = [];
+var allExceptions = [];
 
 $('#location').fileBrowser({ title: 'Select Show Location' });
 
-$('#submit').click(function(){
-    all_exceptions = [];
+$('#submit').click(function() {
+    var allExceptions = [];
 
-    $("#exceptions_list option").each  ( function() {
-        all_exceptions.push( $(this).val() );
+    $("#exceptions_list option").each(function() {
+        allExceptions.push( $(this).val() );
     });
 
-    $("#exceptions_list").val(all_exceptions);
+    $("#exceptions_list").val(allExceptions);
 
-    if(metaToBool('show.is_anime')) generate_bwlist();
+    if(metaToBool('show.is_anime')) { generate_bwlist(); }
 });
 $('#addSceneName').click(function() {
-    var scene_ex = $('#SceneName').val();
+    var sceneEx = $('#SceneName').val();
     var option = $("<option>");
-    all_exceptions = [];
+    allExceptions = [];
 
-    $("#exceptions_list option").each  ( function() {
-       all_exceptions.push($(this).val());
+    $("#exceptions_list option").each(function() {
+       allExceptions.push($(this).val());
     });
 
     $('#SceneName').val('');
 
-    if ($.inArray(scene_ex, all_exceptions) > -1 || (scene_ex === '')) return;
+    if ($.inArray(sceneEx, allExceptions) > -1 || (sceneEx === '')) { return; }
 
     $("#SceneException").show();
 
-    option.attr("value",scene_ex);
-    option.html(scene_ex);
+    option.attr("value",sceneEx);
+    option.html(sceneEx);
     return option.appendTo('#exceptions_list');
 });
 
 $('#removeSceneName').click(function() {
     $('#exceptions_list option:selected').remove();
 
-    $(this).toggle_SceneException();
+    $(this).toggleSceneException();
 });
 
-$.fn.toggle_SceneException = function() {
-    all_exceptions = [];
+$.fn.toggleSceneException = function() {
+    allExceptions = [];
 
     $("#exceptions_list option").each  ( function() {
-        all_exceptions.push( $(this).val() );
+        allExceptions.push( $(this).val() );
     });
 
-    if (all_exceptions === ''){
+    if (allExceptions === ''){
         $("#SceneException").hide();
     } else {
         $("#SceneException").show();
     }
 };
 
-$(this).toggle_SceneException();
+$(this).toggleSceneException();
diff --git a/gui/slick/js/new/home.js b/gui/slick/js/new/home.js
index f4f09593afcd82f2d4a12aa4495407c5e6b9a8f9..1df0a5edb2e506fc43b6603010f9049499b6a367 100644
--- a/gui/slick/js/new/home.js
+++ b/gui/slick/js/new/home.js
@@ -8,9 +8,11 @@ $(document).ready(function(){
     $('.progressbar').each(function(progressbar){
         var showId = $(this).data('show-id');
         var percentage = $(this).data('progress-percentage');
-        var classToAdd = percentage == 100 ? 100 : percentage > 80 ? 80 : percentage > 60 ? 60 : percentage > 40 ? 40 : 20;
+        var classToAdd = percentage === 100 ? 100 : percentage > 80 ? 80 : percentage > 60 ? 60 : percentage > 40 ? 40 : 20;
         $(this).progressbar({ value:  percentage });
-        if($(this).data('progress-text')) $(this).append('<div class="progressbarText" title="' + $(this).data('progress-tip') + '">' + $(this).data('progress-text') + '</div>');
+        if($(this).data('progress-text')) {
+            $(this).append('<div class="progressbarText" title="' + $(this).data('progress-tip') + '">' + $(this).data('progress-text') + '</div>');
+        }
         $(this).find('.ui-progressbar-value').addClass('progress-' + classToAdd);
     });
 
@@ -53,10 +55,10 @@ $(document).ready(function(){
         widgetOptions: (function(){
             if(metaToBool('sickbeard.FILTER_ROW')){
                 return {
-                    filter_columnFilters: true,
-                    filter_hideFilters : true,
-                    filter_saveFilters : true,
-                    filter_functions : {
+                    filter_columnFilters: true, // jshint ignore:line
+                    filter_hideFilters : true, // jshint ignore:line
+                    filter_saveFilters : true, // jshint ignore:line
+                    filter_functions : { // jshint ignore:line
                        5:function(e, n, f, i, r, c) {
                             var test = false;
                             var pct = Math.floor((n % 1) * 1000);
diff --git a/gui/slick/js/new/home_recommendedShows.js b/gui/slick/js/new/home_recommendedShows.js
index 31d9535234cca1094d32ef460cc1a5e283250b79..fa82ab85cd0eb6f55b0099621a8f6769ace9978e 100644
--- a/gui/slick/js/new/home_recommendedShows.js
+++ b/gui/slick/js/new/home_recommendedShows.js
@@ -9,7 +9,7 @@ $(document).ready(function(){
     $('#showsortdirection').val('asc');
 
     var $container = [$('#container')];
-    $.each($container, function (j) {
+    $.each($container, function() {
         this.isotope({
             itemSelector: '.trakt_show',
             sortBy: 'original-order',
@@ -52,6 +52,6 @@ $(document).ready(function(){
     });
 
     $('#showsortdirection').on( 'change', function() {
-        $('#container').isotope({sortAscending: ('asc' == this.value)});
+        $('#container').isotope({sortAscending: ('asc' === this.value)});
     });
 });
diff --git a/gui/slick/js/new/home_trendingShows.js b/gui/slick/js/new/home_trendingShows.js
index 51e1e49b11cfc7808e4b570e99701e5d8136e566..3f21b696a5f69b6e58891a7def52a1262fb2fa8e 100644
--- a/gui/slick/js/new/home_trendingShows.js
+++ b/gui/slick/js/new/home_trendingShows.js
@@ -49,6 +49,6 @@ $(document).ready(function(){
     });
 
     $('#showsortdirection').on( 'change', function() {
-        $('#container').isotope({sortAscending: ('asc' == this.value)});
+        $('#container').isotope({sortAscending: ('asc' === this.value)});
     });
 });
diff --git a/gui/slick/js/new/manage.js b/gui/slick/js/new/manage.js
index a601c7b5e39c5568204587b188d0166c47e0417f..b8ac98a50fce09876c400f10b515d03bd9cbfc20 100644
--- a/gui/slick/js/new/manage.js
+++ b/gui/slick/js/new/manage.js
@@ -1,36 +1,2 @@
 $(document).ready(function(){
-    $("#massUpdateTable:has(tbody tr)").tablesorter({
-        sortList: [[1,0]],
-        textExtraction: {
-            2: function(node) { return $(node).find("span").text().toLowerCase(); },
-            3: function(node) { return $(node).find("img").attr("alt"); },
-            4: function(node) { return $(node).find("img").attr("alt"); },
-            5: function(node) { return $(node).find("img").attr("alt"); },
-            6: function(node) { return $(node).find("img").attr("alt"); },
-            7: function(node) { return $(node).find("img").attr("alt"); },
-            8: function(node) { return $(node).find("img").attr("alt"); },
-            9: function(node) { return $(node).find("img").attr("alt"); },
-        },
-        widgets: ['zebra'],
-        headers: {
-            0: { sorter: false},
-            1: { sorter: 'showNames'},
-            2: { sorter: 'quality'},
-            3: { sorter: 'sports'},
-            4: { sorter: 'scene'},
-            5: { sorter: 'anime'},
-            6: { sorter: 'flatfold'},
-            7: { sorter: 'archive_firstmatch'},
-            8: { sorter: 'paused'},
-            9: { sorter: 'subtitle'},
-           10: { sorter: 'default_ep_status'},
-           11: { sorter: 'status'},
-           12: { sorter: false},
-           13: { sorter: false},
-           14: { sorter: false},
-           15: { sorter: false},
-           16: { sorter: false},
-           17: { sorter: false}
-        }
     });
-});
diff --git a/gui/slick/js/new/manage_backlogOverview.js b/gui/slick/js/new/manage_backlogOverview.js
index d61b28a48d8b8fe2ce6c9996a5c937c6b44a0f3a..38637c688885a101f0267ee66b3cfe8b4442465d 100644
--- a/gui/slick/js/new/manage_backlogOverview.js
+++ b/gui/slick/js/new/manage_backlogOverview.js
@@ -1,8 +1,3 @@
 $(document).ready(function(){
-    $('#pickShow').change(function(){
-        var id = $(this).val();
-        if (id) {
-            $('html,body').animate({scrollTop: $('#show-' + id).offset().top -25},'slow');
-        }
-    });
+    
 });
diff --git a/gui/slick/js/new/manage_failedDownloads.js b/gui/slick/js/new/manage_failedDownloads.js
index 9186bac811cd71d3f6f9d2f8c803093c9198671d..38637c688885a101f0267ee66b3cfe8b4442465d 100644
--- a/gui/slick/js/new/manage_failedDownloads.js
+++ b/gui/slick/js/new/manage_failedDownloads.js
@@ -1,11 +1,3 @@
 $(document).ready(function(){
-    $("#failedTable:has(tbody tr)").tablesorter({
-        widgets: ['zebra'],
-        sortList: [[0,0]],
-        headers: { 3: { sorter: false } }
-    });
-    $('#limit').change(function(){
-        url = srRoot + '/manage/failedDownloads/?limit='+$(this).val();
-        window.location.href = url;
-    });
+    
 });
diff --git a/gui/slick/js/new/manage_massEdit.js b/gui/slick/js/new/manage_massEdit.js
index c5406abafaec22c07b604edfe2f726ebcf6525c8..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644
--- a/gui/slick/js/new/manage_massEdit.js
+++ b/gui/slick/js/new/manage_massEdit.js
@@ -1 +0,0 @@
-$('#location').fileBrowser({ title: 'Select Show Location' });
diff --git a/gui/slick/js/new/parsers.js b/gui/slick/js/new/parsers.js
index 5c46465712677c1473ea8facce7d1b579fc6a56c..b7be826ea345a3ba6d6aa7340bdc2e3773a68d2b 100644
--- a/gui/slick/js/new/parsers.js
+++ b/gui/slick/js/new/parsers.js
@@ -1,6 +1,6 @@
 $.tablesorter.addParser({
     id: 'loadingNames',
-    is: function(s) {
+    is: function() {
         return false;
     },
     format: function(s) {
@@ -14,7 +14,7 @@ $.tablesorter.addParser({
 });
 $.tablesorter.addParser({
     id: 'quality',
-    is: function(s) {
+    is: function() {
         return false;
     },
     format: function(s) {
@@ -24,7 +24,7 @@ $.tablesorter.addParser({
 });
 $.tablesorter.addParser({
     id: 'realISODate',
-    is: function(s) {
+    is: function() {
         return false;
     },
     format: function(s) {
@@ -35,7 +35,7 @@ $.tablesorter.addParser({
 
 $.tablesorter.addParser({
     id: 'cDate',
-    is: function(s) {
+    is: function() {
         return false;
     },
     format: function(s) {
@@ -45,27 +45,27 @@ $.tablesorter.addParser({
 });
 $.tablesorter.addParser({
     id: 'eps',
-    is: function(s) {
+    is: function() {
         return false;
     },
     format: function(s) {
-        match = s.match(/^(.*)/);
+        var match = s.match(/^(.*)/);
 
-        if (match === null || match[1] == "?") return -10;
+        if (match === null || match[1] === "?") { return -10; }
 
         var nums = match[1].split(" / ");
-        if (nums[0].indexOf("+") != -1) {
-            var num_parts = nums[0].split("+");
-            nums[0] = num_parts[0];
+        if (nums[0].indexOf("+") !== -1) {
+            var numParts = nums[0].split("+");
+            nums[0] = numParts[0];
         }
 
         nums[0] = parseInt(nums[0]);
         nums[1] = parseInt(nums[1]);
 
-        if (nums[0] === 0) return nums[1];
+        if (nums[0] === 0) { return nums[1]; }
         var finalNum = parseInt((getMeta('max_download_count'))*nums[0]/nums[1]);
         var pct = Math.round((nums[0]/nums[1])*100) / 1000;
-        if (finalNum > 0) finalNum += nums[0];
+        if (finalNum > 0) { finalNum += nums[0]; }
 
         return finalNum + pct;
     },
diff --git a/gui/slick/js/new/recommendedShows.js b/gui/slick/js/new/recommendedShows.js
index 17a78a4649dd6b982de8a90f2606e072712dd631..c64be8e6fefc1b65861f506622479ea82be846c6 100644
--- a/gui/slick/js/new/recommendedShows.js
+++ b/gui/slick/js/new/recommendedShows.js
@@ -1,7 +1,7 @@
 $.fn.loadContent = function(path, loadingTxt, errorTxt) {
     $(this).html('<img id="searchingAnim" src="' + srRoot + '/images/loading32' + themeSpinner + '.gif" height="32" width="32" />&nbsp;' + loadingTxt);
-    $(this).load(srRoot + path + ' #container', function(response, status, xhr) {
-        if (status == "error") $(this).empty().html(errorTxt);
+    $(this).load(srRoot + path + ' #container', function(response, status) {
+        if (status === "error") { $(this).empty().html(errorTxt); }
     });
 };
 
diff --git a/gui/slick/js/new/trendingShows.js b/gui/slick/js/new/trendingShows.js
index b65df539d17e4b370036a55bc452a4f6ac3f976c..b60a5068f35d73347702badca7b94d898713d127 100644
--- a/gui/slick/js/new/trendingShows.js
+++ b/gui/slick/js/new/trendingShows.js
@@ -4,7 +4,7 @@ $(document).ready(function(){
     $('#showsortdirection').val('asc');
 
     var $container = [$('#container')];
-    $.each($container, function (j) {
+    $.each($container, function () {
         this.isotope({
             itemSelector: '.trakt_show',
             sortBy: 'original-order',
diff --git a/gui/slick/js/new/viewlogs.js b/gui/slick/js/new/viewlogs.js
index d0ed8eee15b3e348826ea5336e9711271ae2a898..d8437eebf8e11c4cf0a49cb90e64ed9f60777b3d 100644
--- a/gui/slick/js/new/viewlogs.js
+++ b/gui/slick/js/new/viewlogs.js
@@ -7,7 +7,7 @@ $(document).ready(function(){
         $('#minLevel').prop('disabled', true);
         $('#logFilter').prop('disabled', true);
         document.body.style.cursor='wait';
-        url = srRoot + '/errorlogs/viewlog/?minLevel='+$('select[name=minLevel]').val()+'&logFilter='+$('select[name=logFilter]').val()+'&logSearch='+$('#logSearch').val();
+        var url = srRoot + '/errorlogs/viewlog/?minLevel='+$('select[name=minLevel]').val()+'&logFilter='+$('select[name=logFilter]').val()+'&logSearch='+$('#logSearch').val();
         $.get(url, function(data){
             history.pushState('data', '', url);
             $('pre').html($(data).find('pre').html());
diff --git a/gui/slick/js/newShow.js b/gui/slick/js/newShow.js
index c347253fb5164bc715aac310501c510bc0b0cbfe..65135532dd8651830c42b0f77f6c669234e9a2aa 100644
--- a/gui/slick/js/newShow.js
+++ b/gui/slick/js/newShow.js
@@ -58,7 +58,7 @@ $(document).ready(function () {
                             resultStr += ' [' + obj[0] + ']';
                         }
 
-                        resultStr += '<br />';
+                        resultStr += '<br>';
                     });
                     resultStr += '</ul>';
                 }
diff --git a/gui/slick/js/plotTooltip.js b/gui/slick/js/plotTooltip.js
index a29e5f86919457eb1f28cb359196c6145bd1c869..57e7b94cdb52499347df9d811e03d2e5086392d5 100644
--- a/gui/slick/js/plotTooltip.js
+++ b/gui/slick/js/plotTooltip.js
@@ -1,6 +1,6 @@
 $(function () {
     $('.plotInfo').each(function () {
-        match = $(this).attr("id").match(/^plot_info_(\d+)_(\d+)_(\d+)$/);
+        var match = $(this).attr("id").match(/^plot_info_(\d+)_(\d+)_(\d+)$/);
         $(this).qtip({
             content: {
                 text: 'Loading...',
@@ -12,7 +12,7 @@ $(function () {
                         episode: match[3],
                         season: match[2]
                     },
-                    success: function (data, status) {
+                    success: function (data) {
                         this.set('content.text', data);
                     }
                 }
diff --git a/gui/slick/js/qualityChooser.js b/gui/slick/js/qualityChooser.js
index 8cf90a5d32b6b49c97654756e47f5ebff65333df..7242113d7aa3fdd11db73b9799d63321c9c03571 100644
--- a/gui/slick/js/qualityChooser.js
+++ b/gui/slick/js/qualityChooser.js
@@ -8,7 +8,7 @@ $(document).ready(function() {
         }
 
         $('#anyQualities option').each(function(i) {
-            var result = preset & $(this).val();
+            var result = preset & $(this).val(); // I have no clue what the & does here
             if (result > 0) {
                 $(this).attr('selected', 'selected');
             } else {
@@ -17,7 +17,7 @@ $(document).ready(function() {
         });
 
         $('#bestQualities option').each(function(i) {
-            var result = preset & ($(this).val() << 16);
+            var result = preset & ($(this).val() << 16); // I have no clue what the & does here
             if (result > 0) {
                 $(this).attr('selected', 'selected');
             } else {
diff --git a/gui/slick/js/ratingTooltip.js b/gui/slick/js/ratingTooltip.js
index 5c106db24cd8f890572524affcd71156af6bbd05..4d9352e960900fb915b72e1087729a0d8caf301f 100644
--- a/gui/slick/js/ratingTooltip.js
+++ b/gui/slick/js/ratingTooltip.js
@@ -1,7 +1,7 @@
 $(function () {
     $('.imdbstars').qtip({
         content: {
-            text: function(event, api) {
+            text: function() {
                 // Retrieve content from custom attribute of the $('.selector') elements.
                 return $(this).attr('qtip-content');
             }
diff --git a/gui/slick/js/restart.js b/gui/slick/js/restart.js
index 7e6fd4b7a528cebb424ff599dd5439dd85bb6134..f51c67b86a5d42a140cb015e800b9ba8c32d1df3 100644
--- a/gui/slick/js/restart.js
+++ b/gui/slick/js/restart.js
@@ -1,39 +1,39 @@
 $(document).ready(function() {
-    window.console_debug = false;
-    window.console_prefix = 'Restart: ';
-    window.current_pid = '';
+    window.console_debug = false; // jshint ignore:line
+    window.console_prefix = 'Restart: '; // jshint ignore:line
+    window.current_pid = ''; // jshint ignore:line
 
-    var is_alive_url = srRoot + '/home/is_alive/';
+    var isAliveUrl = srRoot + '/home/is_alive/';
 
-    var check_isAlive = setInterval(is_alive, 1000);
+    var checkIsAlive = setInterval(isAlive, 1000);
 
-    function is_alive() {
+    function isAlive() {  // jshint ignore:line
         // Setup error detection
         $.ajaxSetup({
-            error: ajax_error
+            error: ajaxError
         });
 
-        var jqxhr = $.get(is_alive_url, function(data) {
-            if (data.msg == 'nope') {
+        var jqxhr = $.get(isAliveUrl, function(data) {
+            if (data.msg.toLowerCase() === 'nope') {
                 // if it's still initializing then just wait and try again
-                if (console_debug) {
-                    console.log(console_prefix + 'is_alive: Sickrage is starting.');
+                if (console_debug) { // jshint ignore:line
+                    console.log(console_prefix + 'isAlive: Sickrage is starting.'); // jshint ignore:line
                 }
                 $('#shut_down_loading').hide();
                 $('#shut_down_success').show();
                 $('#restart_message').show();
             } else {
                 // if this is before we've even shut down then just try again later
-                if (console_debug) {
-                    console.log(console_prefix + 'is_alive: Sickrage is shutdowning.');
+                if (console_debug) { // jshint ignore:line
+                    console.log(console_prefix + 'isAlive: Sickrage is shutdowning.'); // jshint ignore:line
                 }
-                if (current_pid === '' || data.msg == current_pid) {
-                    current_pid = data.msg;
+                if (current_pid === '' || data.msg == current_pid) { // jshint ignore:line
+                    current_pid = data.msg; // jshint ignore:line
                 // if we're ready to go then redirect to new url
                 } else {
-                    clearInterval(check_isAlive);
-                    if (console_debug) {
-                        console.log(console_prefix + 'is_alive: Setting redirect.');
+                    clearInterval(checkIsAlive);
+                    if (console_debug) { // jshint ignore:line
+                        console.log(console_prefix + 'isAlive: Setting redirect.'); // jshint ignore:line
                     }
                     $('#restart_loading').hide();
                     $('#restart_success').show();
@@ -45,20 +45,20 @@ $(document).ready(function() {
         }, 'jsonp');
 
         jqxhr.fail(function() {
-            ajax_error();
+            ajaxError();
         });
     }
 
-    function ajax_error(x, e) {
-        if (console_debug) {
+    function ajaxError(x, e) {
+        if (console_debug) { // jshint ignore:line
             if (x.status === 0) {
-                console.log(console_prefix + 'is_alive: Sickrage is not responding.');
+                console.log(console_prefix + 'isAlive: Sickrage is not responding.');
             } else if (x.status == 404) {
-                console.log(console_prefix + 'is_alive: Requested URL not found.');
+                console.log(console_prefix + 'isAlive: Requested URL not found.');
             } else if (x.status == 500) {
-                console.log(console_prefix + 'is_alive: Internel Server Error.');
+                console.log(console_prefix + 'isAlive: Internel Server Error.');
             }  else {
-                console.log(console_prefix + 'is_alive: Unknow Error.\n' + x.responseText);
+                console.log(console_prefix + 'isAlive: Unknow Error.\n' + x.responseText);
             }
         }
     }
diff --git a/gui/slick/js/rootDirs.js b/gui/slick/js/rootDirs.js
index d9e0e52dfb5e1aae7123a497fbcddec9cf5c670e..0d1d516cf015afc54d0a3a5d78659f08fa9e5cc9 100644
--- a/gui/slick/js/rootDirs.js
+++ b/gui/slick/js/rootDirs.js
@@ -22,41 +22,43 @@
 }());
 
 $(document).ready(function() {
-
     function addRootDir(path) {
-
-        if (!path.length)
+        if (!path.length){
             return;
+        }
 
         // check if it's the first one
-        var is_default = false;
-        if (!$('#whichDefaultRootDir').val().length)
-            is_default = true;
+        var isDefault = false;
+        if (!$('#whichDefaultRootDir').val().length){
+            isDefault = true;
+        }
 
         $('#rootDirs').append('<option value="'+path+'">'+path+'</option>');
 
         syncOptionIDs();
 
-        if (is_default)
+        if (isDefault) {
             setDefault($('#rootDirs option').attr('id'));
+        }
 
         refreshRootDirs();
         $.get(srRoot+'/config/general/saveRootDirs', { rootDirString: $('#rootDirText').val() });
     }
 
     function editRootDir(path) {
-
-        if (!path.length)
+        if (!path.length){
             return;
+        }
 
         // as long as something is selected
         if ($("#rootDirs option:selected").length) {
 
             // update the selected one with the provided path
-            if ($("#rootDirs option:selected").attr('id') == $("#whichDefaultRootDir").val())
+            if ($("#rootDirs option:selected").attr('id') === $("#whichDefaultRootDir").val()) {
                 $("#rootDirs option:selected").text('*'+path);
-            else
+            } else {
                 $("#rootDirs option:selected").text(path);
+            }
             $("#rootDirs option:selected").val(path);
         }
 
@@ -72,8 +74,8 @@ $(document).ready(function() {
 
             var toDelete = $("#rootDirs option:selected");
 
-            var newDefault = (toDelete.attr('id') == $("#whichDefaultRootDir").val());
-            var deleted_num = $("#rootDirs option:selected").attr('id').substr(3);
+            var newDefault = (toDelete.attr('id') === $("#whichDefaultRootDir").val());
+            var deletedNum = $("#rootDirs option:selected").attr('id').substr(3);
 
             toDelete.remove();
             syncOptionIDs();
@@ -86,12 +88,15 @@ $(document).ready(function() {
                 $("#whichDefaultRootDir").val('');
 
                 // if we're deleting the default and there are options left then pick a new default
-                if ($("#rootDirs option").length)
+                if ($("#rootDirs option").length) {
                     setDefault($('#rootDirs option').attr('id'));
+                }
 
             } else if ($("#whichDefaultRootDir").val().length) {
-                var old_default_num = $("#whichDefaultRootDir").val().substr(3);
-                if (old_default_num > deleted_num) $("#whichDefaultRootDir").val('rd-'+(old_default_num-1));
+                var oldDefaultNum = $("#whichDefaultRootDir").val().substr(3);
+                if (oldDefaultNum > deletedNum) {
+                    $("#whichDefaultRootDir").val('rd-'+(oldDefaultNum-1));
+                }
             }
 
         }
@@ -100,8 +105,9 @@ $(document).ready(function() {
     });
 
     $('#defaultRootDir').click(function(){
-        if ($("#rootDirs option:selected").length)
+        if ($("#rootDirs option:selected").length) {
             setDefault($("#rootDirs option:selected").attr('id'));
+        }
         refreshRootDirs();
         $.get(srRoot+'/config/general/saveRootDirs', {rootDirString: $('#rootDirText').val()});
     });
@@ -109,17 +115,17 @@ $(document).ready(function() {
     function setDefault(which, force){
         console.log('setting default to '+which);
 
-        if (which !== undefined && !which.length) return;
+        if (which !== undefined && !which.length) { return; }
 
-        if ($('#whichDefaultRootDir').val() == which && force !== true) return;
+        if ($('#whichDefaultRootDir').val() === which && force !== true) { return; }
 
         // put an asterisk on the text
-        if ($('#'+which).text().charAt(0) != '*') $('#'+which).text('*'+$('#'+which).text());
+        if ($('#'+which).text().charAt(0) !== '*') { $('#'+which).text('*'+$('#'+which).text()); }
 
         // if there's an existing one then take the asterisk off
         if ($('#whichDefaultRootDir').val() && force !== true) {
-            var old_default = $('#'+$('#whichDefaultRootDir').val());
-            old_default.text(old_default.text().substring(1));
+            var oldDefault = $('#'+$('#whichDefaultRootDir').val());
+            oldDefault.text(oldDefault.text().substring(1));
         }
 
         $('#whichDefaultRootDir').val(which);
@@ -135,39 +141,43 @@ $(document).ready(function() {
 
     function refreshRootDirs() {
 
-        if (!$("#rootDirs").length) return;
+        if (!$("#rootDirs").length) { return; }
 
-        var do_disable = 'true';
+        var doDisable = 'true';
 
         // re-sync option ids
         syncOptionIDs();
 
         // if nothing's selected then select the default
-        if (!$("#rootDirs option:selected").length && $('#whichDefaultRootDir').val().length) $('#'+$('#whichDefaultRootDir').val()).prop("selected", true);
+        if (!$("#rootDirs option:selected").length && $('#whichDefaultRootDir').val().length) {
+            $('#'+$('#whichDefaultRootDir').val()).prop("selected", true);
+        }
 
         // if something's selected then we have some behavior to figure out
         if ($("#rootDirs option:selected").length) {
-            do_disable = '';
+            doDisable = '';
         }
 
         // update the elements
-        $('#deleteRootDir').prop('disabled', do_disable);
-        $('#defaultRootDir').prop('disabled', do_disable);
-        $('#editRootDir').prop('disabled', do_disable);
+        $('#deleteRootDir').prop('disabled', doDisable);
+        $('#defaultRootDir').prop('disabled', doDisable);
+        $('#editRootDir').prop('disabled', doDisable);
 
-        var log_str = '';
-        var dir_text = '';
+        var logString = '';
+        var dirString = '';
         if ($('#whichDefaultRootDir').val().length >= 4){
-            dir_text = $('#whichDefaultRootDir').val().substr(3);
+            dirString = $('#whichDefaultRootDir').val().substr(3);
         }
         $('#rootDirs option').each(function() {
-            log_str += $(this).val()+'='+$(this).text()+'->'+$(this).attr('id')+'\n';
-            if (dir_text.length) dir_text += '|' + $(this).val();
+            logString += $(this).val()+'='+$(this).text()+'->'+$(this).attr('id')+'\n';
+            if (dirString.length) {
+                dirString += '|' + $(this).val();
+            }
         });
-        log_str += 'def: '+ $('#whichDefaultRootDir').val();
-        console.log(log_str);
+        logString += 'def: '+ $('#whichDefaultRootDir').val();
+        console.log(logString);
 
-        $('#rootDirText').val(dir_text);
+        $('#rootDirText').val(dirString);
         $('#rootDirText').change();
         console.log('rootDirText: '+$('#rootDirText').val());
     }
diff --git a/gui/slick/js/sceneExceptionsTooltip.js b/gui/slick/js/sceneExceptionsTooltip.js
index 2be78993531d180af40997ac31bed8ba14c4a27d..face3cdd58f20aad25d9b01fdb5053bd29b56560 100644
--- a/gui/slick/js/sceneExceptionsTooltip.js
+++ b/gui/slick/js/sceneExceptionsTooltip.js
@@ -1,6 +1,6 @@
 $(function () {
     $('.title a').each(function () {
-        match = $(this).parent().attr("id").match(/^scene_exception_(\d+)$/);
+        var match = $(this).parent().attr("id").match(/^scene_exception_(\d+)$/);
         $(this).qtip({
             content: {
                 text: 'Loading...',
@@ -10,7 +10,7 @@ $(function () {
                     data: {
                         show: match[1]
                     },
-                    success: function (data, status) {
+                    success: function (data) {
                         this.set('content.text', data);
                     }
                 }
diff --git a/gui/slick/js/testRename.js b/gui/slick/js/testRename.js
index b0972122ab2171de2a82d2138a5e4b5006e78745..6b7cb5e3578f15e733a1685af7df24e0083a2b71 100644
--- a/gui/slick/js/testRename.js
+++ b/gui/slick/js/testRename.js
@@ -18,7 +18,7 @@ $(document).ready(function(){
         $('.epCheck:visible').each(function(){
             var epParts = $(this).attr('id').split('x');
 
-            if (epParts[0] == seasNo) {
+            if (epParts[0] === seasNo) {
                 this.checked = seasCheck.checked;
             }
         });
@@ -33,10 +33,9 @@ $(document).ready(function(){
             }
         });
 
-        if (epArr.length === 0) return false;
+        if (epArr.length === 0) { return false; }
 
-        url = srRoot+'/home/doRename?show='+$('#showID').attr('value')+'&eps='+epArr.join('|');
-        window.location.href = url;
+        window.location.href = srRoot+'/home/doRename?show='+$('#showID').attr('value')+'&eps='+epArr.join('|');
     });
 
 });
diff --git a/gui/slick/js/vender.min.js b/gui/slick/js/vender.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..183aaff7e388bfb2a7c84d7927c2a2dd9d0f255f
Binary files /dev/null and b/gui/slick/js/vender.min.js differ
diff --git a/gui/slick/views/apiBuilder.mako b/gui/slick/views/apiBuilder.mako
index af0526ff34e1b447dda8fad9a1cf3a2877dc7909..9e9f88e8769d8881cf252c8e5ee51069a3eef30d 100644
--- a/gui/slick/views/apiBuilder.mako
+++ b/gui/slick/views/apiBuilder.mako
@@ -149,22 +149,22 @@
 
                     <h4>Playground</h4>
 
-                    URL: <kbd id="command-${command_id}-base-url">/api/${apikey}/?cmd=${command}</kbd><br />
+                    URL: <kbd id="command-${command_id}-base-url">/api/${apikey}/?cmd=${command}</kbd><br>
 
                     % if help['data']['requiredParameters']:
-                        Required parameters: ${display_parameters_playground(help['data']['requiredParameters'], True, command_id)}<br />
+                        Required parameters: ${display_parameters_playground(help['data']['requiredParameters'], True, command_id)}<br>
                     % endif
 
                     % if help['data']['optionalParameters']:
-                        Optional parameters: ${display_parameters_playground(help['data']['optionalParameters'], False, command_id)}<br />
+                        Optional parameters: ${display_parameters_playground(help['data']['optionalParameters'], False, command_id)}<br>
                     % endif
 
-                    <button class="btn btn-primary" data-action="api-call" data-command-name="${command_id}" data-base-url="command-${command_id}-base-url" data-target="#command-${command_id}-response" data-time="#command-${command_id}-time" data-url="#command-${command_id}-url">Call API</button><br />
+                    <button class="btn btn-primary" data-action="api-call" data-command-name="${command_id}" data-base-url="command-${command_id}-base-url" data-target="#command-${command_id}-response" data-time="#command-${command_id}-time" data-url="#command-${command_id}-url">Call API</button><br>
 
                     <div class="result-wrapper hidden">
                         <div class="clearfix">
                             <span class="pull-left">
-                                Response: <strong id="command-${command_id}-time"></strong><br />
+                                Response: <strong id="command-${command_id}-time"></strong><br>
                                 URL: <kbd id="command-${command_id}-url"></kbd>
                             </span>
                             <span class="pull-right">
diff --git a/gui/slick/views/config.mako b/gui/slick/views/config.mako
index e8bea4c4ac91d14ef3a92b0b74b2539e68de2f23..cc0aee2b52f75a3a0658511ebf773fc67bdc6e4d 100644
--- a/gui/slick/views/config.mako
+++ b/gui/slick/views/config.mako
@@ -27,9 +27,9 @@
 <table class="infoTable" cellspacing="1" border="0" cellpadding="0" width="100%">
     <tr><td class="infoTableHeader">SR Version: </td><td class="infoTableCell">
 % if sickbeard.VERSION_NOTIFY:
-        BRANCH: (${sickbeard.BRANCH}) / COMMIT: (${sickbeard.CUR_COMMIT_HASH}) <!-- &ndash; build.date //--><br />
+        BRANCH: (${sickbeard.BRANCH}) / COMMIT: (${sickbeard.CUR_COMMIT_HASH}) <!-- &ndash; build.date //--><br>
 % else:
-        You don't have version checking turned on. Please turn on "Check for Update" in Config > General.<br />
+        You don't have version checking turned on. Please turn on "Check for Update" in Config > General.<br>
 % endif
     </td></tr>
 
diff --git a/gui/slick/views/config_anime.mako b/gui/slick/views/config_anime.mako
index 172fd34b3ee6c14325eff3596cf38d8e58c7cb4c..d006a14999b465671f1074ce49a58253d13848f2 100644
--- a/gui/slick/views/config_anime.mako
+++ b/gui/slick/views/config_anime.mako
@@ -3,11 +3,6 @@
     import sickbeard
     from sickbeard.helpers import anon_url
 %>
-
-<%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/configAnime.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
-</%block>
 <%block name="content">
 <div id="content960">
 <h1 class="header">${header}</h1>
@@ -91,7 +86,7 @@
                    </fieldset>
                 </div><!-- /component-group //-->
 
-                <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
 
             </div><!-- /config-components //-->
 
diff --git a/gui/slick/views/config_backuprestore.mako b/gui/slick/views/config_backuprestore.mako
index 51293caf1ab33a839a27d10255c9ebb49b76ec9c..1e2365b9d2265e8de0692d42d4963827887ed93c 100644
--- a/gui/slick/views/config_backuprestore.mako
+++ b/gui/slick/views/config_backuprestore.mako
@@ -45,12 +45,12 @@
                         <div class="field-pair">
                             Select the folder you wish to save your backup file to:
 
-                            <br/><br/>
+                            <br><br>
 
                             <input type="text" name="backupDir" id="backupDir" class="form-control input-sm input350" />
                             <input class="btn btn-inline" type="button" value="Backup" id="Backup" />
 
-                            <br/>
+                            <br>
 
                         </div>
                         <div class="Backup" id="Backup-result"></div>
@@ -68,12 +68,12 @@
                         <div class="field-pair">
                             Select the backup file you wish to restore:
 
-                            <br/><br/>
+                            <br><br>
 
                             <input type="text" name="backupFile" id="backupFile" class="form-control input-sm input350" />
                             <input class="btn btn-inline" type="button" value="Restore" id="Restore" />
 
-                            <br/>
+                            <br>
 
                         </div>
                         <div class="Restore" id="Restore-result"></div>
diff --git a/gui/slick/views/config_general.mako b/gui/slick/views/config_general.mako
index 7a5b492446a74d65297035addf6b9d99254eda65..0d74ea107e9cfd7cec3aaa5c07175684e1ce04b0 100644
--- a/gui/slick/views/config_general.mako
+++ b/gui/slick/views/config_general.mako
@@ -12,10 +12,7 @@
     from sickbeard.helpers import anon_url
 %>
 <%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/rootDirs.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/lib/bootstrap-formhelpers.min-2.3.0.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/new/config_general.js"></script>
 </%block>
 <%block name="content">
 % if not header is UNDEFINED:
@@ -491,7 +488,7 @@
                                 <span class="component-title">Reverse proxy headers</span>
                                 <span class="component-desc">
                                     <input type="checkbox" name="handle_reverse_proxy" id="handle_reverse_proxy" ${('', 'checked="checked"')[bool(sickbeard.HANDLE_REVERSE_PROXY)]}/>
-                                    <p>accept the following reverse proxy headers (advanced)...<br />(X-Forwarded-For, X-Forwarded-Host, and X-Forwarded-Proto)</p>
+                                    <p>accept the following reverse proxy headers (advanced)...<br>(X-Forwarded-For, X-Forwarded-Host, and X-Forwarded-Proto)</p>
                                 </span>
                             </label>
                         </div>
@@ -773,7 +770,7 @@
 
                 </div><!-- /component-group3 //-->
 
-                <br/>
+                <br>
                 <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6>
                 <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" />
 
diff --git a/gui/slick/views/config_notifications.mako b/gui/slick/views/config_notifications.mako
index c2771c1a975210b701381bc5b86faa38ff312f03..769cdacd311d244719cb03096d1802c9fd639bb8 100644
--- a/gui/slick/views/config_notifications.mako
+++ b/gui/slick/views/config_notifications.mako
@@ -6,12 +6,6 @@
     from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, SNATCHED, SNATCHED_PROPER, SNATCHED_BEST, FAILED
     from sickbeard.common import Quality, qualityPresets, statusStrings, qualityPresetStrings, cpu_presets, multiEpStrings
 %>
-
-<%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/configNotifications.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/new/config_notifications.js"></script>
-</%block>
 <%block name="content">
 % if not header is UNDEFINED:
     <h1 class="header">${header}</h1>
@@ -227,7 +221,7 @@
                                             <span class="component-desc">
                                                 <input type="text" name="plex_server_host" id="plex_server_host" value="${re.sub(r'\b,\b', ', ', sickbeard.PLEX_SERVER_HOST)}" class="form-control input-sm input350" />
                                                 <div class="clear-left">
-                                                    <p>one or more hosts running Plex Media Server<br />(eg. 192.168.1.1:32400, 192.168.1.2:32400)</p>
+                                                    <p>one or more hosts running Plex Media Server<br>(eg. 192.168.1.1:32400, 192.168.1.2:32400)</p>
                                                 </div>
                                             </span>
                                         </label>
@@ -295,7 +289,7 @@
                                     <span class="component-desc">
                                         <input type="text" name="plex_host" id="plex_host" value="${sickbeard.PLEX_HOST}" class="form-control input-sm input350" />
                                         <div class="clear-left">
-                                            <p>one or more hosts running Plex client<br />(eg. 192.168.1.100:3000, 192.168.1.101:3000)</p>
+                                            <p>one or more hosts running Plex client<br>(eg. 192.168.1.100:3000, 192.168.1.101:3000)</p>
                                         </div>
                                     </span>
                                 </label>
@@ -1495,7 +1489,7 @@
                                     <span class="component-title">Step One</span>
                                 </label>
                                 <label>
-                                    <span style="font-size: 11px;">Click the "Request Authorization" button.<br/> This will open a new page containing an auth key.<br/> <b>Note:</b> if nothing happens check your popup blocker.<br/></span>
+                                    <span style="font-size: 11px;">Click the "Request Authorization" button.<br> This will open a new page containing an auth key.<br> <b>Note:</b> if nothing happens check your popup blocker.<br></span>
                                     <input class="btn" type="button" value="Request Authorization" id="twitterStep1" />
                                 </label>
                             </div>
@@ -1504,7 +1498,7 @@
                                     <span class="component-title">Step Two</span>
                                 </label>
                                 <label>
-                                    <span style="font-size: 11px;">Enter the key Twitter gave you below, and click "Verify Key".<br/><br/></span>
+                                    <span style="font-size: 11px;">Enter the key Twitter gave you below, and click "Verify Key".<br><br></span>
                                     <input type="text" id="twitter_key" value="" class="form-control input-sm input350" />
                                     <input class="btn btn-inline" type="button" value="Verify Key" id="twitterStep2" />
                                 </label>
@@ -1831,7 +1825,7 @@
             </div><!-- /config-components //-->
         </form>
 
-        <br/><input type="submit" class="config_submitter btn" value="Save Changes" /><br/>
+        <br><input type="submit" class="config_submitter btn" value="Save Changes" /><br>
 
     </div>
 </div>
diff --git a/gui/slick/views/config_postProcessing.mako b/gui/slick/views/config_postProcessing.mako
index d67ebd2ab0c428a692f7c39c4eb1ec30e85d9b42..e669c11d0322f803dc874eca2a795b1f70222261 100644
--- a/gui/slick/views/config_postProcessing.mako
+++ b/gui/slick/views/config_postProcessing.mako
@@ -9,12 +9,6 @@
     from sickbeard.metadata.generic import GenericMetadata
     from sickbeard import naming
 %>
-
-<%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/configPostProcessing.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/new/home.js"></script>
-</%block>
 <%block name="content">
 <div id="content960">
 % if not header is UNDEFINED:
@@ -23,10 +17,8 @@
     <h1 class="title">${title}</h1>
 % endif
 <div id="config">
-<div id="config-content">
-
-<form id="configForm" action="savePostProcessing" method="post">
-
+    <div id="config-content">
+        <form id="configForm" action="savePostProcessing" method="post">
             <div id="config-components">
                 <ul>
                     <li><a href="#core-component-group1">Post-Processing</a></li>
@@ -47,7 +39,7 @@
                             </label>
                             <label class="nocheck" for="process_automatically">
                                 <span class="component-title">&nbsp;</span>
-                                <span class="component-desc"><b>NOTE:</b> Do not use if you use an external PostProcesing script</span>
+                                <span class="component-desc"><b>NOTE:</b> Do not use if you use an external PostProcessing script</span>
                             </label>
                         </div>
                         <div class="field-pair">
@@ -236,7 +228,7 @@
                                 <span class="component-desc">See <a href="https://github.com/SickRage/sickrage-issues/wiki/Post-Processing#extra-scripts"><font color='red'><b>Wiki</b></font></a> for script arguments description and usage.</span>
                             </label>
                         </div>
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                     </fieldset>
                 </div><!-- /component-group1 //-->
                 <div id="core-component-group2" class="component-group">
@@ -247,7 +239,6 @@
                     </div>
 
                     <fieldset class="component-group-list">
-
                         <div class="field-pair">
                             <label class="nocheck" for="name_presets">
                                 <span class="component-title">Name Pattern:</span>
@@ -280,7 +271,7 @@
                                 </label>
                                 <label class="nocheck">
                                     <span class="component-title">&nbsp;</span>
-                                    <span class="component-desc"><b>NOTE:</b> Don't forget to add quality pattern. Otherwise after post-procesing the episode will have UNKNOWN quality</span>
+                                    <span class="component-desc"><b>NOTE:</b> Don't forget to add quality pattern. Otherwise after post-processing the episode will have UNKNOWN quality</span>
                                  </label>
                             </div>
 
@@ -416,7 +407,7 @@
                                         </tr>
                                     </tbody>
                                   </table>
-                                  <br/>
+                                  <br>
                             </div>
                         </div>
 
@@ -438,7 +429,7 @@
                             <div class="example">
                                 <span class="jumbo" id="naming_example">&nbsp;</span>
                             </div>
-                            <br/>
+                            <br>
                         </div>
 
                         <div id="naming_example_multi_div">
@@ -446,7 +437,7 @@
                             <div class="example">
                                 <span class="jumbo" id="naming_example_multi">&nbsp;</span>
                             </div>
-                            <br/>
+                            <br>
                         </div>
 
                         <div class="field-pair">
@@ -624,7 +615,7 @@
                                             </tr>
                                         </tbody>
                                       </table>
-                                      <br/>
+                                      <br>
                                 </div>
                             </div><!-- /naming_abd_custom -->
 
@@ -633,7 +624,7 @@
                                 <div class="example">
                                     <span class="jumbo" id="naming_abd_example">&nbsp;</span>
                                 </div>
-                                <br/>
+                                <br>
                             </div>
 
                         </div><!-- /naming_abd_different -->
@@ -801,7 +792,7 @@
                                             </tr>
                                         </tbody>
                                       </table>
-                                      <br/>
+                                      <br>
                                 </div>
                             </div><!-- /naming_sports_custom -->
 
@@ -810,7 +801,7 @@
                                 <div class="example">
                                     <span class="jumbo" id="naming_sports_example">&nbsp;</span>
                                 </div>
-                                <br/>
+                                <br>
                             </div>
 
                         </div><!-- /naming_sports_different -->
@@ -974,7 +965,7 @@
                                             </tr>
                                         </tbody>
                                       </table>
-                                      <br/>
+                                      <br>
                                 </div>
                             </div><!-- /naming_anime_custom -->
 
@@ -996,7 +987,7 @@
                                 <div class="example">
                                     <span class="jumbo" id="naming_example_anime">&nbsp;</span>
                                 </div>
-                                <br/>
+                                <br>
                             </div>
 
                             <div id="naming_example_multi_anime_div">
@@ -1004,7 +995,7 @@
                                 <div class="example">
                                     <span class="jumbo" id="naming_example_multi_anime">&nbsp;</span>
                                 </div>
-                                <br/>
+                                <br>
                             </div>
 
                             <div class="field-pair">
@@ -1046,7 +1037,7 @@
                         </div><!-- /naming_anime_different -->
 
                         <div></div>
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
 
                     </fieldset>
                 </div><!-- /component-group2 //-->
@@ -1112,19 +1103,17 @@
                         </div>
                         % endfor
 
-                        <div class="clearfix"></div><br/>
+                        <div class="clearfix"></div><br>
 
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                     </fieldset>
                 </div><!-- /component-group3 //-->
 
-                <br/>
+                <br>
                 <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6>
                 <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" />
-
         </form>
     </div>
 </div>
-
 <div class="clearfix"></div>
 </%block>
diff --git a/gui/slick/views/config_providers.mako b/gui/slick/views/config_providers.mako
index 6836522a734992c953e81462ed9b1ae555ed0333..a8259e69cfbe3e37b47aef928718fa30770e9817 100644
--- a/gui/slick/views/config_providers.mako
+++ b/gui/slick/views/config_providers.mako
@@ -4,11 +4,9 @@
     from sickbeard.providers.generic import GenericProvider
     from sickbeard.providers import thepiratebay
     from sickbeard.helpers import anon_url
-
 %>
 <%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/configProviders.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/config.js?${sbPID}"></script>
+<script type="text/javascript" src="/js/ConfigProviders.js"></script>
 <script type="text/javascript">
 $(document).ready(function(){
     % if sickbeard.USE_NZBS:
@@ -59,7 +57,7 @@ $('#config-components').tabs();
                         % if not sickbeard.USE_NZBS or not sickbeard.USE_TORRENTS:
                         <blockquote style="margin: 20px 0;">NZB/Torrent providers can be toggled in <b><a href="${srRoot}/config/search">Search Settings</a></b></blockquote>
                         % else:
-                        <br/>
+                        <br>
                         % endif
 
                         <div>
@@ -90,7 +88,7 @@ $('#config-components').tabs();
                         % endfor
                         </ul>
                         <input type="hidden" name="provider_order" id="provider_order" value="${" ".join([x.getID()+':'+str(int(x.isEnabled())) for x in sickbeard.providers.sortedProviderList()])}"/>
-                        <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                     </fieldset>
                 </div><!-- /component-group1 //-->
 
@@ -482,33 +480,6 @@ $('#config-components').tabs();
                         </div>
                         % endif
 
-                        % if hasattr(curTorrentProvider, 'proxy'):
-                        <div class="field-pair">
-                            <label for="${curTorrentProvider.getID()}_proxy">
-                                <span class="component-title">Access provider via proxy</span>
-                                <span class="component-desc">
-                                    <input type="checkbox" class="enabler" name="${curTorrentProvider.getID()}_proxy" id="${curTorrentProvider.getID()}_proxy" ${('', 'checked="checked"')[bool(curTorrentProvider.proxy.enabled)]}/>
-                                    <p>to bypass country blocking mechanisms</p>
-                                </span>
-                            </label>
-                        </div>
-
-                        % if hasattr(curTorrentProvider.proxy, 'url'):
-                        <div class="field-pair content_${curTorrentProvider.getID()}_proxy" id="content_${curTorrentProvider.getID()}_proxy">
-                            <label for="${curTorrentProvider.getID()}_proxy_url">
-                                <span class="component-title">Proxy URL:</span>
-                                <span class="component-desc">
-                                  <select name="${curTorrentProvider.getID()}_proxy_url" id="${curTorrentProvider.getID()}_proxy_url" class="form-control input-sm">
-                                    % for i in curTorrentProvider.proxy.urls.keys():
-                                    <option value="${curTorrentProvider.proxy.urls[i]}" ${('', 'selected="selected"')[curTorrentProvider.proxy.urls[i] == curTorrentProvider.proxy.url]}>${i}</option>
-                                    % endfor
-                                    </select>
-                                </span>
-                            </label>
-                        </div>
-                        % endif
-                        % endif
-
                         % if hasattr(curTorrentProvider, 'freeleech'):
                         <div class="field-pair">
                             <label for="${curTorrentProvider.getID()}_freeleech">
@@ -613,7 +584,7 @@ $('#config-components').tabs();
 
                     <!-- end div for editing providers -->
 
-                    <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                    <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
 
                     </fieldset>
                 </div><!-- /component-group2 //-->
@@ -622,7 +593,7 @@ $('#config-components').tabs();
                 <div id="core-component-group3" class="component-group">
 
                     <div class="component-group-desc">
-                        <h3>Configure Custom<br />Newznab Providers</h3>
+                        <h3>Configure Custom<br>Newznab Providers</h3>
                         <p>Add and setup or remove custom Newznab providers.</p>
                     </div>
 
@@ -759,7 +730,7 @@ $('#config-components').tabs();
             </div><!-- /component-group4 //-->
             % endif
 
-            <br/><input type="submit" class="btn config_submitter_refresh" value="Save Changes" /><br/>
+            <br><input type="submit" class="btn config_submitter_refresh" value="Save Changes" /><br>
 
             </div><!-- /config-components //-->
 
diff --git a/gui/slick/views/config_search.mako b/gui/slick/views/config_search.mako
index 1733d42c81e23456c47395aaa318c19d476e852b..3560645ce19e606e6dbd6259173fd474ccd0e395 100644
--- a/gui/slick/views/config_search.mako
+++ b/gui/slick/views/config_search.mako
@@ -105,7 +105,7 @@
                                 <span class="component-title">Ignore words</span>
                                 <span class="component-desc">
                                     <input type="text" name="ignore_words" value="${sickbeard.IGNORE_WORDS}" class="form-control input-sm input350" />
-                                    <div class="clear-left">results with one or more word from this list will be ignored<br />
+                                    <div class="clear-left">results with one or more word from this list will be ignored<br>
                                     separate words with a comma, e.g. "word1,word2,word3"
                                     </div>
                                 </span>
@@ -117,7 +117,7 @@
                                 <span class="component-title">Require words</span>
                                 <span class="component-desc">
                                     <input type="text" name="require_words" value="${sickbeard.REQUIRE_WORDS}" class="form-control input-sm input350" />
-                                    <div class="clear-left">results with no word from this list will be ignored<br />
+                                    <div class="clear-left">results with no word from this list will be ignored<br>
                                     separate words with a comma, e.g. "word1,word2,word3"
                                     </div>
                                 </span>
@@ -129,8 +129,8 @@
                                 <span class="component-title">Ignore language names in subbed results</span>
                                 <span class="component-desc">
                                     <input type="text" name="ignored_subs_list" value="${sickbeard.IGNORED_SUBS_LIST}" class="form-control input-sm input350" />
-                                    <div class="clear-left">Ignore subbed releases based on language names <br />
-                                    Example: "dk" will ignore words: dksub, dksubs, dksubbed, dksubed <br />
+                                    <div class="clear-left">Ignore subbed releases based on language names <br>
+                                    Example: "dk" will ignore words: dksub, dksubs, dksubbed, dksubed <br>
                                     separate languages with a comma, e.g. "lang1,lang2,lang3
                                     </div>
                                 </span>
@@ -420,7 +420,7 @@
 
                         <div class="testNotification" id="testSABnzbd_result">Click below to test</div>
                         <input class="btn" type="button" value="Test SABnzbd" id="testSABnzbd" class="btn test-button"/>
-                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
 
                         </div><!-- /content_use_nzbs //-->
 
@@ -453,8 +453,8 @@
                                 <span class="component-title">Send .torrent files to:</span>
                                 <span class="component-desc">
                                 <select name="torrent_method" id="torrent_method" class="form-control input-sm">
-<% torrent_method_text = {'blackhole': "Black hole", 'utorrent': "uTorrent", 'transmission': "Transmission", 'deluge': "Deluge (via WebUI)", 'deluged': "Deluge (via Daemon)", 'download_station': "Synology DS", 'rtorrent': "rTorrent", 'qbittorrent': "qbittorrent"} %>
-% for curAction in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent'):
+<% torrent_method_text = {'blackhole': "Black hole", 'utorrent': "uTorrent", 'transmission': "Transmission", 'deluge': "Deluge (via WebUI)", 'deluged': "Deluge (via Daemon)", 'download_station': "Synology DS", 'rtorrent': "rTorrent", 'qbittorrent': "qbittorrent", 'mlnet': "MLDonkey"} %>
+% for curAction in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent', 'mlnet'):
                                 <option value="${curAction}" ${('', 'selected="selected"')[sickbeard.TORRENT_METHOD == curAction]}>${torrent_method_text[curAction]}</option>
 % endfor
                                 </select>
@@ -472,7 +472,7 @@
                             </div>
 
                             <div></div>
-                            <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                            <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                             </div>
                         </div>
 
@@ -613,13 +613,13 @@
 
                             <div class="testNotification" id="test_torrent_result">Click below to test</div>
                             <input class="btn" type="button" value="Test Connection" id="test_torrent" class="btn test-button"/>
-                            <input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                            <input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                             </div>
                     </div><!-- /content_use_torrents //-->
                     </fieldset>
                 </div><!-- /component-group3 //-->
 
-                <br/>
+                <br>
                 <h6 class="pull-right"><b>All non-absolute folder locations are relative to <span class="path">${sickbeard.DATA_DIR}</span></b> </h6>
                 <input type="submit" class="btn pull-left config_submitter button" value="Save Changes" />
 
diff --git a/gui/slick/views/config_subtitles.mako b/gui/slick/views/config_subtitles.mako
index 4d99b8c9a6743abee8c762472e0dbdd84f92fa0d..08281ee0c1cbf0d2471bd41733d28d34c82d34ea 100644
--- a/gui/slick/views/config_subtitles.mako
+++ b/gui/slick/views/config_subtitles.mako
@@ -146,7 +146,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                     </label>
                                 </div>
 
-                        <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                         </div>
                     </fieldset>
                 </div><!-- /component-group1 //-->
@@ -175,7 +175,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                         </ul>
                         <input type="hidden" name="service_order" id="service_order" value="<%" ".join(['%s:%d' % (x['name'], x['enabled']) for x in sickbeard.subtitles.sortedServiceList()])%>"/>
 
-                        <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                     </fieldset>
                 </div><!-- /component-group2 //-->
                 <div id="core-component-group3" class="component-group">
@@ -211,7 +211,7 @@ $('#subtitles_dir').fileBrowser({ title: 'Select Subtitles Download Directory' }
                                 </label>
                             </div>
                         % endfor
-                        <br/><input type="submit" class="btn config_submitter" value="Save Changes" /><br/>
+                        <br><input type="submit" class="btn config_submitter" value="Save Changes" /><br>
                     </fieldset>
                 </div><!-- /component-group3 //-->
             </div><!-- /config-components //-->
diff --git a/gui/slick/views/displayShow.mako b/gui/slick/views/displayShow.mako
index 6e239e5217dbe6de28027c664a576d130dd2b18b..44f17cb44c6297167110ced14810cb98fc0fe35d 100644
--- a/gui/slick/views/displayShow.mako
+++ b/gui/slick/views/displayShow.mako
@@ -7,20 +7,18 @@
     from sickbeard import subtitles, sbdatetime, network_timezones
     import sickbeard.helpers
 
-    from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, SNATCHED, SNATCHED_PROPER, SNATCHED_BEST, FAILED
+    from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, FAILED
     from sickbeard.common import Quality, qualityPresets, statusStrings, Overview
-
     from sickbeard.helpers import anon_url
 %>
 <%block name="scripts">
 <script type="text/javascript" src="${srRoot}/js/lib/jquery.bookmarkscroll.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/displayShow.js?${sbPID}"></script>
+<script type="text/javascript" src="${srRoot}/js/new/displayShow.js"></script>
 <script type="text/javascript" src="${srRoot}/js/plotTooltip.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/sceneExceptionsTooltip.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/ratingTooltip.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/ajaxEpSearch.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/ajaxEpSubtitles.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/new/displayShow.js"></script>
 </%block>
 <%block name="content">
 <%namespace file="/inc_defs.mako" import="renderQualityPill"/>
@@ -162,7 +160,7 @@
                     ${renderQualityPill(show.quality)}
                 % else:
                 % if anyQualities:
-                    <i>Allowed:</i> ${", ".join([capture(renderQualityPill, x) for x in sorted(anyQualities)])}${("", "</br>")[bool(bestQualities)]}
+                    <i>Allowed:</i> ${", ".join([capture(renderQualityPill, x) for x in sorted(anyQualities)])}${("", "<br>")[bool(bestQualities)]}
                 % endif
                 % if bestQualities:
                     <i>Preferred:</i> ${", ".join([capture(renderQualityPill, x) for x in sorted(bestQualities)])}
@@ -251,11 +249,11 @@
 
     <div class="pull-right clearfix" id="checkboxControls">
         <div style="padding-bottom: 5px;">
-            <label for="wanted"><span class="wanted"><input type="checkbox" id="wanted"checked="checked" /> Wanted: <b>${epCounts[Overview.WANTED]}</b></span></label>
-            <label for="qual"><span class="qual"><input type="checkbox" id="qual"checked="checked" /> Low Quality: <b>${epCounts[Overview.QUAL]}</b></span></label>
-            <label for="good"><span class="good"><input type="checkbox" id="good"checked="checked" /> Downloaded: <b>${epCounts[Overview.GOOD]}</b></span></label>
-            <label for="skipped"><span class="skipped"><input type="checkbox" id="skipped"checked="checked" /> Skipped: <b>${epCounts[Overview.SKIPPED]}</b></span></label>
-            <label for="snatched"><span class="snatched"><input type="checkbox" id="snatched"checked="checked" /> Snatched: <b>${epCounts[Overview.SNATCHED]}</b></span></label>
+            <label for="wanted"><span class="wanted"><input type="checkbox" id="wanted" checked="checked" /> Wanted: <b>${epCounts[Overview.WANTED]}</b></span></label>
+            <label for="qual"><span class="qual"><input type="checkbox" id="qual" checked="checked" /> Low Quality: <b>${epCounts[Overview.QUAL]}</b></span></label>
+            <label for="good"><span class="good"><input type="checkbox" id="good" checked="checked" /> Downloaded: <b>${epCounts[Overview.GOOD]}</b></span></label>
+            <label for="skipped"><span class="skipped"><input type="checkbox" id="skipped" checked="checked" /> Skipped: <b>${epCounts[Overview.SKIPPED]}</b></span></label>
+            <label for="snatched"><span class="snatched"><input type="checkbox" id="snatched" checked="checked" /> Snatched: <b>${epCounts[Overview.SNATCHED]}</b></span></label>
         </div>
 
         <button id="popover" type="button" class="btn btn-xs">Select Columns <b class="caret"></b></button>
@@ -481,7 +479,7 @@
                     ## Lets do this exactly like ComingEpisodes and History
                     ## Avoid issues with dateutil's _isdst on Windows but still provide air dates
                     <% airDate = datetime.datetime.fromordinal(epResult['airdate']) %>
-                    % if airDate.year >= 1970 or show.network:  
+                    % if airDate.year >= 1970 or show.network:
                         <% airDate = sbdatetime.sbdatetime.convert_to_setting(network_timezones.parse_date_time(epResult['airdate'], show.airs, show.network)) %>
                     % endif
                     <time datetime="${airDate.isoformat('T')}" class="date">${sbdatetime.sbdatetime.sbfdatetime(airDate)}</time>
diff --git a/gui/slick/views/editShow.mako b/gui/slick/views/editShow.mako
index d8e9cc47b7809329748f96756325ba5d53dff2fb..ebde82a8ab5777c24a9b8ffe1a6d916a1ce25900 100644
--- a/gui/slick/views/editShow.mako
+++ b/gui/slick/views/editShow.mako
@@ -15,7 +15,6 @@
 
 <%block name="scripts">
     <script type="text/javascript" src="${srRoot}/js/qualityChooser.js?${sbPID}"></script>
-    <script type="text/javascript" src="${srRoot}/js/lib/bootstrap-formhelpers.min-2.3.0.js?${sbPID}"></script>
     <script type="text/javascript" src="${srRoot}/js/new/editShow.js"></script>
 % if show.is_anime:
     <script type="text/javascript" src="${srRoot}/js/blackwhite.js?${sbPID}"></script>
@@ -45,7 +44,7 @@
                 <div class="component-group">
                     <h3>Main Settings</h3>
                     <fieldset class="component-group-list">
-                        
+
                         <div class="field-pair">
                             <label for="location">
                                 <span class="component-title">Show Location</span>
@@ -134,7 +133,7 @@
                             <label for="airbydate">
                                 <span class="component-title">Air by date</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="airbydate" name="air_by_date" ${('', 'checked="checked"')[show.air_by_date == 1]} /> check if the show is released as Show.03.02.2010 rather than Show.S02E03.<br />
+                                    <input type="checkbox" id="airbydate" name="air_by_date" ${('', 'checked="checked"')[show.air_by_date == 1]} /> check if the show is released as Show.03.02.2010 rather than Show.S02E03.<br>
                                     <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span>
                                 </span>
                             </label>
@@ -144,7 +143,7 @@
                             <label for="anime">
                                 <span class="component-title">Anime</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="anime" name="anime" ${('', 'checked="checked"')[show.is_anime == 1]}> check if the show is Anime and episodes are released as Show.265 rather than Show.S02E03<br />
+                                    <input type="checkbox" id="anime" name="anime" ${('', 'checked="checked"')[show.is_anime == 1]}> check if the show is Anime and episodes are released as Show.265 rather than Show.S02E03<br>
                                     % if show.is_anime:
                                         <%include file="/inc_blackwhitelist.mako"/>
                                     % endif
@@ -156,7 +155,7 @@
                             <label for="sports">
                                 <span class="component-title">Sports</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="sports" name="sports" ${('', 'checked="checked"')[show.sports == 1]}/> check if the show is a sporting or MMA event released as Show.03.02.2010 rather than Show.S02E03<br />
+                                    <input type="checkbox" id="sports" name="sports" ${('', 'checked="checked"')[show.sports == 1]}/> check if the show is a sporting or MMA event released as Show.03.02.2010 rather than Show.S02E03<br>
                                     <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span>
                                 </span>
                             </label>
@@ -184,7 +183,7 @@
                             <label for="dvdorder">
                                 <span class="component-title">DVD Order</span>
                                 <span class="component-desc">
-                                    <input type="checkbox" id="dvdorder" name="dvdorder" ${('', 'checked="checked"')[show.dvdorder == 1]} /> use the DVD order instead of the air order<br />
+                                    <input type="checkbox" id="dvdorder" name="dvdorder" ${('', 'checked="checked"')[show.dvdorder == 1]} /> use the DVD order instead of the air order<br>
                                     <div class="clear-left"><p>A "Force Full Update" is necessary, and if you have existing episodes you need to sort them manually.</p></div>
                                 </span>
                             </label>
@@ -203,7 +202,7 @@
                             <label for="rls_ignore_words">
                                 <span class="component-title">Ignored Words</span>
                                 <span class="component-desc">
-                                    <input type="text" id="rls_ignore_words" name="rls_ignore_words" id="rls_ignore_words" value="${show.rls_ignore_words}" class="form-control form-control-inline input-sm input350" /><br />
+                                    <input type="text" id="rls_ignore_words" name="rls_ignore_words" id="rls_ignore_words" value="${show.rls_ignore_words}" class="form-control form-control-inline input-sm input350" /><br>
                                     <div class="clear-left">
                                         <p>comma-separated <i>e.g. "word1,word2,word3"</i></>
                                         <p>Search results with one or more words from this list will be ignored.</p>
@@ -216,7 +215,7 @@
                             <label for="rls_require_words">
                                 <span class="component-title">Required Words</span>
                                 <span class="component-desc">
-                                    <input type="text" id="rls_require_words" name="rls_require_words" id="rls_require_words" value="${show.rls_require_words}" class="form-control form-control-inline input-sm input350" /><br />
+                                    <input type="text" id="rls_require_words" name="rls_require_words" id="rls_require_words" value="${show.rls_require_words}" class="form-control form-control-inline input-sm input350" /><br>
                                     <div class="clear-left">
                                         <p>comma-separated <i>e.g. "word1,word2,word3"</i></p>
                                         <p>Search results with no words from this list will be ignored.</p>
@@ -229,7 +228,7 @@
                             <label for="SceneName">
                                 <span class="component-title">Scene Exception</span>
                                 <span class="component-desc">
-                                    <input type="text" id="SceneName" class="form-control form-control-inline input-sm input200" /><input class="btn btn-inline" type="button" value="Add" id="addSceneName" /><br /><br />
+                                    <input type="text" id="SceneName" class="form-control form-control-inline input-sm input200" /><input class="btn btn-inline" type="button" value="Add" id="addSceneName" /><br><br>
                                     <div class="pull-left">
                                         <select id="exceptions_list" name="exceptions_list" multiple="multiple" style="min-width:200px;height:99px;">
                                         % for cur_exception in show.exceptions:
@@ -246,10 +245,10 @@
                     </fieldset>
                 </div>
             </div>
-        
+
         </div>
 
-        <br />
+        <br>
         <input id="submit" type="submit" value="Save Changes" class="btn pull-left config_submitter button">
         </form>
     </div>
diff --git a/gui/slick/views/history.mako b/gui/slick/views/history.mako
index 495e8968e6a1d337aa3b4edafdb1fe21a1128448..ce5a5b5dd8771a74fbdc831b807abf0dc47107df 100644
--- a/gui/slick/views/history.mako
+++ b/gui/slick/views/history.mako
@@ -14,9 +14,6 @@
     from sickbeard.common import Quality, statusStrings, Overview
 
     from sickrage.show.History import History
-
-    layout = sickbeard.HISTORY_LAYOUT
-    history_limit = sickbeard.HISTORY_LIMIT
 %>
 <%block name="scripts">
 <script type="text/javascript" src="${srRoot}/js/new/history.js"></script>
@@ -50,7 +47,7 @@
 </div>
 <br>
 
-% if layout == "detailed":
+% if sickbeard.HISTORY_LAYOUT == "detailed":
     <table id="historyTable" class="sickbeardTable tablesorter" cellspacing="1" border="0" cellpadding="0">
         <thead>
             <tr>
diff --git a/gui/slick/views/home.mako b/gui/slick/views/home.mako
index 33b95391c2e2289495a8084d16eb40d68a438735..b386eaa955d0b5fab52ce625270da3c30ec2a2c4 100644
--- a/gui/slick/views/home.mako
+++ b/gui/slick/views/home.mako
@@ -2,10 +2,8 @@
 <%!
     import sickbeard
     import calendar
-    from sickbeard.common import SKIPPED, WANTED, UNAIRED, ARCHIVED, IGNORED, SNATCHED, SNATCHED_PROPER, SNATCHED_BEST, FAILED
-    from sickbeard.common import Quality, qualityPresets, qualityPresetStrings
-    from sickbeard import db, sbdatetime, network_timezones
-    import datetime
+    from sickbeard import sbdatetime
+    from sickbeard import network_timezones
     import re
 %>
 <%block name="metas">
@@ -404,7 +402,7 @@
         <%
             display_status = curShow.status
             if None is not display_status:
-                if re.search('(?i)(?:new|returning)\s*series', curShow.status):
+                if re.search(r'(?i)(?:new|returning)\s*series', curShow.status):
                     display_status = 'Continuing'
                 elif re.search('(?i)(?:nded)', curShow.status):
                     display_status = 'Ended'
diff --git a/gui/slick/views/home_addExistingShow.mako b/gui/slick/views/home_addExistingShow.mako
index 3e029e48659fdf575bd963712fc2c4a0b528b295..c4f59585b206e193b59fc80eec271abe521efaf9 100644
--- a/gui/slick/views/home_addExistingShow.mako
+++ b/gui/slick/views/home_addExistingShow.mako
@@ -36,7 +36,7 @@
             <%include file="/inc_addShowOptions.mako"/>
         </div>
     </div>
-    <br />
+    <br>
 
     <p>SickRage can add existing shows, using the current options, by using locally stored NFO/XML metadata to eliminate user interaction.
     If you would rather have SickRage prompt you to customize each show, then use the checkbox below.</p>
@@ -48,10 +48,10 @@
     <p><b>Displaying folders within these directories which aren't already added to SickRage:</b></p>
 
     <ul id="rootDirStaticList"><li></li></ul>
-    <br />
+    <br>
     <div id="tableDiv"></div>
-    <br />
-    <br />
+    <br>
+    <br>
     <input class="btn btn-primary" type="button" value="Submit" id="submitShowDirs" />
 
     </form>
diff --git a/gui/slick/views/home_addShows.mako b/gui/slick/views/home_addShows.mako
index c06e1e2b4316674af9272148f64edb6a7eb96d1c..16da9f75c1dac61cf22c99dbb32ae7c387ede771 100644
--- a/gui/slick/views/home_addShows.mako
+++ b/gui/slick/views/home_addShows.mako
@@ -20,7 +20,7 @@
         </div>
     </a>
 
-    <br/><br/>
+    <br><br>
     % if sickbeard.USE_TRAKT == True:
     <a href="${srRoot}/home/addShows/trendingShows/" id="btnNewShow" class="btn btn-large">
         <div class="button"><div class="icon-addtrendingshow"></div></div>
@@ -30,7 +30,7 @@
         </div>
     </a>
 
-    <br/><br/>
+    <br><br>
 
     <a href="${srRoot}/home/addShows/recommendedShows/" id="btnNewShow" class="btn btn-large">
         <div class="button"><div class="icon-addrecommendedshow"></div></div>
@@ -40,7 +40,7 @@
         </div>
     </a>
 
-    <br/><br/>
+    <br><br>
     % endif
 
     <a href="${srRoot}/home/addShows/popularShows/" id="btnNewShow" class="btn btn-large">
@@ -51,7 +51,7 @@
         </div>
     </a>
 
-    <br/><br/>
+    <br><br>
 
     <a href="${srRoot}/home/addShows/existingShows/" id="btnExistingShow" class="btn btn-large">
         <div class="button"><div class="icon-addexistingshow"></div></div>
diff --git a/gui/slick/views/home_newShow.mako b/gui/slick/views/home_newShow.mako
index 0a13df2591ecbc1da377a737920e03ae6bebdcbb..6905df264290f57e0007e556907b0bdcca2105b7 100644
--- a/gui/slick/views/home_newShow.mako
+++ b/gui/slick/views/home_newShow.mako
@@ -7,7 +7,6 @@
 <script type="text/javascript" src="${srRoot}/js/qualityChooser.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/newShow.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/addShowOptions.js?${sbPID}"></script>
-<script type="text/javascript" src="${srRoot}/js/lib/bootstrap-formhelpers.min-2.3.0.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/rootDirs.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/blackwhite.js?${sbPID}"></script>
 </%block>
@@ -27,7 +26,7 @@
     <div id="core-component-group1" class="tab-pane active component-group">
 
     <div id="displayText">aoeu</div>
-    <br />
+    <br>
 
     <form id="addShowForm" method="post" action="${srRoot}/home/addShows/addNewShow" accept-charset="utf-8">
 
@@ -60,10 +59,10 @@
                 &nbsp;
                 <input class="btn btn-inline" type="button" id="searchName" value="Search" />
 
-                <br /><br />
-                <b>*</b> This will only affect the language of the retrieved metadata file contents and episode filenames.<br />
-                This <b>DOES NOT</b> allow SickRage to download non-english TV episodes!<br /><br />
-                <div id="searchResults" style="height: 100%;"><br/></div>
+                <br><br>
+                <b>*</b> This will only affect the language of the retrieved metadata file contents and episode filenames.<br>
+                This <b>DOES NOT</b> allow SickRage to download non-english TV episodes!<br><br>
+                <div id="searchResults" style="height: 100%;"><br></div>
             % endif
 
         </div>
@@ -74,8 +73,8 @@
 
         <div class="stepDiv">
             % if provided_show_dir:
-                Pre-chosen Destination Folder: <b>${provided_show_dir}</b> <br />
-                <input type="hidden" id="fullShowPath" name="fullShowPath" value="${provided_show_dir}" /><br />
+                Pre-chosen Destination Folder: <b>${provided_show_dir}</b> <br>
+                <input type="hidden" id="fullShowPath" name="fullShowPath" value="${provided_show_dir}" /><br>
             % else:
                 <%include file="/inc_rootDirs.mako"/>
             % endif
@@ -95,7 +94,7 @@
     <input type="hidden" name="skipShow" id="skipShow" value="" />
     </form>
 
-<br />
+<br>
 
 <div style="width: 100%; text-align: center;">
 <input class="btn" type="button" id="addShowButton" value="Add Show" disabled="disabled" />
diff --git a/gui/slick/views/home_popularShows.mako b/gui/slick/views/home_popularShows.mako
index 17fdc4498d61ac1fa1e1bf79393216d1150637c7..0da617745e709194ec03fd230d1ad13f01a7bfc6 100644
--- a/gui/slick/views/home_popularShows.mako
+++ b/gui/slick/views/home_popularShows.mako
@@ -1,13 +1,13 @@
 <%inherit file="/layouts/main.mako"/>
 <%!
     from sickbeard.helpers import anon_url
-    import sickbeard    
-    imdb_tt = [show.imdbid for show in sickbeard.showList if show.imdbid]
+    import sickbeard
 %>
 <%block name="content">
 <h2>Popular Shows</h2>
-<br />
+<br>
 
+<% imdb_tt = [show.imdbid for show in sickbeard.showList if show.imdbid] %>
 % if not popular_shows:
     <h3>Fetching of IMDB Data failed. Are you online?</h3>
 
@@ -34,7 +34,7 @@
                     Add Show</a></span>
                 % else:
                 <span> Already added </span>
-                % endif    
+                % endif
 
             </div>
             <br style="clear:both" />
diff --git a/gui/slick/views/home_postprocess.mako b/gui/slick/views/home_postprocess.mako
index 795c3d3cddafa387d8b9a14801068b37554ec5cb..67011997769ef229e0af7e37a36d1c411102dadb 100644
--- a/gui/slick/views/home_postprocess.mako
+++ b/gui/slick/views/home_postprocess.mako
@@ -16,13 +16,13 @@
 <div id="postProcess">
     <form name="processForm" method="post" action="processEpisode" style="line-height: 40px;">
     <table>
-        <input type="hidden" id="type" name="type" value="manual">
+        <input type="hidden" id="type" name="proc_type" value="manual">
         <tr>
             <td style="padding-right:10px;">
                 <b>Enter the folder containing the episode:</b>
             </td>
             <td>
-                <input type="text" name="dir" id="episodeDir" class="form-control form-control-inline input-sm input350" />
+                <input type="text" name="proc_dir" id="episodeDir" class="form-control form-control-inline input-sm input350" />
             </td>
         </tr>
         <tr>
diff --git a/gui/slick/views/home_recommendedShows.mako b/gui/slick/views/home_recommendedShows.mako
index f1ede43278fa67abcc7e8f250d2293186fe5970a..f5d77e8ea164704c4cc0b8c1ccc3cbd3b007fd03 100644
--- a/gui/slick/views/home_recommendedShows.mako
+++ b/gui/slick/views/home_recommendedShows.mako
@@ -44,7 +44,7 @@
     </select>
 </div>
 
-<br />
+<br>
 <div id="trendingShows"></div>
-<br />
+<br>
 </%block>
diff --git a/gui/slick/views/home_trendingShows.mako b/gui/slick/views/home_trendingShows.mako
index a6aa74f07e755e26005a0c10fbba84da72832761..a49b019d8d265f3b5842e8d0df765da3680273bf 100644
--- a/gui/slick/views/home_trendingShows.mako
+++ b/gui/slick/views/home_trendingShows.mako
@@ -50,7 +50,7 @@
     </select>
 </div>
 
-<br />
+<br>
 <div id="trendingShows"></div>
-<br />
+<br>
 </%block>
diff --git a/gui/slick/views/inc_blackwhitelist.mako b/gui/slick/views/inc_blackwhitelist.mako
index 0b088b327f878aee871180c2065fb2ae055a5210..37cc9fb65d8669432e430faccc6c1b555ee52844 100644
--- a/gui/slick/views/inc_blackwhitelist.mako
+++ b/gui/slick/views/inc_blackwhitelist.mako
@@ -8,6 +8,8 @@
             <p>The <b>Whitelist</b> is checked <i>before</i> the <b>Blacklist</b>.</p>
             <p>Groups are shown as <b>Name</b> | <b>Rating</b> | <b>Number of subbed episodes</b>.</p>
             <p>You may also add any fansub group not listed to either list manually.</p>
+            <p>When doing this please note that you can only use groups listed on anidb for this anime.
+            </br>If a group is not listed on anidb but subbed this anime, please correct anidb's data.</p>
         </div>
         <div class="bwlWrapper" id="Anime">
         <div class="blackwhitelist all">
@@ -19,7 +21,7 @@
                             <option value="${keyword}">${keyword}</option>
                         % endfor
                     </select>
-                    <br/>
+                    <br>
                     <input class="btn" id="removeW" value="Remove" type="button"/>
                 </div>
                 <div class="blackwhitelist pool">
@@ -31,7 +33,7 @@
                         % endif
                     % endfor
                     </select>
-                    <br/>
+                    <br>
                     <input class="btn" id="addW" value="Add to Whitelist" type="button"/>
                     <input class="btn" id="addB" value="Add to Blacklist" type="button"/>
                 </div>
@@ -42,7 +44,7 @@
                             <option value="${keyword}">${keyword}</option>
                         % endfor
                     </select>
-                    <br/>
+                    <br>
                     <input class="btn" id="removeB" value="Remove" type="button"/>
                 </div>
             </div>
diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako
index 4d364e25c6219532294206f27f06fc1afa28e00b..9ff550e1e2b3bcac917472861a0d18e81a33a5fe 100644
--- a/gui/slick/views/layouts/main.mako
+++ b/gui/slick/views/layouts/main.mako
@@ -41,7 +41,6 @@
         <meta name="msapplication-TileImage" content="${srRoot}/images/ico/favicon-144.png">
         <meta name="msapplication-config" content="${srRoot}/css/browserconfig.xml">
 
-
         <meta data-var="srRoot" data-content="${srRoot}">
         <meta data-var="themeSpinner" data-content="${('', '-dark')[sickbeard.THEME_NAME == 'dark']}">
         <meta data-var="anonURL" data-content="${sickbeard.ANON_REDIRECT}">
@@ -78,6 +77,7 @@
         <link rel="apple-touch-icon" sizes="72x72" href="${srRoot}/images/ico/favicon-72.png">
         <link rel="apple-touch-icon" href="${srRoot}/images/ico/favicon-57.png">
 
+        <link rel="stylesheet" type="text/css" href="${srRoot}/css/vender.min.css?${sbPID}"/>
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/lib/bootstrap.min.css?${sbPID}"/>
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/browser.css?${sbPID}" />
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/lib/jquery-ui-1.10.4.custom.min.css?${sbPID}" />
@@ -85,14 +85,12 @@
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/style.css?${sbPID}"/>
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/${sickbeard.THEME_NAME}.css?${sbPID}" />
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/print.css?${sbPID}" />
-        % if sbLogin:
-        <link rel="stylesheet" type="text/css" href="${srRoot}/css/lib/pnotify.custom.min.css?${sbPID}" />
+        % if srLogin:
         <link rel="stylesheet" type="text/css" href="${srRoot}/css/country-flags.css?${sbPID}"/>
         % endif
         <%block name="css" />
     </head>
-
-    <body>
+    <body data-controller="${controller}" data-action="${action}">
         <nav class="navbar navbar-default navbar-fixed-top hidden-print" role="navigation">
             <div class="container-fluid">
                 <div class="navbar-header">
@@ -105,11 +103,11 @@
                     <a class="navbar-brand" href="${srRoot}/home/" title="SickRage"><img alt="SickRage" src="${srRoot}/images/sickrage.png" style="height: 50px;" class="img-responsive pull-left" /></a>
                 </div>
 
-            % if sbLogin:
+            % if srLogin:
                 <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                     <ul class="nav navbar-nav navbar-right">
                         <li id="NAVhome" class="navbar-split dropdown${('', ' active')[topmenu == 'home']}">
-                            <a href="${srRoot}/home/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">Shows
+                            <a href="${srRoot}/home/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span>Shows</span>
                             <b class="caret"></b>
                             </a>
                             <ul class="dropdown-menu">
@@ -119,7 +117,7 @@
                                 % if sickbeard.SHOWS_RECENT:
                                     <li role="separator" class="divider"></li>
                                     % for recentShow in sickbeard.SHOWS_RECENT:
-                                        <li><a href="${srRoot}/home/displayShow/?show=${recentShow['indexerid']}"><i class="menu-icon-addshow"></i>&nbsp;${recentShow['name']|trim,h}</a></li>
+                                        <li><a href="${srRoot}/home/displayShow?show=${recentShow['indexerid']}"><i class="menu-icon-addshow"></i>&nbsp;${recentShow['name']|trim,h}</a></li>
                                     % endfor
                                 % endif
                             </ul>
@@ -135,7 +133,7 @@
                         </li>
 
                         <li id="NAVmanage" class="navbar-split dropdown${('', ' active')[topmenu == 'manage']}">
-                            <a href="${srRoot}/manage/episodeStatuses/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown">Manage
+                            <a href="${srRoot}/manage/episodeStatuses/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span>Manage</span>
                             <b class="caret"></b>
                             </a>
                             <ul class="dropdown-menu">
@@ -166,7 +164,7 @@
                         </li>
 
                         <li id="NAVconfig" class="navbar-split dropdown${('', ' active')[topmenu == 'config']}">
-                            <a href="${srRoot}/config/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs">Config</span><img src="${srRoot}/images/menu/system18.png" class="navbaricon hidden-xs" />
+                            <a href="${srRoot}/config/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs-inline">Config</span><img src="${srRoot}/images/menu/system18.png" class="navbaricon hidden-xs" />
                             <b class="caret"></b>
                             </a>
                             <ul class="dropdown-menu">
@@ -203,7 +201,7 @@
                                 toolsBadge = ''
                         %>
                         <li id="NAVsystem" class="navbar-split dropdown${('', ' active')[topmenu == 'system']}">
-                            <a href="${srRoot}/home/status/" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs">Tools</span><img src="${srRoot}/images/menu/system18-2.png" class="navbaricon hidden-xs" />${toolsBadge}
+                            <a href="${srRoot}/home/status/" class="dropdown-toggle" aria-haspopup="true" data-toggle="dropdown" data-hover="dropdown"><span class="visible-xs-inline">Tools</span><img src="${srRoot}/images/menu/system18-2.png" class="navbaricon hidden-xs" />${toolsBadge}
                             <b class="caret"></b>
                             </a>
                             <ul class="dropdown-menu">
@@ -223,7 +221,7 @@
                                 <li><a href="${srRoot}/home/updateCheck?pid=${sbPID}"><i class="menu-icon-update"></i>&nbsp;Check For Updates</a></li>
                                 <li><a href="${srRoot}/home/restart/?pid=${sbPID}" class="confirm restart"><i class="menu-icon-restart"></i>&nbsp;Restart</a></li>
                                 <li><a href="${srRoot}/home/shutdown/?pid=${sbPID}" class="confirm shutdown"><i class="menu-icon-shutdown"></i>&nbsp;Shutdown</a></li>
-                                % if sbLogin != True:
+                                % if srLogin != True:
                                     <li><a href="${srRoot}/logout" class="confirm logout"><i class="menu-icon-shutdown"></i>&nbsp;Logout</a></li>
                                 % endif
                                 <li role="separator" class="divider"></li>
@@ -264,13 +262,13 @@
         </div>
         % endif
 
-        % if sickbeard.BRANCH and sickbeard.BRANCH != 'master' and not sickbeard.DEVELOPER and sbLogin:
+        % if sickbeard.BRANCH and sickbeard.BRANCH != 'master' and not sickbeard.DEVELOPER and srLogin:
         <div class="alert alert-danger upgrade-notification hidden-print" role="alert">
             <span>You're using the ${sickbeard.BRANCH} branch. Please use 'master' unless specifically asked</span>
         </div>
         % endif
 
-        % if sickbeard.NEWEST_VERSION_STRING and sbLogin:
+        % if sickbeard.NEWEST_VERSION_STRING and srLogin:
         <div class="alert alert-success upgrade-notification hidden-print" role="alert">
             <span>${sickbeard.NEWEST_VERSION_STRING}</span>
         </div>
@@ -281,7 +279,7 @@
                 <%block name="content" />
             </div> <!-- /content -->
         </div> <!-- /contentWrapper -->
-    % if sbLogin:
+    % if srLogin:
         <footer>
             <div class="footer clearfix">
             <%
@@ -312,28 +310,22 @@
                 </div>
             </div>
         </footer>
-        <script type="text/javascript" src="${srRoot}/js/_bower.min.js?${sbPID}"></script>
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.cookie.js?${sbPID}"></script>
+        <script type="text/javascript" src="${srRoot}/js/vender.min.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.cookiejar.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.json-2.2.min.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.selectboxes.min.js?${sbPID}"></script>
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.tokeninput.js?${sbPID}"></script>
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widgets-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.qtip-2.2.1.min.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.ui.touch-punch-0.2.2.min.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/isotope.pkgd.min.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/jquery.confirm.js?${sbPID}"></script><!-- Can't be added to bower -->
         <script type="text/javascript" src="${srRoot}/js/lib/formwizard.js?${sbPID}"></script><!-- Can't be added to bower -->
-        <script type="text/javascript" src="${srRoot}/js/lib/pnotify.custom.min.js?${sbPID}"></script><!-- Needs to be removed -->
         <script type="text/javascript" src="${srRoot}/js/new/parsers.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/new/meta.js?${sbPID}"></script>
-        <script type="text/javascript" src="${srRoot}/js/new/core.js?${sbPID}"></script>
+        % if sickbeard.DEVELOPER:
+        <script type="text/javascript" src="${srRoot}/js/core.js?${sbPID}"></script>
+        % else:
+        <script type="text/javascript" src="${srRoot}/js/core.min.js?${sbPID}"></script>
+        % endif
         <script type="text/javascript" src="${srRoot}/js/lib/jquery.scrolltopcontrol-1.1.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/browser.js?${sbPID}"></script>
         <script type="text/javascript" src="${srRoot}/js/ajaxNotifications.js?${sbPID}"></script>
-        <script type="text/javascript" src="${srRoot}/js/confirmations.js?${sbPID}"></script>
     % endif
         <%block name="scripts" />
     </body>
diff --git a/gui/slick/views/manage.mako b/gui/slick/views/manage.mako
index e7f0ba82301e6a6eec793c5d8513645be6465fb8..19035aea7041711307f047e942124f0434f7d3ea 100644
--- a/gui/slick/views/manage.mako
+++ b/gui/slick/views/manage.mako
@@ -5,7 +5,6 @@
     from sickbeard.common import statusStrings
 %>
 <%block name="scripts">
-<script type="text/javascript" src="${srRoot}/js/lib/bootbox.min.js?${sbPID}"></script>
 <script type="text/javascript" src="${srRoot}/js/new/manage.js"></script>
 <script type="text/javascript" src="${srRoot}/js/massUpdate.js?${sbPID}"></script>
 </%block>
@@ -21,7 +20,7 @@
 <table id="massUpdateTable" class="sickbeardTable tablesorter" cellspacing="1" border="0" cellpadding="0">
     <thead>
         <tr>
-            <th class="col-checkbox">Edit<br/><input type="checkbox" class="bulkCheck" id="editCheck" /></th>
+            <th class="col-checkbox">Edit<br><input type="checkbox" class="bulkCheck" id="editCheck" /></th>
             <th class="nowrap" style="text-align: left;">Show Name</th>
             <th class="col-quality">Quality</th>
             <th class="col-legend">Sports</th>
@@ -33,15 +32,15 @@
             <th class="col-legend">Subtitle</th>
             <th class="col-legend">Default Ep<br>Status</th>
             <th class="col-legend">Status</th>
-            <th width="1%">Update<br/><input type="checkbox" class="bulkCheck" id="updateCheck" /></th>
-            <th width="1%">Rescan<br/><input type="checkbox" class="bulkCheck" id="refreshCheck" /></th>
-            <th width="1%">Rename<br/><input type="checkbox" class="bulkCheck" id="renameCheck" /></th>
+            <th width="1%">Update<br><input type="checkbox" class="bulkCheck" id="updateCheck" /></th>
+            <th width="1%">Rescan<br><input type="checkbox" class="bulkCheck" id="refreshCheck" /></th>
+            <th width="1%">Rename<br><input type="checkbox" class="bulkCheck" id="renameCheck" /></th>
         % if sickbeard.USE_SUBTITLES:
-            <th width="1%">Search Subtitle<br/><input type="checkbox" class="bulkCheck" id="subtitleCheck" /></th>
+            <th width="1%">Search Subtitle<br><input type="checkbox" class="bulkCheck" id="subtitleCheck" /></th>
         % endif
             <!-- <th>Force Metadata Regen <input type="checkbox" class="bulkCheck" id="metadataCheck" /></th>//-->
-            <th width="1%">Delete<br/><input type="checkbox" class="bulkCheck" id="deleteCheck" /></th>
-            <th width="1%">Remove<br/><input type="checkbox" class="bulkCheck" id="removeCheck" /></th>
+            <th width="1%">Delete<br><input type="checkbox" class="bulkCheck" id="deleteCheck" /></th>
+            <th width="1%">Remove<br><input type="checkbox" class="bulkCheck" id="removeCheck" /></th>
         </tr>
     </thead>
 
diff --git a/gui/slick/views/manage_backlogOverview.mako b/gui/slick/views/manage_backlogOverview.mako
index db2eca31046389ee7914da2b2ba65c24dbcc703d..637c9d1143f8c681b1f8242e1d685a78bc0e9fdd 100644
--- a/gui/slick/views/manage_backlogOverview.mako
+++ b/gui/slick/views/manage_backlogOverview.mako
@@ -30,7 +30,7 @@
 <div class="h2footer pull-right">
     <span class="listing-key wanted">Wanted: <b>${totalWanted}</b></span>
     <span class="listing-key qual">Low Quality: <b>${totalQual}</b></span>
-</div><br/>
+</div><br>
 
 <div class="float-left">
 Jump to Show
@@ -51,7 +51,7 @@ Jump to Show
     % endif
     <tr class="seasonheader" id="show-${curShow.indexerid}">
         <td colspan="3" class="align-left">
-            <br/><h2><a href="${srRoot}/home/displayShow?show=${curShow.indexerid}">${curShow.name}</a></h2>
+            <br><h2><a href="${srRoot}/home/displayShow?show=${curShow.indexerid}">${curShow.name}</a></h2>
             <div class="pull-right">
                 <span class="listing-key wanted">Wanted: <b>${showCounts[curShow.indexerid][Overview.WANTED]}</b></span>
                 <span class="listing-key qual">Low Quality: <b>${showCounts[curShow.indexerid][Overview.QUAL]}</b></span>
diff --git a/gui/slick/views/manage_episodeStatuses.mako b/gui/slick/views/manage_episodeStatuses.mako
index e26bfdbe841c5fa88c8d1d19bf6a4e09e4229981..ebf0cdff4f3766b851b3e27341edb20f34633736 100644
--- a/gui/slick/views/manage_episodeStatuses.mako
+++ b/gui/slick/views/manage_episodeStatuses.mako
@@ -20,7 +20,7 @@
 
 % if whichStatus:
 <h2>None of your episodes have status ${common.statusStrings[int(whichStatus)]}</h2>
-<br />
+<br>
 % endif
 
 <form action="${srRoot}/manage/episodeStatuses" method="get">
@@ -41,7 +41,7 @@ Manage episodes with status <select name="whichStatus" class="form-control form-
 
 <h2>Shows containing ${common.statusStrings[int(whichStatus)]} episodes</h2>
 
-<br />
+<br>
 
 <%
     if int(whichStatus) in [common.IGNORED, common.SNATCHED] + common.Quality.DOWNLOADED + common.Quality.ARCHIVED:
@@ -77,7 +77,7 @@ Set checked shows/episodes to <select name="newStatus" class="form-control form-
     <button type="button" class="btn btn-xs selectAllShows">Select all</a></button>
     <button type="button" class="btn btn-xs unselectAllShows">Clear all</a></button>
 </div>
-<br />
+<br>
 
 <table class="sickbeardTable manageTable" cellspacing="1" border="0" cellpadding="0">
     % for cur_indexer_id in sorted_show_ids:
diff --git a/gui/slick/views/manage_failedDownloads.mako b/gui/slick/views/manage_failedDownloads.mako
index 759c930705ea555b1cea87f69385b94d9ded88f0..4c56c324b870d8f7b7ab06b56a10ed04d371aeb0 100644
--- a/gui/slick/views/manage_failedDownloads.mako
+++ b/gui/slick/views/manage_failedDownloads.mako
@@ -35,7 +35,7 @@
       <th class="nowrap" width="75%" style="text-align: left;">Release</th>
       <th width="10%">Size</th>
       <th width="14%">Provider</th>
-      <th width="1%">Remove<br />
+      <th width="1%">Remove<br>
           <input type="checkbox" class="bulkCheck" id="removeCheck" />
       </th>
     </tr>
@@ -47,7 +47,6 @@
   </tfoot>
   <tbody>
 % for hItem in failedResults:
-<% curRemove  = "<input type=\"checkbox\" class=\"removeCheck\" id=\"remove-"+hItem["release"]+"\" />" %>
   <tr>
     <td class="nowrap">${hItem["release"]}</td>
     <td align="center">
@@ -65,7 +64,7 @@
         <img src="${srRoot}/images/providers/missing.png" width="16" height="16" alt="missing provider" title="missing provider"/>
     % endif
     </td>
-    <td align="center">${curRemove}</td>
+    <td align="center"><input type="checkbox" class="removeCheck" id="remove-${hItem["release"]}" /></td>
   </tr>
 % endfor
   </tbody>
diff --git a/gui/slick/views/manage_manageSearches.mako b/gui/slick/views/manage_manageSearches.mako
index 78e3d36a79c87df0950a90d509cb00f96fd4554c..e3caf400a321675cff1cb5f4b58377af69d2cd8d 100644
--- a/gui/slick/views/manage_manageSearches.mako
+++ b/gui/slick/views/manage_manageSearches.mako
@@ -21,28 +21,28 @@
 <a class="btn" href="${srRoot}/manage/manageSearches/forceBacklog"><i class="icon-exclamation-sign"></i> Force</a>
 <a class="btn" href="${srRoot}/manage/manageSearches/pauseBacklog?paused=${('1', '0')[bool(backlogPaused)]}"><i class="icon-${('paused', 'play')[bool(backlogPaused)]}"></i> ${('pause', 'Unpause')[bool(backlogPaused)]}</a>
 % if not backlogRunning:
-    Not in progress<br />
+    Not in progress<br>
 % else:
     ${('', 'Paused:')[bool(backlogPaused)]}
-    Currently running<br />
+    Currently running<br>
 % endif
-<br />
+<br>
 
 <h3>Daily Search:</h3>
 <a class="btn" href="${srRoot}/manage/manageSearches/forceSearch"><i class="icon-exclamation-sign"></i> Force</a>
-${('Not in progress', 'In Progress')[dailySearchStatus]}<br />
-<br />
+${('Not in progress', 'In Progress')[dailySearchStatus]}<br>
+<br>
 
 <h3>Find Propers Search:</h3>
 <a class="btn ${('disabled', '')[bool(sickbeard.DOWNLOAD_PROPERS)]}" href="${srRoot}/manage/manageSearches/forceFindPropers"><i class="icon-exclamation-sign"></i> Force</a>
 % if not sickbeard.DOWNLOAD_PROPERS:
-    Propers search disabled <br />
+    Propers search disabled <br>
 % elif not findPropersStatus:
-    Not in progress<br />
+    Not in progress<br>
 % else:
-    In Progress<br />
+    In Progress<br>
 % endif
-<br />
+<br>
 
 <h3>Search Queue:</h3>
 Backlog: <i>${queueLength['backlog']} pending items</i></br>
diff --git a/gui/slick/views/manage_massEdit.mako b/gui/slick/views/manage_massEdit.mako
index 4f28b08963298930a7982a239f78d4047e74f1a8..816af35f24739e18d3e4e5dac33de4732656ffff 100644
--- a/gui/slick/views/manage_massEdit.mako
+++ b/gui/slick/views/manage_massEdit.mako
@@ -13,7 +13,6 @@
         initial_quality = int(quality_value)
     else:
         initial_quality = common.SD
-    endif
 
     anyQualities, bestQualities = common.Quality.splitQuality(initial_quality)
 %>
@@ -39,17 +38,17 @@
                     <div class="component-group">
                         <h3>Main Settings</h3>
 
-                        ==> <u>Changing any settings marked with (<span class="separator">*</span>) will force a refresh of the selected shows.</u><br />
-                        <br />
+                        ==> <u>Changing any settings marked with (<span class="separator">*</span>) will force a refresh of the selected shows.</u><br>
+                        <br>
 
                         <fieldset class="component-group-list">
-                            
+
                         <div class="field-pair">
                             <label for="shows">
                                 <span class="component-title">Selected Shows</span>
                                 <span class="component-desc">
                                     % for curName in sorted(showNames):
-                                    <span style="font-size: 14px;">${curName}</span><br />
+                                    <span style="font-size: 14px;">${curName}</span><br>
                                     % endfor
                                 </span>
                             </label>
@@ -142,7 +141,7 @@
                                         <option value="keep" ${('', 'selected="selected"')[archive_firstmatch_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[archive_firstmatch_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[archive_firstmatch_value == 0]}>No</option>
-                                    </select><br />
+                                    </select><br>
                                     Archive episode after the first best match is found from your archive quality list.
                                 </span>
                             </label>
@@ -156,7 +155,7 @@
                                         <option value="keep" ${('', 'selected="selected"')[flatten_folders_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[flatten_folders_value == 0]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[flatten_folders_value == 1]}>No</option>
-                                    </select><br />
+                                    </select><br>
                                     Group episodes by season folder (set to "No" to store in a single folder).
                                 </span>
                             </label>
@@ -185,7 +184,7 @@
                                         % for curStatus in [WANTED, SKIPPED, IGNORED]:
                                         <option value="${curStatus}" ${('', 'selected="selected"')[curStatus == default_ep_status_value]}>${statusStrings[curStatus]}</option>
                                         % endfor
-                                    </select><br />
+                                    </select><br>
                                     This will set the status for future episodes.
                                 </span>
                             </label>
@@ -199,7 +198,7 @@
                                         <option value="keep" ${('', 'selected="selected"')[scene_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[scene_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[scene_value == 0]}>No</option>
-                                    </select><br />
+                                    </select><br>
                                     Search by scene numbering (set to "No" to search by indexer numbering).
                                 </span>
                             </label>
@@ -213,7 +212,7 @@
                                         <option value="keep" ${('', 'selected="selected"')[anime_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[anime_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[anime_value == 0]}>No</option>
-                                    </select><br />
+                                    </select><br>
                                     Set if these shows are Anime and episodes are released as Show.265 rather than Show.S02E03
                                 </span>
                             </label>
@@ -227,8 +226,8 @@
                                         <option value="keep" ${('', 'selected="selected"')[sports_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[sports_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[sports_value == 0]}>No</option>
-                                    </select><br />
-                                    Set if these shows are sporting or MMA events released as Show.03.02.2010 rather than Show.S02E03.<br />
+                                    </select><br>
+                                    Set if these shows are sporting or MMA events released as Show.03.02.2010 rather than Show.S02E03.<br>
                                     <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span>
                                 </span>
                             </label>
@@ -242,8 +241,8 @@
                                         <option value="keep" ${('', 'selected="selected"')[air_by_date_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[air_by_date_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[air_by_date_value == 0]}>No</option>
-                                    </select><br />
-                                    Set if these shows are released as Show.03.02.2010 rather than Show.S02E03.<br />
+                                    </select><br>
+                                    Set if these shows are released as Show.03.02.2010 rather than Show.S02E03.<br>
                                     <span style="color:red">In case of an air date conflict between regular and special episodes, the later will be ignored.</span>
                                 </span>
                             </label>
@@ -257,7 +256,7 @@
                                         <option value="keep" ${('', 'selected="selected"')[subtitles_value == None]}>&lt; Keep &gt;</option>
                                         <option value="enable" ${('', 'selected="selected"')[subtitles_value == 1]}>Yes</option>
                                         <option value="disable" ${('', 'selected="selected"')[subtitles_value == 0]}>No</option>
-                                    </select><br />
+                                    </select><br>
                                     Search for subtitles.
                                 </span>
                             </label>
diff --git a/gui/slick/views/manage_subtitleMissed.mako b/gui/slick/views/manage_subtitleMissed.mako
index c5367207098f4366a1d6bbe99bf04f4630ef0eaf..5337fd8e6fbbaceb2573498f4d4c64b403d437f0 100644
--- a/gui/slick/views/manage_subtitleMissed.mako
+++ b/gui/slick/views/manage_subtitleMissed.mako
@@ -22,7 +22,7 @@
 
 % if whichSubs:
 <h2>All of your episodes have ${subsLanguage} subtitles.</h2>
-<br />
+<br>
 % endif
 
 <form action="${srRoot}/manage/subtitleMissed" method="get">
@@ -42,13 +42,13 @@ subtitles
 
 <form action="${srRoot}/manage/downloadSubtitleMissed" method="post">
 <h2>Episodes without ${subsLanguage} subtitles.</h2>
-<br />
+<br>
 Download missed subtitles for selected episodes <input class="btn btn-inline" type="submit" value="Go" />
 <div>
     <button type="button" class="btn btn-xs selectAllShows">Select all</a></button>
     <button type="button" class="btn btn-xs unselectAllShows">Clear all</a></button>
 </div>
-<br />
+<br>
 <table class="sickbeardTable manageTable" cellspacing="1" border="0" cellpadding="0">
 % for cur_indexer_id in sorted_show_ids:
  <tr id="${cur_indexer_id}">
diff --git a/gui/slick/views/restart.mako b/gui/slick/views/restart.mako
index 67510c016e01f8d415b6389602de236b20886b7c..6c53fb34009f69583c88751caf9675a86e74c35b 100644
--- a/gui/slick/views/restart.mako
+++ b/gui/slick/views/restart.mako
@@ -49,7 +49,7 @@ sbDefaultPage = "${sbDefaultPage}";
 %>
 <% themeSpinner = ('', '-dark')['dark' == themeSpinner] %>
 <h2>Performing Restart</h2>
-<br />
+<br>
 <div id="shut_down_message">
 Waiting for SickRage to shut down:
 <img src="${srRoot}/images/loading16${themeSpinner}.gif" height="16" width="16" id="shut_down_loading" />
diff --git a/gui/slick/views/schedule.mako b/gui/slick/views/schedule.mako
index 6f6e69472c5d8f926f8d42951d3be3e21af67356..98a4c2cf3b0e8152363a83397e5dec1c6d97e74f 100644
--- a/gui/slick/views/schedule.mako
+++ b/gui/slick/views/schedule.mako
@@ -19,7 +19,6 @@
 </style>
 </%block>
 <%block name="content">
-<% sort = sickbeard.COMING_EPS_SORT %>
 <%namespace file="/inc_defs.mako" import="renderQualityPill"/>
 <h1 class="header">${header}</h1>
 <div class="h2footer pull-right">
@@ -122,7 +121,7 @@
                 <time datetime="${airDate.isoformat('T')}" class="date">${sbdatetime.sbdatetime.sbfdatetime(airDate)}</time>
             </td>
 
-            <td align="center" nowrap="nowrap"> 
+            <td align="center" nowrap="nowrap">
                 <% ends = sbdatetime.sbdatetime.convert_to_setting(cur_ep_enddate) %>
                 <time datetime="${ends.isoformat('T')}" class="date">${sbdatetime.sbdatetime.sbfdatetime(ends)}</time>
             </td>
@@ -139,7 +138,7 @@
 
             <td>
 % if cur_result['description']:
-                <img alt="" src="${srRoot}/images/info32.png" height="16" width="16" class="plotInfo" id="plot_info_${'%s_%s_%s' % (str(cur_result['showid']), str(cur_result['season']), str(cur_result['episode']))}" />
+                <img alt="" src="${srRoot}/images/info32.png" height="16" width="16" class="plotInfo" id="plot_info_${'%s_%s_%s' % (cur_result['showid'], cur_result['season'], cur_result['episode'])}" />
 % else:
                 <img alt="" src="${srRoot}/images/info32.png" width="16" height="16" class="plotInfoNone"  />
 % endif
@@ -195,8 +194,8 @@
     today_header = False
     show_div = 'ep_listing listing-default'
 %>
-% if 'show' == sort:
-    <br /><br />
+% if sickbeard.COMING_EPS_SORT == 'show':
+    <br><br>
 % endif
 
 % for cur_result in results:
@@ -214,7 +213,7 @@
     else:
         cur_ep_enddate = cur_result['localtime']
 %>
-    % if 'network' == sort:
+    % if sickbeard.COMING_EPS_SORT == 'network':
         <% show_network = ('no network', cur_result['network'])[bool(cur_result['network'])] %>
         % if cur_segment != show_network:
             <div>
@@ -235,20 +234,20 @@
             % endif
         % endif
 
-    % elif 'date' == sort:
+    % elif sickbeard.COMING_EPS_SORT == 'date':
         % if cur_segment != cur_ep_airdate:
             % if cur_ep_enddate < today and cur_ep_airdate != today.date() and not missed_header:
-                <br /><h2 class="day">Missed</h2>
+                <br><h2 class="day">Missed</h2>
                 <% missed_header = True %>
             % elif cur_ep_airdate >= next_week.date() and not too_late_header:
-                <br /><h2 class="day">Later</h2>
+                <br><h2 class="day">Later</h2>
                 <% too_late_header = True %>
             % elif cur_ep_enddate >= today and cur_ep_airdate < next_week.date():
                 % if cur_ep_airdate == today.date():
-                    <br /><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}<span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
+                    <br><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}<span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
                     <% today_header = True %>
                 % else:
-                    <br /><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}</h2>
+                    <br><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()}</h2>
                 % endif
             % endif
             <% cur_segment = cur_ep_airdate %>
@@ -256,7 +255,7 @@
 
         % if cur_ep_airdate == today.date() and not today_header:
             <div>
-            <br /><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()} <span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
+            <br><h2 class="day">${datetime.date.fromordinal(cur_ep_airdate.toordinal()).strftime('%A').decode(sickbeard.SYS_ENCODING).capitalize()} <span style="font-size: 14px; vertical-align: top;">[Today]</span></h2>
             <% today_header = True %>
         % endif
 
@@ -272,7 +271,7 @@
             % endif
         % endif
 
-    % elif 'show' == sort:
+    % elif sickbeard.COMING_EPS_SORT == 'show':
         % if cur_ep_enddate < today:
             <% show_div = 'ep_listing listing-overdue listingradius' %>
         % elif cur_ep_airdate >= next_week.date():
@@ -319,7 +318,7 @@
                 <span class="title">Next Episode:</span> <span>${'S%02iE%02i' % (int(cur_result['season']), int(cur_result['episode']))} - ${cur_result['name']}</span>
 
                 <div class="clearfix">
-                    <span class="title">Airs: </span><span class="airdate">${sbdatetime.sbdatetime.sbfdatetime(cur_result['localtime']).decode(sickbeard.SYS_ENCODING)}</span>${('', '<span> on %s</span>' % str(cur_result['network']))[bool(cur_result['network'])]}
+                    <span class="title">Airs: </span><span class="airdate">${sbdatetime.sbdatetime.sbfdatetime(cur_result['localtime'])}</span>${('', '<span> on %s</span>' % cur_result['network'])[bool(cur_result['network'])]}
                 </div>
 
                 <div class="clearfix">
diff --git a/gui/slick/views/testRename.mako b/gui/slick/views/testRename.mako
index f7410d50049bb48c8330fefecf96f3d14c3c7d73..fb43c9d7739fca6e2f1b7ed003f864c79750af99 100644
--- a/gui/slick/views/testRename.mako
+++ b/gui/slick/views/testRename.mako
@@ -49,7 +49,7 @@
     </thead>
 </table>
 
-<br/>
+<br>
 <input type="submit" value="Rename Selected" class="btn btn-success"> <a href="/home/displayShow?show=${show.indexerid}" class="btn btn-danger">Cancel Rename</a>
 
 <table id="testRenameTable" class="sickbeardTable" cellspacing="1" border="0" cellpadding="0">
@@ -64,7 +64,7 @@
     <thead>
         <tr class="seasonheader" id="season-${cur_ep_obj.season}">
             <td colspan="4">
-                 <br/>
+                 <br>
                 <h2>${('Season '+str(cur_ep_obj.season), 'Specials')[int(cur_ep_obj.season) == 0]}</h2>
             </td>
         </tr>
@@ -98,6 +98,6 @@ if len(epList) > 1:
     </tbody>
 
 % endfor
-</table><br />
+</table><br>
 <input type="submit" value="Rename Selected" class="btn btn-success"> <a href="/home/displayShow?show=${show.indexerid}" class="btn btn-danger">Cancel Rename</a>
 </%block>
diff --git a/gui/slick/views/viewlogs.mako b/gui/slick/views/viewlogs.mako
index c6c809cd8efcd6c9c8450b8f9f4c3dc97c03d6fa..cda4163c94dc5250995e434adcacc004f17de30c 100644
--- a/gui/slick/views/viewlogs.mako
+++ b/gui/slick/views/viewlogs.mako
@@ -33,10 +33,10 @@ Filter log by: <select name="logFilter" id="logFilter" class="form-control form-
 Search log by:
 <input type="text" name="logSearch" placeholder="clear to reset" id="logSearch" value="${('', logSearch)[bool(logSearch)]}" class="form-control form-control-inline input-sm" />
 </div>
-<br />
+<br>
 <div class="align-left"><pre>
 ${logLines}
 </pre>
 </div>
-<br />
+<br>
 </%block>
diff --git a/lib/feedcache/__init__.py b/lib/feedcache/__init__.py
deleted file mode 100644
index 96ebc10200b439d5c053f1e90c89b89a0e62eb44..0000000000000000000000000000000000000000
--- a/lib/feedcache/__init__.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-
-
-#
-# Import local modules
-#
-from cache import Cache
-
-#
-# Module
-#
diff --git a/lib/feedcache/cache.py b/lib/feedcache/cache.py
deleted file mode 100644
index 7520d51ae18c5416c852dd1ab5ba57975f40c0ab..0000000000000000000000000000000000000000
--- a/lib/feedcache/cache.py
+++ /dev/null
@@ -1,212 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-from feedparser import feedparser
-
-import logging
-import time
-
-#
-# Import local modules
-#
-
-
-#
-# Module
-#
-
-logger = logging.getLogger('feedcache.cache')
-
-
-class Cache:
-    """A class to wrap Mark Pilgrim's Universal Feed Parser module
-    (http://www.feedparser.org) so that parameters can be used to
-    cache the feed results locally instead of fetching the feed every
-    time it is requested. Uses both etag and modified times for
-    caching.
-    """
-
-    def __init__(self, storage, timeToLiveSeconds=300, userAgent='feedcache'):
-        """
-        Arguments:
-
-          storage -- Backing store for the cache.  It should follow
-          the dictionary API, with URLs used as keys.  It should
-          persist data.
-
-          timeToLiveSeconds=300 -- The length of time content should
-          live in the cache before an update is attempted.
-
-          userAgent='feedcache' -- User agent string to be used when
-          fetching feed contents.
-
-        """
-        self.storage = storage
-        self.time_to_live = timeToLiveSeconds
-        self.user_agent = userAgent
-        return
-
-    def purge(self, olderThanSeconds):
-        """Remove cached data from the storage if the data is older than the
-        date given.  If olderThanSeconds is None, the entire cache is purged.
-        """
-        if olderThanSeconds is None:
-            logger.debug('purging the entire cache')
-            for key in self.storage.keys():
-                del self.storage[key]
-        else:
-            now = time.time()
-            # Iterate over the keys and load each item one at a time
-            # to avoid having the entire cache loaded into memory
-            # at one time.
-            for url in self.storage.keys():
-                (cached_time, cached_data) = self.storage[url]
-                age = now - cached_time
-                if age >= olderThanSeconds:
-                    logger.debug('removing %s with age %d', url, age)
-                    del self.storage[url]
-        return
-
-    def fetch(self, url, force_update=False, offline=False, request_headers=None, referrer=None, handlers=[]):
-        """Return the feed at url.
-
-        url - The URL of the feed.
-
-        force_update=False - When True, update the cache whether the
-                                           current contents have
-                                           exceeded their time-to-live
-                                           or not.
-
-        offline=False - When True, only return data from the local
-                                 cache and never access the remote
-                                 URL.
-
-        request_headers=None - Add addition request headers to request
-
-        referrer=None - Added a referrer to request
-
-        handlers=None - Urllib2 handlers
-
-        If there is data for that feed in the cache already, check
-        the expiration date before accessing the server.  If the
-        cached data has not expired, return it without accessing the
-        server.
-
-        In cases where the server is accessed, check for updates
-        before deciding what to return.  If the server reports a
-        status of 304, the previously cached content is returned.
-
-        The cache is only updated if the server returns a status of
-        200, to avoid holding redirected data in the cache.
-        """
-        logger.debug('url="%s"' % url)
-
-        # Convert the URL to a value we can use
-        # as a key for the storage backend.
-        key = url
-        if isinstance(key, unicode):
-            key = key.encode('utf-8')
-
-        modified = None
-        etag = None
-        now = time.time()
-
-        cached_time, cached_content = self.storage.get(key, (None, None))
-
-        # Offline mode support (no networked requests)
-        # so return whatever we found in the storage.
-        # If there is nothing in the storage, we'll be returning None.
-        if offline:
-            logger.debug('offline mode')
-            return cached_content
-
-        # Does the storage contain a version of the data
-        # which is older than the time-to-live?
-        logger.debug('cache modified time: %s' % str(cached_time))
-        if cached_time is not None and not force_update:
-            if self.time_to_live:
-                age = now - cached_time
-                if age <= self.time_to_live:
-                    logger.debug('cache contents still valid')
-                    return cached_content
-                else:
-                    logger.debug('cache contents older than TTL')
-            else:
-                logger.debug('no TTL value')
-
-            # The cache is out of date, but we have
-            # something.  Try to use the etag and modified_time
-            # values from the cached content.
-            etag = cached_content.get('etag')
-            modified = cached_content.get('modified')
-            logger.debug('cached etag=%s' % etag)
-            logger.debug('cached modified=%s' % str(modified))
-        else:
-            logger.debug('nothing in the cache, or forcing update')
-
-        # We know we need to fetch, so go ahead and do it.
-        logger.debug('fetching...')
-        parsed_result = feedparser.parse(url,
-                                         agent=self.user_agent,
-                                         modified=modified,
-                                         etag=etag,
-                                         referrer=referrer,
-                                         request_headers=request_headers,
-                                         handlers = handlers)
-
-        status = parsed_result.get('status', None)
-        logger.debug('HTTP status=%s' % status)
-        if status == 304:
-            # No new data, based on the etag or modified values.
-            # We need to update the modified time in the
-            # storage, though, so we know that what we have
-            # stored is up to date.
-            self.storage[key] = (now, cached_content)
-
-            # Return the data from the cache, since
-            # the parsed data will be empty.
-            parsed_result = cached_content
-        elif status == 200:
-            # There is new content, so store it unless there was an error.
-            error = parsed_result.get('bozo_exception')
-            if not error:
-                logger.debug('Updating stored data for %s' % url)
-                self.storage[key] = (now, parsed_result)
-            else:
-                logger.warning('Not storing data with exception: %s',
-                               error)
-        else:
-            logger.warning('Not updating cache with HTTP status %s', status)
-
-        return parsed_result
diff --git a/lib/feedcache/cachestoragelock.py b/lib/feedcache/cachestoragelock.py
deleted file mode 100644
index 05babde6443cd227b82c9e301d4d6905d35a7b15..0000000000000000000000000000000000000000
--- a/lib/feedcache/cachestoragelock.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-from __future__ import with_statement
-
-"""Lock wrapper for cache storage which do not permit multi-threaded access.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import threading
-
-#
-# Import local modules
-#
-
-
-#
-# Module
-#
-
-class CacheStorageLock:
-    """Lock wrapper for cache storage which do not permit multi-threaded access.
-    """
-
-    def __init__(self, shelf):
-        self.lock = threading.Lock()
-        self.shelf = shelf
-        return
-
-    def __getitem__(self, key):
-        with self.lock:
-            return self.shelf[key]
-
-    def get(self, key, default=None):
-        with self.lock:
-            try:
-                return self.shelf[key]
-            except KeyError:
-                return default
-
-    def __setitem__(self, key, value):
-        with self.lock:
-            self.shelf[key] = value
diff --git a/lib/feedcache/example.py b/lib/feedcache/example.py
deleted file mode 100644
index 4df7ab68b65ad46765bf74f00daf3caedb91e40f..0000000000000000000000000000000000000000
--- a/lib/feedcache/example.py
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Example use of feedcache.Cache.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import sys
-import shelve
-
-#
-# Import local modules
-#
-import cache
-
-#
-# Module
-#
-
-def main(urls=[]):
-    print 'Saving feed data to ./.feedcache'
-    storage = shelve.open('.feedcache')
-    try:
-        fc = cache.Cache(storage)
-        for url in urls:
-            parsed_data = fc.fetch(url)
-            print parsed_data.feed.title
-            for entry in parsed_data.entries:
-                print '\t', entry.title
-    finally:
-        storage.close()
-    return
-
-if __name__ == '__main__':
-    main(sys.argv[1:])
-
diff --git a/lib/feedcache/example_threads.py b/lib/feedcache/example_threads.py
deleted file mode 100644
index 2eb56d302407059c24d7bda55f9127ed84fd79bd..0000000000000000000000000000000000000000
--- a/lib/feedcache/example_threads.py
+++ /dev/null
@@ -1,144 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Example use of feedcache.Cache combined with threads.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import Queue
-import sys
-import shove
-import threading
-
-#
-# Import local modules
-#
-import cache
-
-#
-# Module
-#
-
-MAX_THREADS=5
-OUTPUT_DIR='/tmp/feedcache_example'
-
-
-def main(urls=[]):
-
-    if not urls:
-        print 'Specify the URLs to a few RSS or Atom feeds on the command line.'
-        return
-
-    # Decide how many threads to start
-    num_threads = min(len(urls), MAX_THREADS)
-
-    # Add the URLs to a queue
-    url_queue = Queue.Queue()
-    for url in urls:
-        url_queue.put(url)
-
-    # Add poison pills to the url queue to cause
-    # the worker threads to break out of their loops
-    for i in range(num_threads):
-        url_queue.put(None)
-
-    # Track the entries in the feeds being fetched
-    entry_queue = Queue.Queue()
-
-    print 'Saving feed data to', OUTPUT_DIR
-    storage = shove.Shove('file://' + OUTPUT_DIR)
-    try:
-
-        # Start a few worker threads
-        worker_threads = []
-        for i in range(num_threads):
-            t = threading.Thread(target=fetch_urls, 
-                                 args=(storage, url_queue, entry_queue,))
-            worker_threads.append(t)
-            t.setDaemon(True)
-            t.start()
-
-        # Start a thread to print the results
-        printer_thread = threading.Thread(target=print_entries, args=(entry_queue,))
-        printer_thread.setDaemon(True)
-        printer_thread.start()
-
-        # Wait for all of the URLs to be processed
-        url_queue.join()
-
-        # Wait for the worker threads to finish
-        for t in worker_threads:
-            t.join()
-
-        # Poison the print thread and wait for it to exit
-        entry_queue.put((None,None))
-        entry_queue.join()
-        printer_thread.join()        
-        
-    finally:
-        storage.close()
-    return
-
-
-def fetch_urls(storage, input_queue, output_queue):
-    """Thread target for fetching feed data.
-    """
-    c = cache.Cache(storage)
-
-    while True:
-        next_url = input_queue.get()
-        if next_url is None: # None causes thread to exit
-            input_queue.task_done()
-            break
-
-        feed_data = c.fetch(next_url)
-        for entry in feed_data.entries:
-            output_queue.put( (feed_data.feed, entry) )
-        input_queue.task_done()
-    return
-
-
-def print_entries(input_queue):
-    """Thread target for printing the contents of the feeds.
-    """
-    while True:
-        feed, entry = input_queue.get()
-        if feed is None: # None causes thread to exist
-            input_queue.task_done()
-            break
-
-        print '%s: %s' % (feed.title, entry.title)
-        input_queue.task_done()
-    return
-
-
-if __name__ == '__main__':
-    main(sys.argv[1:])
-
diff --git a/lib/feedcache/test_cache.py b/lib/feedcache/test_cache.py
deleted file mode 100644
index 2c1ac09662d94cc684d606230ac8990dda878fbe..0000000000000000000000000000000000000000
--- a/lib/feedcache/test_cache.py
+++ /dev/null
@@ -1,323 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Unittests for feedcache.cache
-
-"""
-
-__module_id__ = "$Id$"
-
-import logging
-logging.basicConfig(level=logging.DEBUG,
-                    format='%(asctime)s %(levelname)-8s %(name)s %(message)s',
-                    )
-logger = logging.getLogger('feedcache.test_cache')
-
-#
-# Import system modules
-#
-import copy
-import time
-import unittest
-import UserDict
-
-#
-# Import local modules
-#
-import cache
-from test_server import HTTPTestBase, TestHTTPServer
-
-#
-# Module
-#
-
-
-class CacheTestBase(HTTPTestBase):
-
-    CACHE_TTL = 30
-
-    def setUp(self):
-        HTTPTestBase.setUp(self)
-
-        self.storage = self.getStorage()
-        self.cache = cache.Cache(self.storage,
-                                 timeToLiveSeconds=self.CACHE_TTL,
-                                 userAgent='feedcache.test',
-                                 )
-        return
-
-    def getStorage(self):
-        "Return a cache storage for the test."
-        return {}
-
-
-class CacheTest(CacheTestBase):
-
-    CACHE_TTL = 30
-
-    def getServer(self):
-        "These tests do not want to use the ETag or If-Modified-Since headers"
-        return TestHTTPServer(applyModifiedHeaders=False)
-
-    def testRetrieveNotInCache(self):
-        # Retrieve data not already in the cache.
-        feed_data = self.cache.fetch(self.TEST_URL)
-        self.failUnless(feed_data)
-        self.failUnlessEqual(feed_data.feed.title, 'CacheTest test data')
-        return
-
-    def testRetrieveIsInCache(self):
-        # Retrieve data which is alread in the cache,
-        # and verify that the second copy is identitical
-        # to the first.
-
-        # First fetch
-        feed_data = self.cache.fetch(self.TEST_URL)
-
-        # Second fetch
-        feed_data2 = self.cache.fetch(self.TEST_URL)
-
-        # Since it is the in-memory storage, we should have the
-        # exact same object.
-        self.failUnless(feed_data is feed_data2)
-        return
-
-    def testExpireDataInCache(self):
-        # Retrieve data which is in the cache but which
-        # has expired and verify that the second copy
-        # is different from the first.
-
-        # First fetch
-        feed_data = self.cache.fetch(self.TEST_URL)
-
-        # Change the timeout and sleep to move the clock
-        self.cache.time_to_live = 0
-        time.sleep(1)
-
-        # Second fetch
-        feed_data2 = self.cache.fetch(self.TEST_URL)
-
-        # Since we reparsed, the cache response should be different.
-        self.failIf(feed_data is feed_data2)
-        return
-
-    def testForceUpdate(self):
-        # Force cache to retrieve data which is alread in the cache,
-        # and verify that the new data is different.
-
-        # Pre-populate the storage with bad data
-        self.cache.storage[self.TEST_URL] = (time.time() + 100, self.id())
-
-        # Fetch the data
-        feed_data = self.cache.fetch(self.TEST_URL, force_update=True)
-
-        self.failIfEqual(feed_data, self.id())
-        return
-
-    def testOfflineMode(self):
-        # Retrieve data which is alread in the cache,
-        # whether it is expired or not.
-
-        # Pre-populate the storage with data
-        self.cache.storage[self.TEST_URL] = (0, self.id())
-
-        # Fetch it
-        feed_data = self.cache.fetch(self.TEST_URL, offline=True)
-
-        self.failUnlessEqual(feed_data, self.id())
-        return
-
-    def testUnicodeURL(self):
-        # Pass in a URL which is unicode
-
-        url = unicode(self.TEST_URL)
-        feed_data = self.cache.fetch(url)
-
-        storage = self.cache.storage
-        key = unicode(self.TEST_URL).encode('UTF-8')
-
-        # Verify that the storage has a key
-        self.failUnless(key in storage)
-
-        # Now pull the data from the storage directly
-        storage_timeout, storage_data = self.cache.storage.get(key)
-        self.failUnlessEqual(feed_data, storage_data)
-        return
-
-
-class SingleWriteMemoryStorage(UserDict.UserDict):
-    """Cache storage which only allows the cache value
-    for a URL to be updated one time.
-    """
-
-    def __setitem__(self, url, data):
-        if url in self.keys():
-            modified, existing = self[url]
-            # Allow the modified time to change,
-            # but not the feed content.
-            if data[1] != existing:
-                raise AssertionError('Trying to update cache for %s to %s' \
-                                         % (url, data))
-        UserDict.UserDict.__setitem__(self, url, data)
-        return
-
-
-class CacheConditionalGETTest(CacheTestBase):
-
-    CACHE_TTL = 0
-
-    def getStorage(self):
-        return SingleWriteMemoryStorage()
-
-    def testFetchOnceForEtag(self):
-        # Fetch data which has a valid ETag value, and verify
-        # that while we hit the server twice the response
-        # codes cause us to use the same data.
-
-        # First fetch populates the cache
-        response1 = self.cache.fetch(self.TEST_URL)
-        self.failUnlessEqual(response1.feed.title, 'CacheTest test data')
-
-        # Remove the modified setting from the cache so we know
-        # the next time we check the etag will be used
-        # to check for updates.  Since we are using an in-memory
-        # cache, modifying response1 updates the cache storage
-        # directly.
-        response1['modified'] = None
-
-        # This should result in a 304 status, and no data from
-        # the server.  That means the cache won't try to
-        # update the storage, so our SingleWriteMemoryStorage
-        # should not raise and we should have the same
-        # response object.
-        response2 = self.cache.fetch(self.TEST_URL)
-        self.failUnless(response1 is response2)
-
-        # Should have hit the server twice
-        self.failUnlessEqual(self.server.getNumRequests(), 2)
-        return
-
-    def testFetchOnceForModifiedTime(self):
-        # Fetch data which has a valid Last-Modified value, and verify
-        # that while we hit the server twice the response
-        # codes cause us to use the same data.
-
-        # First fetch populates the cache
-        response1 = self.cache.fetch(self.TEST_URL)
-        self.failUnlessEqual(response1.feed.title, 'CacheTest test data')
-
-        # Remove the etag setting from the cache so we know
-        # the next time we check the modified time will be used
-        # to check for updates.  Since we are using an in-memory
-        # cache, modifying response1 updates the cache storage
-        # directly.
-        response1['etag'] = None
-
-        # This should result in a 304 status, and no data from
-        # the server.  That means the cache won't try to
-        # update the storage, so our SingleWriteMemoryStorage
-        # should not raise and we should have the same
-        # response object.
-        response2 = self.cache.fetch(self.TEST_URL)
-        self.failUnless(response1 is response2)
-
-        # Should have hit the server twice
-        self.failUnlessEqual(self.server.getNumRequests(), 2)
-        return
-
-
-class CacheRedirectHandlingTest(CacheTestBase):
-
-    def _test(self, response):
-        # Set up the server to redirect requests,
-        # then verify that the cache is not updated
-        # for the original or new URL and that the
-        # redirect status is fed back to us with
-        # the fetched data.
-
-        self.server.setResponse(response, '/redirected')
-
-        response1 = self.cache.fetch(self.TEST_URL)
-
-        # The response should include the status code we set
-        self.failUnlessEqual(response1.get('status'), response)
-
-        # The response should include the new URL, too
-        self.failUnlessEqual(response1.href, self.TEST_URL + 'redirected')
-
-        # The response should not have been cached under either URL
-        self.failIf(self.TEST_URL in self.storage)
-        self.failIf(self.TEST_URL + 'redirected' in self.storage)
-        return
-
-    def test301(self):
-        self._test(301)
-
-    def test302(self):
-        self._test(302)
-
-    def test303(self):
-        self._test(303)
-
-    def test307(self):
-        self._test(307)
-
-
-class CachePurgeTest(CacheTestBase):
-
-    def testPurgeAll(self):
-        # Remove everything from the cache
-
-        self.cache.fetch(self.TEST_URL)
-        self.failUnless(self.storage.keys(),
-                        'Have no data in the cache storage')
-
-        self.cache.purge(None)
-
-        self.failIf(self.storage.keys(),
-                    'Still have data in the cache storage')
-        return
-
-    def testPurgeByAge(self):
-        # Remove old content from the cache
-
-        self.cache.fetch(self.TEST_URL)
-        self.failUnless(self.storage.keys(),
-                        'have no data in the cache storage')
-
-        time.sleep(1)
-
-        remains = (time.time(), copy.deepcopy(self.storage[self.TEST_URL][1]))
-        self.storage['http://this.should.remain/'] = remains
-
-        self.cache.purge(1)
-
-        self.failUnlessEqual(self.storage.keys(),
-                             ['http://this.should.remain/'])
-        return
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/lib/feedcache/test_cachestoragelock.py b/lib/feedcache/test_cachestoragelock.py
deleted file mode 100644
index 741a39abec3454efab5fb8b279364953050c683e..0000000000000000000000000000000000000000
--- a/lib/feedcache/test_cachestoragelock.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Tests for shelflock.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import os
-import shelve
-import tempfile
-import threading
-import unittest
-
-#
-# Import local modules
-#
-from cache import Cache
-from cachestoragelock import CacheStorageLock
-from test_server import HTTPTestBase
-
-#
-# Module
-#
-
-class CacheShelveTest(HTTPTestBase):
-
-    def setUp(self):
-        HTTPTestBase.setUp(self)
-        handle, self.shelve_filename = tempfile.mkstemp('.shelve')
-        os.close(handle) # we just want the file name, so close the open handle
-        os.unlink(self.shelve_filename) # remove the empty file
-        return
-
-    def tearDown(self):
-        try:
-            os.unlink(self.shelve_filename)
-        except AttributeError:
-            pass
-        HTTPTestBase.tearDown(self)
-        return
-
-    def test(self):
-        storage = shelve.open(self.shelve_filename)
-        locking_storage = CacheStorageLock(storage)
-        try:
-            fc = Cache(locking_storage)
-
-            # First fetch the data through the cache
-            parsed_data = fc.fetch(self.TEST_URL)
-            self.failUnlessEqual(parsed_data.feed.title, 'CacheTest test data')
-
-            # Now retrieve the same data directly from the shelf
-            modified, shelved_data = storage[self.TEST_URL]
-            
-            # The data should be the same
-            self.failUnlessEqual(parsed_data, shelved_data)
-        finally:
-            storage.close()
-        return
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/lib/feedcache/test_server.py b/lib/feedcache/test_server.py
deleted file mode 100644
index f48be105b6bb5c54680bf42522550c6d88f71517..0000000000000000000000000000000000000000
--- a/lib/feedcache/test_server.py
+++ /dev/null
@@ -1,241 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Simple HTTP server for testing the feed cache.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import BaseHTTPServer
-import logging
-import md5
-import threading
-import time
-import unittest
-import urllib
-
-#
-# Import local modules
-#
-
-
-#
-# Module
-#
-logger = logging.getLogger('feedcache.test_server')
-
-
-def make_etag(data):
-    """Given a string containing data to be returned to the client,
-    compute an ETag value for the data.
-    """
-    _md5 = md5.new()
-    _md5.update(data)
-    return _md5.hexdigest()
-
-
-class TestHTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
-    "HTTP request handler which serves the same feed data every time."
-
-    FEED_DATA = """<?xml version="1.0" encoding="utf-8"?>
-
-<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us">
-  <title>CacheTest test data</title>
-  <link href="http://localhost/feedcache/" rel="alternate"></link>
-  <link href="http://localhost/feedcache/atom/" rel="self"></link>
-  <id>http://localhost/feedcache/</id>
-  <updated>2006-10-14T11:00:36Z</updated>
-  <entry>
-    <title>single test entry</title>
-    <link href="http://www.example.com/" rel="alternate"></link>
-    <updated>2006-10-14T11:00:36Z</updated>
-    <author>
-      <name>author goes here</name>
-      <email>authoremail@example.com</email>
-    </author>
-    <id>http://www.example.com/</id>
-    <summary type="html">description goes here</summary>
-    <link length="100" href="http://www.example.com/enclosure" type="text/html" rel="enclosure">
-    </link>
-  </entry>
-</feed>"""
-
-    # The data does not change, so save the ETag and modified times
-    # as class attributes.
-    ETAG = make_etag(FEED_DATA)
-    # Calculated using email.utils.formatdate(usegmt=True)
-    MODIFIED_TIME = 'Sun, 08 Apr 2012 20:16:48 GMT'
-
-    def do_GET(self):
-        "Handle GET requests."
-        logger.debug('GET %s', self.path)
-
-        if self.path == '/shutdown':
-            # Shortcut to handle stopping the server
-            logger.debug('Stopping server')
-            self.server.stop()
-            self.send_response(200)
-
-        else:
-            # Record the request for tests that count them
-            self.server.requests.append(self.path)
-            # Process the request
-            logger.debug('pre-defined response code: %d', self.server.response)
-            handler_method_name = 'do_GET_%d' % self.server.response
-            handler_method = getattr(self, handler_method_name)
-            handler_method()
-        return
-
-    def do_GET_3xx(self):
-        "Handle redirects"
-        if self.path.endswith('/redirected'):
-            logger.debug('already redirected')
-            # We have already redirected, so return the data.
-            return self.do_GET_200()
-        new_path = self.server.new_path
-        logger.debug('redirecting to %s', new_path)
-        self.send_response(self.server.response)
-        self.send_header('Location', new_path)
-        return
-
-    do_GET_301 = do_GET_3xx
-    do_GET_302 = do_GET_3xx
-    do_GET_303 = do_GET_3xx
-    do_GET_307 = do_GET_3xx
-
-    def do_GET_200(self):
-        logger.debug('Etag: %s' % self.ETAG)
-        logger.debug('Last-Modified: %s' % self.MODIFIED_TIME)
-
-        incoming_etag = self.headers.get('If-None-Match', None)
-        logger.debug('Incoming ETag: "%s"' % incoming_etag)
-
-        incoming_modified = self.headers.get('If-Modified-Since', None)
-        logger.debug('Incoming If-Modified-Since: %s' % incoming_modified)
-
-        send_data = True
-
-        # Does the client have the same version of the data we have?
-        if self.server.apply_modified_headers:
-            if incoming_etag == self.ETAG:
-                logger.debug('Response 304, etag')
-                self.send_response(304)
-                send_data = False
-
-            elif incoming_modified == self.MODIFIED_TIME:
-                logger.debug('Response 304, modified time')
-                self.send_response(304)
-                send_data = False
-
-        # Now optionally send the data, if the client needs it
-        if send_data:
-            logger.debug('Response 200')
-            self.send_response(200)
-
-            self.send_header('Content-Type', 'application/atom+xml')
-
-            logger.debug('Outgoing Etag: %s' % self.ETAG)
-            self.send_header('ETag', self.ETAG)
-
-            logger.debug('Outgoing modified time: %s' % self.MODIFIED_TIME)
-            self.send_header('Last-Modified', self.MODIFIED_TIME)
-
-            self.end_headers()
-
-            logger.debug('Sending data')
-            self.wfile.write(self.FEED_DATA)
-        return
-
-
-class TestHTTPServer(BaseHTTPServer.HTTPServer):
-    """HTTP Server which counts the number of requests made
-    and can stop based on client instructions.
-    """
-
-    def __init__(self, applyModifiedHeaders=True, handler=TestHTTPHandler):
-        self.apply_modified_headers = applyModifiedHeaders
-        self.keep_serving = True
-        self.requests = []
-        self.setResponse(200)
-        BaseHTTPServer.HTTPServer.__init__(self, ('', 9999), handler)
-        return
-
-    def setResponse(self, newResponse, newPath=None):
-        """Sets the response code to use for future requests, and a new
-        path to be used as a redirect target, if necessary.
-        """
-        self.response = newResponse
-        self.new_path = newPath
-        return
-
-    def getNumRequests(self):
-        "Return the number of requests which have been made on the server."
-        return len(self.requests)
-
-    def stop(self):
-        "Stop serving requests, after the next request."
-        self.keep_serving = False
-        return
-
-    def serve_forever(self):
-        "Main loop for server"
-        while self.keep_serving:
-            self.handle_request()
-        logger.debug('exiting')
-        return
-
-
-class HTTPTestBase(unittest.TestCase):
-    "Base class for tests that use a TestHTTPServer"
-
-    TEST_URL = 'http://localhost:9999/'
-
-    CACHE_TTL = 0
-
-    def setUp(self):
-        self.server = self.getServer()
-        self.server_thread = threading.Thread(target=self.server.serve_forever)
-        # set daemon flag so the tests don't hang if cleanup fails
-        self.server_thread.setDaemon(True)
-        self.server_thread.start()
-        return
-
-    def getServer(self):
-        "Return a web server for the test."
-        s = TestHTTPServer()
-        s.setResponse(200)
-        return s
-
-    def tearDown(self):
-        # Stop the server thread
-        urllib.urlretrieve(self.TEST_URL + 'shutdown')
-        time.sleep(1)
-        self.server.server_close()
-        self.server_thread.join()
-        return
diff --git a/lib/feedcache/test_shovefilesystem.py b/lib/feedcache/test_shovefilesystem.py
deleted file mode 100644
index 1a48deada8914f762c8f7aae6aafe937f19fa599..0000000000000000000000000000000000000000
--- a/lib/feedcache/test_shovefilesystem.py
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2007 Doug Hellmann.
-#
-#
-#                         All Rights Reserved
-#
-# Permission to use, copy, modify, and distribute this software and
-# its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of Doug
-# Hellmann not be used in advertising or publicity pertaining to
-# distribution of the software without specific, written prior
-# permission.
-#
-# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
-# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
-# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-
-"""Tests with shove filesystem storage.
-
-"""
-
-__module_id__ = "$Id$"
-
-#
-# Import system modules
-#
-import os
-import shove
-import tempfile
-import threading
-import unittest
-
-#
-# Import local modules
-#
-from cache import Cache
-from test_server import HTTPTestBase
-
-#
-# Module
-#
-
-class CacheShoveTest(HTTPTestBase):
-
-    def setUp(self):
-        HTTPTestBase.setUp(self)
-        self.shove_dirname = tempfile.mkdtemp('shove')
-        return
-
-    def tearDown(self):
-        try:
-            os.system('rm -rf %s' % self.storage_dirname)
-        except AttributeError:
-            pass
-        HTTPTestBase.tearDown(self)
-        return
-
-    def test(self):
-        # First fetch the data through the cache
-        storage = shove.Shove('file://' + self.shove_dirname)
-        try:
-            fc = Cache(storage)
-            parsed_data = fc.fetch(self.TEST_URL)
-            self.failUnlessEqual(parsed_data.feed.title, 'CacheTest test data')
-        finally:
-            storage.close()
-
-        # Now retrieve the same data directly from the shelf
-        storage = shove.Shove('file://' + self.shove_dirname)
-        try:
-            modified, shelved_data = storage[self.TEST_URL]
-        finally:
-            storage.close()
-            
-        # The data should be the same
-        self.failUnlessEqual(parsed_data, shelved_data)
-        return
-
-
-if __name__ == '__main__':
-    unittest.main()
diff --git a/lib/feedparser/__init__.py b/lib/feedparser/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a52b39a2b8406d61e39e3fd2a2a5867962cc2a10 100644
--- a/lib/feedparser/__init__.py
+++ b/lib/feedparser/__init__.py
@@ -0,0 +1,44 @@
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE."""
+
+from __future__ import absolute_import, unicode_literals
+
+__author__ = 'Kurt McKee <contactme@kurtmckee.org>'
+__license__ = 'BSD 2-clause'
+__version__ = '5.2.1'
+
+# HTTP "User-Agent" header to send to servers when downloading feeds.
+# If you are embedding feedparser in a larger application, you should
+# change this to your application name and URL.
+USER_AGENT = "feedparser/%s +https://github.com/kurtmckee/feedparser/" % __version__
+
+from . import api
+from .api import parse
+from .datetimes import registerDateHandler
+from .exceptions import *
+
+api.USER_AGENT = USER_AGENT
diff --git a/lib/feedparser/api.py b/lib/feedparser/api.py
new file mode 100644
index 0000000000000000000000000000000000000000..812880c388844f78058ef30a10cb204e4a20bbd6
--- /dev/null
+++ b/lib/feedparser/api.py
@@ -0,0 +1,247 @@
+# The public API for feedparser
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import xml.sax
+
+try:
+    from io import BytesIO as _StringIO
+except ImportError:
+    try:
+        from cStringIO import StringIO as _StringIO
+    except ImportError:
+        from StringIO import StringIO as _StringIO
+
+try:
+    import urllib.parse
+except ImportError:
+    from urlparse import urlparse
+
+    class urllib(object):
+        class parse(object):
+            urlparse = staticmethod(urlparse)
+
+from .datetimes import registerDateHandler, _parse_date
+from .encodings import convert_to_utf8
+from .exceptions import *
+from .html import _BaseHTMLProcessor
+from . import http
+from . import mixin
+from .mixin import _FeedParserMixin
+from .parsers.loose import _LooseFeedParser
+from .parsers.strict import _StrictFeedParser
+from .sanitizer import replace_doctype
+from .sgml import *
+from .urls import _convert_to_idn, _makeSafeAbsoluteURI
+from .util import FeedParserDict
+
+bytes_ = type(b'')
+unicode_ = type('')
+try:
+    unichr
+    basestring
+except NameError:
+    unichr = chr
+    basestring = str
+
+# List of preferred XML parsers, by SAX driver name.  These will be tried first,
+# but if they're not installed, Python will keep searching through its own list
+# of pre-installed parsers until it finds one that supports everything we need.
+PREFERRED_XML_PARSERS = ["drv_libxml2"]
+
+# If you want feedparser to automatically resolve all relative URIs, set this
+# to 1.
+RESOLVE_RELATIVE_URIS = 1
+
+# If you want feedparser to automatically sanitize all potentially unsafe
+# HTML content, set this to 1.
+SANITIZE_HTML = 1
+
+_XML_AVAILABLE = True
+mixin.RESOLVE_RELATIVE_URIS = RESOLVE_RELATIVE_URIS
+mixin.SANITIZE_HTML = SANITIZE_HTML
+
+SUPPORTED_VERSIONS = {
+    '': 'unknown',
+    'rss090': 'RSS 0.90',
+    'rss091n': 'RSS 0.91 (Netscape)',
+    'rss091u': 'RSS 0.91 (Userland)',
+    'rss092': 'RSS 0.92',
+    'rss093': 'RSS 0.93',
+    'rss094': 'RSS 0.94',
+    'rss20': 'RSS 2.0',
+    'rss10': 'RSS 1.0',
+    'rss': 'RSS (unknown version)',
+    'atom01': 'Atom 0.1',
+    'atom02': 'Atom 0.2',
+    'atom03': 'Atom 0.3',
+    'atom10': 'Atom 1.0',
+    'atom': 'Atom (unknown version)',
+    'cdf': 'CDF',
+}
+
+def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result):
+    """URL, filename, or string --> stream
+
+    This function lets you define parsers that take any input source
+    (URL, pathname to local or network file, or actual data as a string)
+    and deal with it in a uniform manner.  Returned object is guaranteed
+    to have all the basic stdio read methods (read, readline, readlines).
+    Just .close() the object when you're done with it.
+
+    If the etag argument is supplied, it will be used as the value of an
+    If-None-Match request header.
+
+    If the modified argument is supplied, it can be a tuple of 9 integers
+    (as returned by gmtime() in the standard Python time module) or a date
+    string in any format supported by feedparser. Regardless, it MUST
+    be in GMT (Greenwich Mean Time). It will be reformatted into an
+    RFC 1123-compliant date and used as the value of an If-Modified-Since
+    request header.
+
+    If the agent argument is supplied, it will be used as the value of a
+    User-Agent request header.
+
+    If the referrer argument is supplied, it will be used as the value of a
+    Referer[sic] request header.
+
+    If handlers is supplied, it is a list of handlers used to build a
+    urllib2 opener.
+
+    if request_headers is supplied it is a dictionary of HTTP request headers
+    that will override the values generated by FeedParser.
+
+    :return: A :class:`StringIO.StringIO` or :class:`io.BytesIO`.
+    """
+
+    if hasattr(url_file_stream_or_string, 'read'):
+        return url_file_stream_or_string.read()
+
+    if isinstance(url_file_stream_or_string, basestring) \
+       and urllib.parse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp', 'file', 'feed'):
+        return http.get(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)
+
+    # try to open with native open function (if url_file_stream_or_string is a filename)
+    try:
+        with open(url_file_stream_or_string, 'rb') as f:
+            data = f.read()
+    except (IOError, UnicodeEncodeError, TypeError):
+        # if url_file_stream_or_string is a unicode object that
+        # cannot be converted to the encoding returned by
+        # sys.getfilesystemencoding(), a UnicodeEncodeError
+        # will be thrown
+        # If url_file_stream_or_string is a string that contains NULL
+        # (such as an XML document encoded in UTF-32), TypeError will
+        # be thrown.
+        pass
+    else:
+        return data
+
+    # treat url_file_stream_or_string as string
+    if not isinstance(url_file_stream_or_string, bytes_):
+        return url_file_stream_or_string.encode('utf-8')
+    return url_file_stream_or_string
+
+LooseFeedParser = type(str('LooseFeedParser'), (
+    _LooseFeedParser, _FeedParserMixin, _BaseHTMLProcessor, object
+), {})
+StrictFeedParser = type(str('StrictFeedParser'), (
+    _StrictFeedParser, _FeedParserMixin, xml.sax.handler.ContentHandler, object
+), {})
+
+def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=None, request_headers=None, response_headers=None):
+    '''Parse a feed from a URL, file, stream, or string.
+
+    request_headers, if given, is a dict from http header name to value to add
+    to the request; this overrides internally generated values.
+
+    :return: A :class:`FeedParserDict`.
+    '''
+
+    if not agent:
+        agent = USER_AGENT
+    result = FeedParserDict(
+        bozo = False,
+        entries = [],
+        feed = FeedParserDict(),
+        headers = {},
+    )
+
+    data = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)
+
+    if not data:
+        return result
+
+    # overwrite existing headers using response_headers
+    result['headers'].update(response_headers or {})
+
+    data = convert_to_utf8(result['headers'], data, result)
+    use_strict_parser = result['encoding'] and True or False
+
+    result['version'], data, entities = replace_doctype(data)
+
+    # Ensure that baseuri is an absolute URI using an acceptable URI scheme.
+    contentloc = result['headers'].get('content-location', '')
+    href = result.get('href', '')
+    baseuri = _makeSafeAbsoluteURI(href, contentloc) or _makeSafeAbsoluteURI(contentloc) or href
+
+    baselang = result['headers'].get('content-language', None)
+    if isinstance(baselang, bytes_) and baselang is not None:
+        baselang = baselang.decode('utf-8', 'ignore')
+
+    if not _XML_AVAILABLE:
+        use_strict_parser = 0
+    if use_strict_parser:
+        # initialize the SAX parser
+        feedparser = StrictFeedParser(baseuri, baselang, 'utf-8')
+        saxparser = xml.sax.make_parser(PREFERRED_XML_PARSERS)
+        saxparser.setFeature(xml.sax.handler.feature_namespaces, 1)
+        try:
+            # disable downloading external doctype references, if possible
+            saxparser.setFeature(xml.sax.handler.feature_external_ges, 0)
+        except xml.sax.SAXNotSupportedException:
+            pass
+        saxparser.setContentHandler(feedparser)
+        saxparser.setErrorHandler(feedparser)
+        source = xml.sax.xmlreader.InputSource()
+        source.setByteStream(_StringIO(data))
+        try:
+            saxparser.parse(source)
+        except xml.sax.SAXException as e:
+            result['bozo'] = 1
+            result['bozo_exception'] = feedparser.exc or e
+            use_strict_parser = 0
+    if not use_strict_parser and _SGML_AVAILABLE:
+        feedparser = LooseFeedParser(baseuri, baselang, 'utf-8', entities)
+        feedparser.feed(data.decode('utf-8', 'replace'))
+    result['feed'] = feedparser.feeddata
+    result['entries'] = feedparser.entries
+    result['version'] = result['version'] or feedparser.version
+    result['namespaces'] = feedparser.namespacesInUse
+    return result
diff --git a/lib/feedparser/datetimes/__init__.py b/lib/feedparser/datetimes/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..96b45e9d8197ee4d226e39a273e22b4eece26898
--- /dev/null
+++ b/lib/feedparser/datetimes/__init__.py
@@ -0,0 +1,41 @@
+from __future__ import absolute_import
+
+from .asctime import _parse_date_asctime
+from .greek import _parse_date_greek
+from .hungarian import _parse_date_hungarian
+from .iso8601 import _parse_date_iso8601
+from .korean import _parse_date_onblog, _parse_date_nate
+from .perforce import _parse_date_perforce
+from .rfc822 import _parse_date_rfc822
+from .w3dtf import _parse_date_w3dtf
+
+_date_handlers = []
+def registerDateHandler(func):
+    '''Register a date handler function (takes string, returns 9-tuple date in GMT)'''
+    _date_handlers.insert(0, func)
+
+def _parse_date(dateString):
+    '''Parses a variety of date formats into a 9-tuple in GMT'''
+    if not dateString:
+        return None
+    for handler in _date_handlers:
+        try:
+            date9tuple = handler(dateString)
+        except (KeyError, OverflowError, ValueError):
+            continue
+        if not date9tuple:
+            continue
+        if len(date9tuple) != 9:
+            continue
+        return date9tuple
+    return None
+
+registerDateHandler(_parse_date_onblog)
+registerDateHandler(_parse_date_nate)
+registerDateHandler(_parse_date_greek)
+registerDateHandler(_parse_date_hungarian)
+registerDateHandler(_parse_date_perforce)
+registerDateHandler(_parse_date_asctime)
+registerDateHandler(_parse_date_iso8601)
+registerDateHandler(_parse_date_rfc822)
+registerDateHandler(_parse_date_w3dtf)
diff --git a/lib/feedparser/datetimes/asctime.py b/lib/feedparser/datetimes/asctime.py
new file mode 100644
index 0000000000000000000000000000000000000000..54fc8cbbf88cfc9d076e1022677369a67d410141
--- /dev/null
+++ b/lib/feedparser/datetimes/asctime.py
@@ -0,0 +1,32 @@
+from __future__ import absolute_import, unicode_literals
+
+from .rfc822 import _parse_date_rfc822
+
+_months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
+           'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
+def _parse_date_asctime(dt):
+    """Parse asctime-style dates.
+
+    Converts asctime to RFC822-compatible dates and uses the RFC822 parser
+    to do the actual parsing.
+
+    Supported formats (format is standardized to the first one listed):
+
+    * {weekday name} {month name} dd hh:mm:ss {+-tz} yyyy
+    * {weekday name} {month name} dd hh:mm:ss yyyy
+    """
+
+    parts = dt.split()
+
+    # Insert a GMT timezone, if needed.
+    if len(parts) == 5:
+        parts.insert(4, '+0000')
+
+    # Exit if there are not six parts.
+    if len(parts) != 6:
+        return None
+
+    # Reassemble the parts in an RFC822-compatible order and parse them.
+    return _parse_date_rfc822(' '.join([
+        parts[0], parts[2], parts[1], parts[5], parts[3], parts[4],
+    ]))
diff --git a/lib/feedparser/datetimes/greek.py b/lib/feedparser/datetimes/greek.py
new file mode 100644
index 0000000000000000000000000000000000000000..e47d92152531b4ff5ad99bedf2d156f35c0e233f
--- /dev/null
+++ b/lib/feedparser/datetimes/greek.py
@@ -0,0 +1,56 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+from .rfc822 import _parse_date_rfc822
+
+# Unicode strings for Greek date strings
+_greek_months = \
+  { \
+   '\u0399\u03b1\u03bd': 'Jan',       # c9e1ed in iso-8859-7
+   '\u03a6\u03b5\u03b2': 'Feb',       # d6e5e2 in iso-8859-7
+   '\u039c\u03ac\u03ce': 'Mar',       # ccdcfe in iso-8859-7
+   '\u039c\u03b1\u03ce': 'Mar',       # cce1fe in iso-8859-7
+   '\u0391\u03c0\u03c1': 'Apr',       # c1f0f1 in iso-8859-7
+   '\u039c\u03ac\u03b9': 'May',       # ccdce9 in iso-8859-7
+   '\u039c\u03b1\u03ca': 'May',       # cce1fa in iso-8859-7
+   '\u039c\u03b1\u03b9': 'May',       # cce1e9 in iso-8859-7
+   '\u0399\u03bf\u03cd\u03bd': 'Jun', # c9effded in iso-8859-7
+   '\u0399\u03bf\u03bd': 'Jun',       # c9efed in iso-8859-7
+   '\u0399\u03bf\u03cd\u03bb': 'Jul', # c9effdeb in iso-8859-7
+   '\u0399\u03bf\u03bb': 'Jul',       # c9f9eb in iso-8859-7
+   '\u0391\u03cd\u03b3': 'Aug',       # c1fde3 in iso-8859-7
+   '\u0391\u03c5\u03b3': 'Aug',       # c1f5e3 in iso-8859-7
+   '\u03a3\u03b5\u03c0': 'Sep',       # d3e5f0 in iso-8859-7
+   '\u039f\u03ba\u03c4': 'Oct',       # cfeaf4 in iso-8859-7
+   '\u039d\u03bf\u03ad': 'Nov',       # cdefdd in iso-8859-7
+   '\u039d\u03bf\u03b5': 'Nov',       # cdefe5 in iso-8859-7
+   '\u0394\u03b5\u03ba': 'Dec',       # c4e5ea in iso-8859-7
+  }
+
+_greek_wdays = \
+  { \
+   '\u039a\u03c5\u03c1': 'Sun', # caf5f1 in iso-8859-7
+   '\u0394\u03b5\u03c5': 'Mon', # c4e5f5 in iso-8859-7
+   '\u03a4\u03c1\u03b9': 'Tue', # d4f1e9 in iso-8859-7
+   '\u03a4\u03b5\u03c4': 'Wed', # d4e5f4 in iso-8859-7
+   '\u03a0\u03b5\u03bc': 'Thu', # d0e5ec in iso-8859-7
+   '\u03a0\u03b1\u03c1': 'Fri', # d0e1f1 in iso-8859-7
+   '\u03a3\u03b1\u03b2': 'Sat', # d3e1e2 in iso-8859-7
+  }
+
+_greek_date_format_re = \
+    re.compile('([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)')
+
+def _parse_date_greek(dateString):
+    '''Parse a string according to a Greek 8-bit date format.'''
+    m = _greek_date_format_re.match(dateString)
+    if not m:
+        return
+    wday = _greek_wdays[m.group(1)]
+    month = _greek_months[m.group(3)]
+    rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \
+                 {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\
+                  'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\
+                  'zonediff': m.group(8)}
+    return _parse_date_rfc822(rfc822date)
diff --git a/lib/feedparser/datetimes/hungarian.py b/lib/feedparser/datetimes/hungarian.py
new file mode 100644
index 0000000000000000000000000000000000000000..11c56b4518561f4d5ce52bc8c3dddd7d845154c8
--- /dev/null
+++ b/lib/feedparser/datetimes/hungarian.py
@@ -0,0 +1,43 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+from .w3dtf import _parse_date_w3dtf
+
+# Unicode strings for Hungarian date strings
+_hungarian_months = \
+  { \
+    'janu\u00e1r':   '01',  # e1 in iso-8859-2
+    'febru\u00e1ri': '02',  # e1 in iso-8859-2
+    'm\u00e1rcius':  '03',  # e1 in iso-8859-2
+    '\u00e1prilis':  '04',  # e1 in iso-8859-2
+    'm\u00e1ujus':   '05',  # e1 in iso-8859-2
+    'j\u00fanius':   '06',  # fa in iso-8859-2
+    'j\u00falius':   '07',  # fa in iso-8859-2
+    'augusztus':     '08',
+    'szeptember':    '09',
+    'okt\u00f3ber':  '10',  # f3 in iso-8859-2
+    'november':      '11',
+    'december':      '12',
+  }
+
+_hungarian_date_format_re = \
+  re.compile('(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))')
+
+def _parse_date_hungarian(dateString):
+    '''Parse a string according to a Hungarian 8-bit date format.'''
+    m = _hungarian_date_format_re.match(dateString)
+    if not m or m.group(2) not in _hungarian_months:
+        return None
+    month = _hungarian_months[m.group(2)]
+    day = m.group(3)
+    if len(day) == 1:
+        day = '0' + day
+    hour = m.group(4)
+    if len(hour) == 1:
+        hour = '0' + hour
+    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \
+                {'year': m.group(1), 'month': month, 'day': day,\
+                 'hour': hour, 'minute': m.group(5),\
+                 'zonediff': m.group(6)}
+    return _parse_date_w3dtf(w3dtfdate)
diff --git a/lib/feedparser/datetimes/iso8601.py b/lib/feedparser/datetimes/iso8601.py
new file mode 100644
index 0000000000000000000000000000000000000000..eb36e2db96e835fdbff1765e87da91697145023b
--- /dev/null
+++ b/lib/feedparser/datetimes/iso8601.py
@@ -0,0 +1,120 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+import time
+
+# ISO-8601 date parsing routines written by Fazal Majid.
+# The ISO 8601 standard is very convoluted and irregular - a full ISO 8601
+# parser is beyond the scope of feedparser and would be a worthwhile addition
+# to the Python library.
+# A single regular expression cannot parse ISO 8601 date formats into groups
+# as the standard is highly irregular (for instance is 030104 2003-01-04 or
+# 0301-04-01), so we use templates instead.
+# Please note the order in templates is significant because we need a
+# greedy match.
+_iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-0MM?-?DD', 'YYYY-MM', 'YYYY-?OOO',
+                'YY-?MM-?DD', 'YY-?OOO', 'YYYY',
+                '-YY-?MM', '-OOO', '-YY',
+                '--MM-?DD', '--MM',
+                '---DD',
+                'CC', '']
+_iso8601_re = [
+    tmpl.replace(
+    'YYYY', r'(?P<year>\d{4})').replace(
+    'YY', r'(?P<year>\d\d)').replace(
+    'MM', r'(?P<month>[01]\d)').replace(
+    'DD', r'(?P<day>[0123]\d)').replace(
+    'OOO', r'(?P<ordinal>[0123]\d\d)').replace(
+    'CC', r'(?P<century>\d\d$)')
+    + r'(T?(?P<hour>\d{2}):(?P<minute>\d{2})'
+    + r'(:(?P<second>\d{2}))?'
+    + r'(\.(?P<fracsecond>\d+))?'
+    + r'(?P<tz>[+-](?P<tzhour>\d{2})(:(?P<tzmin>\d{2}))?|Z)?)?'
+    for tmpl in _iso8601_tmpl]
+try:
+    del tmpl
+except NameError:
+    pass
+_iso8601_matches = [re.compile(regex).match for regex in _iso8601_re]
+try:
+    del regex
+except NameError:
+    pass
+
+def _parse_date_iso8601(dateString):
+    '''Parse a variety of ISO-8601-compatible formats like 20040105'''
+    m = None
+    for _iso8601_match in _iso8601_matches:
+        m = _iso8601_match(dateString)
+        if m:
+            break
+    if not m:
+        return
+    if m.span() == (0, 0):
+        return
+    params = m.groupdict()
+    ordinal = params.get('ordinal', 0)
+    if ordinal:
+        ordinal = int(ordinal)
+    else:
+        ordinal = 0
+    year = params.get('year', '--')
+    if not year or year == '--':
+        year = time.gmtime()[0]
+    elif len(year) == 2:
+        # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993
+        year = 100 * int(time.gmtime()[0] / 100) + int(year)
+    else:
+        year = int(year)
+    month = params.get('month', '-')
+    if not month or month == '-':
+        # ordinals are NOT normalized by mktime, we simulate them
+        # by setting month=1, day=ordinal
+        if ordinal:
+            month = 1
+        else:
+            month = time.gmtime()[1]
+    month = int(month)
+    day = params.get('day', 0)
+    if not day:
+        # see above
+        if ordinal:
+            day = ordinal
+        elif params.get('century', 0) or \
+                 params.get('year', 0) or params.get('month', 0):
+            day = 1
+        else:
+            day = time.gmtime()[2]
+    else:
+        day = int(day)
+    # special case of the century - is the first year of the 21st century
+    # 2000 or 2001 ? The debate goes on...
+    if 'century' in params:
+        year = (int(params['century']) - 1) * 100 + 1
+    # in ISO 8601 most fields are optional
+    for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']:
+        if not params.get(field, None):
+            params[field] = 0
+    hour = int(params.get('hour', 0))
+    minute = int(params.get('minute', 0))
+    second = int(float(params.get('second', 0)))
+    # weekday is normalized by mktime(), we can ignore it
+    weekday = 0
+    daylight_savings_flag = -1
+    tm = [year, month, day, hour, minute, second, weekday,
+          ordinal, daylight_savings_flag]
+    # ISO 8601 time zone adjustments
+    tz = params.get('tz')
+    if tz and tz != 'Z':
+        if tz[0] == '-':
+            tm[3] += int(params.get('tzhour', 0))
+            tm[4] += int(params.get('tzmin', 0))
+        elif tz[0] == '+':
+            tm[3] -= int(params.get('tzhour', 0))
+            tm[4] -= int(params.get('tzmin', 0))
+        else:
+            return None
+    # Python's time.mktime() is a wrapper around the ANSI C mktime(3c)
+    # which is guaranteed to normalize d/m/y/h/m/s.
+    # Many implementations have bugs, but we'll pretend they don't.
+    return time.localtime(time.mktime(tuple(tm)))
diff --git a/lib/feedparser/datetimes/korean.py b/lib/feedparser/datetimes/korean.py
new file mode 100644
index 0000000000000000000000000000000000000000..7e6e0910e2aa15cb9286a448f83a6b2c1105e618
--- /dev/null
+++ b/lib/feedparser/datetimes/korean.py
@@ -0,0 +1,47 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+from .w3dtf import _parse_date_w3dtf
+
+# 8-bit date handling routines written by ytrewq1.
+_korean_year  = '\ub144' # b3e2 in euc-kr
+_korean_month = '\uc6d4' # bff9 in euc-kr
+_korean_day   = '\uc77c' # c0cf in euc-kr
+_korean_am    = '\uc624\uc804' # bfc0 c0fc in euc-kr
+_korean_pm    = '\uc624\ud6c4' # bfc0 c8c4 in euc-kr
+
+_korean_onblog_date_re = \
+    re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \
+               (_korean_year, _korean_month, _korean_day))
+_korean_nate_date_re = \
+    re.compile('(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \
+               (_korean_am, _korean_pm))
+def _parse_date_onblog(dateString):
+    '''Parse a string according to the OnBlog 8-bit date format'''
+    m = _korean_onblog_date_re.match(dateString)
+    if not m:
+        return
+    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \
+                {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\
+                 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\
+                 'zonediff': '+09:00'}
+    return _parse_date_w3dtf(w3dtfdate)
+
+def _parse_date_nate(dateString):
+    '''Parse a string according to the Nate 8-bit date format'''
+    m = _korean_nate_date_re.match(dateString)
+    if not m:
+        return
+    hour = int(m.group(5))
+    ampm = m.group(4)
+    if (ampm == _korean_pm):
+        hour += 12
+    hour = str(hour)
+    if len(hour) == 1:
+        hour = '0' + hour
+    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \
+                {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\
+                 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\
+                 'zonediff': '+09:00'}
+    return _parse_date_w3dtf(w3dtfdate)
diff --git a/lib/feedparser/datetimes/perforce.py b/lib/feedparser/datetimes/perforce.py
new file mode 100644
index 0000000000000000000000000000000000000000..f5b7d8cc53684b550d2a61af675369e96b9b355f
--- /dev/null
+++ b/lib/feedparser/datetimes/perforce.py
@@ -0,0 +1,25 @@
+from __future__ import absolute_import, unicode_literals
+
+try:
+    import rfc822
+except ImportError:
+    from email import _parseaddr as rfc822
+
+import re
+import time
+
+def _parse_date_perforce(aDateString):
+    """parse a date in yyyy/mm/dd hh:mm:ss TTT format"""
+    # Fri, 2006/09/15 08:19:53 EDT
+    _my_date_pattern = re.compile( \
+        r'(\w{,3}), (\d{,4})/(\d{,2})/(\d{2}) (\d{,2}):(\d{2}):(\d{2}) (\w{,3})')
+
+    m = _my_date_pattern.search(aDateString)
+    if m is None:
+        return None
+    dow, year, month, day, hour, minute, second, tz = m.groups()
+    months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+    dateString = "%s, %s %s %s %s:%s:%s %s" % (dow, day, months[int(month) - 1], year, hour, minute, second, tz)
+    tm = rfc822.parsedate_tz(dateString)
+    if tm:
+        return time.gmtime(rfc822.mktime_tz(tm))
diff --git a/lib/feedparser/datetimes/rfc822.py b/lib/feedparser/datetimes/rfc822.py
new file mode 100644
index 0000000000000000000000000000000000000000..0093bf654c745ddfa4f204618e69349e48490dca
--- /dev/null
+++ b/lib/feedparser/datetimes/rfc822.py
@@ -0,0 +1,109 @@
+from __future__ import absolute_import, unicode_literals
+
+import datetime
+
+timezonenames = {
+    'ut': 0, 'gmt': 0, 'z': 0,
+    'adt': -3, 'ast': -4, 'at': -4,
+    'edt': -4, 'est': -5, 'et': -5,
+    'cdt': -5, 'cst': -6, 'ct': -6,
+    'mdt': -6, 'mst': -7, 'mt': -7,
+    'pdt': -7, 'pst': -8, 'pt': -8,
+    'a': -1, 'n': 1,
+    'm': -12, 'y': 12,
+    'met': 1, 'mest': 2,
+}
+
+def _parse_date_rfc822(date):
+    """Parse RFC 822 dates and times
+    http://tools.ietf.org/html/rfc822#section-5
+
+    There are some formatting differences that are accounted for:
+    1. Years may be two or four digits.
+    2. The month and day can be swapped.
+    3. Additional timezone names are supported.
+    4. A default time and timezone are assumed if only a date is present.
+    """
+
+    daynames = set(['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'])
+    months = {
+        'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5, 'jun': 6,
+        'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12,
+    }
+
+    parts = date.lower().split()
+    if len(parts) < 5:
+        # Assume that the time and timezone are missing
+        parts.extend(('00:00:00', '0000'))
+    # Remove the day name
+    if parts[0][:3] in daynames:
+        parts = parts[1:]
+    if len(parts) < 5:
+        # If there are still fewer than five parts, there's not enough
+        # information to interpret this
+        return None
+    try:
+        day = int(parts[0])
+    except ValueError:
+        # Check if the day and month are swapped
+        if months.get(parts[0][:3]):
+            try:
+                day = int(parts[1])
+            except ValueError:
+                return None
+            else:
+                parts[1] = parts[0]
+        else:
+            return None
+    month = months.get(parts[1][:3])
+    if not month:
+        return None
+    try:
+        year = int(parts[2])
+    except ValueError:
+        return None
+    # Normalize two-digit years:
+    # Anything in the 90's is interpreted as 1990 and on
+    # Anything 89 or less is interpreted as 2089 or before
+    if len(parts[2]) <= 2:
+        year += (1900, 2000)[year < 90]
+    timeparts = parts[3].split(':')
+    timeparts = timeparts + ([0] * (3 - len(timeparts)))
+    try:
+        (hour, minute, second) = map(int, timeparts)
+    except ValueError:
+        return None
+    tzhour = 0
+    tzmin = 0
+    # Strip 'Etc/' from the timezone
+    if parts[4].startswith('etc/'):
+        parts[4] = parts[4][4:]
+    # Normalize timezones that start with 'gmt':
+    # GMT-05:00 => -0500
+    # GMT => GMT
+    if parts[4].startswith('gmt'):
+        parts[4] = ''.join(parts[4][3:].split(':')) or 'gmt'
+    # Handle timezones like '-0500', '+0500', and 'EST'
+    if parts[4] and parts[4][0] in ('-', '+'):
+        try:
+            tzhour = int(parts[4][1:3])
+            tzmin = int(parts[4][3:])
+        except ValueError:
+            return None
+        if parts[4].startswith('-'):
+            tzhour = tzhour * -1
+            tzmin = tzmin * -1
+    else:
+        tzhour = timezonenames.get(parts[4], 0)
+    # Create the datetime object and timezone delta objects
+    try:
+        stamp = datetime.datetime(year, month, day, hour, minute, second)
+    except ValueError:
+        return None
+    delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour)
+    # Return the date and timestamp in a UTC 9-tuple
+    try:
+        return (stamp - delta).utctimetuple()
+    except (OverflowError, ValueError):
+        # IronPython throws ValueErrors instead of OverflowErrors
+        return None
diff --git a/lib/feedparser/datetimes/w3dtf.py b/lib/feedparser/datetimes/w3dtf.py
new file mode 100644
index 0000000000000000000000000000000000000000..02bc712e9695bf570492e59fe5380cad4e06ba40
--- /dev/null
+++ b/lib/feedparser/datetimes/w3dtf.py
@@ -0,0 +1,88 @@
+from __future__ import absolute_import, unicode_literals
+
+import datetime
+
+timezonenames = {
+    'ut': 0, 'gmt': 0, 'z': 0,
+    'adt': -3, 'ast': -4, 'at': -4,
+    'edt': -4, 'est': -5, 'et': -5,
+    'cdt': -5, 'cst': -6, 'ct': -6,
+    'mdt': -6, 'mst': -7, 'mt': -7,
+    'pdt': -7, 'pst': -8, 'pt': -8,
+    'a': -1, 'n': 1,
+    'm': -12, 'y': 12,
+}
+# W3 date and time format parser
+# http://www.w3.org/TR/NOTE-datetime
+# Also supports MSSQL-style datetimes as defined at:
+# http://msdn.microsoft.com/en-us/library/ms186724.aspx
+# (basically, allow a space as a date/time/timezone separator)
+def _parse_date_w3dtf(datestr):
+    if not datestr.strip():
+        return None
+    parts = datestr.lower().split('t')
+    if len(parts) == 1:
+        # This may be a date only, or may be an MSSQL-style date
+        parts = parts[0].split()
+        if len(parts) == 1:
+            # Treat this as a date only
+            parts.append('00:00:00z')
+    elif len(parts) > 2:
+        return None
+    date = parts[0].split('-', 2)
+    if not date or len(date[0]) != 4:
+        return None
+    # Ensure that `date` has 3 elements. Using '1' sets the default
+    # month to January and the default day to the 1st of the month.
+    date.extend(['1'] * (3 - len(date)))
+    try:
+        year, month, day = [int(i) for i in date]
+    except ValueError:
+        # `date` may have more than 3 elements or may contain
+        # non-integer strings.
+        return None
+    if parts[1].endswith('z'):
+        parts[1] = parts[1][:-1]
+        parts.append('z')
+    # Append the numeric timezone offset, if any, to parts.
+    # If this is an MSSQL-style date then parts[2] already contains
+    # the timezone information, so `append()` will not affect it.
+    # Add 1 to each value so that if `find()` returns -1 it will be
+    # treated as False.
+    loc = parts[1].find('-') + 1 or parts[1].find('+') + 1 or len(parts[1]) + 1
+    loc = loc - 1
+    parts.append(parts[1][loc:])
+    parts[1] = parts[1][:loc]
+    time = parts[1].split(':', 2)
+    # Ensure that time has 3 elements. Using '0' means that the
+    # minutes and seconds, if missing, will default to 0.
+    time.extend(['0'] * (3 - len(time)))
+    tzhour = 0
+    tzmin = 0
+    if parts[2][:1] in ('-', '+'):
+        try:
+            tzhour = int(parts[2][1:3])
+            tzmin = int(parts[2][4:])
+        except ValueError:
+            return None
+        if parts[2].startswith('-'):
+            tzhour = tzhour * -1
+            tzmin = tzmin * -1
+    else:
+        tzhour = timezonenames.get(parts[2], 0)
+    try:
+        hour, minute, second = [int(float(i)) for i in time]
+    except ValueError:
+        return None
+    # Create the datetime object and timezone delta objects
+    try:
+        stamp = datetime.datetime(year, month, day, hour, minute, second)
+    except ValueError:
+        return None
+    delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour)
+    # Return the date and timestamp in a UTC 9-tuple
+    try:
+        return (stamp - delta).utctimetuple()
+    except (OverflowError, ValueError):
+        # IronPython throws ValueErrors instead of OverflowErrors
+        return None
diff --git a/lib/feedparser/encodings.py b/lib/feedparser/encodings.py
new file mode 100644
index 0000000000000000000000000000000000000000..c4874be68bd51a6e4b9fdf1af0572d5b3785d9dd
--- /dev/null
+++ b/lib/feedparser/encodings.py
@@ -0,0 +1,279 @@
+# Character encoding routines
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import cgi
+import codecs
+import collections
+import re
+
+try:
+    import chardet
+except ImportError:
+    chardet = None
+    lazy_chardet_encoding = None
+else:
+    def lazy_chardet_encoding():
+        chardet_encoding = chardet.detect(data)['encoding']
+        if not chardet_encoding:
+            chardet_encoding = ''
+        if isinstance(chardet_encoding, bytes_):
+            chardet_encoding = chardet_encoding.encode('ascii', 'ignore')
+        return chardet_encoding
+
+from .exceptions import (
+    CharacterEncodingOverride, CharacterEncodingUnknown, NonXMLContentType,
+)
+
+bytes_ = type(b'')
+unicode_ = type('')
+
+# Each marker represents some of the characters of the opening XML
+# processing instruction ('<?xm') in the specified encoding.
+EBCDIC_MARKER = b'\x4C\x6F\xA7\x94'
+UTF16BE_MARKER = b'\x00\x3C\x00\x3F'
+UTF16LE_MARKER = b'\x3C\x00\x3F\x00'
+UTF32BE_MARKER = b'\x00\x00\x00\x3C'
+UTF32LE_MARKER = b'\x3C\x00\x00\x00'
+
+ZERO_BYTES = '\x00\x00'
+
+# Match the opening XML declaration.
+# Example: <?xml version="1.0" encoding="utf-8"?>
+RE_XML_DECLARATION = re.compile('^<\?xml[^>]*?>')
+
+# Capture the value of the XML processing instruction's encoding attribute.
+# Example: <?xml version="1.0" encoding="utf-8"?>
+RE_XML_PI_ENCODING = re.compile(b'^<\?.*encoding=[\'"](.*?)[\'"].*\?>')
+
+def convert_to_utf8(http_headers, data, result):
+    '''Detect and convert the character encoding to UTF-8.
+
+    http_headers is a dictionary
+    data is a raw string (not Unicode)'''
+
+    # This is so much trickier than it sounds, it's not even funny.
+    # According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type
+    # is application/xml, application/*+xml,
+    # application/xml-external-parsed-entity, or application/xml-dtd,
+    # the encoding given in the charset parameter of the HTTP Content-Type
+    # takes precedence over the encoding given in the XML prefix within the
+    # document, and defaults to 'utf-8' if neither are specified.  But, if
+    # the HTTP Content-Type is text/xml, text/*+xml, or
+    # text/xml-external-parsed-entity, the encoding given in the XML prefix
+    # within the document is ALWAYS IGNORED and only the encoding given in
+    # the charset parameter of the HTTP Content-Type header should be
+    # respected, and it defaults to 'us-ascii' if not specified.
+
+    # Furthermore, discussion on the atom-syntax mailing list with the
+    # author of RFC 3023 leads me to the conclusion that any document
+    # served with a Content-Type of text/* and no charset parameter
+    # must be treated as us-ascii.  (We now do this.)  And also that it
+    # must always be flagged as non-well-formed.  (We now do this too.)
+
+    # If Content-Type is unspecified (input was local file or non-HTTP source)
+    # or unrecognized (server just got it totally wrong), then go by the
+    # encoding given in the XML prefix of the document and default to
+    # 'iso-8859-1' as per the HTTP specification (RFC 2616).
+
+    # Then, assuming we didn't find a character encoding in the HTTP headers
+    # (and the HTTP Content-type allowed us to look in the body), we need
+    # to sniff the first few bytes of the XML data and try to determine
+    # whether the encoding is ASCII-compatible.  Section F of the XML
+    # specification shows the way here:
+    # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info
+
+    # If the sniffed encoding is not ASCII-compatible, we need to make it
+    # ASCII compatible so that we can sniff further into the XML declaration
+    # to find the encoding attribute, which will tell us the true encoding.
+
+    # Of course, none of this guarantees that we will be able to parse the
+    # feed in the declared character encoding (assuming it was declared
+    # correctly, which many are not).  iconv_codec can help a lot;
+    # you should definitely install it if you can.
+    # http://cjkpython.i18n.org/
+
+    bom_encoding = ''
+    xml_encoding = ''
+    rfc3023_encoding = ''
+
+    # Look at the first few bytes of the document to guess what
+    # its encoding may be. We only need to decode enough of the
+    # document that we can use an ASCII-compatible regular
+    # expression to search for an XML encoding declaration.
+    # The heuristic follows the XML specification, section F:
+    # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info
+    # Check for BOMs first.
+    if data[:4] == codecs.BOM_UTF32_BE:
+        bom_encoding = 'utf-32be'
+        data = data[4:]
+    elif data[:4] == codecs.BOM_UTF32_LE:
+        bom_encoding = 'utf-32le'
+        data = data[4:]
+    elif data[:2] == codecs.BOM_UTF16_BE and data[2:4] != ZERO_BYTES:
+        bom_encoding = 'utf-16be'
+        data = data[2:]
+    elif data[:2] == codecs.BOM_UTF16_LE and data[2:4] != ZERO_BYTES:
+        bom_encoding = 'utf-16le'
+        data = data[2:]
+    elif data[:3] == codecs.BOM_UTF8:
+        bom_encoding = 'utf-8'
+        data = data[3:]
+    # Check for the characters '<?xm' in several encodings.
+    elif data[:4] == EBCDIC_MARKER:
+        bom_encoding = 'cp037'
+    elif data[:4] == UTF16BE_MARKER:
+        bom_encoding = 'utf-16be'
+    elif data[:4] == UTF16LE_MARKER:
+        bom_encoding = 'utf-16le'
+    elif data[:4] == UTF32BE_MARKER:
+        bom_encoding = 'utf-32be'
+    elif data[:4] == UTF32LE_MARKER:
+        bom_encoding = 'utf-32le'
+
+    tempdata = data
+    try:
+        if bom_encoding:
+            tempdata = data.decode(bom_encoding).encode('utf-8')
+    except (UnicodeDecodeError, LookupError):
+        # feedparser recognizes UTF-32 encodings that aren't
+        # available in Python 2.4 and 2.5, so it's possible to
+        # encounter a LookupError during decoding.
+        xml_encoding_match = None
+    else:
+        xml_encoding_match = RE_XML_PI_ENCODING.match(tempdata)
+
+    if xml_encoding_match:
+        xml_encoding = xml_encoding_match.groups()[0].decode('utf-8').lower()
+        # Normalize the xml_encoding if necessary.
+        if bom_encoding and (xml_encoding in (
+            'u16', 'utf-16', 'utf16', 'utf_16',
+            'u32', 'utf-32', 'utf32', 'utf_32',
+            'iso-10646-ucs-2', 'iso-10646-ucs-4',
+            'csucs4', 'csunicode', 'ucs-2', 'ucs-4'
+        )):
+            xml_encoding = bom_encoding
+
+    # Find the HTTP Content-Type and, hopefully, a character
+    # encoding provided by the server. The Content-Type is used
+    # to choose the "correct" encoding among the BOM encoding,
+    # XML declaration encoding, and HTTP encoding, following the
+    # heuristic defined in RFC 3023.
+    http_content_type = http_headers.get('content-type') or ''
+    http_content_type, params = cgi.parse_header(http_content_type)
+    http_encoding = params.get('charset', '').replace("'", "")
+    if isinstance(http_encoding, bytes_):
+        http_encoding = http_encoding.decode('utf-8', 'ignore')
+
+    acceptable_content_type = 0
+    application_content_types = ('application/xml', 'application/xml-dtd',
+                                 'application/xml-external-parsed-entity')
+    text_content_types = ('text/xml', 'text/xml-external-parsed-entity')
+    if (http_content_type in application_content_types) or \
+       (http_content_type.startswith('application/') and
+        http_content_type.endswith('+xml')):
+        acceptable_content_type = 1
+        rfc3023_encoding = http_encoding or xml_encoding or 'utf-8'
+    elif (http_content_type in text_content_types) or \
+         (http_content_type.startswith('text/') and
+          http_content_type.endswith('+xml')):
+        acceptable_content_type = 1
+        rfc3023_encoding = http_encoding or 'us-ascii'
+    elif http_content_type.startswith('text/'):
+        rfc3023_encoding = http_encoding or 'us-ascii'
+    elif http_headers and 'content-type' not in http_headers:
+        rfc3023_encoding = xml_encoding or 'iso-8859-1'
+    else:
+        rfc3023_encoding = xml_encoding or 'utf-8'
+    # gb18030 is a superset of gb2312, so always replace gb2312
+    # with gb18030 for greater compatibility.
+    if rfc3023_encoding.lower() == 'gb2312':
+        rfc3023_encoding = 'gb18030'
+    if xml_encoding.lower() == 'gb2312':
+        xml_encoding = 'gb18030'
+
+    # there are four encodings to keep track of:
+    # - http_encoding is the encoding declared in the Content-Type HTTP header
+    # - xml_encoding is the encoding declared in the <?xml declaration
+    # - bom_encoding is the encoding sniffed from the first 4 bytes of the XML data
+    # - rfc3023_encoding is the actual encoding, as per RFC 3023 and a variety of other conflicting specifications
+    error = None
+
+    if http_headers and (not acceptable_content_type):
+        if 'content-type' in http_headers:
+            msg = '%s is not an XML media type' % http_headers['content-type']
+        else:
+            msg = 'no Content-type specified'
+        error = NonXMLContentType(msg)
+
+    # determine character encoding
+    known_encoding = 0
+    tried_encodings = []
+    # try: HTTP encoding, declared XML encoding, encoding sniffed from BOM
+    for proposed_encoding in (rfc3023_encoding, xml_encoding, bom_encoding,
+                              lazy_chardet_encoding, 'utf-8', 'windows-1252', 'iso-8859-2'):
+        if isinstance(proposed_encoding, collections.Callable):
+            proposed_encoding = proposed_encoding()
+        if not proposed_encoding:
+            continue
+        if proposed_encoding in tried_encodings:
+            continue
+        tried_encodings.append(proposed_encoding)
+        try:
+            data = data.decode(proposed_encoding)
+        except (UnicodeDecodeError, LookupError):
+            pass
+        else:
+            known_encoding = 1
+            # Update the encoding in the opening XML processing instruction.
+            new_declaration = '''<?xml version='1.0' encoding='utf-8'?>'''
+            if RE_XML_DECLARATION.search(data):
+                data = RE_XML_DECLARATION.sub(new_declaration, data)
+            else:
+                data = new_declaration + '\n' + data
+            data = data.encode('utf-8')
+            break
+    # if still no luck, give up
+    if not known_encoding:
+        error = CharacterEncodingUnknown(
+            'document encoding unknown, I tried ' +
+            '%s, %s, utf-8, windows-1252, and iso-8859-2 but nothing worked' %
+            (rfc3023_encoding, xml_encoding))
+        rfc3023_encoding = ''
+    elif proposed_encoding != rfc3023_encoding:
+        error = CharacterEncodingOverride(
+            'document declared as %s, but parsed as %s' %
+            (rfc3023_encoding, proposed_encoding))
+        rfc3023_encoding = proposed_encoding
+
+    result['encoding'] = rfc3023_encoding
+    if error:
+        result['bozo'] = True
+        result['bozo_exception'] = error
+    return data
diff --git a/lib/feedparser/exceptions.py b/lib/feedparser/exceptions.py
new file mode 100644
index 0000000000000000000000000000000000000000..9e57775de5b909edd5fc3ee94b707326664b5b3b
--- /dev/null
+++ b/lib/feedparser/exceptions.py
@@ -0,0 +1,52 @@
+# Exceptions used throughout feedparser
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+__all__ = [
+    'ThingsNobodyCaresAboutButMe',
+    'CharacterEncodingOverride',
+    'CharacterEncodingUnknown',
+    'NonXMLContentType',
+    'UndeclaredNamespace',
+]
+
+class ThingsNobodyCaresAboutButMe(Exception):
+    pass
+
+class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe):
+    pass
+
+class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe):
+    pass
+
+class NonXMLContentType(ThingsNobodyCaresAboutButMe):
+    pass
+
+class UndeclaredNamespace(Exception):
+    pass
diff --git a/lib/feedparser/feedparser.py b/lib/feedparser/feedparser.py
deleted file mode 100644
index ef4377fe9432dbee3f0af3bacf514c1d53995c39..0000000000000000000000000000000000000000
--- a/lib/feedparser/feedparser.py
+++ /dev/null
@@ -1,3820 +0,0 @@
-"""Universal feed parser
-
-Handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds
-
-Visit https://code.google.com/p/feedparser/ for the latest version
-Visit http://packages.python.org/feedparser/ for the latest documentation
-
-Required: Python 2.4 or later
-Recommended: iconv_codec <http://cjkpython.i18n.org/>
-"""
-
-__version__ = "5.1.3"
-__license__ = """
-Copyright (c) 2010-2013 Kurt McKee <contactme@kurtmckee.org>
-Copyright (c) 2002-2008 Mark Pilgrim
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
-  this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE."""
-__author__ = "Mark Pilgrim <http://diveintomark.org/>"
-__contributors__ = ["Jason Diamond <http://injektilo.org/>",
-                    "John Beimler <http://john.beimler.org/>",
-                    "Fazal Majid <http://www.majid.info/mylos/weblog/>",
-                    "Aaron Swartz <http://aaronsw.com/>",
-                    "Kevin Marks <http://epeus.blogspot.com/>",
-                    "Sam Ruby <http://intertwingly.net/>",
-                    "Ade Oshineye <http://blog.oshineye.com/>",
-                    "Martin Pool <http://sourcefrog.net/>",
-                    "Kurt McKee <http://kurtmckee.org/>",
-                    "Bernd Schlapsi <https://github.com/brot>",]
-
-# HTTP "User-Agent" header to send to servers when downloading feeds.
-# If you are embedding feedparser in a larger application, you should
-# change this to your application name and URL.
-USER_AGENT = "UniversalFeedParser/%s +https://code.google.com/p/feedparser/" % __version__
-
-# HTTP "Accept" header to send to servers when downloading feeds.  If you don't
-# want to send an Accept header, set this to None.
-ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1"
-
-# List of preferred XML parsers, by SAX driver name.  These will be tried first,
-# but if they're not installed, Python will keep searching through its own list
-# of pre-installed parsers until it finds one that supports everything we need.
-PREFERRED_XML_PARSERS = ["drv_libxml2"]
-
-# If you want feedparser to automatically resolve all relative URIs, set this
-# to 1.
-RESOLVE_RELATIVE_URIS = 1
-
-# If you want feedparser to automatically sanitize all potentially unsafe
-# HTML content, set this to 1.
-SANITIZE_HTML = 1
-
-# ---------- Python 3 modules (make it work if possible) ----------
-try:
-    import rfc822
-except ImportError:
-    from email import _parseaddr as rfc822
-
-try:
-    # Python 3.1 introduces bytes.maketrans and simultaneously
-    # deprecates string.maketrans; use bytes.maketrans if possible
-    _maketrans = bytes.maketrans
-except (NameError, AttributeError):
-    import string
-    _maketrans = string.maketrans
-
-# base64 support for Atom feeds that contain embedded binary data
-try:
-    import base64, binascii
-except ImportError:
-    base64 = binascii = None
-else:
-    # Python 3.1 deprecates decodestring in favor of decodebytes
-    _base64decode = getattr(base64, 'decodebytes', base64.decodestring)
-
-# _s2bytes: convert a UTF-8 str to bytes if the interpreter is Python 3
-# _l2bytes: convert a list of ints to bytes if the interpreter is Python 3
-try:
-    if bytes is str:
-        # In Python 2.5 and below, bytes doesn't exist (NameError)
-        # In Python 2.6 and above, bytes and str are the same type
-        raise NameError
-except NameError:
-    # Python 2
-    def _s2bytes(s):
-        return s
-    def _l2bytes(l):
-        return ''.join(map(chr, l))
-else:
-    # Python 3
-    def _s2bytes(s):
-        return bytes(s, 'utf8')
-    def _l2bytes(l):
-        return bytes(l)
-
-# If you want feedparser to allow all URL schemes, set this to ()
-# List culled from Python's urlparse documentation at:
-#   http://docs.python.org/library/urlparse.html
-# as well as from "URI scheme" at Wikipedia:
-#   https://secure.wikimedia.org/wikipedia/en/wiki/URI_scheme
-# Many more will likely need to be added!
-ACCEPTABLE_URI_SCHEMES = (
-    'file', 'ftp', 'gopher', 'h323', 'hdl', 'http', 'https', 'imap', 'magnet',
-    'mailto', 'mms', 'news', 'nntp', 'prospero', 'rsync', 'rtsp', 'rtspu',
-    'sftp', 'shttp', 'sip', 'sips', 'snews', 'svn', 'svn+ssh', 'telnet',
-    'wais',
-    # Additional common-but-unofficial schemes
-    'aim', 'callto', 'cvs', 'facetime', 'feed', 'git', 'gtalk', 'irc', 'ircs',
-    'irc6', 'itms', 'mms', 'msnim', 'skype', 'ssh', 'smb', 'svn', 'ymsg',
-)
-#ACCEPTABLE_URI_SCHEMES = ()
-
-# ---------- required modules (should come with any Python distribution) ----------
-import cgi
-import codecs
-import copy
-import datetime
-import itertools
-import re
-import struct
-import time
-import types
-import urllib
-import urllib2
-import urlparse
-import warnings
-
-from htmlentitydefs import name2codepoint, codepoint2name, entitydefs
-
-try:
-    from io import BytesIO as _StringIO
-except ImportError:
-    try:
-        from cStringIO import StringIO as _StringIO
-    except ImportError:
-        from StringIO import StringIO as _StringIO
-
-# ---------- optional modules (feedparser will work without these, but with reduced functionality) ----------
-
-# gzip is included with most Python distributions, but may not be available if you compiled your own
-try:
-    import gzip
-except ImportError:
-    gzip = None
-try:
-    import zlib
-except ImportError:
-    zlib = None
-
-# If a real XML parser is available, feedparser will attempt to use it.  feedparser has
-# been tested with the built-in SAX parser and libxml2.  On platforms where the
-# Python distribution does not come with an XML parser (such as Mac OS X 10.2 and some
-# versions of FreeBSD), feedparser will quietly fall back on regex-based parsing.
-try:
-    import xml.sax
-    from xml.sax.saxutils import escape as _xmlescape
-except ImportError:
-    _XML_AVAILABLE = 0
-    def _xmlescape(data,entities={}):
-        data = data.replace('&', '&amp;')
-        data = data.replace('>', '&gt;')
-        data = data.replace('<', '&lt;')
-        for char, entity in entities:
-            data = data.replace(char, entity)
-        return data
-else:
-    try:
-        xml.sax.make_parser(PREFERRED_XML_PARSERS) # test for valid parsers
-    except xml.sax.SAXReaderNotAvailable:
-        _XML_AVAILABLE = 0
-    else:
-        _XML_AVAILABLE = 1
-
-# sgmllib is not available by default in Python 3; if the end user doesn't have
-# it available then we'll lose illformed XML parsing and content santizing
-try:
-    import sgmllib
-except ImportError:
-    # This is probably Python 3, which doesn't include sgmllib anymore
-    _SGML_AVAILABLE = 0
-
-    # Mock sgmllib enough to allow subclassing later on
-    class sgmllib(object):
-        class SGMLParser(object):
-            def goahead(self, i):
-                pass
-            def parse_starttag(self, i):
-                pass
-else:
-    _SGML_AVAILABLE = 1
-
-    # sgmllib defines a number of module-level regular expressions that are
-    # insufficient for the XML parsing feedparser needs. Rather than modify
-    # the variables directly in sgmllib, they're defined here using the same
-    # names, and the compiled code objects of several sgmllib.SGMLParser
-    # methods are copied into _BaseHTMLProcessor so that they execute in
-    # feedparser's scope instead of sgmllib's scope.
-    charref = re.compile('&#(\d+|[xX][0-9a-fA-F]+);')
-    tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*')
-    attrfind = re.compile(
-        r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)[$]?(\s*=\s*'
-        r'(\'[^\']*\'|"[^"]*"|[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*))?'
-    )
-
-    # Unfortunately, these must be copied over to prevent NameError exceptions
-    entityref = sgmllib.entityref
-    incomplete = sgmllib.incomplete
-    interesting = sgmllib.interesting
-    shorttag = sgmllib.shorttag
-    shorttagopen = sgmllib.shorttagopen
-    starttagopen = sgmllib.starttagopen
-
-    class _EndBracketRegEx:
-        def __init__(self):
-            # Overriding the built-in sgmllib.endbracket regex allows the
-            # parser to find angle brackets embedded in element attributes.
-            self.endbracket = re.compile('''([^'"<>]|"[^"]*"(?=>|/|\s|\w+=)|'[^']*'(?=>|/|\s|\w+=))*(?=[<>])|.*?(?=[<>])''')
-        def search(self, target, index=0):
-            match = self.endbracket.match(target, index)
-            if match is not None:
-                # Returning a new object in the calling thread's context
-                # resolves a thread-safety.
-                return EndBracketMatch(match)
-            return None
-    class EndBracketMatch:
-        def __init__(self, match):
-            self.match = match
-        def start(self, n):
-            return self.match.end(n)
-    endbracket = _EndBracketRegEx()
-
-
-# iconv_codec provides support for more character encodings.
-# It's available from http://cjkpython.i18n.org/
-try:
-    import iconv_codec
-except ImportError:
-    pass
-
-# chardet library auto-detects character encodings
-# Download from http://chardet.feedparser.org/
-try:
-    import chardet
-except ImportError:
-    chardet = None
-
-# ---------- don't touch these ----------
-class ThingsNobodyCaresAboutButMe(Exception): pass
-class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe): pass
-class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe): pass
-class NonXMLContentType(ThingsNobodyCaresAboutButMe): pass
-class UndeclaredNamespace(Exception): pass
-
-SUPPORTED_VERSIONS = {'': u'unknown',
-                      'rss090': u'RSS 0.90',
-                      'rss091n': u'RSS 0.91 (Netscape)',
-                      'rss091u': u'RSS 0.91 (Userland)',
-                      'rss092': u'RSS 0.92',
-                      'rss093': u'RSS 0.93',
-                      'rss094': u'RSS 0.94',
-                      'rss20': u'RSS 2.0',
-                      'rss10': u'RSS 1.0',
-                      'rss': u'RSS (unknown version)',
-                      'atom01': u'Atom 0.1',
-                      'atom02': u'Atom 0.2',
-                      'atom03': u'Atom 0.3',
-                      'atom10': u'Atom 1.0',
-                      'atom': u'Atom (unknown version)',
-                      'cdf': u'CDF',
-                      }
-
-class FeedParserDict(dict):
-    keymap = {'channel': 'feed',
-              'items': 'entries',
-              'guid': 'id',
-              'date': 'updated',
-              'date_parsed': 'updated_parsed',
-              'description': ['summary', 'subtitle'],
-              'description_detail': ['summary_detail', 'subtitle_detail'],
-              'url': ['href'],
-              'modified': 'updated',
-              'modified_parsed': 'updated_parsed',
-              'issued': 'published',
-              'issued_parsed': 'published_parsed',
-              'copyright': 'rights',
-              'copyright_detail': 'rights_detail',
-              'tagline': 'subtitle',
-              'tagline_detail': 'subtitle_detail'}
-    def __getitem__(self, key):
-        if key == 'category':
-            try:
-                return dict.__getitem__(self, 'tags')[0]['term']
-            except IndexError:
-                raise KeyError, "object doesn't have key 'category'"
-        elif key == 'enclosures':
-            norel = lambda link: FeedParserDict([(name,value) for (name,value) in link.items() if name!='rel'])
-            return [norel(link) for link in dict.__getitem__(self, 'links') if link['rel']==u'enclosure']
-        elif key == 'license':
-            for link in dict.__getitem__(self, 'links'):
-                if link['rel']==u'license' and 'href' in link:
-                    return link['href']
-        elif key == 'updated':
-            # Temporarily help developers out by keeping the old
-            # broken behavior that was reported in issue 310.
-            # This fix was proposed in issue 328.
-            if not dict.__contains__(self, 'updated') and \
-                dict.__contains__(self, 'published'):
-                warnings.warn("To avoid breaking existing software while "
-                    "fixing issue 310, a temporary mapping has been created "
-                    "from `updated` to `published` if `updated` doesn't "
-                    "exist. This fallback will be removed in a future version "
-                    "of feedparser.", DeprecationWarning)
-                return dict.__getitem__(self, 'published')
-            return dict.__getitem__(self, 'updated')
-        elif key == 'updated_parsed':
-            if not dict.__contains__(self, 'updated_parsed') and \
-                dict.__contains__(self, 'published_parsed'):
-                warnings.warn("To avoid breaking existing software while "
-                    "fixing issue 310, a temporary mapping has been created "
-                    "from `updated_parsed` to `published_parsed` if "
-                    "`updated_parsed` doesn't exist. This fallback will be "
-                    "removed in a future version of feedparser.",
-                    DeprecationWarning)
-                return dict.__getitem__(self, 'published_parsed')
-            return dict.__getitem__(self, 'updated_parsed')
-        else:
-            realkey = self.keymap.get(key, key)
-            if isinstance(realkey, list):
-                for k in realkey:
-                    if dict.__contains__(self, k):
-                        return dict.__getitem__(self, k)
-            elif dict.__contains__(self, realkey):
-                return dict.__getitem__(self, realkey)
-        return dict.__getitem__(self, key)
-
-    def __contains__(self, key):
-        if key in ('updated', 'updated_parsed'):
-            # Temporarily help developers out by keeping the old
-            # broken behavior that was reported in issue 310.
-            # This fix was proposed in issue 328.
-            return dict.__contains__(self, key)
-        try:
-            self.__getitem__(key)
-        except KeyError:
-            return False
-        else:
-            return True
-
-    has_key = __contains__
-
-    def get(self, key, default=None):
-        try:
-            return self.__getitem__(key)
-        except KeyError:
-            return default
-
-    def __setitem__(self, key, value):
-        key = self.keymap.get(key, key)
-        if isinstance(key, list):
-            key = key[0]
-        return dict.__setitem__(self, key, value)
-
-    def setdefault(self, key, value):
-        if key not in self:
-            self[key] = value
-            return value
-        return self[key]
-
-    def __getattr__(self, key):
-        # __getattribute__() is called first; this will be called
-        # only if an attribute was not already found
-        try:
-            return self.__getitem__(key)
-        except KeyError:
-            raise AttributeError, "object has no attribute '%s'" % key
-
-    def __hash__(self):
-        return id(self)
-
-_cp1252 = {
-    128: unichr(8364), # euro sign
-    130: unichr(8218), # single low-9 quotation mark
-    131: unichr( 402), # latin small letter f with hook
-    132: unichr(8222), # double low-9 quotation mark
-    133: unichr(8230), # horizontal ellipsis
-    134: unichr(8224), # dagger
-    135: unichr(8225), # double dagger
-    136: unichr( 710), # modifier letter circumflex accent
-    137: unichr(8240), # per mille sign
-    138: unichr( 352), # latin capital letter s with caron
-    139: unichr(8249), # single left-pointing angle quotation mark
-    140: unichr( 338), # latin capital ligature oe
-    142: unichr( 381), # latin capital letter z with caron
-    145: unichr(8216), # left single quotation mark
-    146: unichr(8217), # right single quotation mark
-    147: unichr(8220), # left double quotation mark
-    148: unichr(8221), # right double quotation mark
-    149: unichr(8226), # bullet
-    150: unichr(8211), # en dash
-    151: unichr(8212), # em dash
-    152: unichr( 732), # small tilde
-    153: unichr(8482), # trade mark sign
-    154: unichr( 353), # latin small letter s with caron
-    155: unichr(8250), # single right-pointing angle quotation mark
-    156: unichr( 339), # latin small ligature oe
-    158: unichr( 382), # latin small letter z with caron
-    159: unichr( 376), # latin capital letter y with diaeresis
-}
-
-_urifixer = re.compile('^([A-Za-z][A-Za-z0-9+-.]*://)(/*)(.*?)')
-def _urljoin(base, uri):
-    uri = _urifixer.sub(r'\1\3', uri)
-    if not isinstance(uri, unicode):
-        uri = uri.decode('utf-8', 'ignore')
-    try:
-        uri = urlparse.urljoin(base, uri)
-    except ValueError:
-        uri = u''
-    if not isinstance(uri, unicode):
-        return uri.decode('utf-8', 'ignore')
-    return uri
-
-class _FeedParserMixin:
-    namespaces = {
-        '': '',
-        'http://backend.userland.com/rss': '',
-        'http://blogs.law.harvard.edu/tech/rss': '',
-        'http://purl.org/rss/1.0/': '',
-        'http://my.netscape.com/rdf/simple/0.9/': '',
-        'http://example.com/newformat#': '',
-        'http://example.com/necho': '',
-        'http://purl.org/echo/': '',
-        'uri/of/echo/namespace#': '',
-        'http://purl.org/pie/': '',
-        'http://purl.org/atom/ns#': '',
-        'http://www.w3.org/2005/Atom': '',
-        'http://purl.org/rss/1.0/modules/rss091#': '',
-
-        'http://webns.net/mvcb/':                                'admin',
-        'http://purl.org/rss/1.0/modules/aggregation/':          'ag',
-        'http://purl.org/rss/1.0/modules/annotate/':             'annotate',
-        'http://media.tangent.org/rss/1.0/':                     'audio',
-        'http://backend.userland.com/blogChannelModule':         'blogChannel',
-        'http://web.resource.org/cc/':                           'cc',
-        'http://backend.userland.com/creativeCommonsRssModule':  'creativeCommons',
-        'http://purl.org/rss/1.0/modules/company':               'co',
-        'http://purl.org/rss/1.0/modules/content/':              'content',
-        'http://my.theinfo.org/changed/1.0/rss/':                'cp',
-        'http://purl.org/dc/elements/1.1/':                      'dc',
-        'http://purl.org/dc/terms/':                             'dcterms',
-        'http://purl.org/rss/1.0/modules/email/':                'email',
-        'http://purl.org/rss/1.0/modules/event/':                'ev',
-        'http://rssnamespace.org/feedburner/ext/1.0':            'feedburner',
-        'http://freshmeat.net/rss/fm/':                          'fm',
-        'http://xmlns.com/foaf/0.1/':                            'foaf',
-        'http://www.w3.org/2003/01/geo/wgs84_pos#':              'geo',
-        'http://www.georss.org/georss':                          'georss',
-        'http://www.opengis.net/gml':                            'gml',
-        'http://postneo.com/icbm/':                              'icbm',
-        'http://purl.org/rss/1.0/modules/image/':                'image',
-        'http://www.itunes.com/DTDs/PodCast-1.0.dtd':            'itunes',
-        'http://example.com/DTDs/PodCast-1.0.dtd':               'itunes',
-        'http://purl.org/rss/1.0/modules/link/':                 'l',
-        'http://search.yahoo.com/mrss':                          'media',
-        # Version 1.1.2 of the Media RSS spec added the trailing slash on the namespace
-        'http://search.yahoo.com/mrss/':                         'media',
-        'http://madskills.com/public/xml/rss/module/pingback/':  'pingback',
-        'http://prismstandard.org/namespaces/1.2/basic/':        'prism',
-        'http://www.w3.org/1999/02/22-rdf-syntax-ns#':           'rdf',
-        'http://www.w3.org/2000/01/rdf-schema#':                 'rdfs',
-        'http://purl.org/rss/1.0/modules/reference/':            'ref',
-        'http://purl.org/rss/1.0/modules/richequiv/':            'reqv',
-        'http://purl.org/rss/1.0/modules/search/':               'search',
-        'http://purl.org/rss/1.0/modules/slash/':                'slash',
-        'http://schemas.xmlsoap.org/soap/envelope/':             'soap',
-        'http://purl.org/rss/1.0/modules/servicestatus/':        'ss',
-        'http://hacks.benhammersley.com/rss/streaming/':         'str',
-        'http://purl.org/rss/1.0/modules/subscription/':         'sub',
-        'http://purl.org/rss/1.0/modules/syndication/':          'sy',
-        'http://schemas.pocketsoap.com/rss/myDescModule/':       'szf',
-        'http://purl.org/rss/1.0/modules/taxonomy/':             'taxo',
-        'http://purl.org/rss/1.0/modules/threading/':            'thr',
-        'http://purl.org/rss/1.0/modules/textinput/':            'ti',
-        'http://madskills.com/public/xml/rss/module/trackback/': 'trackback',
-        'http://wellformedweb.org/commentAPI/':                  'wfw',
-        'http://purl.org/rss/1.0/modules/wiki/':                 'wiki',
-        'http://www.w3.org/1999/xhtml':                          'xhtml',
-        'http://www.w3.org/1999/xlink':                          'xlink',
-        'http://www.w3.org/XML/1998/namespace':                  'xml',
-        'http://podlove.org/simple-chapters':                    'psc',
-    }
-    _matchnamespaces = {}
-
-    can_be_relative_uri = set(['link', 'id', 'wfw_comment', 'wfw_commentrss', 'docs', 'url', 'href', 'comments', 'icon', 'logo'])
-    can_contain_relative_uris = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'])
-    can_contain_dangerous_markup = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'])
-    html_types = [u'text/html', u'application/xhtml+xml']
-
-    def __init__(self, baseuri=None, baselang=None, encoding=u'utf-8'):
-        if not self._matchnamespaces:
-            for k, v in self.namespaces.items():
-                self._matchnamespaces[k.lower()] = v
-        self.feeddata = FeedParserDict() # feed-level data
-        self.encoding = encoding # character encoding
-        self.entries = [] # list of entry-level data
-        self.version = u'' # feed type/version, see SUPPORTED_VERSIONS
-        self.namespacesInUse = {} # dictionary of namespaces defined by the feed
-
-        # the following are used internally to track state;
-        # this is really out of control and should be refactored
-        self.infeed = 0
-        self.inentry = 0
-        self.incontent = 0
-        self.intextinput = 0
-        self.inimage = 0
-        self.inauthor = 0
-        self.incontributor = 0
-        self.inpublisher = 0
-        self.insource = 0
-
-        # georss
-        self.ingeometry = 0
-
-        self.sourcedata = FeedParserDict()
-        self.contentparams = FeedParserDict()
-        self._summaryKey = None
-        self.namespacemap = {}
-        self.elementstack = []
-        self.basestack = []
-        self.langstack = []
-        self.baseuri = baseuri or u''
-        self.lang = baselang or None
-        self.svgOK = 0
-        self.title_depth = -1
-        self.depth = 0
-        # psc_chapters_flag prevents multiple psc_chapters from being
-        # captured in a single entry or item. The transition states are
-        # None -> True -> False. psc_chapter elements will only be
-        # captured while it is True.
-        self.psc_chapters_flag = None
-        if baselang:
-            self.feeddata['language'] = baselang.replace('_','-')
-
-        # A map of the following form:
-        #     {
-        #         object_that_value_is_set_on: {
-        #             property_name: depth_of_node_property_was_extracted_from,
-        #             other_property: depth_of_node_property_was_extracted_from,
-        #         },
-        #     }
-        self.property_depth_map = {}
-
-    def _normalize_attributes(self, kv):
-        k = kv[0].lower()
-        v = k in ('rel', 'type') and kv[1].lower() or kv[1]
-        # the sgml parser doesn't handle entities in attributes, nor
-        # does it pass the attribute values through as unicode, while
-        # strict xml parsers do -- account for this difference
-        if isinstance(self, _LooseFeedParser):
-            v = v.replace('&amp;', '&')
-            if not isinstance(v, unicode):
-                v = v.decode('utf-8')
-        return (k, v)
-
-    def unknown_starttag(self, tag, attrs):
-        # increment depth counter
-        self.depth += 1
-
-        # normalize attrs
-        attrs = map(self._normalize_attributes, attrs)
-
-        # track xml:base and xml:lang
-        attrsD = dict(attrs)
-        baseuri = attrsD.get('xml:base', attrsD.get('base')) or self.baseuri
-        if not isinstance(baseuri, unicode):
-            baseuri = baseuri.decode(self.encoding, 'ignore')
-        # ensure that self.baseuri is always an absolute URI that
-        # uses a whitelisted URI scheme (e.g. not `javscript:`)
-        if self.baseuri:
-            self.baseuri = _makeSafeAbsoluteURI(self.baseuri, baseuri) or self.baseuri
-        else:
-            self.baseuri = _urljoin(self.baseuri, baseuri)
-        lang = attrsD.get('xml:lang', attrsD.get('lang'))
-        if lang == '':
-            # xml:lang could be explicitly set to '', we need to capture that
-            lang = None
-        elif lang is None:
-            # if no xml:lang is specified, use parent lang
-            lang = self.lang
-        if lang:
-            if tag in ('feed', 'rss', 'rdf:RDF'):
-                self.feeddata['language'] = lang.replace('_','-')
-        self.lang = lang
-        self.basestack.append(self.baseuri)
-        self.langstack.append(lang)
-
-        # track namespaces
-        for prefix, uri in attrs:
-            if prefix.startswith('xmlns:'):
-                self.trackNamespace(prefix[6:], uri)
-            elif prefix == 'xmlns':
-                self.trackNamespace(None, uri)
-
-        # track inline content
-        if self.incontent and not self.contentparams.get('type', u'xml').endswith(u'xml'):
-            if tag in ('xhtml:div', 'div'):
-                return # typepad does this 10/2007
-            # element declared itself as escaped markup, but it isn't really
-            self.contentparams['type'] = u'application/xhtml+xml'
-        if self.incontent and self.contentparams.get('type') == u'application/xhtml+xml':
-            if tag.find(':') <> -1:
-                prefix, tag = tag.split(':', 1)
-                namespace = self.namespacesInUse.get(prefix, '')
-                if tag=='math' and namespace=='http://www.w3.org/1998/Math/MathML':
-                    attrs.append(('xmlns',namespace))
-                if tag=='svg' and namespace=='http://www.w3.org/2000/svg':
-                    attrs.append(('xmlns',namespace))
-            if tag == 'svg':
-                self.svgOK += 1
-            return self.handle_data('<%s%s>' % (tag, self.strattrs(attrs)), escape=0)
-
-        # match namespaces
-        if tag.find(':') <> -1:
-            prefix, suffix = tag.split(':', 1)
-        else:
-            prefix, suffix = '', tag
-        prefix = self.namespacemap.get(prefix, prefix)
-        if prefix:
-            prefix = prefix + '_'
-
-        # special hack for better tracking of empty textinput/image elements in illformed feeds
-        if (not prefix) and tag not in ('title', 'link', 'description', 'name'):
-            self.intextinput = 0
-        if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'):
-            self.inimage = 0
-
-        # call special handler (if defined) or default handler
-        methodname = '_start_' + prefix + suffix
-        try:
-            method = getattr(self, methodname)
-            return method(attrsD)
-        except AttributeError as e:
-            # Since there's no handler or something has gone wrong we explicitly add the element and its attributes
-            unknown_tag = prefix + suffix
-            if len(attrsD) == 0:
-                # No attributes so merge it into the encosing dictionary
-                return self.push(unknown_tag, 1)
-            else:
-                # Has attributes so create it in its own dictionary
-                context = self._getContext()
-                context[unknown_tag] = attrsD
-
-    def unknown_endtag(self, tag):
-        # match namespaces
-        if tag.find(':') <> -1:
-            prefix, suffix = tag.split(':', 1)
-        else:
-            prefix, suffix = '', tag
-        prefix = self.namespacemap.get(prefix, prefix)
-        if prefix:
-            prefix = prefix + '_'
-        if suffix == 'svg' and self.svgOK:
-            self.svgOK -= 1
-
-        # call special handler (if defined) or default handler
-        methodname = '_end_' + prefix + suffix
-        try:
-            if self.svgOK:
-                raise AttributeError()
-            method = getattr(self, methodname)
-            method()
-        except AttributeError:
-            self.pop(prefix + suffix)
-
-        # track inline content
-        if self.incontent and not self.contentparams.get('type', u'xml').endswith(u'xml'):
-            # element declared itself as escaped markup, but it isn't really
-            if tag in ('xhtml:div', 'div'):
-                return # typepad does this 10/2007
-            self.contentparams['type'] = u'application/xhtml+xml'
-        if self.incontent and self.contentparams.get('type') == u'application/xhtml+xml':
-            tag = tag.split(':')[-1]
-            self.handle_data('</%s>' % tag, escape=0)
-
-        # track xml:base and xml:lang going out of scope
-        if self.basestack:
-            self.basestack.pop()
-            if self.basestack and self.basestack[-1]:
-                self.baseuri = self.basestack[-1]
-        if self.langstack:
-            self.langstack.pop()
-            if self.langstack: # and (self.langstack[-1] is not None):
-                self.lang = self.langstack[-1]
-
-        self.depth -= 1
-
-    def handle_charref(self, ref):
-        # called for each character reference, e.g. for '&#160;', ref will be '160'
-        if not self.elementstack:
-            return
-        ref = ref.lower()
-        if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'):
-            text = '&#%s;' % ref
-        else:
-            if ref[0] == 'x':
-                c = int(ref[1:], 16)
-            else:
-                c = int(ref)
-            text = unichr(c).encode('utf-8')
-        self.elementstack[-1][2].append(text)
-
-    def handle_entityref(self, ref):
-        # called for each entity reference, e.g. for '&copy;', ref will be 'copy'
-        if not self.elementstack:
-            return
-        if ref in ('lt', 'gt', 'quot', 'amp', 'apos'):
-            text = '&%s;' % ref
-        elif ref in self.entities:
-            text = self.entities[ref]
-            if text.startswith('&#') and text.endswith(';'):
-                return self.handle_entityref(text)
-        else:
-            try:
-                name2codepoint[ref]
-            except KeyError:
-                text = '&%s;' % ref
-            else:
-                text = unichr(name2codepoint[ref]).encode('utf-8')
-        self.elementstack[-1][2].append(text)
-
-    def handle_data(self, text, escape=1):
-        # called for each block of plain text, i.e. outside of any tag and
-        # not containing any character or entity references
-        if not self.elementstack:
-            return
-        if escape and self.contentparams.get('type') == u'application/xhtml+xml':
-            text = _xmlescape(text)
-        self.elementstack[-1][2].append(text)
-
-    def handle_comment(self, text):
-        # called for each comment, e.g. <!-- insert message here -->
-        pass
-
-    def handle_pi(self, text):
-        # called for each processing instruction, e.g. <?instruction>
-        pass
-
-    def handle_decl(self, text):
-        pass
-
-    def parse_declaration(self, i):
-        # override internal declaration handler to handle CDATA blocks
-        if self.rawdata[i:i+9] == '<![CDATA[':
-            k = self.rawdata.find(']]>', i)
-            if k == -1:
-                # CDATA block began but didn't finish
-                k = len(self.rawdata)
-                return k
-            self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0)
-            return k+3
-        else:
-            k = self.rawdata.find('>', i)
-            if k >= 0:
-                return k+1
-            else:
-                # We have an incomplete CDATA block.
-                return k
-
-    def mapContentType(self, contentType):
-        contentType = contentType.lower()
-        if contentType == 'text' or contentType == 'plain':
-            contentType = u'text/plain'
-        elif contentType == 'html':
-            contentType = u'text/html'
-        elif contentType == 'xhtml':
-            contentType = u'application/xhtml+xml'
-        return contentType
-
-    def trackNamespace(self, prefix, uri):
-        loweruri = uri.lower()
-        if not self.version:
-            if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/'):
-                self.version = u'rss090'
-            elif loweruri == 'http://purl.org/rss/1.0/':
-                self.version = u'rss10'
-            elif loweruri == 'http://www.w3.org/2005/atom':
-                self.version = u'atom10'
-        if loweruri.find(u'backend.userland.com/rss') <> -1:
-            # match any backend.userland.com namespace
-            uri = u'http://backend.userland.com/rss'
-            loweruri = uri
-        if loweruri in self._matchnamespaces:
-            self.namespacemap[prefix] = self._matchnamespaces[loweruri]
-            self.namespacesInUse[self._matchnamespaces[loweruri]] = uri
-        else:
-            self.namespacesInUse[prefix or ''] = uri
-
-    def resolveURI(self, uri):
-        return _urljoin(self.baseuri or u'', uri)
-
-    def decodeEntities(self, element, data):
-        return data
-
-    def strattrs(self, attrs):
-        return ''.join([' %s="%s"' % (t[0],_xmlescape(t[1],{'"':'&quot;'})) for t in attrs])
-
-    def push(self, element, expectingText):
-        self.elementstack.append([element, expectingText, []])
-
-    def pop(self, element, stripWhitespace=1):
-        if not self.elementstack:
-            return
-        if self.elementstack[-1][0] != element:
-            return
-
-        element, expectingText, pieces = self.elementstack.pop()
-
-        if self.version == u'atom10' and self.contentparams.get('type', u'text') == u'application/xhtml+xml':
-            # remove enclosing child element, but only if it is a <div> and
-            # only if all the remaining content is nested underneath it.
-            # This means that the divs would be retained in the following:
-            #    <div>foo</div><div>bar</div>
-            while pieces and len(pieces)>1 and not pieces[-1].strip():
-                del pieces[-1]
-            while pieces and len(pieces)>1 and not pieces[0].strip():
-                del pieces[0]
-            if pieces and (pieces[0] == '<div>' or pieces[0].startswith('<div ')) and pieces[-1]=='</div>':
-                depth = 0
-                for piece in pieces[:-1]:
-                    if piece.startswith('</'):
-                        depth -= 1
-                        if depth == 0:
-                            break
-                    elif piece.startswith('<') and not piece.endswith('/>'):
-                        depth += 1
-                else:
-                    pieces = pieces[1:-1]
-
-        # Ensure each piece is a str for Python 3
-        for (i, v) in enumerate(pieces):
-            if not isinstance(v, unicode):
-                pieces[i] = v.decode('utf-8')
-
-        output = u''.join(pieces)
-        if stripWhitespace:
-            output = output.strip()
-        if not expectingText:
-            return output
-
-        # decode base64 content
-        if base64 and self.contentparams.get('base64', 0):
-            try:
-                output = _base64decode(output)
-            except binascii.Error:
-                pass
-            except binascii.Incomplete:
-                pass
-            except TypeError:
-                # In Python 3, base64 takes and outputs bytes, not str
-                # This may not be the most correct way to accomplish this
-                output = _base64decode(output.encode('utf-8')).decode('utf-8')
-
-        # resolve relative URIs
-        if (element in self.can_be_relative_uri) and output:
-            # do not resolve guid elements with isPermalink="false"
-            if not element == 'id' or self.guidislink:
-                output = self.resolveURI(output)
-
-        # decode entities within embedded markup
-        if not self.contentparams.get('base64', 0):
-            output = self.decodeEntities(element, output)
-
-        # some feed formats require consumers to guess
-        # whether the content is html or plain text
-        if not self.version.startswith(u'atom') and self.contentparams.get('type') == u'text/plain':
-            if self.lookslikehtml(output):
-                self.contentparams['type'] = u'text/html'
-
-        # remove temporary cruft from contentparams
-        try:
-            del self.contentparams['mode']
-        except KeyError:
-            pass
-        try:
-            del self.contentparams['base64']
-        except KeyError:
-            pass
-
-        is_htmlish = self.mapContentType(self.contentparams.get('type', u'text/html')) in self.html_types
-        # resolve relative URIs within embedded markup
-        if is_htmlish and RESOLVE_RELATIVE_URIS:
-            if element in self.can_contain_relative_uris:
-                output = _resolveRelativeURIs(output, self.baseuri, self.encoding, self.contentparams.get('type', u'text/html'))
-
-        # sanitize embedded markup
-        if is_htmlish and SANITIZE_HTML:
-            if element in self.can_contain_dangerous_markup:
-                output = _sanitizeHTML(output, self.encoding, self.contentparams.get('type', u'text/html'))
-
-        if self.encoding and not isinstance(output, unicode):
-            output = output.decode(self.encoding, 'ignore')
-
-        # address common error where people take data that is already
-        # utf-8, presume that it is iso-8859-1, and re-encode it.
-        if self.encoding in (u'utf-8', u'utf-8_INVALID_PYTHON_3') and isinstance(output, unicode):
-            try:
-                output = output.encode('iso-8859-1').decode('utf-8')
-            except (UnicodeEncodeError, UnicodeDecodeError):
-                pass
-
-        # map win-1252 extensions to the proper code points
-        if isinstance(output, unicode):
-            output = output.translate(_cp1252)
-
-        # categories/tags/keywords/whatever are handled in _end_category
-        if element == 'category':
-            return output
-
-        if element == 'title' and -1 < self.title_depth <= self.depth:
-            return output
-
-        # store output in appropriate place(s)
-        if self.inentry and not self.insource:
-            if element == 'content':
-                self.entries[-1].setdefault(element, [])
-                contentparams = copy.deepcopy(self.contentparams)
-                contentparams['value'] = output
-                self.entries[-1][element].append(contentparams)
-            elif element == 'link':
-                if not self.inimage:
-                    # query variables in urls in link elements are improperly
-                    # converted from `?a=1&b=2` to `?a=1&b;=2` as if they're
-                    # unhandled character references. fix this special case.
-                    output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output)
-                    self.entries[-1][element] = output
-                    if output:
-                        self.entries[-1]['links'][-1]['href'] = output
-            else:
-                if element == 'description':
-                    element = 'summary'
-                old_value_depth = self.property_depth_map.setdefault(self.entries[-1], {}).get(element)
-                if old_value_depth is None or self.depth <= old_value_depth:
-                    self.property_depth_map[self.entries[-1]][element] = self.depth
-                    self.entries[-1][element] = output
-                if self.incontent:
-                    contentparams = copy.deepcopy(self.contentparams)
-                    contentparams['value'] = output
-                    self.entries[-1][element + '_detail'] = contentparams
-        elif (self.infeed or self.insource):# and (not self.intextinput) and (not self.inimage):
-            context = self._getContext()
-            if element == 'description':
-                element = 'subtitle'
-            context[element] = output
-            if element == 'link':
-                # fix query variables; see above for the explanation
-                output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output)
-                context[element] = output
-                context['links'][-1]['href'] = output
-            elif self.incontent:
-                contentparams = copy.deepcopy(self.contentparams)
-                contentparams['value'] = output
-                context[element + '_detail'] = contentparams
-        return output
-
-    def pushContent(self, tag, attrsD, defaultContentType, expectingText):
-        self.incontent += 1
-        if self.lang:
-            self.lang=self.lang.replace('_','-')
-        self.contentparams = FeedParserDict({
-            'type': self.mapContentType(attrsD.get('type', defaultContentType)),
-            'language': self.lang,
-            'base': self.baseuri})
-        self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams)
-        self.push(tag, expectingText)
-
-    def popContent(self, tag):
-        value = self.pop(tag)
-        self.incontent -= 1
-        self.contentparams.clear()
-        return value
-
-    # a number of elements in a number of RSS variants are nominally plain
-    # text, but this is routinely ignored.  This is an attempt to detect
-    # the most common cases.  As false positives often result in silent
-    # data loss, this function errs on the conservative side.
-    @staticmethod
-    def lookslikehtml(s):
-        # must have a close tag or an entity reference to qualify
-        if not (re.search(r'</(\w+)>',s) or re.search("&#?\w+;",s)):
-            return
-
-        # all tags must be in a restricted subset of valid HTML tags
-        if filter(lambda t: t.lower() not in _HTMLSanitizer.acceptable_elements,
-            re.findall(r'</?(\w+)',s)):
-            return
-
-        # all entities must have been defined as valid HTML entities
-        if filter(lambda e: e not in entitydefs.keys(), re.findall(r'&(\w+);', s)):
-            return
-
-        return 1
-
-    def _mapToStandardPrefix(self, name):
-        colonpos = name.find(':')
-        if colonpos <> -1:
-            prefix = name[:colonpos]
-            suffix = name[colonpos+1:]
-            prefix = self.namespacemap.get(prefix, prefix)
-            name = prefix + ':' + suffix
-        return name
-
-    def _getAttribute(self, attrsD, name):
-        return attrsD.get(self._mapToStandardPrefix(name))
-
-    def _isBase64(self, attrsD, contentparams):
-        if attrsD.get('mode', '') == 'base64':
-            return 1
-        if self.contentparams['type'].startswith(u'text/'):
-            return 0
-        if self.contentparams['type'].endswith(u'+xml'):
-            return 0
-        if self.contentparams['type'].endswith(u'/xml'):
-            return 0
-        return 1
-
-    def _itsAnHrefDamnIt(self, attrsD):
-        href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None)))
-        if href:
-            try:
-                del attrsD['url']
-            except KeyError:
-                pass
-            try:
-                del attrsD['uri']
-            except KeyError:
-                pass
-            attrsD['href'] = href
-        return attrsD
-
-    def _save(self, key, value, overwrite=False):
-        context = self._getContext()
-        if overwrite:
-            context[key] = value
-        else:
-            context.setdefault(key, value)
-
-    def _start_rss(self, attrsD):
-        versionmap = {'0.91': u'rss091u',
-                      '0.92': u'rss092',
-                      '0.93': u'rss093',
-                      '0.94': u'rss094'}
-        #If we're here then this is an RSS feed.
-        #If we don't have a version or have a version that starts with something
-        #other than RSS then there's been a mistake. Correct it.
-        if not self.version or not self.version.startswith(u'rss'):
-            attr_version = attrsD.get('version', '')
-            version = versionmap.get(attr_version)
-            if version:
-                self.version = version
-            elif attr_version.startswith('2.'):
-                self.version = u'rss20'
-            else:
-                self.version = u'rss'
-
-    def _start_channel(self, attrsD):
-        self.infeed = 1
-        self._cdf_common(attrsD)
-
-    def _cdf_common(self, attrsD):
-        if 'lastmod' in attrsD:
-            self._start_modified({})
-            self.elementstack[-1][-1] = attrsD['lastmod']
-            self._end_modified()
-        if 'href' in attrsD:
-            self._start_link({})
-            self.elementstack[-1][-1] = attrsD['href']
-            self._end_link()
-
-    def _start_feed(self, attrsD):
-        self.infeed = 1
-        versionmap = {'0.1': u'atom01',
-                      '0.2': u'atom02',
-                      '0.3': u'atom03'}
-        if not self.version:
-            attr_version = attrsD.get('version')
-            version = versionmap.get(attr_version)
-            if version:
-                self.version = version
-            else:
-                self.version = u'atom'
-
-    def _end_channel(self):
-        self.infeed = 0
-    _end_feed = _end_channel
-
-    def _start_image(self, attrsD):
-        context = self._getContext()
-        if not self.inentry:
-            context.setdefault('image', FeedParserDict())
-        self.inimage = 1
-        self.title_depth = -1
-        self.push('image', 0)
-
-    def _end_image(self):
-        self.pop('image')
-        self.inimage = 0
-
-    def _start_textinput(self, attrsD):
-        context = self._getContext()
-        context.setdefault('textinput', FeedParserDict())
-        self.intextinput = 1
-        self.title_depth = -1
-        self.push('textinput', 0)
-    _start_textInput = _start_textinput
-
-    def _end_textinput(self):
-        self.pop('textinput')
-        self.intextinput = 0
-    _end_textInput = _end_textinput
-
-    def _start_author(self, attrsD):
-        self.inauthor = 1
-        self.push('author', 1)
-        # Append a new FeedParserDict when expecting an author
-        context = self._getContext()
-        context.setdefault('authors', [])
-        context['authors'].append(FeedParserDict())
-    _start_managingeditor = _start_author
-    _start_dc_author = _start_author
-    _start_dc_creator = _start_author
-    _start_itunes_author = _start_author
-
-    def _end_author(self):
-        self.pop('author')
-        self.inauthor = 0
-        self._sync_author_detail()
-    _end_managingeditor = _end_author
-    _end_dc_author = _end_author
-    _end_dc_creator = _end_author
-    _end_itunes_author = _end_author
-
-    def _start_itunes_owner(self, attrsD):
-        self.inpublisher = 1
-        self.push('publisher', 0)
-
-    def _end_itunes_owner(self):
-        self.pop('publisher')
-        self.inpublisher = 0
-        self._sync_author_detail('publisher')
-
-    def _start_contributor(self, attrsD):
-        self.incontributor = 1
-        context = self._getContext()
-        context.setdefault('contributors', [])
-        context['contributors'].append(FeedParserDict())
-        self.push('contributor', 0)
-
-    def _end_contributor(self):
-        self.pop('contributor')
-        self.incontributor = 0
-
-    def _start_dc_contributor(self, attrsD):
-        self.incontributor = 1
-        context = self._getContext()
-        context.setdefault('contributors', [])
-        context['contributors'].append(FeedParserDict())
-        self.push('name', 0)
-
-    def _end_dc_contributor(self):
-        self._end_name()
-        self.incontributor = 0
-
-    def _start_name(self, attrsD):
-        self.push('name', 0)
-    _start_itunes_name = _start_name
-
-    def _end_name(self):
-        value = self.pop('name')
-        if self.inpublisher:
-            self._save_author('name', value, 'publisher')
-        elif self.inauthor:
-            self._save_author('name', value)
-        elif self.incontributor:
-            self._save_contributor('name', value)
-        elif self.intextinput:
-            context = self._getContext()
-            context['name'] = value
-    _end_itunes_name = _end_name
-
-    def _start_width(self, attrsD):
-        self.push('width', 0)
-
-    def _end_width(self):
-        value = self.pop('width')
-        try:
-            value = int(value)
-        except ValueError:
-            value = 0
-        if self.inimage:
-            context = self._getContext()
-            context['width'] = value
-
-    def _start_height(self, attrsD):
-        self.push('height', 0)
-
-    def _end_height(self):
-        value = self.pop('height')
-        try:
-            value = int(value)
-        except ValueError:
-            value = 0
-        if self.inimage:
-            context = self._getContext()
-            context['height'] = value
-
-    def _start_url(self, attrsD):
-        self.push('href', 1)
-    _start_homepage = _start_url
-    _start_uri = _start_url
-
-    def _end_url(self):
-        value = self.pop('href')
-        if self.inauthor:
-            self._save_author('href', value)
-        elif self.incontributor:
-            self._save_contributor('href', value)
-    _end_homepage = _end_url
-    _end_uri = _end_url
-
-    def _start_email(self, attrsD):
-        self.push('email', 0)
-    _start_itunes_email = _start_email
-
-    def _end_email(self):
-        value = self.pop('email')
-        if self.inpublisher:
-            self._save_author('email', value, 'publisher')
-        elif self.inauthor:
-            self._save_author('email', value)
-        elif self.incontributor:
-            self._save_contributor('email', value)
-    _end_itunes_email = _end_email
-
-    def _getContext(self):
-        if self.insource:
-            context = self.sourcedata
-        elif self.inimage and 'image' in self.feeddata:
-            context = self.feeddata['image']
-        elif self.intextinput:
-            context = self.feeddata['textinput']
-        elif self.inentry:
-            context = self.entries[-1]
-        else:
-            context = self.feeddata
-        return context
-
-    def _save_author(self, key, value, prefix='author'):
-        context = self._getContext()
-        context.setdefault(prefix + '_detail', FeedParserDict())
-        context[prefix + '_detail'][key] = value
-        self._sync_author_detail()
-        context.setdefault('authors', [FeedParserDict()])
-        context['authors'][-1][key] = value
-
-    def _save_contributor(self, key, value):
-        context = self._getContext()
-        context.setdefault('contributors', [FeedParserDict()])
-        context['contributors'][-1][key] = value
-
-    def _sync_author_detail(self, key='author'):
-        context = self._getContext()
-        detail = context.get('%s_detail' % key)
-        if detail:
-            name = detail.get('name')
-            email = detail.get('email')
-            if name and email:
-                context[key] = u'%s (%s)' % (name, email)
-            elif name:
-                context[key] = name
-            elif email:
-                context[key] = email
-        else:
-            author, email = context.get(key), None
-            if not author:
-                return
-            emailmatch = re.search(ur'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))(\?subject=\S+)?''', author)
-            if emailmatch:
-                email = emailmatch.group(0)
-                # probably a better way to do the following, but it passes all the tests
-                author = author.replace(email, u'')
-                author = author.replace(u'()', u'')
-                author = author.replace(u'<>', u'')
-                author = author.replace(u'&lt;&gt;', u'')
-                author = author.strip()
-                if author and (author[0] == u'('):
-                    author = author[1:]
-                if author and (author[-1] == u')'):
-                    author = author[:-1]
-                author = author.strip()
-            if author or email:
-                context.setdefault('%s_detail' % key, FeedParserDict())
-            if author:
-                context['%s_detail' % key]['name'] = author
-            if email:
-                context['%s_detail' % key]['email'] = email
-
-    def _start_subtitle(self, attrsD):
-        self.pushContent('subtitle', attrsD, u'text/plain', 1)
-    _start_tagline = _start_subtitle
-    _start_itunes_subtitle = _start_subtitle
-
-    def _end_subtitle(self):
-        self.popContent('subtitle')
-    _end_tagline = _end_subtitle
-    _end_itunes_subtitle = _end_subtitle
-
-    def _start_rights(self, attrsD):
-        self.pushContent('rights', attrsD, u'text/plain', 1)
-    _start_dc_rights = _start_rights
-    _start_copyright = _start_rights
-
-    def _end_rights(self):
-        self.popContent('rights')
-    _end_dc_rights = _end_rights
-    _end_copyright = _end_rights
-
-    def _start_item(self, attrsD):
-        self.entries.append(FeedParserDict())
-        self.push('item', 0)
-        self.inentry = 1
-        self.guidislink = 0
-        self.title_depth = -1
-        self.psc_chapters_flag = None
-        id = self._getAttribute(attrsD, 'rdf:about') or self._getAttribute(attrsD, 'id')
-        if id:
-            context = self._getContext()
-            context['id'] = id
-        self._cdf_common(attrsD)
-    _start_entry = _start_item
-
-    def _end_item(self):
-        self.pop('item')
-        self.inentry = 0
-    _end_entry = _end_item
-
-    def _start_dc_language(self, attrsD):
-        self.push('language', 1)
-    _start_language = _start_dc_language
-
-    def _end_dc_language(self):
-        self.lang = self.pop('language')
-    _end_language = _end_dc_language
-
-    def _start_dc_publisher(self, attrsD):
-        self.push('publisher', 1)
-    _start_webmaster = _start_dc_publisher
-
-    def _end_dc_publisher(self):
-        self.pop('publisher')
-        self._sync_author_detail('publisher')
-    _end_webmaster = _end_dc_publisher
-
-    def _start_published(self, attrsD):
-        self.push('published', 1)
-    _start_dcterms_issued = _start_published
-    _start_issued = _start_published
-    _start_pubdate = _start_published
-
-    def _end_published(self):
-        value = self.pop('published')
-        self._save('published_parsed', _parse_date(value), overwrite=True)
-    _end_dcterms_issued = _end_published
-    _end_issued = _end_published
-    _end_pubdate = _end_published
-
-    def _start_updated(self, attrsD):
-        self.push('updated', 1)
-    _start_modified = _start_updated
-    _start_dcterms_modified = _start_updated
-    _start_dc_date = _start_updated
-    _start_lastbuilddate = _start_updated
-
-    def _end_updated(self):
-        value = self.pop('updated')
-        parsed_value = _parse_date(value)
-        self._save('updated_parsed', parsed_value, overwrite=True)
-    _end_modified = _end_updated
-    _end_dcterms_modified = _end_updated
-    _end_dc_date = _end_updated
-    _end_lastbuilddate = _end_updated
-
-    def _start_created(self, attrsD):
-        self.push('created', 1)
-    _start_dcterms_created = _start_created
-
-    def _end_created(self):
-        value = self.pop('created')
-        self._save('created_parsed', _parse_date(value), overwrite=True)
-    _end_dcterms_created = _end_created
-
-    def _start_expirationdate(self, attrsD):
-        self.push('expired', 1)
-
-    def _end_expirationdate(self):
-        self._save('expired_parsed', _parse_date(self.pop('expired')), overwrite=True)
-
-    # geospatial location, or "where", from georss.org
-
-    def _start_georssgeom(self, attrsD):
-        self.push('geometry', 0)
-        context = self._getContext()
-        context['where'] = FeedParserDict()
-
-    _start_georss_point = _start_georssgeom
-    _start_georss_line = _start_georssgeom
-    _start_georss_polygon = _start_georssgeom
-    _start_georss_box = _start_georssgeom
-
-    def _save_where(self, geometry):
-        context = self._getContext()
-        context['where'].update(geometry)
-
-    def _end_georss_point(self):
-        geometry = _parse_georss_point(self.pop('geometry'))
-        if geometry:
-            self._save_where(geometry)
-
-    def _end_georss_line(self):
-        geometry = _parse_georss_line(self.pop('geometry'))
-        if geometry:
-            self._save_where(geometry)
-
-    def _end_georss_polygon(self):
-        this = self.pop('geometry')
-        geometry = _parse_georss_polygon(this)
-        if geometry:
-            self._save_where(geometry)
-
-    def _end_georss_box(self):
-        geometry = _parse_georss_box(self.pop('geometry'))
-        if geometry:
-            self._save_where(geometry)
-
-    def _start_where(self, attrsD):
-        self.push('where', 0)
-        context = self._getContext()
-        context['where'] = FeedParserDict()
-    _start_georss_where = _start_where
-
-    def _parse_srs_attrs(self, attrsD):
-        srsName = attrsD.get('srsname')
-        try:
-            srsDimension = int(attrsD.get('srsdimension', '2'))
-        except ValueError:
-            srsDimension = 2
-        context = self._getContext()
-        context['where']['srsName'] = srsName
-        context['where']['srsDimension'] = srsDimension
-
-    def _start_gml_point(self, attrsD):
-        self._parse_srs_attrs(attrsD)
-        self.ingeometry = 1
-        self.push('geometry', 0)
-
-    def _start_gml_linestring(self, attrsD):
-        self._parse_srs_attrs(attrsD)
-        self.ingeometry = 'linestring'
-        self.push('geometry', 0)
-
-    def _start_gml_polygon(self, attrsD):
-        self._parse_srs_attrs(attrsD)
-        self.push('geometry', 0)
-
-    def _start_gml_exterior(self, attrsD):
-        self.push('geometry', 0)
-
-    def _start_gml_linearring(self, attrsD):
-        self.ingeometry = 'polygon'
-        self.push('geometry', 0)
-
-    def _start_gml_pos(self, attrsD):
-        self.push('pos', 0)
-
-    def _end_gml_pos(self):
-        this = self.pop('pos')
-        context = self._getContext()
-        srsName = context['where'].get('srsName')
-        srsDimension = context['where'].get('srsDimension', 2)
-        swap = True
-        if srsName and "EPSG" in srsName:
-            epsg = int(srsName.split(":")[-1])
-            swap = bool(epsg in _geogCS)
-        geometry = _parse_georss_point(this, swap=swap, dims=srsDimension)
-        if geometry:
-            self._save_where(geometry)
-
-    def _start_gml_poslist(self, attrsD):
-        self.push('pos', 0)
-
-    def _end_gml_poslist(self):
-        this = self.pop('pos')
-        context = self._getContext()
-        srsName = context['where'].get('srsName')
-        srsDimension = context['where'].get('srsDimension', 2)
-        swap = True
-        if srsName and "EPSG" in srsName:
-            epsg = int(srsName.split(":")[-1])
-            swap = bool(epsg in _geogCS)
-        geometry = _parse_poslist(
-            this, self.ingeometry, swap=swap, dims=srsDimension)
-        if geometry:
-            self._save_where(geometry)
-
-    def _end_geom(self):
-        self.ingeometry = 0
-        self.pop('geometry')
-    _end_gml_point = _end_geom
-    _end_gml_linestring = _end_geom
-    _end_gml_linearring = _end_geom
-    _end_gml_exterior = _end_geom
-    _end_gml_polygon = _end_geom
-
-    def _end_where(self):
-        self.pop('where')
-    _end_georss_where = _end_where
-
-    # end geospatial
-
-    def _start_cc_license(self, attrsD):
-        context = self._getContext()
-        value = self._getAttribute(attrsD, 'rdf:resource')
-        attrsD = FeedParserDict()
-        attrsD['rel'] = u'license'
-        if value:
-            attrsD['href']=value
-        context.setdefault('links', []).append(attrsD)
-
-    def _start_creativecommons_license(self, attrsD):
-        self.push('license', 1)
-    _start_creativeCommons_license = _start_creativecommons_license
-
-    def _end_creativecommons_license(self):
-        value = self.pop('license')
-        context = self._getContext()
-        attrsD = FeedParserDict()
-        attrsD['rel'] = u'license'
-        if value:
-            attrsD['href'] = value
-        context.setdefault('links', []).append(attrsD)
-        del context['license']
-    _end_creativeCommons_license = _end_creativecommons_license
-
-    def _addTag(self, term, scheme, label):
-        context = self._getContext()
-        tags = context.setdefault('tags', [])
-        if (not term) and (not scheme) and (not label):
-            return
-        value = FeedParserDict({'term': term, 'scheme': scheme, 'label': label})
-        if value not in tags:
-            tags.append(value)
-
-    def _start_category(self, attrsD):
-        context = self._getContext()
-        categories = context.setdefault('categories', [])
-        id = attrsD.get('id')
-        name = attrsD.get('name')
-        if id and name:
-            value = FeedParserDict({'id': id, 'name': name})
-            if value not in categories:
-                categories.append(value)
-
-        term = attrsD.get('term')
-        scheme = attrsD.get('scheme', attrsD.get('domain'))
-        label = attrsD.get('label')
-        self._addTag(term, scheme, label)
-        self.push('category', 1)
-    _start_dc_subject = _start_category
-    _start_keywords = _start_category
-
-    def _start_subcat(self, attrsD):
-        context = self._getContext()
-        subcats = context['categories'][-1].setdefault('subcats', [])
-        id = attrsD.get('id')
-        name = attrsD.get('name')
-        if id and name:
-            value = FeedParserDict({'id': id, 'name': name})
-            if value not in subcats:
-                subcats.append(value)
-        self.push('category', 1)
-
-    def _start_media_category(self, attrsD):
-        attrsD.setdefault('scheme', u'http://search.yahoo.com/mrss/category_schema')
-        self._start_category(attrsD)
-
-    def _end_itunes_keywords(self):
-        for term in self.pop('itunes_keywords').split(','):
-            if term.strip():
-                self._addTag(term.strip(), u'http://www.itunes.com/', None)
-
-    def _start_itunes_category(self, attrsD):
-        self._addTag(attrsD.get('text'), u'http://www.itunes.com/', None)
-        self.push('category', 1)
-
-    def _end_category(self):
-        value = self.pop('category')
-        if not value:
-            return
-        context = self._getContext()
-        tags = context['tags']
-        if value and len(tags) and not tags[-1]['term']:
-            tags[-1]['term'] = value
-        else:
-            self._addTag(value, None, None)
-    _end_dc_subject = _end_category
-    _end_keywords = _end_category
-    _end_itunes_category = _end_category
-    _end_media_category = _end_category
-    _end_subcat = _end_category
-
-    def _start_cloud(self, attrsD):
-        self._getContext()['cloud'] = FeedParserDict(attrsD)
-
-    def _start_link(self, attrsD):
-        attrsD.setdefault('rel', u'alternate')
-        if attrsD['rel'] == u'self':
-            attrsD.setdefault('type', u'application/atom+xml')
-        else:
-            attrsD.setdefault('type', u'text/html')
-        context = self._getContext()
-        attrsD = self._itsAnHrefDamnIt(attrsD)
-        if 'href' in attrsD:
-            attrsD['href'] = self.resolveURI(attrsD['href'])
-        expectingText = self.infeed or self.inentry or self.insource
-        context.setdefault('links', [])
-        if not (self.inentry and self.inimage):
-            context['links'].append(FeedParserDict(attrsD))
-        if 'href' in attrsD:
-            expectingText = 0
-            if (attrsD.get('rel') == u'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types):
-                context['link'] = attrsD['href']
-        else:
-            self.push('link', expectingText)
-
-    def _end_link(self):
-        value = self.pop('link')
-
-    def _start_guid(self, attrsD):
-        self.guidislink = (attrsD.get('ispermalink', 'true') == 'true')
-        self.push('id', 1)
-    _start_id = _start_guid
-
-    def _end_guid(self):
-        value = self.pop('id')
-        self._save('guidislink', self.guidislink and 'link' not in self._getContext())
-        if self.guidislink:
-            # guid acts as link, but only if 'ispermalink' is not present or is 'true',
-            # and only if the item doesn't already have a link element
-            self._save('link', value)
-    _end_id = _end_guid
-
-    def _start_title(self, attrsD):
-        if self.svgOK:
-            return self.unknown_starttag('title', attrsD.items())
-        self.pushContent('title', attrsD, u'text/plain', self.infeed or self.inentry or self.insource)
-    _start_dc_title = _start_title
-    _start_media_title = _start_title
-
-    def _end_title(self):
-        if self.svgOK:
-            return
-        value = self.popContent('title')
-        if not value:
-            return
-        self.title_depth = self.depth
-    _end_dc_title = _end_title
-
-    def _end_media_title(self):
-        title_depth = self.title_depth
-        self._end_title()
-        self.title_depth = title_depth
-
-    def _start_description(self, attrsD):
-        context = self._getContext()
-        if 'summary' in context:
-            self._summaryKey = 'content'
-            self._start_content(attrsD)
-        else:
-            self.pushContent('description', attrsD, u'text/html', self.infeed or self.inentry or self.insource)
-    _start_dc_description = _start_description
-    _start_media_description = _start_description
-
-    def _start_abstract(self, attrsD):
-        self.pushContent('description', attrsD, u'text/plain', self.infeed or self.inentry or self.insource)
-
-    def _end_description(self):
-        if self._summaryKey == 'content':
-            self._end_content()
-        else:
-            value = self.popContent('description')
-        self._summaryKey = None
-    _end_abstract = _end_description
-    _end_dc_description = _end_description
-    _end_media_description = _end_description
-
-    def _start_info(self, attrsD):
-        self.pushContent('info', attrsD, u'text/plain', 1)
-    _start_feedburner_browserfriendly = _start_info
-
-    def _end_info(self):
-        self.popContent('info')
-    _end_feedburner_browserfriendly = _end_info
-
-    def _start_generator(self, attrsD):
-        if attrsD:
-            attrsD = self._itsAnHrefDamnIt(attrsD)
-            if 'href' in attrsD:
-                attrsD['href'] = self.resolveURI(attrsD['href'])
-        self._getContext()['generator_detail'] = FeedParserDict(attrsD)
-        self.push('generator', 1)
-
-    def _end_generator(self):
-        value = self.pop('generator')
-        context = self._getContext()
-        if 'generator_detail' in context:
-            context['generator_detail']['name'] = value
-
-    def _start_admin_generatoragent(self, attrsD):
-        self.push('generator', 1)
-        value = self._getAttribute(attrsD, 'rdf:resource')
-        if value:
-            self.elementstack[-1][2].append(value)
-        self.pop('generator')
-        self._getContext()['generator_detail'] = FeedParserDict({'href': value})
-
-    def _start_admin_errorreportsto(self, attrsD):
-        self.push('errorreportsto', 1)
-        value = self._getAttribute(attrsD, 'rdf:resource')
-        if value:
-            self.elementstack[-1][2].append(value)
-        self.pop('errorreportsto')
-
-    def _start_summary(self, attrsD):
-        context = self._getContext()
-        if 'summary' in context:
-            self._summaryKey = 'content'
-            self._start_content(attrsD)
-        else:
-            self._summaryKey = 'summary'
-            self.pushContent(self._summaryKey, attrsD, u'text/plain', 1)
-    _start_itunes_summary = _start_summary
-
-    def _end_summary(self):
-        if self._summaryKey == 'content':
-            self._end_content()
-        else:
-            self.popContent(self._summaryKey or 'summary')
-        self._summaryKey = None
-    _end_itunes_summary = _end_summary
-
-    def _start_enclosure(self, attrsD):
-        attrsD = self._itsAnHrefDamnIt(attrsD)
-        context = self._getContext()
-        attrsD['rel'] = u'enclosure'
-        context.setdefault('links', []).append(FeedParserDict(attrsD))
-
-    def _start_source(self, attrsD):
-        if 'url' in attrsD:
-            # This means that we're processing a source element from an RSS 2.0 feed
-            self.sourcedata['href'] = attrsD[u'url']
-        self.push('source', 1)
-        self.insource = 1
-        self.title_depth = -1
-
-    def _end_source(self):
-        self.insource = 0
-        value = self.pop('source')
-        if value:
-            self.sourcedata['title'] = value
-        self._getContext()['source'] = copy.deepcopy(self.sourcedata)
-        self.sourcedata.clear()
-
-    def _start_content(self, attrsD):
-        self.pushContent('content', attrsD, u'text/plain', 1)
-        src = attrsD.get('src')
-        if src:
-            self.contentparams['src'] = src
-        self.push('content', 1)
-
-    def _start_body(self, attrsD):
-        self.pushContent('content', attrsD, u'application/xhtml+xml', 1)
-    _start_xhtml_body = _start_body
-
-    def _start_content_encoded(self, attrsD):
-        self.pushContent('content', attrsD, u'text/html', 1)
-    _start_fullitem = _start_content_encoded
-
-    def _end_content(self):
-        copyToSummary = self.mapContentType(self.contentparams.get('type')) in ([u'text/plain'] + self.html_types)
-        value = self.popContent('content')
-        if copyToSummary:
-            self._save('summary', value)
-
-    _end_body = _end_content
-    _end_xhtml_body = _end_content
-    _end_content_encoded = _end_content
-    _end_fullitem = _end_content
-
-    def _start_itunes_image(self, attrsD):
-        self.push('itunes_image', 0)
-        if attrsD.get('href'):
-            self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')})
-        elif attrsD.get('url'):
-            self._getContext()['image'] = FeedParserDict({'href': attrsD.get('url')})
-    _start_itunes_link = _start_itunes_image
-
-    def _end_itunes_block(self):
-        value = self.pop('itunes_block', 0)
-        self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0
-
-    def _end_itunes_explicit(self):
-        value = self.pop('itunes_explicit', 0)
-        # Convert 'yes' -> True, 'clean' to False, and any other value to None
-        # False and None both evaluate as False, so the difference can be ignored
-        # by applications that only need to know if the content is explicit.
-        self._getContext()['itunes_explicit'] = (None, False, True)[(value == 'yes' and 2) or value == 'clean' or 0]
-
-    def _start_media_group(self, attrsD):
-        # don't do anything, but don't break the enclosed tags either
-        pass
-
-    def _start_media_credit(self, attrsD):
-        context = self._getContext()
-        context.setdefault('media_credit', [])
-        context['media_credit'].append(attrsD)
-        self.push('credit', 1)
-
-    def _end_media_credit(self):
-        credit = self.pop('credit')
-        if credit != None and len(credit.strip()) != 0:
-            context = self._getContext()
-            context['media_credit'][-1]['content'] = credit
-
-    def _start_media_restriction(self, attrsD):
-        context = self._getContext()
-        context.setdefault('media_restriction', attrsD)
-        self.push('restriction', 1)
-
-    def _end_media_restriction(self):
-        restriction = self.pop('restriction')
-        if restriction != None and len(restriction.strip()) != 0:
-            context = self._getContext()
-            context['media_restriction']['content'] = restriction
-
-    def _start_media_license(self, attrsD):
-        context = self._getContext()
-        context.setdefault('media_license', attrsD)
-        self.push('license', 1)
-
-    def _end_media_license(self):
-        license = self.pop('license')
-        if license != None and len(license.strip()) != 0:
-            context = self._getContext()
-            context['media_license']['content'] = license
-
-    def _start_media_content(self, attrsD):
-        context = self._getContext()
-        context.setdefault('media_content', [])
-        context['media_content'].append(attrsD)
-
-    def _start_media_thumbnail(self, attrsD):
-        context = self._getContext()
-        context.setdefault('media_thumbnail', [])
-        self.push('url', 1) # new
-        context['media_thumbnail'].append(attrsD)
-
-    def _end_media_thumbnail(self):
-        url = self.pop('url')
-        context = self._getContext()
-        if url != None and len(url.strip()) != 0:
-            if 'url' not in context['media_thumbnail'][-1]:
-                context['media_thumbnail'][-1]['url'] = url
-
-    def _start_media_player(self, attrsD):
-        self.push('media_player', 0)
-        self._getContext()['media_player'] = FeedParserDict(attrsD)
-
-    def _end_media_player(self):
-        value = self.pop('media_player')
-        context = self._getContext()
-        context['media_player']['content'] = value
-
-    def _start_newlocation(self, attrsD):
-        self.push('newlocation', 1)
-
-    def _end_newlocation(self):
-        url = self.pop('newlocation')
-        context = self._getContext()
-        # don't set newlocation if the context isn't right
-        if context is not self.feeddata:
-            return
-        context['newlocation'] = _makeSafeAbsoluteURI(self.baseuri, url.strip())
-
-    def _start_psc_chapters(self, attrsD):
-        if self.psc_chapters_flag is None:
-	    # Transition from None -> True
-            self.psc_chapters_flag = True
-            attrsD['chapters'] = []
-            self._getContext()['psc_chapters'] = FeedParserDict(attrsD)
-
-    def _end_psc_chapters(self):
-        # Transition from True -> False
-        self.psc_chapters_flag = False
-
-    def _start_psc_chapter(self, attrsD):
-        if self.psc_chapters_flag:
-            start = self._getAttribute(attrsD, 'start')
-            attrsD['start_parsed'] = _parse_psc_chapter_start(start)
-
-            context = self._getContext()['psc_chapters']
-            context['chapters'].append(FeedParserDict(attrsD))
-
-
-if _XML_AVAILABLE:
-    class _StrictFeedParser(_FeedParserMixin, xml.sax.handler.ContentHandler):
-        def __init__(self, baseuri, baselang, encoding):
-            xml.sax.handler.ContentHandler.__init__(self)
-            _FeedParserMixin.__init__(self, baseuri, baselang, encoding)
-            self.bozo = 0
-            self.exc = None
-            self.decls = {}
-
-        def startPrefixMapping(self, prefix, uri):
-            if not uri:
-                return
-            # Jython uses '' instead of None; standardize on None
-            prefix = prefix or None
-            self.trackNamespace(prefix, uri)
-            if prefix and uri == 'http://www.w3.org/1999/xlink':
-                self.decls['xmlns:' + prefix] = uri
-
-        def startElementNS(self, name, qname, attrs):
-            namespace, localname = name
-            lowernamespace = str(namespace or '').lower()
-            if lowernamespace.find(u'backend.userland.com/rss') <> -1:
-                # match any backend.userland.com namespace
-                namespace = u'http://backend.userland.com/rss'
-                lowernamespace = namespace
-            if qname and qname.find(':') > 0:
-                givenprefix = qname.split(':')[0]
-            else:
-                givenprefix = None
-            prefix = self._matchnamespaces.get(lowernamespace, givenprefix)
-            if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and givenprefix not in self.namespacesInUse:
-                raise UndeclaredNamespace, "'%s' is not associated with a namespace" % givenprefix
-            localname = str(localname).lower()
-
-            # qname implementation is horribly broken in Python 2.1 (it
-            # doesn't report any), and slightly broken in Python 2.2 (it
-            # doesn't report the xml: namespace). So we match up namespaces
-            # with a known list first, and then possibly override them with
-            # the qnames the SAX parser gives us (if indeed it gives us any
-            # at all).  Thanks to MatejC for helping me test this and
-            # tirelessly telling me that it didn't work yet.
-            attrsD, self.decls = self.decls, {}
-            if localname=='math' and namespace=='http://www.w3.org/1998/Math/MathML':
-                attrsD['xmlns']=namespace
-            if localname=='svg' and namespace=='http://www.w3.org/2000/svg':
-                attrsD['xmlns']=namespace
-
-            if prefix:
-                localname = prefix.lower() + ':' + localname
-            elif namespace and not qname: #Expat
-                for name,value in self.namespacesInUse.items():
-                    if name and value == namespace:
-                        localname = name + ':' + localname
-                        break
-
-            for (namespace, attrlocalname), attrvalue in attrs.items():
-                lowernamespace = (namespace or '').lower()
-                prefix = self._matchnamespaces.get(lowernamespace, '')
-                if prefix:
-                    attrlocalname = prefix + ':' + attrlocalname
-                attrsD[str(attrlocalname).lower()] = attrvalue
-            for qname in attrs.getQNames():
-                attrsD[str(qname).lower()] = attrs.getValueByQName(qname)
-            localname = str(localname).lower()
-            self.unknown_starttag(localname, attrsD.items())
-
-        def characters(self, text):
-            self.handle_data(text)
-
-        def endElementNS(self, name, qname):
-            namespace, localname = name
-            lowernamespace = str(namespace or '').lower()
-            if qname and qname.find(':') > 0:
-                givenprefix = qname.split(':')[0]
-            else:
-                givenprefix = ''
-            prefix = self._matchnamespaces.get(lowernamespace, givenprefix)
-            if prefix:
-                localname = prefix + ':' + localname
-            elif namespace and not qname: #Expat
-                for name,value in self.namespacesInUse.items():
-                    if name and value == namespace:
-                        localname = name + ':' + localname
-                        break
-            localname = str(localname).lower()
-            self.unknown_endtag(localname)
-
-        def error(self, exc):
-            self.bozo = 1
-            self.exc = exc
-
-        # drv_libxml2 calls warning() in some cases
-        warning = error
-
-        def fatalError(self, exc):
-            self.error(exc)
-            raise exc
-
-class _BaseHTMLProcessor(sgmllib.SGMLParser):
-    special = re.compile('''[<>'"]''')
-    bare_ampersand = re.compile("&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)")
-    elements_no_end_tag = set([
-      'area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame',
-      'hr', 'img', 'input', 'isindex', 'keygen', 'link', 'meta', 'param',
-      'source', 'track', 'wbr'
-    ])
-
-    def __init__(self, encoding, _type):
-        self.encoding = encoding
-        self._type = _type
-        sgmllib.SGMLParser.__init__(self)
-
-    def reset(self):
-        self.pieces = []
-        sgmllib.SGMLParser.reset(self)
-
-    def _shorttag_replace(self, match):
-        tag = match.group(1)
-        if tag in self.elements_no_end_tag:
-            return '<' + tag + ' />'
-        else:
-            return '<' + tag + '></' + tag + '>'
-
-    # By declaring these methods and overriding their compiled code
-    # with the code from sgmllib, the original code will execute in
-    # feedparser's scope instead of sgmllib's. This means that the
-    # `tagfind` and `charref` regular expressions will be found as
-    # they're declared above, not as they're declared in sgmllib.
-    def goahead(self, i):
-        pass
-    goahead.func_code = sgmllib.SGMLParser.goahead.func_code
-
-    def __parse_starttag(self, i):
-        pass
-    __parse_starttag.func_code = sgmllib.SGMLParser.parse_starttag.func_code
-
-    def parse_starttag(self,i):
-        j = self.__parse_starttag(i)
-        if self._type == 'application/xhtml+xml':
-            if j>2 and self.rawdata[j-2:j]=='/>':
-                self.unknown_endtag(self.lasttag)
-        return j
-
-    def feed(self, data):
-        data = re.compile(r'<!((?!DOCTYPE|--|\[))', re.IGNORECASE).sub(r'&lt;!\1', data)
-        data = re.sub(r'<([^<>\s]+?)\s*/>', self._shorttag_replace, data)
-        data = data.replace('&#39;', "'")
-        data = data.replace('&#34;', '"')
-        try:
-            bytes
-            if bytes is str:
-                raise NameError
-            self.encoding = self.encoding + u'_INVALID_PYTHON_3'
-        except NameError:
-            if self.encoding and isinstance(data, unicode):
-                data = data.encode(self.encoding)
-        sgmllib.SGMLParser.feed(self, data)
-        sgmllib.SGMLParser.close(self)
-
-    def normalize_attrs(self, attrs):
-        if not attrs:
-            return attrs
-        # utility method to be called by descendants
-        attrs = dict([(k.lower(), v) for k, v in attrs]).items()
-        attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs]
-        attrs.sort()
-        return attrs
-
-    def unknown_starttag(self, tag, attrs):
-        # called for each start tag
-        # attrs is a list of (attr, value) tuples
-        # e.g. for <pre class='screen'>, tag='pre', attrs=[('class', 'screen')]
-        uattrs = []
-        strattrs=''
-        if attrs:
-            for key, value in attrs:
-                value=value.replace('>','&gt;').replace('<','&lt;').replace('"','&quot;')
-                value = self.bare_ampersand.sub("&amp;", value)
-                # thanks to Kevin Marks for this breathtaking hack to deal with (valid) high-bit attribute values in UTF-8 feeds
-                if not isinstance(value, unicode):
-                    value = value.decode(self.encoding, 'ignore')
-                try:
-                    # Currently, in Python 3 the key is already a str, and cannot be decoded again
-                    uattrs.append((unicode(key, self.encoding), value))
-                except TypeError:
-                    uattrs.append((key, value))
-            strattrs = u''.join([u' %s="%s"' % (key, value) for key, value in uattrs])
-            if self.encoding:
-                try:
-                    strattrs = strattrs.encode(self.encoding)
-                except (UnicodeEncodeError, LookupError):
-                    pass
-        if tag in self.elements_no_end_tag:
-            self.pieces.append('<%s%s />' % (tag, strattrs))
-        else:
-            self.pieces.append('<%s%s>' % (tag, strattrs))
-
-    def unknown_endtag(self, tag):
-        # called for each end tag, e.g. for </pre>, tag will be 'pre'
-        # Reconstruct the original end tag.
-        if tag not in self.elements_no_end_tag:
-            self.pieces.append("</%s>" % tag)
-
-    def handle_charref(self, ref):
-        # called for each character reference, e.g. for '&#160;', ref will be '160'
-        # Reconstruct the original character reference.
-        ref = ref.lower()
-        if ref.startswith('x'):
-            value = int(ref[1:], 16)
-        else:
-            value = int(ref)
-
-        if value in _cp1252:
-            self.pieces.append('&#%s;' % hex(ord(_cp1252[value]))[1:])
-        else:
-            self.pieces.append('&#%s;' % ref)
-
-    def handle_entityref(self, ref):
-        # called for each entity reference, e.g. for '&copy;', ref will be 'copy'
-        # Reconstruct the original entity reference.
-        if ref in name2codepoint or ref == 'apos':
-            self.pieces.append('&%s;' % ref)
-        else:
-            self.pieces.append('&amp;%s' % ref)
-
-    def handle_data(self, text):
-        # called for each block of plain text, i.e. outside of any tag and
-        # not containing any character or entity references
-        # Store the original text verbatim.
-        self.pieces.append(text)
-
-    def handle_comment(self, text):
-        # called for each HTML comment, e.g. <!-- insert Javascript code here -->
-        # Reconstruct the original comment.
-        self.pieces.append('<!--%s-->' % text)
-
-    def handle_pi(self, text):
-        # called for each processing instruction, e.g. <?instruction>
-        # Reconstruct original processing instruction.
-        self.pieces.append('<?%s>' % text)
-
-    def handle_decl(self, text):
-        # called for the DOCTYPE, if present, e.g.
-        # <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-        #     "http://www.w3.org/TR/html4/loose.dtd">
-        # Reconstruct original DOCTYPE
-        self.pieces.append('<!%s>' % text)
-
-    _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match
-    def _scan_name(self, i, declstartpos):
-        rawdata = self.rawdata
-        n = len(rawdata)
-        if i == n:
-            return None, -1
-        m = self._new_declname_match(rawdata, i)
-        if m:
-            s = m.group()
-            name = s.strip()
-            if (i + len(s)) == n:
-                return None, -1  # end of buffer
-            return name.lower(), m.end()
-        else:
-            self.handle_data(rawdata)
-#            self.updatepos(declstartpos, i)
-            return None, -1
-
-    def convert_charref(self, name):
-        return '&#%s;' % name
-
-    def convert_entityref(self, name):
-        return '&%s;' % name
-
-    def output(self):
-        '''Return processed HTML as a single string'''
-        return ''.join([str(p) for p in self.pieces])
-
-    def parse_declaration(self, i):
-        try:
-            return sgmllib.SGMLParser.parse_declaration(self, i)
-        except sgmllib.SGMLParseError:
-            # escape the doctype declaration and continue parsing
-            self.handle_data('&lt;')
-            return i+1
-
-class _LooseFeedParser(_FeedParserMixin, _BaseHTMLProcessor):
-    def __init__(self, baseuri, baselang, encoding, entities):
-        sgmllib.SGMLParser.__init__(self)
-        _FeedParserMixin.__init__(self, baseuri, baselang, encoding)
-        _BaseHTMLProcessor.__init__(self, encoding, 'application/xhtml+xml')
-        self.entities=entities
-
-    def decodeEntities(self, element, data):
-        data = data.replace('&#60;', '&lt;')
-        data = data.replace('&#x3c;', '&lt;')
-        data = data.replace('&#x3C;', '&lt;')
-        data = data.replace('&#62;', '&gt;')
-        data = data.replace('&#x3e;', '&gt;')
-        data = data.replace('&#x3E;', '&gt;')
-        data = data.replace('&#38;', '&amp;')
-        data = data.replace('&#x26;', '&amp;')
-        data = data.replace('&#34;', '&quot;')
-        data = data.replace('&#x22;', '&quot;')
-        data = data.replace('&#39;', '&apos;')
-        data = data.replace('&#x27;', '&apos;')
-        if not self.contentparams.get('type', u'xml').endswith(u'xml'):
-            data = data.replace('&lt;', '<')
-            data = data.replace('&gt;', '>')
-            data = data.replace('&amp;', '&')
-            data = data.replace('&quot;', '"')
-            data = data.replace('&apos;', "'")
-        return data
-
-    def strattrs(self, attrs):
-        return ''.join([' %s="%s"' % (n,v.replace('"','&quot;')) for n,v in attrs])
-
-class _RelativeURIResolver(_BaseHTMLProcessor):
-    relative_uris = set([('a', 'href'),
-                     ('applet', 'codebase'),
-                     ('area', 'href'),
-                     ('blockquote', 'cite'),
-                     ('body', 'background'),
-                     ('del', 'cite'),
-                     ('form', 'action'),
-                     ('frame', 'longdesc'),
-                     ('frame', 'src'),
-                     ('iframe', 'longdesc'),
-                     ('iframe', 'src'),
-                     ('head', 'profile'),
-                     ('img', 'longdesc'),
-                     ('img', 'src'),
-                     ('img', 'usemap'),
-                     ('input', 'src'),
-                     ('input', 'usemap'),
-                     ('ins', 'cite'),
-                     ('link', 'href'),
-                     ('object', 'classid'),
-                     ('object', 'codebase'),
-                     ('object', 'data'),
-                     ('object', 'usemap'),
-                     ('q', 'cite'),
-                     ('script', 'src'),
-                     ('video', 'poster')])
-
-    def __init__(self, baseuri, encoding, _type):
-        _BaseHTMLProcessor.__init__(self, encoding, _type)
-        self.baseuri = baseuri
-
-    def resolveURI(self, uri):
-        return _makeSafeAbsoluteURI(self.baseuri, uri.strip())
-
-    def unknown_starttag(self, tag, attrs):
-        attrs = self.normalize_attrs(attrs)
-        attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs]
-        _BaseHTMLProcessor.unknown_starttag(self, tag, attrs)
-
-def _resolveRelativeURIs(htmlSource, baseURI, encoding, _type):
-    if not _SGML_AVAILABLE:
-        return htmlSource
-
-    p = _RelativeURIResolver(baseURI, encoding, _type)
-    p.feed(htmlSource)
-    return p.output()
-
-def _makeSafeAbsoluteURI(base, rel=None):
-    # bail if ACCEPTABLE_URI_SCHEMES is empty
-    if not ACCEPTABLE_URI_SCHEMES:
-        return _urljoin(base, rel or u'')
-    if not base:
-        return rel or u''
-    if not rel:
-        try:
-            scheme = urlparse.urlparse(base)[0]
-        except ValueError:
-            return u''
-        if not scheme or scheme in ACCEPTABLE_URI_SCHEMES:
-            return base
-        return u''
-    uri = _urljoin(base, rel)
-    if uri.strip().split(':', 1)[0] not in ACCEPTABLE_URI_SCHEMES:
-        return u''
-    return uri
-
-class _HTMLSanitizer(_BaseHTMLProcessor):
-    acceptable_elements = set(['a', 'abbr', 'acronym', 'address', 'area',
-        'article', 'aside', 'audio', 'b', 'big', 'blockquote', 'br', 'button',
-        'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup',
-        'command', 'datagrid', 'datalist', 'dd', 'del', 'details', 'dfn',
-        'dialog', 'dir', 'div', 'dl', 'dt', 'em', 'event-source', 'fieldset',
-        'figcaption', 'figure', 'footer', 'font', 'form', 'header', 'h1',
-        'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', 'ins',
-        'keygen', 'kbd', 'label', 'legend', 'li', 'm', 'map', 'menu', 'meter',
-        'multicol', 'nav', 'nextid', 'ol', 'output', 'optgroup', 'option',
-        'p', 'pre', 'progress', 'q', 's', 'samp', 'section', 'select',
-        'small', 'sound', 'source', 'spacer', 'span', 'strike', 'strong',
-        'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'time', 'tfoot',
-        'th', 'thead', 'tr', 'tt', 'u', 'ul', 'var', 'video', 'noscript'])
-
-    acceptable_attributes = set(['abbr', 'accept', 'accept-charset', 'accesskey',
-      'action', 'align', 'alt', 'autocomplete', 'autofocus', 'axis',
-      'background', 'balance', 'bgcolor', 'bgproperties', 'border',
-      'bordercolor', 'bordercolordark', 'bordercolorlight', 'bottompadding',
-      'cellpadding', 'cellspacing', 'ch', 'challenge', 'char', 'charoff',
-      'choff', 'charset', 'checked', 'cite', 'class', 'clear', 'color', 'cols',
-      'colspan', 'compact', 'contenteditable', 'controls', 'coords', 'data',
-      'datafld', 'datapagesize', 'datasrc', 'datetime', 'default', 'delay',
-      'dir', 'disabled', 'draggable', 'dynsrc', 'enctype', 'end', 'face', 'for',
-      'form', 'frame', 'galleryimg', 'gutter', 'headers', 'height', 'hidefocus',
-      'hidden', 'high', 'href', 'hreflang', 'hspace', 'icon', 'id', 'inputmode',
-      'ismap', 'keytype', 'label', 'leftspacing', 'lang', 'list', 'longdesc',
-      'loop', 'loopcount', 'loopend', 'loopstart', 'low', 'lowsrc', 'max',
-      'maxlength', 'media', 'method', 'min', 'multiple', 'name', 'nohref',
-      'noshade', 'nowrap', 'open', 'optimum', 'pattern', 'ping', 'point-size',
-      'poster', 'pqg', 'preload', 'prompt', 'radiogroup', 'readonly', 'rel',
-      'repeat-max', 'repeat-min', 'replace', 'required', 'rev', 'rightspacing',
-      'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', 'span',
-      'src', 'start', 'step', 'summary', 'suppress', 'tabindex', 'target',
-      'template', 'title', 'toppadding', 'type', 'unselectable', 'usemap',
-      'urn', 'valign', 'value', 'variable', 'volume', 'vspace', 'vrml',
-      'width', 'wrap', 'xml:lang'])
-
-    unacceptable_elements_with_end_tag = set(['script', 'applet', 'style'])
-
-    acceptable_css_properties = set(['azimuth', 'background-color',
-      'border-bottom-color', 'border-collapse', 'border-color',
-      'border-left-color', 'border-right-color', 'border-top-color', 'clear',
-      'color', 'cursor', 'direction', 'display', 'elevation', 'float', 'font',
-      'font-family', 'font-size', 'font-style', 'font-variant', 'font-weight',
-      'height', 'letter-spacing', 'line-height', 'overflow', 'pause',
-      'pause-after', 'pause-before', 'pitch', 'pitch-range', 'richness',
-      'speak', 'speak-header', 'speak-numeral', 'speak-punctuation',
-      'speech-rate', 'stress', 'text-align', 'text-decoration', 'text-indent',
-      'unicode-bidi', 'vertical-align', 'voice-family', 'volume',
-      'white-space', 'width'])
-
-    # survey of common keywords found in feeds
-    acceptable_css_keywords = set(['auto', 'aqua', 'black', 'block', 'blue',
-      'bold', 'both', 'bottom', 'brown', 'center', 'collapse', 'dashed',
-      'dotted', 'fuchsia', 'gray', 'green', '!important', 'italic', 'left',
-      'lime', 'maroon', 'medium', 'none', 'navy', 'normal', 'nowrap', 'olive',
-      'pointer', 'purple', 'red', 'right', 'solid', 'silver', 'teal', 'top',
-      'transparent', 'underline', 'white', 'yellow'])
-
-    valid_css_values = re.compile('^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|' +
-      '\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$')
-
-    mathml_elements = set(['annotation', 'annotation-xml', 'maction', 'math',
-      'merror', 'mfenced', 'mfrac', 'mi', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded',
-      'mphantom', 'mprescripts', 'mroot', 'mrow', 'mspace', 'msqrt', 'mstyle',
-      'msub', 'msubsup', 'msup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder',
-      'munderover', 'none', 'semantics'])
-
-    mathml_attributes = set(['actiontype', 'align', 'columnalign', 'columnalign',
-      'columnalign', 'close', 'columnlines', 'columnspacing', 'columnspan', 'depth',
-      'display', 'displaystyle', 'encoding', 'equalcolumns', 'equalrows',
-      'fence', 'fontstyle', 'fontweight', 'frame', 'height', 'linethickness',
-      'lspace', 'mathbackground', 'mathcolor', 'mathvariant', 'mathvariant',
-      'maxsize', 'minsize', 'open', 'other', 'rowalign', 'rowalign', 'rowalign',
-      'rowlines', 'rowspacing', 'rowspan', 'rspace', 'scriptlevel', 'selection',
-      'separator', 'separators', 'stretchy', 'width', 'width', 'xlink:href',
-      'xlink:show', 'xlink:type', 'xmlns', 'xmlns:xlink'])
-
-    # svgtiny - foreignObject + linearGradient + radialGradient + stop
-    svg_elements = set(['a', 'animate', 'animateColor', 'animateMotion',
-      'animateTransform', 'circle', 'defs', 'desc', 'ellipse', 'foreignObject',
-      'font-face', 'font-face-name', 'font-face-src', 'g', 'glyph', 'hkern',
-      'linearGradient', 'line', 'marker', 'metadata', 'missing-glyph', 'mpath',
-      'path', 'polygon', 'polyline', 'radialGradient', 'rect', 'set', 'stop',
-      'svg', 'switch', 'text', 'title', 'tspan', 'use'])
-
-    # svgtiny + class + opacity + offset + xmlns + xmlns:xlink
-    svg_attributes = set(['accent-height', 'accumulate', 'additive', 'alphabetic',
-       'arabic-form', 'ascent', 'attributeName', 'attributeType',
-       'baseProfile', 'bbox', 'begin', 'by', 'calcMode', 'cap-height',
-       'class', 'color', 'color-rendering', 'content', 'cx', 'cy', 'd', 'dx',
-       'dy', 'descent', 'display', 'dur', 'end', 'fill', 'fill-opacity',
-       'fill-rule', 'font-family', 'font-size', 'font-stretch', 'font-style',
-       'font-variant', 'font-weight', 'from', 'fx', 'fy', 'g1', 'g2',
-       'glyph-name', 'gradientUnits', 'hanging', 'height', 'horiz-adv-x',
-       'horiz-origin-x', 'id', 'ideographic', 'k', 'keyPoints', 'keySplines',
-       'keyTimes', 'lang', 'mathematical', 'marker-end', 'marker-mid',
-       'marker-start', 'markerHeight', 'markerUnits', 'markerWidth', 'max',
-       'min', 'name', 'offset', 'opacity', 'orient', 'origin',
-       'overline-position', 'overline-thickness', 'panose-1', 'path',
-       'pathLength', 'points', 'preserveAspectRatio', 'r', 'refX', 'refY',
-       'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures',
-       'restart', 'rotate', 'rx', 'ry', 'slope', 'stemh', 'stemv',
-       'stop-color', 'stop-opacity', 'strikethrough-position',
-       'strikethrough-thickness', 'stroke', 'stroke-dasharray',
-       'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin',
-       'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'systemLanguage',
-       'target', 'text-anchor', 'to', 'transform', 'type', 'u1', 'u2',
-       'underline-position', 'underline-thickness', 'unicode', 'unicode-range',
-       'units-per-em', 'values', 'version', 'viewBox', 'visibility', 'width',
-       'widths', 'x', 'x-height', 'x1', 'x2', 'xlink:actuate', 'xlink:arcrole',
-       'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type',
-       'xml:base', 'xml:lang', 'xml:space', 'xmlns', 'xmlns:xlink', 'y', 'y1',
-       'y2', 'zoomAndPan'])
-
-    svg_attr_map = None
-    svg_elem_map = None
-
-    acceptable_svg_properties = set([ 'fill', 'fill-opacity', 'fill-rule',
-      'stroke', 'stroke-width', 'stroke-linecap', 'stroke-linejoin',
-      'stroke-opacity'])
-
-    def reset(self):
-        _BaseHTMLProcessor.reset(self)
-        self.unacceptablestack = 0
-        self.mathmlOK = 0
-        self.svgOK = 0
-
-    def unknown_starttag(self, tag, attrs):
-        acceptable_attributes = self.acceptable_attributes
-        keymap = {}
-        if not tag in self.acceptable_elements or self.svgOK:
-            if tag in self.unacceptable_elements_with_end_tag:
-                self.unacceptablestack += 1
-
-            # add implicit namespaces to html5 inline svg/mathml
-            if self._type.endswith('html'):
-                if not dict(attrs).get('xmlns'):
-                    if tag=='svg':
-                        attrs.append( ('xmlns','http://www.w3.org/2000/svg') )
-                    if tag=='math':
-                        attrs.append( ('xmlns','http://www.w3.org/1998/Math/MathML') )
-
-            # not otherwise acceptable, perhaps it is MathML or SVG?
-            if tag=='math' and ('xmlns','http://www.w3.org/1998/Math/MathML') in attrs:
-                self.mathmlOK += 1
-            if tag=='svg' and ('xmlns','http://www.w3.org/2000/svg') in attrs:
-                self.svgOK += 1
-
-            # chose acceptable attributes based on tag class, else bail
-            if  self.mathmlOK and tag in self.mathml_elements:
-                acceptable_attributes = self.mathml_attributes
-            elif self.svgOK and tag in self.svg_elements:
-                # for most vocabularies, lowercasing is a good idea.  Many
-                # svg elements, however, are camel case
-                if not self.svg_attr_map:
-                    lower=[attr.lower() for attr in self.svg_attributes]
-                    mix=[a for a in self.svg_attributes if a not in lower]
-                    self.svg_attributes = lower
-                    self.svg_attr_map = dict([(a.lower(),a) for a in mix])
-
-                    lower=[attr.lower() for attr in self.svg_elements]
-                    mix=[a for a in self.svg_elements if a not in lower]
-                    self.svg_elements = lower
-                    self.svg_elem_map = dict([(a.lower(),a) for a in mix])
-                acceptable_attributes = self.svg_attributes
-                tag = self.svg_elem_map.get(tag,tag)
-                keymap = self.svg_attr_map
-            elif not tag in self.acceptable_elements:
-                return
-
-        # declare xlink namespace, if needed
-        if self.mathmlOK or self.svgOK:
-            if filter(lambda (n,v): n.startswith('xlink:'),attrs):
-                if not ('xmlns:xlink','http://www.w3.org/1999/xlink') in attrs:
-                    attrs.append(('xmlns:xlink','http://www.w3.org/1999/xlink'))
-
-        clean_attrs = []
-        for key, value in self.normalize_attrs(attrs):
-            if key in acceptable_attributes:
-                key=keymap.get(key,key)
-                # make sure the uri uses an acceptable uri scheme
-                if key == u'href':
-                    value = _makeSafeAbsoluteURI(value)
-                clean_attrs.append((key,value))
-            elif key=='style':
-                clean_value = self.sanitize_style(value)
-                if clean_value:
-                    clean_attrs.append((key,clean_value))
-        _BaseHTMLProcessor.unknown_starttag(self, tag, clean_attrs)
-
-    def unknown_endtag(self, tag):
-        if not tag in self.acceptable_elements:
-            if tag in self.unacceptable_elements_with_end_tag:
-                self.unacceptablestack -= 1
-            if self.mathmlOK and tag in self.mathml_elements:
-                if tag == 'math' and self.mathmlOK:
-                    self.mathmlOK -= 1
-            elif self.svgOK and tag in self.svg_elements:
-                tag = self.svg_elem_map.get(tag,tag)
-                if tag == 'svg' and self.svgOK:
-                    self.svgOK -= 1
-            else:
-                return
-        _BaseHTMLProcessor.unknown_endtag(self, tag)
-
-    def handle_pi(self, text):
-        pass
-
-    def handle_decl(self, text):
-        pass
-
-    def handle_data(self, text):
-        if not self.unacceptablestack:
-            _BaseHTMLProcessor.handle_data(self, text)
-
-    def sanitize_style(self, style):
-        # disallow urls
-        style=re.compile('url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ',style)
-
-        # gauntlet
-        if not re.match("""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style):
-            return ''
-        # This replaced a regexp that used re.match and was prone to pathological back-tracking.
-        if re.sub("\s*[-\w]+\s*:\s*[^:;]*;?", '', style).strip():
-            return ''
-
-        clean = []
-        for prop,value in re.findall("([-\w]+)\s*:\s*([^:;]*)",style):
-            if not value:
-                continue
-            if prop.lower() in self.acceptable_css_properties:
-                clean.append(prop + ': ' + value + ';')
-            elif prop.split('-')[0].lower() in ['background','border','margin','padding']:
-                for keyword in value.split():
-                    if not keyword in self.acceptable_css_keywords and \
-                        not self.valid_css_values.match(keyword):
-                        break
-                else:
-                    clean.append(prop + ': ' + value + ';')
-            elif self.svgOK and prop.lower() in self.acceptable_svg_properties:
-                clean.append(prop + ': ' + value + ';')
-
-        return ' '.join(clean)
-
-    def parse_comment(self, i, report=1):
-        ret = _BaseHTMLProcessor.parse_comment(self, i, report)
-        if ret >= 0:
-            return ret
-        # if ret == -1, this may be a malicious attempt to circumvent
-        # sanitization, or a page-destroying unclosed comment
-        match = re.compile(r'--[^>]*>').search(self.rawdata, i+4)
-        if match:
-            return match.end()
-        # unclosed comment; deliberately fail to handle_data()
-        return len(self.rawdata)
-
-
-def _sanitizeHTML(htmlSource, encoding, _type):
-    if not _SGML_AVAILABLE:
-        return htmlSource
-    p = _HTMLSanitizer(encoding, _type)
-    htmlSource = htmlSource.replace('<![CDATA[', '&lt;![CDATA[')
-    p.feed(htmlSource)
-    data = p.output()
-    data = data.strip().replace('\r\n', '\n')
-    return data
-
-class _FeedURLHandler(urllib2.HTTPDigestAuthHandler, urllib2.HTTPRedirectHandler, urllib2.HTTPDefaultErrorHandler):
-    def http_error_default(self, req, fp, code, msg, headers):
-        # The default implementation just raises HTTPError.
-        # Forget that.
-        fp.status = code
-        return fp
-
-    def http_error_301(self, req, fp, code, msg, hdrs):
-        result = urllib2.HTTPRedirectHandler.http_error_301(self, req, fp,
-                                                            code, msg, hdrs)
-        result.status = code
-        result.newurl = result.geturl()
-        return result
-    # The default implementations in urllib2.HTTPRedirectHandler
-    # are identical, so hardcoding a http_error_301 call above
-    # won't affect anything
-    http_error_300 = http_error_301
-    http_error_302 = http_error_301
-    http_error_303 = http_error_301
-    http_error_307 = http_error_301
-
-    def http_error_401(self, req, fp, code, msg, headers):
-        # Check if
-        # - server requires digest auth, AND
-        # - we tried (unsuccessfully) with basic auth, AND
-        # If all conditions hold, parse authentication information
-        # out of the Authorization header we sent the first time
-        # (for the username and password) and the WWW-Authenticate
-        # header the server sent back (for the realm) and retry
-        # the request with the appropriate digest auth headers instead.
-        # This evil genius hack has been brought to you by Aaron Swartz.
-        host = urlparse.urlparse(req.get_full_url())[1]
-        if base64 is None or 'Authorization' not in req.headers \
-                          or 'WWW-Authenticate' not in headers:
-            return self.http_error_default(req, fp, code, msg, headers)
-        auth = _base64decode(req.headers['Authorization'].split(' ')[1])
-        user, passw = auth.split(':')
-        realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0]
-        self.add_password(realm, host, user, passw)
-        retry = self.http_error_auth_reqed('www-authenticate', host, req, headers)
-        self.reset_retry_count()
-        return retry
-
-def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers):
-    """URL, filename, or string --> stream
-
-    This function lets you define parsers that take any input source
-    (URL, pathname to local or network file, or actual data as a string)
-    and deal with it in a uniform manner.  Returned object is guaranteed
-    to have all the basic stdio read methods (read, readline, readlines).
-    Just .close() the object when you're done with it.
-
-    If the etag argument is supplied, it will be used as the value of an
-    If-None-Match request header.
-
-    If the modified argument is supplied, it can be a tuple of 9 integers
-    (as returned by gmtime() in the standard Python time module) or a date
-    string in any format supported by feedparser. Regardless, it MUST
-    be in GMT (Greenwich Mean Time). It will be reformatted into an
-    RFC 1123-compliant date and used as the value of an If-Modified-Since
-    request header.
-
-    If the agent argument is supplied, it will be used as the value of a
-    User-Agent request header.
-
-    If the referrer argument is supplied, it will be used as the value of a
-    Referer[sic] request header.
-
-    If handlers is supplied, it is a list of handlers used to build a
-    urllib2 opener.
-
-    if request_headers is supplied it is a dictionary of HTTP request headers
-    that will override the values generated by FeedParser.
-    """
-
-    if hasattr(url_file_stream_or_string, 'read'):
-        return url_file_stream_or_string
-
-    if isinstance(url_file_stream_or_string, basestring) \
-       and urlparse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp', 'file', 'feed'):
-        # Deal with the feed URI scheme
-        if url_file_stream_or_string.startswith('feed:http'):
-            url_file_stream_or_string = url_file_stream_or_string[5:]
-        elif url_file_stream_or_string.startswith('feed:'):
-            url_file_stream_or_string = 'http:' + url_file_stream_or_string[5:]
-        if not agent:
-            agent = USER_AGENT
-        # Test for inline user:password credentials for HTTP basic auth
-        auth = None
-        if base64 and not url_file_stream_or_string.startswith('ftp:'):
-            urltype, rest = urllib.splittype(url_file_stream_or_string)
-            realhost, rest = urllib.splithost(rest)
-            if realhost:
-                user_passwd, realhost = urllib.splituser(realhost)
-                if user_passwd:
-                    url_file_stream_or_string = '%s://%s%s' % (urltype, realhost, rest)
-                    auth = base64.standard_b64encode(user_passwd).strip()
-
-        # iri support
-        if isinstance(url_file_stream_or_string, unicode):
-            url_file_stream_or_string = _convert_to_idn(url_file_stream_or_string)
-
-        # try to open with urllib2 (to use optional headers)
-        request = _build_urllib2_request(url_file_stream_or_string, agent, etag, modified, referrer, auth, request_headers)
-        opener = urllib2.build_opener(*tuple(handlers + [_FeedURLHandler()]))
-        opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent
-        try:
-            return opener.open(request)
-        finally:
-            opener.close() # JohnD
-
-    # try to open with native open function (if url_file_stream_or_string is a filename)
-    try:
-        return open(url_file_stream_or_string, 'rb')
-    except (IOError, UnicodeEncodeError, TypeError):
-        # if url_file_stream_or_string is a unicode object that
-        # cannot be converted to the encoding returned by
-        # sys.getfilesystemencoding(), a UnicodeEncodeError
-        # will be thrown
-        # If url_file_stream_or_string is a string that contains NULL
-        # (such as an XML document encoded in UTF-32), TypeError will
-        # be thrown.
-        pass
-
-    # treat url_file_stream_or_string as string
-    if isinstance(url_file_stream_or_string, unicode):
-        return _StringIO(url_file_stream_or_string.encode('utf-8'))
-    return _StringIO(url_file_stream_or_string)
-
-def _convert_to_idn(url):
-    """Convert a URL to IDN notation"""
-    # this function should only be called with a unicode string
-    # strategy: if the host cannot be encoded in ascii, then
-    # it'll be necessary to encode it in idn form
-    parts = list(urlparse.urlsplit(url))
-    try:
-        parts[1].encode('ascii')
-    except UnicodeEncodeError:
-        # the url needs to be converted to idn notation
-        host = parts[1].rsplit(':', 1)
-        newhost = []
-        port = u''
-        if len(host) == 2:
-            port = host.pop()
-        for h in host[0].split('.'):
-            newhost.append(h.encode('idna').decode('utf-8'))
-        parts[1] = '.'.join(newhost)
-        if port:
-            parts[1] += ':' + port
-        return urlparse.urlunsplit(parts)
-    else:
-        return url
-
-def _build_urllib2_request(url, agent, etag, modified, referrer, auth, request_headers):
-    request = urllib2.Request(url)
-    request.add_header('User-Agent', agent)
-    if etag:
-        request.add_header('If-None-Match', etag)
-    if isinstance(modified, basestring):
-        modified = _parse_date(modified)
-    elif isinstance(modified, datetime.datetime):
-        modified = modified.utctimetuple()
-    if modified:
-        # format into an RFC 1123-compliant timestamp. We can't use
-        # time.strftime() since the %a and %b directives can be affected
-        # by the current locale, but RFC 2616 states that dates must be
-        # in English.
-        short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
-        months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
-        request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5]))
-    if referrer:
-        request.add_header('Referer', referrer)
-    if gzip and zlib:
-        request.add_header('Accept-encoding', 'gzip, deflate')
-    elif gzip:
-        request.add_header('Accept-encoding', 'gzip')
-    elif zlib:
-        request.add_header('Accept-encoding', 'deflate')
-    else:
-        request.add_header('Accept-encoding', '')
-    if auth:
-        request.add_header('Authorization', 'Basic %s' % auth)
-    if ACCEPT_HEADER:
-        request.add_header('Accept', ACCEPT_HEADER)
-    # use this for whatever -- cookies, special headers, etc
-    # [('Cookie','Something'),('x-special-header','Another Value')]
-    for header_name, header_value in request_headers.items():
-        request.add_header(header_name, header_value)
-    request.add_header('A-IM', 'feed') # RFC 3229 support
-    return request
-
-def _parse_psc_chapter_start(start):
-    FORMAT = r'^((\d{2}):)?(\d{2}):(\d{2})(\.(\d{3}))?$'
-
-    m = re.compile(FORMAT).match(start)
-    if m is None:
-        return None
-
-    _, h, m, s, _, ms = m.groups()
-    h, m, s, ms = (int(h or 0), int(m), int(s), int(ms or 0))
-    return datetime.timedelta(0, h*60*60 + m*60 + s, ms*1000)
-
-_date_handlers = []
-def registerDateHandler(func):
-    '''Register a date handler function (takes string, returns 9-tuple date in GMT)'''
-    _date_handlers.insert(0, func)
-
-# ISO-8601 date parsing routines written by Fazal Majid.
-# The ISO 8601 standard is very convoluted and irregular - a full ISO 8601
-# parser is beyond the scope of feedparser and would be a worthwhile addition
-# to the Python library.
-# A single regular expression cannot parse ISO 8601 date formats into groups
-# as the standard is highly irregular (for instance is 030104 2003-01-04 or
-# 0301-04-01), so we use templates instead.
-# Please note the order in templates is significant because we need a
-# greedy match.
-_iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-0MM?-?DD', 'YYYY-MM', 'YYYY-?OOO',
-                'YY-?MM-?DD', 'YY-?OOO', 'YYYY',
-                '-YY-?MM', '-OOO', '-YY',
-                '--MM-?DD', '--MM',
-                '---DD',
-                'CC', '']
-_iso8601_re = [
-    tmpl.replace(
-    'YYYY', r'(?P<year>\d{4})').replace(
-    'YY', r'(?P<year>\d\d)').replace(
-    'MM', r'(?P<month>[01]\d)').replace(
-    'DD', r'(?P<day>[0123]\d)').replace(
-    'OOO', r'(?P<ordinal>[0123]\d\d)').replace(
-    'CC', r'(?P<century>\d\d$)')
-    + r'(T?(?P<hour>\d{2}):(?P<minute>\d{2})'
-    + r'(:(?P<second>\d{2}))?'
-    + r'(\.(?P<fracsecond>\d+))?'
-    + r'(?P<tz>[+-](?P<tzhour>\d{2})(:(?P<tzmin>\d{2}))?|Z)?)?'
-    for tmpl in _iso8601_tmpl]
-try:
-    del tmpl
-except NameError:
-    pass
-_iso8601_matches = [re.compile(regex).match for regex in _iso8601_re]
-try:
-    del regex
-except NameError:
-    pass
-    
-def _parse_date_iso8601(dateString):
-    '''Parse a variety of ISO-8601-compatible formats like 20040105'''
-    m = None
-    for _iso8601_match in _iso8601_matches:
-        m = _iso8601_match(dateString)
-        if m:
-            break
-    if not m:
-        return
-    if m.span() == (0, 0):
-        return
-    params = m.groupdict()
-    ordinal = params.get('ordinal', 0)
-    if ordinal:
-        ordinal = int(ordinal)
-    else:
-        ordinal = 0
-    year = params.get('year', '--')
-    if not year or year == '--':
-        year = time.gmtime()[0]
-    elif len(year) == 2:
-        # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993
-        year = 100 * int(time.gmtime()[0] / 100) + int(year)
-    else:
-        year = int(year)
-    month = params.get('month', '-')
-    if not month or month == '-':
-        # ordinals are NOT normalized by mktime, we simulate them
-        # by setting month=1, day=ordinal
-        if ordinal:
-            month = 1
-        else:
-            month = time.gmtime()[1]
-    month = int(month)
-    day = params.get('day', 0)
-    if not day:
-        # see above
-        if ordinal:
-            day = ordinal
-        elif params.get('century', 0) or \
-                 params.get('year', 0) or params.get('month', 0):
-            day = 1
-        else:
-            day = time.gmtime()[2]
-    else:
-        day = int(day)
-    # special case of the century - is the first year of the 21st century
-    # 2000 or 2001 ? The debate goes on...
-    if 'century' in params:
-        year = (int(params['century']) - 1) * 100 + 1
-    # in ISO 8601 most fields are optional
-    for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']:
-        if not params.get(field, None):
-            params[field] = 0
-    hour = int(params.get('hour', 0))
-    minute = int(params.get('minute', 0))
-    second = int(float(params.get('second', 0)))
-    # weekday is normalized by mktime(), we can ignore it
-    weekday = 0
-    daylight_savings_flag = -1
-    tm = [year, month, day, hour, minute, second, weekday,
-          ordinal, daylight_savings_flag]
-    # ISO 8601 time zone adjustments
-    tz = params.get('tz')
-    if tz and tz != 'Z':
-        if tz[0] == '-':
-            tm[3] += int(params.get('tzhour', 0))
-            tm[4] += int(params.get('tzmin', 0))
-        elif tz[0] == '+':
-            tm[3] -= int(params.get('tzhour', 0))
-            tm[4] -= int(params.get('tzmin', 0))
-        else:
-            return None
-    # Python's time.mktime() is a wrapper around the ANSI C mktime(3c)
-    # which is guaranteed to normalize d/m/y/h/m/s.
-    # Many implementations have bugs, but we'll pretend they don't.
-    return time.localtime(time.mktime(tuple(tm)))
-registerDateHandler(_parse_date_iso8601)
-
-# 8-bit date handling routines written by ytrewq1.
-_korean_year  = u'\ub144' # b3e2 in euc-kr
-_korean_month = u'\uc6d4' # bff9 in euc-kr
-_korean_day   = u'\uc77c' # c0cf in euc-kr
-_korean_am    = u'\uc624\uc804' # bfc0 c0fc in euc-kr
-_korean_pm    = u'\uc624\ud6c4' # bfc0 c8c4 in euc-kr
-
-_korean_onblog_date_re = \
-    re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \
-               (_korean_year, _korean_month, _korean_day))
-_korean_nate_date_re = \
-    re.compile(u'(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \
-               (_korean_am, _korean_pm))
-def _parse_date_onblog(dateString):
-    '''Parse a string according to the OnBlog 8-bit date format'''
-    m = _korean_onblog_date_re.match(dateString)
-    if not m:
-        return
-    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \
-                {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\
-                 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\
-                 'zonediff': '+09:00'}
-    return _parse_date_w3dtf(w3dtfdate)
-registerDateHandler(_parse_date_onblog)
-
-def _parse_date_nate(dateString):
-    '''Parse a string according to the Nate 8-bit date format'''
-    m = _korean_nate_date_re.match(dateString)
-    if not m:
-        return
-    hour = int(m.group(5))
-    ampm = m.group(4)
-    if (ampm == _korean_pm):
-        hour += 12
-    hour = str(hour)
-    if len(hour) == 1:
-        hour = '0' + hour
-    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \
-                {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\
-                 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\
-                 'zonediff': '+09:00'}
-    return _parse_date_w3dtf(w3dtfdate)
-registerDateHandler(_parse_date_nate)
-
-# Unicode strings for Greek date strings
-_greek_months = \
-  { \
-   u'\u0399\u03b1\u03bd': u'Jan',       # c9e1ed in iso-8859-7
-   u'\u03a6\u03b5\u03b2': u'Feb',       # d6e5e2 in iso-8859-7
-   u'\u039c\u03ac\u03ce': u'Mar',       # ccdcfe in iso-8859-7
-   u'\u039c\u03b1\u03ce': u'Mar',       # cce1fe in iso-8859-7
-   u'\u0391\u03c0\u03c1': u'Apr',       # c1f0f1 in iso-8859-7
-   u'\u039c\u03ac\u03b9': u'May',       # ccdce9 in iso-8859-7
-   u'\u039c\u03b1\u03ca': u'May',       # cce1fa in iso-8859-7
-   u'\u039c\u03b1\u03b9': u'May',       # cce1e9 in iso-8859-7
-   u'\u0399\u03bf\u03cd\u03bd': u'Jun', # c9effded in iso-8859-7
-   u'\u0399\u03bf\u03bd': u'Jun',       # c9efed in iso-8859-7
-   u'\u0399\u03bf\u03cd\u03bb': u'Jul', # c9effdeb in iso-8859-7
-   u'\u0399\u03bf\u03bb': u'Jul',       # c9f9eb in iso-8859-7
-   u'\u0391\u03cd\u03b3': u'Aug',       # c1fde3 in iso-8859-7
-   u'\u0391\u03c5\u03b3': u'Aug',       # c1f5e3 in iso-8859-7
-   u'\u03a3\u03b5\u03c0': u'Sep',       # d3e5f0 in iso-8859-7
-   u'\u039f\u03ba\u03c4': u'Oct',       # cfeaf4 in iso-8859-7
-   u'\u039d\u03bf\u03ad': u'Nov',       # cdefdd in iso-8859-7
-   u'\u039d\u03bf\u03b5': u'Nov',       # cdefe5 in iso-8859-7
-   u'\u0394\u03b5\u03ba': u'Dec',       # c4e5ea in iso-8859-7
-  }
-
-_greek_wdays = \
-  { \
-   u'\u039a\u03c5\u03c1': u'Sun', # caf5f1 in iso-8859-7
-   u'\u0394\u03b5\u03c5': u'Mon', # c4e5f5 in iso-8859-7
-   u'\u03a4\u03c1\u03b9': u'Tue', # d4f1e9 in iso-8859-7
-   u'\u03a4\u03b5\u03c4': u'Wed', # d4e5f4 in iso-8859-7
-   u'\u03a0\u03b5\u03bc': u'Thu', # d0e5ec in iso-8859-7
-   u'\u03a0\u03b1\u03c1': u'Fri', # d0e1f1 in iso-8859-7
-   u'\u03a3\u03b1\u03b2': u'Sat', # d3e1e2 in iso-8859-7
-  }
-
-_greek_date_format_re = \
-    re.compile(u'([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)')
-
-def _parse_date_greek(dateString):
-    '''Parse a string according to a Greek 8-bit date format.'''
-    m = _greek_date_format_re.match(dateString)
-    if not m:
-        return
-    wday = _greek_wdays[m.group(1)]
-    month = _greek_months[m.group(3)]
-    rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \
-                 {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\
-                  'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\
-                  'zonediff': m.group(8)}
-    return _parse_date_rfc822(rfc822date)
-registerDateHandler(_parse_date_greek)
-
-# Unicode strings for Hungarian date strings
-_hungarian_months = \
-  { \
-    u'janu\u00e1r':   u'01',  # e1 in iso-8859-2
-    u'febru\u00e1ri': u'02',  # e1 in iso-8859-2
-    u'm\u00e1rcius':  u'03',  # e1 in iso-8859-2
-    u'\u00e1prilis':  u'04',  # e1 in iso-8859-2
-    u'm\u00e1ujus':   u'05',  # e1 in iso-8859-2
-    u'j\u00fanius':   u'06',  # fa in iso-8859-2
-    u'j\u00falius':   u'07',  # fa in iso-8859-2
-    u'augusztus':     u'08',
-    u'szeptember':    u'09',
-    u'okt\u00f3ber':  u'10',  # f3 in iso-8859-2
-    u'november':      u'11',
-    u'december':      u'12',
-  }
-
-_hungarian_date_format_re = \
-  re.compile(u'(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))')
-
-def _parse_date_hungarian(dateString):
-    '''Parse a string according to a Hungarian 8-bit date format.'''
-    m = _hungarian_date_format_re.match(dateString)
-    if not m or m.group(2) not in _hungarian_months:
-        return None
-    month = _hungarian_months[m.group(2)]
-    day = m.group(3)
-    if len(day) == 1:
-        day = '0' + day
-    hour = m.group(4)
-    if len(hour) == 1:
-        hour = '0' + hour
-    w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \
-                {'year': m.group(1), 'month': month, 'day': day,\
-                 'hour': hour, 'minute': m.group(5),\
-                 'zonediff': m.group(6)}
-    return _parse_date_w3dtf(w3dtfdate)
-registerDateHandler(_parse_date_hungarian)
-
-timezonenames = {
-    'ut': 0, 'gmt': 0, 'z': 0,
-    'adt': -3, 'ast': -4, 'at': -4,
-    'edt': -4, 'est': -5, 'et': -5,
-    'cdt': -5, 'cst': -6, 'ct': -6,
-    'mdt': -6, 'mst': -7, 'mt': -7,
-    'pdt': -7, 'pst': -8, 'pt': -8,
-    'a': -1, 'n': 1,
-    'm': -12, 'y': 12,
-}
-# W3 date and time format parser
-# http://www.w3.org/TR/NOTE-datetime
-# Also supports MSSQL-style datetimes as defined at:
-# http://msdn.microsoft.com/en-us/library/ms186724.aspx
-# (basically, allow a space as a date/time/timezone separator)
-def _parse_date_w3dtf(datestr):
-    if not datestr.strip():
-        return None
-    parts = datestr.lower().split('t')
-    if len(parts) == 1:
-        # This may be a date only, or may be an MSSQL-style date
-        parts = parts[0].split()
-        if len(parts) == 1:
-            # Treat this as a date only
-            parts.append('00:00:00z')
-    elif len(parts) > 2:
-        return None
-    date = parts[0].split('-', 2) 
-    if not date or len(date[0]) != 4:
-        return None
-    # Ensure that `date` has 3 elements. Using '1' sets the default
-    # month to January and the default day to the 1st of the month.
-    date.extend(['1'] * (3 - len(date)))
-    try:
-        year, month, day = [int(i) for i in date]
-    except ValueError:
-        # `date` may have more than 3 elements or may contain
-        # non-integer strings.
-        return None
-    if parts[1].endswith('z'):
-        parts[1] = parts[1][:-1]
-        parts.append('z')
-    # Append the numeric timezone offset, if any, to parts.
-    # If this is an MSSQL-style date then parts[2] already contains
-    # the timezone information, so `append()` will not affect it.
-    # Add 1 to each value so that if `find()` returns -1 it will be
-    # treated as False.
-    loc = parts[1].find('-') + 1 or parts[1].find('+') + 1 or len(parts[1]) + 1
-    loc = loc - 1
-    parts.append(parts[1][loc:])
-    parts[1] = parts[1][:loc]
-    time = parts[1].split(':', 2)
-    # Ensure that time has 3 elements. Using '0' means that the
-    # minutes and seconds, if missing, will default to 0.
-    time.extend(['0'] * (3 - len(time)))
-    tzhour = 0
-    tzmin = 0
-    if parts[2][:1] in ('-', '+'):
-        try:
-            tzhour = int(parts[2][1:3])
-            tzmin = int(parts[2][4:])
-        except ValueError:
-            return None
-        if parts[2].startswith('-'):
-            tzhour = tzhour * -1
-            tzmin = tzmin * -1
-    else:
-        tzhour = timezonenames.get(parts[2], 0)
-    try:
-        hour, minute, second = [int(float(i)) for i in time]
-    except ValueError:
-        return None
-    # Create the datetime object and timezone delta objects
-    try:
-        stamp = datetime.datetime(year, month, day, hour, minute, second)
-    except ValueError:
-        return None
-    delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour)
-    # Return the date and timestamp in a UTC 9-tuple
-    try:
-        return (stamp - delta).utctimetuple()
-    except (OverflowError, ValueError):
-        # IronPython throws ValueErrors instead of OverflowErrors
-        return None
-
-registerDateHandler(_parse_date_w3dtf)
-
-def _parse_date_rfc822(date):
-    """Parse RFC 822 dates and times
-    http://tools.ietf.org/html/rfc822#section-5
-
-    There are some formatting differences that are accounted for:
-    1. Years may be two or four digits.
-    2. The month and day can be swapped.
-    3. Additional timezone names are supported.
-    4. A default time and timezone are assumed if only a date is present.
-    """
-    daynames = set(['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'])
-    months = {
-        'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5, 'jun': 6,
-        'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12,
-    }
-
-    parts = date.lower().split()
-    if len(parts) < 5:
-        # Assume that the time and timezone are missing
-        parts.extend(('00:00:00', '0000'))
-    # Remove the day name
-    if parts[0][:3] in daynames:
-        parts = parts[1:]
-    if len(parts) < 5:
-        # If there are still fewer than five parts, there's not enough
-        # information to interpret this
-        return None
-    try:
-        day = int(parts[0])
-    except ValueError:
-        # Check if the day and month are swapped
-        if months.get(parts[0][:3]):
-            try:
-                day = int(parts[1])
-            except ValueError:
-                return None
-            else:
-                parts[1] = parts[0]
-        else:
-            return None
-    month = months.get(parts[1][:3])
-    if not month:
-        return None
-    try:
-        year = int(parts[2])
-    except ValueError:
-        return None
-    # Normalize two-digit years:
-    # Anything in the 90's is interpreted as 1990 and on
-    # Anything 89 or less is interpreted as 2089 or before
-    if len(parts[2]) <= 2:
-        year += (1900, 2000)[year < 90]
-    timeparts = parts[3].split(':')
-    timeparts = timeparts + ([0] * (3 - len(timeparts)))
-    try:
-        (hour, minute, second) = map(int, timeparts)
-    except ValueError:
-        return None
-    tzhour = 0
-    tzmin = 0
-    # Strip 'Etc/' from the timezone
-    if parts[4].startswith('etc/'):
-        parts[4] = parts[4][4:]
-    # Normalize timezones that start with 'gmt':
-    # GMT-05:00 => -0500
-    # GMT => GMT
-    if parts[4].startswith('gmt'):
-        parts[4] = ''.join(parts[4][3:].split(':')) or 'gmt'
-    # Handle timezones like '-0500', '+0500', and 'EST'
-    if parts[4] and parts[4][0] in ('-', '+'):
-        try:
-            tzhour = int(parts[4][1:3])
-            tzmin = int(parts[4][3:])
-        except ValueError:
-            return None
-        if parts[4].startswith('-'):
-            tzhour = tzhour * -1
-            tzmin = tzmin * -1
-    else:
-        tzhour = timezonenames.get(parts[4], 0)
-    # Create the datetime object and timezone delta objects
-    try:
-        stamp = datetime.datetime(year, month, day, hour, minute, second)
-    except ValueError:
-        return None
-    delta = datetime.timedelta(0, 0, 0, 0, tzmin, tzhour)
-    # Return the date and timestamp in a UTC 9-tuple
-    try:
-        return (stamp - delta).utctimetuple()
-    except (OverflowError, ValueError):
-        # IronPython throws ValueErrors instead of OverflowErrors
-        return None
-registerDateHandler(_parse_date_rfc822)
-
-_months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
-           'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
-def _parse_date_asctime(dt):
-    """Parse asctime-style dates"""
-    dayname, month, day, remainder = dt.split(None, 3)
-    # Convert month and day into zero-padded integers
-    month = '%02i ' % (_months.index(month.lower()) + 1)
-    day = '%02i ' % (int(day),)
-    dt = month + day + remainder
-    return time.strptime(dt, '%m %d %H:%M:%S %Y')[:-1] + (0, )
-registerDateHandler(_parse_date_asctime)
-
-def _parse_date_perforce(aDateString):
-    """parse a date in yyyy/mm/dd hh:mm:ss TTT format"""
-    # Fri, 2006/09/15 08:19:53 EDT
-    _my_date_pattern = re.compile( \
-        r'(\w{,3}), (\d{,4})/(\d{,2})/(\d{2}) (\d{,2}):(\d{2}):(\d{2}) (\w{,3})')
-
-    m = _my_date_pattern.search(aDateString)
-    if m is None:
-        return None
-    dow, year, month, day, hour, minute, second, tz = m.groups()
-    months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
-    dateString = "%s, %s %s %s %s:%s:%s %s" % (dow, day, months[int(month) - 1], year, hour, minute, second, tz)
-    tm = rfc822.parsedate_tz(dateString)
-    if tm:
-        return time.gmtime(rfc822.mktime_tz(tm))
-registerDateHandler(_parse_date_perforce)
-
-def _parse_date(dateString):
-    '''Parses a variety of date formats into a 9-tuple in GMT'''
-    if not dateString:
-        return None
-    for handler in _date_handlers:
-        try:
-            date9tuple = handler(dateString)
-        except (KeyError, OverflowError, ValueError):
-            continue
-        if not date9tuple:
-            continue
-        if len(date9tuple) != 9:
-            continue
-        return date9tuple
-    return None
-
-# Each marker represents some of the characters of the opening XML
-# processing instruction ('<?xm') in the specified encoding.
-EBCDIC_MARKER = _l2bytes([0x4C, 0x6F, 0xA7, 0x94])
-UTF16BE_MARKER = _l2bytes([0x00, 0x3C, 0x00, 0x3F])
-UTF16LE_MARKER = _l2bytes([0x3C, 0x00, 0x3F, 0x00])
-UTF32BE_MARKER = _l2bytes([0x00, 0x00, 0x00, 0x3C])
-UTF32LE_MARKER = _l2bytes([0x3C, 0x00, 0x00, 0x00])
-
-ZERO_BYTES = _l2bytes([0x00, 0x00])
-
-# Match the opening XML declaration.
-# Example: <?xml version="1.0" encoding="utf-8"?>
-RE_XML_DECLARATION = re.compile('^<\?xml[^>]*?>')
-
-# Capture the value of the XML processing instruction's encoding attribute.
-# Example: <?xml version="1.0" encoding="utf-8"?>
-RE_XML_PI_ENCODING = re.compile(_s2bytes('^<\?.*encoding=[\'"](.*?)[\'"].*\?>'))
-
-def convert_to_utf8(http_headers, data):
-    '''Detect and convert the character encoding to UTF-8.
-
-    http_headers is a dictionary
-    data is a raw string (not Unicode)'''
-
-    # This is so much trickier than it sounds, it's not even funny.
-    # According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type
-    # is application/xml, application/*+xml,
-    # application/xml-external-parsed-entity, or application/xml-dtd,
-    # the encoding given in the charset parameter of the HTTP Content-Type
-    # takes precedence over the encoding given in the XML prefix within the
-    # document, and defaults to 'utf-8' if neither are specified.  But, if
-    # the HTTP Content-Type is text/xml, text/*+xml, or
-    # text/xml-external-parsed-entity, the encoding given in the XML prefix
-    # within the document is ALWAYS IGNORED and only the encoding given in
-    # the charset parameter of the HTTP Content-Type header should be
-    # respected, and it defaults to 'us-ascii' if not specified.
-
-    # Furthermore, discussion on the atom-syntax mailing list with the
-    # author of RFC 3023 leads me to the conclusion that any document
-    # served with a Content-Type of text/* and no charset parameter
-    # must be treated as us-ascii.  (We now do this.)  And also that it
-    # must always be flagged as non-well-formed.  (We now do this too.)
-
-    # If Content-Type is unspecified (input was local file or non-HTTP source)
-    # or unrecognized (server just got it totally wrong), then go by the
-    # encoding given in the XML prefix of the document and default to
-    # 'iso-8859-1' as per the HTTP specification (RFC 2616).
-
-    # Then, assuming we didn't find a character encoding in the HTTP headers
-    # (and the HTTP Content-type allowed us to look in the body), we need
-    # to sniff the first few bytes of the XML data and try to determine
-    # whether the encoding is ASCII-compatible.  Section F of the XML
-    # specification shows the way here:
-    # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info
-
-    # If the sniffed encoding is not ASCII-compatible, we need to make it
-    # ASCII compatible so that we can sniff further into the XML declaration
-    # to find the encoding attribute, which will tell us the true encoding.
-
-    # Of course, none of this guarantees that we will be able to parse the
-    # feed in the declared character encoding (assuming it was declared
-    # correctly, which many are not).  iconv_codec can help a lot;
-    # you should definitely install it if you can.
-    # http://cjkpython.i18n.org/
-
-    bom_encoding = u''
-    xml_encoding = u''
-    rfc3023_encoding = u''
-
-    # Look at the first few bytes of the document to guess what
-    # its encoding may be. We only need to decode enough of the
-    # document that we can use an ASCII-compatible regular
-    # expression to search for an XML encoding declaration.
-    # The heuristic follows the XML specification, section F:
-    # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info
-    # Check for BOMs first.
-    if data[:4] == codecs.BOM_UTF32_BE:
-        bom_encoding = u'utf-32be'
-        data = data[4:]
-    elif data[:4] == codecs.BOM_UTF32_LE:
-        bom_encoding = u'utf-32le'
-        data = data[4:]
-    elif data[:2] == codecs.BOM_UTF16_BE and data[2:4] != ZERO_BYTES:
-        bom_encoding = u'utf-16be'
-        data = data[2:]
-    elif data[:2] == codecs.BOM_UTF16_LE and data[2:4] != ZERO_BYTES:
-        bom_encoding = u'utf-16le'
-        data = data[2:]
-    elif data[:3] == codecs.BOM_UTF8:
-        bom_encoding = u'utf-8'
-        data = data[3:]
-    # Check for the characters '<?xm' in several encodings.
-    elif data[:4] == EBCDIC_MARKER:
-        bom_encoding = u'cp037'
-    elif data[:4] == UTF16BE_MARKER:
-        bom_encoding = u'utf-16be'
-    elif data[:4] == UTF16LE_MARKER:
-        bom_encoding = u'utf-16le'
-    elif data[:4] == UTF32BE_MARKER:
-        bom_encoding = u'utf-32be'
-    elif data[:4] == UTF32LE_MARKER:
-        bom_encoding = u'utf-32le'
-
-    tempdata = data
-    try:
-        if bom_encoding:
-            tempdata = data.decode(bom_encoding).encode('utf-8')
-    except (UnicodeDecodeError, LookupError):
-        # feedparser recognizes UTF-32 encodings that aren't
-        # available in Python 2.4 and 2.5, so it's possible to
-        # encounter a LookupError during decoding.
-        xml_encoding_match = None
-    else:
-        xml_encoding_match = RE_XML_PI_ENCODING.match(tempdata)
-
-    if xml_encoding_match:
-        xml_encoding = xml_encoding_match.groups()[0].decode('utf-8').lower()
-        # Normalize the xml_encoding if necessary.
-        if bom_encoding and (xml_encoding in (
-            u'u16', u'utf-16', u'utf16', u'utf_16',
-            u'u32', u'utf-32', u'utf32', u'utf_32',
-            u'iso-10646-ucs-2', u'iso-10646-ucs-4',
-            u'csucs4', u'csunicode', u'ucs-2', u'ucs-4'
-        )):
-            xml_encoding = bom_encoding
-
-    # Find the HTTP Content-Type and, hopefully, a character
-    # encoding provided by the server. The Content-Type is used
-    # to choose the "correct" encoding among the BOM encoding,
-    # XML declaration encoding, and HTTP encoding, following the
-    # heuristic defined in RFC 3023.
-    http_content_type = http_headers.get('content-type') or ''
-    http_content_type, params = cgi.parse_header(http_content_type)
-    http_encoding = params.get('charset', '').replace("'", "")
-    if not isinstance(http_encoding, unicode):
-        http_encoding = http_encoding.decode('utf-8', 'ignore')
-
-    acceptable_content_type = 0
-    application_content_types = (u'application/xml', u'application/xml-dtd',
-                                 u'application/xml-external-parsed-entity')
-    text_content_types = (u'text/xml', u'text/xml-external-parsed-entity')
-    if (http_content_type in application_content_types) or \
-       (http_content_type.startswith(u'application/') and 
-        http_content_type.endswith(u'+xml')):
-        acceptable_content_type = 1
-        rfc3023_encoding = http_encoding or xml_encoding or u'utf-8'
-    elif (http_content_type in text_content_types) or \
-         (http_content_type.startswith(u'text/') and
-          http_content_type.endswith(u'+xml')):
-        acceptable_content_type = 1
-        rfc3023_encoding = http_encoding or u'us-ascii'
-    elif http_content_type.startswith(u'text/'):
-        rfc3023_encoding = http_encoding or u'us-ascii'
-    elif http_headers and 'content-type' not in http_headers:
-        rfc3023_encoding = xml_encoding or u'iso-8859-1'
-    else:
-        rfc3023_encoding = xml_encoding or u'utf-8'
-    # gb18030 is a superset of gb2312, so always replace gb2312
-    # with gb18030 for greater compatibility.
-    if rfc3023_encoding.lower() == u'gb2312':
-        rfc3023_encoding = u'gb18030'
-    if xml_encoding.lower() == u'gb2312':
-        xml_encoding = u'gb18030'
-
-    # there are four encodings to keep track of:
-    # - http_encoding is the encoding declared in the Content-Type HTTP header
-    # - xml_encoding is the encoding declared in the <?xml declaration
-    # - bom_encoding is the encoding sniffed from the first 4 bytes of the XML data
-    # - rfc3023_encoding is the actual encoding, as per RFC 3023 and a variety of other conflicting specifications
-    error = None
-
-    if http_headers and (not acceptable_content_type):
-        if 'content-type' in http_headers:
-            msg = '%s is not an XML media type' % http_headers['content-type']
-        else:
-            msg = 'no Content-type specified'
-        error = NonXMLContentType(msg)
-
-    # determine character encoding
-    known_encoding = 0
-    chardet_encoding = None
-    tried_encodings = []
-    if chardet:
-        chardet_encoding = chardet.detect(data)['encoding']
-        if not chardet_encoding:
-            chardet_encoding = ''
-        if not isinstance(chardet_encoding, unicode):
-            chardet_encoding = unicode(chardet_encoding, 'ascii', 'ignore')
-    # try: HTTP encoding, declared XML encoding, encoding sniffed from BOM
-    for proposed_encoding in (rfc3023_encoding, xml_encoding, bom_encoding,
-                              chardet_encoding, u'utf-8', u'windows-1252', u'iso-8859-2'):
-        if not proposed_encoding:
-            continue
-        if proposed_encoding in tried_encodings:
-            continue
-        tried_encodings.append(proposed_encoding)
-        try:
-            data = data.decode(proposed_encoding)
-        except (UnicodeDecodeError, LookupError):
-            pass
-        else:
-            known_encoding = 1
-            # Update the encoding in the opening XML processing instruction.
-            new_declaration = '''<?xml version='1.0' encoding='utf-8'?>'''
-            if RE_XML_DECLARATION.search(data):
-                data = RE_XML_DECLARATION.sub(new_declaration, data)
-            else:
-                data = new_declaration + u'\n' + data
-            data = data.encode('utf-8')
-            break
-    # if still no luck, give up
-    if not known_encoding:
-        error = CharacterEncodingUnknown(
-            'document encoding unknown, I tried ' +
-            '%s, %s, utf-8, windows-1252, and iso-8859-2 but nothing worked' %
-            (rfc3023_encoding, xml_encoding))
-        rfc3023_encoding = u''
-    elif proposed_encoding != rfc3023_encoding:
-        error = CharacterEncodingOverride(
-            'document declared as %s, but parsed as %s' %
-            (rfc3023_encoding, proposed_encoding))
-        rfc3023_encoding = proposed_encoding
-
-    return data, rfc3023_encoding, error
-
-# Match XML entity declarations.
-# Example: <!ENTITY copyright "(C)">
-RE_ENTITY_PATTERN = re.compile(_s2bytes(r'^\s*<!ENTITY([^>]*?)>'), re.MULTILINE)
-
-# Match XML DOCTYPE declarations.
-# Example: <!DOCTYPE feed [ ]>
-RE_DOCTYPE_PATTERN = re.compile(_s2bytes(r'^\s*<!DOCTYPE([^>]*?)>'), re.MULTILINE)
-
-# Match safe entity declarations.
-# This will allow hexadecimal character references through,
-# as well as text, but not arbitrary nested entities.
-# Example: cubed "&#179;"
-# Example: copyright "(C)"
-# Forbidden: explode1 "&explode2;&explode2;"
-RE_SAFE_ENTITY_PATTERN = re.compile(_s2bytes('\s+(\w+)\s+"(&#\w+;|[^&"]*)"'))
-
-def replace_doctype(data):
-    '''Strips and replaces the DOCTYPE, returns (rss_version, stripped_data)
-
-    rss_version may be 'rss091n' or None
-    stripped_data is the same XML document with a replaced DOCTYPE
-    '''
-
-    # Divide the document into two groups by finding the location
-    # of the first element that doesn't begin with '<?' or '<!'.
-    start = re.search(_s2bytes('<\w'), data)
-    start = start and start.start() or -1
-    head, data = data[:start+1], data[start+1:]
-
-    # Save and then remove all of the ENTITY declarations.
-    entity_results = RE_ENTITY_PATTERN.findall(head)
-    head = RE_ENTITY_PATTERN.sub(_s2bytes(''), head)
-
-    # Find the DOCTYPE declaration and check the feed type.
-    doctype_results = RE_DOCTYPE_PATTERN.findall(head)
-    doctype = doctype_results and doctype_results[0] or _s2bytes('')
-    if _s2bytes('netscape') in doctype.lower():
-        version = u'rss091n'
-    else:
-        version = None
-
-    # Re-insert the safe ENTITY declarations if a DOCTYPE was found.
-    replacement = _s2bytes('')
-    if len(doctype_results) == 1 and entity_results:
-        match_safe_entities = lambda e: RE_SAFE_ENTITY_PATTERN.match(e)
-        safe_entities = filter(match_safe_entities, entity_results)
-        if safe_entities:
-            replacement = _s2bytes('<!DOCTYPE feed [\n<!ENTITY') \
-                        + _s2bytes('>\n<!ENTITY ').join(safe_entities) \
-                        + _s2bytes('>\n]>')
-    data = RE_DOCTYPE_PATTERN.sub(replacement, head) + data
-
-    # Precompute the safe entities for the loose parser.
-    safe_entities = dict((k.decode('utf-8'), v.decode('utf-8'))
-                      for k, v in RE_SAFE_ENTITY_PATTERN.findall(replacement))
-    return version, data, safe_entities
-
-
-# GeoRSS geometry parsers. Each return a dict with 'type' and 'coordinates'
-# items, or None in the case of a parsing error.
-
-def _parse_poslist(value, geom_type, swap=True, dims=2):
-    if geom_type == 'linestring':
-        return _parse_georss_line(value, swap, dims)
-    elif geom_type == 'polygon':
-        ring = _parse_georss_line(value, swap, dims)
-        return {'type': u'Polygon', 'coordinates': (ring['coordinates'],)}
-    else:
-        return None
-
-def _gen_georss_coords(value, swap=True, dims=2):
-    # A generator of (lon, lat) pairs from a string of encoded GeoRSS
-    # coordinates. Converts to floats and swaps order.
-    latlons = itertools.imap(float, value.strip().replace(',', ' ').split())
-    nxt = latlons.next
-    while True:
-        t = [nxt(), nxt()][::swap and -1 or 1]
-        if dims == 3:
-            t.append(nxt())
-        yield tuple(t)
-
-def _parse_georss_point(value, swap=True, dims=2):
-    # A point contains a single latitude-longitude pair, separated by
-    # whitespace. We'll also handle comma separators.
-    try:
-        coords = list(_gen_georss_coords(value, swap, dims))
-        return {u'type': u'Point', u'coordinates': coords[0]}
-    except (IndexError, ValueError):
-        return None
-
-def _parse_georss_line(value, swap=True, dims=2):
-    # A line contains a space separated list of latitude-longitude pairs in
-    # WGS84 coordinate reference system, with each pair separated by
-    # whitespace. There must be at least two pairs.
-    try:
-        coords = list(_gen_georss_coords(value, swap, dims))
-        return {u'type': u'LineString', u'coordinates': coords}
-    except (IndexError, ValueError):
-        return None
-
-def _parse_georss_polygon(value, swap=True, dims=2):
-    # A polygon contains a space separated list of latitude-longitude pairs,
-    # with each pair separated by whitespace. There must be at least four
-    # pairs, with the last being identical to the first (so a polygon has a
-    # minimum of three actual points). 
-    try:
-        ring = list(_gen_georss_coords(value, swap, dims))
-    except (IndexError, ValueError):
-        return None
-    if len(ring) < 4:
-        return None
-    return {u'type': u'Polygon', u'coordinates': (ring,)}
-
-def _parse_georss_box(value, swap=True, dims=2):
-    # A bounding box is a rectangular region, often used to define the extents
-    # of a map or a rough area of interest. A box contains two space seperate
-    # latitude-longitude pairs, with each pair separated by whitespace. The
-    # first pair is the lower corner, the second is the upper corner.
-    try:
-        coords = list(_gen_georss_coords(value, swap, dims))
-        return {u'type': u'Box', u'coordinates': tuple(coords)}
-    except (IndexError, ValueError):
-        return None
-
-# end geospatial parsers
-
-
-def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=None, request_headers=None, response_headers=None):
-    '''Parse a feed from a URL, file, stream, or string.
-
-    request_headers, if given, is a dict from http header name to value to add
-    to the request; this overrides internally generated values.
-    '''
-
-    if handlers is None:
-        handlers = []
-    if request_headers is None:
-        request_headers = {}
-    if response_headers is None:
-        response_headers = {}
-
-    result = FeedParserDict()
-    result['feed'] = FeedParserDict()
-    result['entries'] = []
-    result['bozo'] = 0
-    if not isinstance(handlers, list):
-        handlers = [handlers]
-    try:
-        f = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers)
-        data = f.read()
-    except Exception, e:
-        result['bozo'] = 1
-        result['bozo_exception'] = e
-        data = None
-        f = None
-
-    if hasattr(f, 'headers'):
-        result['headers'] = dict(f.headers)
-    # overwrite existing headers using response_headers
-    if 'headers' in result:
-        result['headers'].update(response_headers)
-    elif response_headers:
-        result['headers'] = copy.deepcopy(response_headers)
-
-    # lowercase all of the HTTP headers for comparisons per RFC 2616
-    if 'headers' in result:
-        http_headers = dict((k.lower(), v) for k, v in result['headers'].items())
-    else:
-        http_headers = {}
-
-    # if feed is gzip-compressed, decompress it
-    if f and data and http_headers:
-        if gzip and 'gzip' in http_headers.get('content-encoding', ''):
-            try:
-                attempts = 0
-                while(len(data) > 1 and data[0] == '\x1f' and data[1] == '\x8b' and attempts < 3):
-                    attempts += 1
-                    data = gzip.GzipFile(fileobj=_StringIO(data)).read()
-            except (IOError, struct.error), e:
-                # IOError can occur if the gzip header is bad.
-                # struct.error can occur if the data is damaged.
-                result['bozo'] = 1
-                result['bozo_exception'] = e
-                if isinstance(e, struct.error):
-                    # A gzip header was found but the data is corrupt.
-                    # Ideally, we should re-request the feed without the
-                    # 'Accept-encoding: gzip' header, but we don't.
-                    data = None
-        elif zlib and 'deflate' in http_headers.get('content-encoding', ''):
-            try:
-                data = zlib.decompress(data)
-            except zlib.error, e:
-                try:
-                    # The data may have no headers and no checksum.
-                    data = zlib.decompress(data, -15)
-                except zlib.error, e:
-                    result['bozo'] = 1
-                    result['bozo_exception'] = e
-
-    # save HTTP headers
-    if http_headers:
-        if 'etag' in http_headers:
-            etag = http_headers.get('etag', u'')
-            if not isinstance(etag, unicode):
-                etag = etag.decode('utf-8', 'ignore')
-            if etag:
-                result['etag'] = etag
-        if 'last-modified' in http_headers:
-            modified = http_headers.get('last-modified', u'')
-            if modified:
-                result['modified'] = modified
-                result['modified_parsed'] = _parse_date(modified)
-    if hasattr(f, 'url'):
-        if not isinstance(f.url, unicode):
-            result['href'] = f.url.decode('utf-8', 'ignore')
-        else:
-            result['href'] = f.url
-        result['status'] = 200
-    if hasattr(f, 'status'):
-        result['status'] = f.status
-    if hasattr(f, 'close'):
-        f.close()
-
-    if data is None:
-        return result
-
-    # Stop processing if the server sent HTTP 304 Not Modified.
-    if getattr(f, 'code', 0) == 304:
-        result['version'] = u''
-        result['debug_message'] = 'The feed has not changed since you last checked, ' + \
-            'so the server sent no data.  This is a feature, not a bug!'
-        return result
-
-    data, result['encoding'], error = convert_to_utf8(http_headers, data)
-    use_strict_parser = result['encoding'] and True or False
-    if error is not None:
-        result['bozo'] = 1
-        result['bozo_exception'] = error
-
-    result['version'], data, entities = replace_doctype(data)
-
-    # Ensure that baseuri is an absolute URI using an acceptable URI scheme.
-    contentloc = http_headers.get('content-location', u'')
-    href = result.get('href', u'')
-    baseuri = _makeSafeAbsoluteURI(href, contentloc) or _makeSafeAbsoluteURI(contentloc) or href
-
-    baselang = http_headers.get('content-language', None)
-    if not isinstance(baselang, unicode) and baselang is not None:
-        baselang = baselang.decode('utf-8', 'ignore')
-
-    if not _XML_AVAILABLE:
-        use_strict_parser = 0
-    if use_strict_parser:
-        # initialize the SAX parser
-        feedparser = _StrictFeedParser(baseuri, baselang, 'utf-8')
-        saxparser = xml.sax.make_parser(PREFERRED_XML_PARSERS)
-        saxparser.setFeature(xml.sax.handler.feature_namespaces, 1)
-        try:
-            # disable downloading external doctype references, if possible
-            saxparser.setFeature(xml.sax.handler.feature_external_ges, 0)
-        except xml.sax.SAXNotSupportedException:
-            pass
-        saxparser.setContentHandler(feedparser)
-        saxparser.setErrorHandler(feedparser)
-        source = xml.sax.xmlreader.InputSource()
-        source.setByteStream(_StringIO(data))
-        try:
-            saxparser.parse(source)
-        except xml.sax.SAXException, e:
-            result['bozo'] = 1
-            result['bozo_exception'] = feedparser.exc or e
-            use_strict_parser = 0
-    if not use_strict_parser and _SGML_AVAILABLE:
-        feedparser = _LooseFeedParser(baseuri, baselang, 'utf-8', entities)
-        feedparser.feed(data.decode('utf-8', 'replace'))
-    result['feed'] = feedparser.feeddata
-    result['entries'] = feedparser.entries
-    result['version'] = result['version'] or feedparser.version
-    result['namespaces'] = feedparser.namespacesInUse
-    return result
-
-# The list of EPSG codes for geographic (latitude/longitude) coordinate
-# systems to support decoding of GeoRSS GML profiles.
-_geogCS = [
-3819, 3821, 3824, 3889, 3906, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008,
-4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4018, 4019, 4020, 4021, 4022,
-4023, 4024, 4025, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036,
-4041, 4042, 4043, 4044, 4045, 4046, 4047, 4052, 4053, 4054, 4055, 4075, 4081,
-4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132,
-4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145,
-4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158,
-4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171,
-4172, 4173, 4174, 4175, 4176, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185,
-4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200,
-4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213,
-4214, 4215, 4216, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227,
-4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240,
-4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253,
-4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266,
-4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279,
-4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4291, 4292, 4293,
-4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4306, 4307,
-4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4322,
-4324, 4326, 4463, 4470, 4475, 4483, 4490, 4555, 4558, 4600, 4601, 4602, 4603,
-4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616,
-4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629,
-4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642,
-4643, 4644, 4645, 4646, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665,
-4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678,
-4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691,
-4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704,
-4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717,
-4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730,
-4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743,
-4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756,
-4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4801, 4802, 4803, 4804,
-4805, 4806, 4807, 4808, 4809, 4810, 4811, 4813, 4814, 4815, 4816, 4817, 4818,
-4819, 4820, 4821, 4823, 4824, 4901, 4902, 4903, 4904, 4979 ]
diff --git a/lib/feedparser/feedparsertest.py b/lib/feedparser/feedparsertest.py
deleted file mode 100644
index e1df914f8a598ac2ecc6bf3b5f817d5307604faa..0000000000000000000000000000000000000000
--- a/lib/feedparser/feedparsertest.py
+++ /dev/null
@@ -1,871 +0,0 @@
-#!/usr/bin/env python
-
-__author__ = "Mark Pilgrim <http://diveintomark.org/>"
-__license__ = """
-Copyright (c) 2010-2013 Kurt McKee <contactme@kurtmckee.org>
-Copyright (c) 2004-2008 Mark Pilgrim
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice,
-  this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice,
-  this list of conditions and the following disclaimer in the documentation
-  and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE."""
-
-import codecs
-import datetime
-import glob
-import operator
-import os
-import posixpath
-import pprint
-import re
-import struct
-import sys
-import threading
-import time
-import unittest
-import urllib
-import warnings
-import zlib
-import BaseHTTPServer
-import SimpleHTTPServer
-
-import feedparser
-
-if not feedparser._XML_AVAILABLE:
-    sys.stderr.write('No XML parsers available, unit testing can not proceed\n')
-    sys.exit(1)
-
-try:
-    # the utf_32 codec was introduced in Python 2.6; it's necessary to
-    # check this as long as feedparser supports Python 2.4 and 2.5
-    codecs.lookup('utf_32')
-except LookupError:
-    _UTF32_AVAILABLE = False
-else:
-    _UTF32_AVAILABLE = True
-
-_s2bytes = feedparser._s2bytes
-_l2bytes = feedparser._l2bytes
-
-#---------- custom HTTP server (used to serve test feeds) ----------
-
-_PORT = 8097 # not really configurable, must match hardcoded port in tests
-_HOST = '127.0.0.1' # also not really configurable
-
-class FeedParserTestRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
-    headers_re = re.compile(_s2bytes(r"^Header:\s+([^:]+):(.+)$"), re.MULTILINE)
-
-    def send_head(self):
-        """Send custom headers defined in test case
-
-        Example:
-        <!--
-        Header:   Content-type: application/atom+xml
-        Header:   X-Foo: bar
-        -->
-        """
-        # Short-circuit the HTTP status test `test_redirect_to_304()`
-        if self.path == '/-/return-304.xml':
-            self.send_response(304)
-            self.send_header('Content-type', 'text/xml')
-            self.end_headers()
-            return feedparser._StringIO(u''.encode('utf-8'))
-        path = self.translate_path(self.path)
-        # the compression tests' filenames determine the header sent
-        if self.path.startswith('/tests/compression'):
-            if self.path.endswith('gz'):
-                headers = {'Content-Encoding': 'gzip'}
-            else:
-                headers = {'Content-Encoding': 'deflate'}
-            headers['Content-type'] = 'application/xml'
-        else:
-            headers = dict([(k.decode('utf-8'), v.decode('utf-8').strip()) for k, v in self.headers_re.findall(open(path, 'rb').read())])
-        f = open(path, 'rb')
-        if (self.headers.get('if-modified-since') == headers.get('Last-Modified', 'nom')) \
-            or (self.headers.get('if-none-match') == headers.get('ETag', 'nomatch')):
-            status = 304
-        else:
-            status = 200
-        headers.setdefault('Status', status)
-        self.send_response(int(headers['Status']))
-        headers.setdefault('Content-type', self.guess_type(path))
-        self.send_header("Content-type", headers['Content-type'])
-        self.send_header("Content-Length", str(os.stat(f.name)[6]))
-        for k, v in headers.items():
-            if k not in ('Status', 'Content-type'):
-                self.send_header(k, v)
-        self.end_headers()
-        return f
-
-    def log_request(self, *args):
-        pass
-
-class FeedParserTestServer(threading.Thread):
-    """HTTP Server that runs in a thread and handles a predetermined number of requests"""
-
-    def __init__(self, requests):
-        threading.Thread.__init__(self)
-        self.requests = requests
-        self.ready = threading.Event()
-
-    def run(self):
-        self.httpd = BaseHTTPServer.HTTPServer((_HOST, _PORT), FeedParserTestRequestHandler)
-        self.ready.set()
-        while self.requests:
-            self.httpd.handle_request()
-            self.requests -= 1
-        self.ready.clear()
-
-#---------- dummy test case class (test methods are added dynamically) ----------
-unicode1_re = re.compile(_s2bytes(" u'"))
-unicode2_re = re.compile(_s2bytes(' u"'))
-
-# _bytes is only used in everythingIsUnicode().
-# In Python 2 it's str, and in Python 3 it's bytes.
-_bytes = type(_s2bytes(''))
-
-def everythingIsUnicode(d):
-    """Takes a dictionary, recursively verifies that every value is unicode"""
-    for k, v in d.iteritems():
-        if isinstance(v, dict) and k != 'headers':
-            if not everythingIsUnicode(v):
-                return False
-        elif isinstance(v, list):
-            for i in v:
-                if isinstance(i, dict) and not everythingIsUnicode(i):
-                    return False
-                elif isinstance(i, _bytes):
-                    return False
-        elif isinstance(v, _bytes):
-            return False
-    return True
-
-def failUnlessEval(self, xmlfile, evalString, msg=None):
-    """Fail unless eval(evalString, env)"""
-    env = feedparser.parse(xmlfile)
-    try:
-        if not eval(evalString, globals(), env):
-            failure=(msg or 'not eval(%s) \nWITH env(%s)' % (evalString, pprint.pformat(env)))
-            raise self.failureException, failure
-        if not everythingIsUnicode(env):
-            raise self.failureException, "not everything is unicode \nWITH env(%s)" % (pprint.pformat(env), )
-    except SyntaxError:
-        # Python 3 doesn't have the `u""` syntax, so evalString needs to be modified,
-        # which will require the failure message to be updated
-        evalString = re.sub(unicode1_re, _s2bytes(" '"), evalString)
-        evalString = re.sub(unicode2_re, _s2bytes(' "'), evalString)
-        if not eval(evalString, globals(), env):
-            failure=(msg or 'not eval(%s) \nWITH env(%s)' % (evalString, pprint.pformat(env)))
-            raise self.failureException, failure
-
-class BaseTestCase(unittest.TestCase):
-    failUnlessEval = failUnlessEval
-
-class TestCase(BaseTestCase):
-    pass
-
-class TestTemporaryFallbackBehavior(unittest.TestCase):
-    "These tests are temporarily here because of issues 310 and 328"
-    def test_issue_328_fallback_behavior(self):
-        warnings.filterwarnings('error')
-
-        d = feedparser.FeedParserDict()
-        d['published'] = u'pub string'
-        d['published_parsed'] = u'pub tuple'
-        d['updated'] = u'upd string'
-        d['updated_parsed'] = u'upd tuple'
-        # Ensure that `updated` doesn't map to `published` when it exists
-        self.assertTrue('published' in d)
-        self.assertTrue('published_parsed' in d)
-        self.assertTrue('updated' in d)
-        self.assertTrue('updated_parsed' in d)
-        self.assertEqual(d['published'], 'pub string')
-        self.assertEqual(d['published_parsed'], 'pub tuple')
-        self.assertEqual(d['updated'], 'upd string')
-        self.assertEqual(d['updated_parsed'], 'upd tuple')
-
-        d = feedparser.FeedParserDict()
-        d['published'] = u'pub string'
-        d['published_parsed'] = u'pub tuple'
-        # Ensure that `updated` doesn't actually exist
-        self.assertTrue('updated' not in d)
-        self.assertTrue('updated_parsed' not in d)
-        # Ensure that accessing `updated` throws a DeprecationWarning
-        try:
-            d['updated']
-        except DeprecationWarning:
-            # Expected behavior
-            pass
-        else:
-            # Wrong behavior
-            self.assertEqual(True, False)
-        try:
-            d['updated_parsed']
-        except DeprecationWarning:
-            # Expected behavior
-            pass
-        else:
-            # Wrong behavior
-            self.assertEqual(True, False)
-        # Ensure that `updated` maps to `published`
-        warnings.filterwarnings('ignore')
-        self.assertEqual(d['updated'], u'pub string')
-        self.assertEqual(d['updated_parsed'], u'pub tuple')
-        warnings.resetwarnings()
-
-
-class TestEverythingIsUnicode(unittest.TestCase):
-    "Ensure that `everythingIsUnicode()` is working appropriately"
-    def test_everything_is_unicode(self):
-        self.assertTrue(everythingIsUnicode(
-            {'a': u'a', 'b': [u'b', {'c': u'c'}], 'd': {'e': u'e'}}
-        ))
-    def test_not_everything_is_unicode(self):
-        self.assertFalse(everythingIsUnicode({'a': _s2bytes('a')}))
-        self.assertFalse(everythingIsUnicode({'a': [_s2bytes('a')]}))
-        self.assertFalse(everythingIsUnicode({'a': {'b': _s2bytes('b')}}))
-        self.assertFalse(everythingIsUnicode({'a': [{'b': _s2bytes('b')}]}))
-
-class TestLooseParser(BaseTestCase):
-    "Test the sgmllib-based parser by manipulating feedparser " \
-    "into believing no XML parsers are installed"
-    def __init__(self, arg):
-        unittest.TestCase.__init__(self, arg)
-        self._xml_available = feedparser._XML_AVAILABLE
-    def setUp(self):
-        feedparser._XML_AVAILABLE = 0
-    def tearDown(self):
-        feedparser._XML_AVAILABLE = self._xml_available
-
-class TestStrictParser(BaseTestCase):
-    pass
-
-class TestMicroformats(BaseTestCase):
-    pass
-
-class TestEncodings(BaseTestCase):
-    def test_doctype_replacement(self):
-        "Ensure that non-ASCII-compatible encodings don't hide " \
-        "disallowed ENTITY declarations"
-        doc = """<?xml version="1.0" encoding="utf-16be"?>
-        <!DOCTYPE feed [
-            <!ENTITY exponential1 "bogus ">
-            <!ENTITY exponential2 "&exponential1;&exponential1;">
-            <!ENTITY exponential3 "&exponential2;&exponential2;">
-        ]>
-        <feed><title type="html">&exponential3;</title></feed>"""
-        doc = codecs.BOM_UTF16_BE + doc.encode('utf-16be')
-        result = feedparser.parse(doc)
-        self.assertEqual(result['feed']['title'], u'&amp;exponential3')
-    def test_gb2312_converted_to_gb18030_in_xml_encoding(self):
-        # \u55de was chosen because it exists in gb18030 but not gb2312
-        feed = u'''<?xml version="1.0" encoding="gb2312"?>
-                  <feed><title>\u55de</title></feed>'''
-        result = feedparser.parse(feed.encode('gb18030'), response_headers={
-            'Content-Type': 'text/xml'
-        })
-        self.assertEqual(result.encoding, 'gb18030')
-
-class TestFeedParserDict(unittest.TestCase):
-    "Ensure that FeedParserDict returns values as expected and won't crash"
-    def setUp(self):
-        self.d = feedparser.FeedParserDict()
-    def _check_key(self, k):
-        self.assertTrue(k in self.d)
-        self.assertTrue(hasattr(self.d, k))
-        self.assertEqual(self.d[k], 1)
-        self.assertEqual(getattr(self.d, k), 1)
-    def _check_no_key(self, k):
-        self.assertTrue(k not in self.d)
-        self.assertTrue(not hasattr(self.d, k))
-    def test_empty(self):
-        keys = (
-            'a','entries', 'id', 'guid', 'summary', 'subtitle', 'description',
-            'category', 'enclosures', 'license', 'categories',
-        )
-        for k in keys:
-            self._check_no_key(k)
-        self.assertTrue('items' not in self.d)
-        self.assertTrue(hasattr(self.d, 'items')) # dict.items() exists
-    def test_neutral(self):
-        self.d['a'] = 1
-        self._check_key('a')
-    def test_single_mapping_target_1(self):
-        self.d['id'] = 1
-        self._check_key('id')
-        self._check_key('guid')
-    def test_single_mapping_target_2(self):
-        self.d['guid'] = 1
-        self._check_key('id')
-        self._check_key('guid')
-    def test_multiple_mapping_target_1(self):
-        self.d['summary'] = 1
-        self._check_key('summary')
-        self._check_key('description')
-    def test_multiple_mapping_target_2(self):
-        self.d['subtitle'] = 1
-        self._check_key('subtitle')
-        self._check_key('description')
-    def test_multiple_mapping_mapped_key(self):
-        self.d['description'] = 1
-        self._check_key('summary')
-        self._check_key('description')
-    def test_license(self):
-        self.d['links'] = []
-        try:
-            self.d['license']
-            self.assertTrue(False)
-        except KeyError:
-            pass
-        self.d['links'].append({'rel': 'license'})
-        try:
-            self.d['license']
-            self.assertTrue(False)
-        except KeyError:
-            pass
-        self.d['links'].append({'rel': 'license', 'href': 'http://dom.test/'})
-        self.assertEqual(self.d['license'], 'http://dom.test/')
-    def test_category(self):
-        self.d['tags'] = []
-        try:
-            self.d['category']
-            self.assertTrue(False)
-        except KeyError:
-            pass
-        self.d['tags'] = [{}]
-        try:
-            self.d['category']
-            self.assertTrue(False)
-        except KeyError:
-            pass
-        self.d['tags'] = [{'term': 'cat'}]
-        self.assertEqual(self.d['category'], 'cat')
-        self.d['tags'].append({'term': 'dog'})
-        self.assertEqual(self.d['category'], 'cat')
-
-class TestOpenResource(unittest.TestCase):
-    "Ensure that `_open_resource()` interprets its arguments as URIs, " \
-    "file-like objects, or in-memory feeds as expected"
-    def test_fileobj(self):
-        r = feedparser._open_resource(sys.stdin, '', '', '', '', [], {})
-        self.assertTrue(r is sys.stdin)
-    def test_feed(self):
-        f = feedparser.parse(u'feed://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.href, u'http://localhost:8097/tests/http/target.xml')
-    def test_feed_http(self):
-        f = feedparser.parse(u'feed:http://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.href, u'http://localhost:8097/tests/http/target.xml')
-    def test_bytes(self):
-        s = '<feed><item><title>text</title></item></feed>'.encode('utf-8')
-        r = feedparser._open_resource(s, '', '', '', '', [], {})
-        self.assertEqual(s, r.read())
-    def test_string(self):
-        s = '<feed><item><title>text</title></item></feed>'
-        r = feedparser._open_resource(s, '', '', '', '', [], {})
-        self.assertEqual(s.encode('utf-8'), r.read())
-    def test_unicode_1(self):
-        s = u'<feed><item><title>text</title></item></feed>'
-        r = feedparser._open_resource(s, '', '', '', '', [], {})
-        self.assertEqual(s.encode('utf-8'), r.read())
-    def test_unicode_2(self):
-        s = u'<feed><item><title>t\u00e9xt</title></item></feed>'
-        r = feedparser._open_resource(s, '', '', '', '', [], {})
-        self.assertEqual(s.encode('utf-8'), r.read())
-
-class TestMakeSafeAbsoluteURI(unittest.TestCase):
-    "Exercise the URI joining and sanitization code"
-    base = u'http://d.test/d/f.ext'
-    def _mktest(rel, expect, doc):
-        def fn(self):
-            value = feedparser._makeSafeAbsoluteURI(self.base, rel)
-            self.assertEqual(value, expect)
-        fn.__doc__ = doc
-        return fn
-
-    # make the test cases; the call signature is:
-    # (relative_url, expected_return_value, test_doc_string)
-    test_abs = _mktest(u'https://s.test/', u'https://s.test/', 'absolute uri')
-    test_rel = _mktest(u'/new', u'http://d.test/new', 'relative uri')
-    test_bad = _mktest(u'x://bad.test/', u'', 'unacceptable uri protocol')
-    test_mag = _mktest(u'magnet:?xt=a', u'magnet:?xt=a', 'magnet uri')
-
-    def test_catch_ValueError(self):
-        'catch ValueError in Python 2.7 and up'
-        uri = u'http://bad]test/'
-        value1 = feedparser._makeSafeAbsoluteURI(uri)
-        value2 = feedparser._makeSafeAbsoluteURI(self.base, uri)
-        swap = feedparser.ACCEPTABLE_URI_SCHEMES
-        feedparser.ACCEPTABLE_URI_SCHEMES = ()
-        value3 = feedparser._makeSafeAbsoluteURI(self.base, uri)
-        feedparser.ACCEPTABLE_URI_SCHEMES = swap
-        # Only Python 2.7 and up throw a ValueError, otherwise uri is returned
-        self.assertTrue(value1 in (uri, u''))
-        self.assertTrue(value2 in (uri, u''))
-        self.assertTrue(value3 in (uri, u''))
-
-class TestConvertToIdn(unittest.TestCase):
-    "Test IDN support (unavailable in Jython as of Jython 2.5.2)"
-    # this is the greek test domain
-    hostname = u'\u03c0\u03b1\u03c1\u03ac\u03b4\u03b5\u03b9\u03b3\u03bc\u03b1'
-    hostname += u'.\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae'
-    def test_control(self):
-        r = feedparser._convert_to_idn(u'http://example.test/')
-        self.assertEqual(r, u'http://example.test/')
-    def test_idn(self):
-        r = feedparser._convert_to_idn(u'http://%s/' % (self.hostname,))
-        self.assertEqual(r, u'http://xn--hxajbheg2az3al.xn--jxalpdlp/')
-    def test_port(self):
-        r = feedparser._convert_to_idn(u'http://%s:8080/' % (self.hostname,))
-        self.assertEqual(r, u'http://xn--hxajbheg2az3al.xn--jxalpdlp:8080/')
-
-class TestCompression(unittest.TestCase):
-    "Test the gzip and deflate support in the HTTP code"
-    def test_gzip_good(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/gzip.gz')
-        self.assertEqual(f.version, 'atom10')
-    def test_gzip_not_compressed(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/gzip-not-compressed.gz')
-        self.assertEqual(f.bozo, 1)
-        self.assertTrue(isinstance(f.bozo_exception, IOError))
-        self.assertEqual(f['feed']['title'], 'gzip')
-    def test_gzip_struct_error(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/gzip-struct-error.gz')
-        self.assertEqual(f.bozo, 1)
-        self.assertTrue(isinstance(f.bozo_exception, struct.error))
-    def test_zlib_good(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/deflate.z')
-        self.assertEqual(f.version, 'atom10')
-    def test_zlib_no_headers(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/deflate-no-headers.z')
-        self.assertEqual(f.version, 'atom10')
-    def test_zlib_not_compressed(self):
-        f = feedparser.parse('http://localhost:8097/tests/compression/deflate-not-compressed.z')
-        self.assertEqual(f.bozo, 1)
-        self.assertTrue(isinstance(f.bozo_exception, zlib.error))
-        self.assertEqual(f['feed']['title'], 'deflate')
-
-class TestHTTPStatus(unittest.TestCase):
-    "Test HTTP redirection and other status codes"
-    def test_301(self):
-        f = feedparser.parse('http://localhost:8097/tests/http/http_status_301.xml')
-        self.assertEqual(f.status, 301)
-        self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.entries[0].title, 'target')
-    def test_302(self):
-        f = feedparser.parse('http://localhost:8097/tests/http/http_status_302.xml')
-        self.assertEqual(f.status, 302)
-        self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.entries[0].title, 'target')
-    def test_303(self):
-        f = feedparser.parse('http://localhost:8097/tests/http/http_status_303.xml')
-        self.assertEqual(f.status, 303)
-        self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.entries[0].title, 'target')
-    def test_307(self):
-        f = feedparser.parse('http://localhost:8097/tests/http/http_status_307.xml')
-        self.assertEqual(f.status, 307)
-        self.assertEqual(f.href, 'http://localhost:8097/tests/http/target.xml')
-        self.assertEqual(f.entries[0].title, 'target')
-    def test_304(self):
-        # first retrieve the url
-        u = 'http://localhost:8097/tests/http/http_status_304.xml'
-        f = feedparser.parse(u)
-        self.assertEqual(f.status, 200)
-        self.assertEqual(f.entries[0].title, 'title 304')
-        # extract the etag and last-modified headers
-        e = [v for k, v in f.headers.items() if k.lower() == 'etag'][0]
-        mh = [v for k, v in f.headers.items() if k.lower() == 'last-modified'][0]
-        ms = f.updated
-        mt = f.updated_parsed
-        md = datetime.datetime(*mt[0:7])
-        self.assertTrue(isinstance(mh, basestring))
-        self.assertTrue(isinstance(ms, basestring))
-        self.assertTrue(isinstance(mt, time.struct_time))
-        self.assertTrue(isinstance(md, datetime.datetime))
-        # test that sending back the etag results in a 304
-        f = feedparser.parse(u, etag=e)
-        self.assertEqual(f.status, 304)
-        # test that sending back last-modified (string) results in a 304
-        f = feedparser.parse(u, modified=ms)
-        self.assertEqual(f.status, 304)
-        # test that sending back last-modified (9-tuple) results in a 304
-        f = feedparser.parse(u, modified=mt)
-        self.assertEqual(f.status, 304)
-        # test that sending back last-modified (datetime) results in a 304
-        f = feedparser.parse(u, modified=md)
-        self.assertEqual(f.status, 304)
-    def test_404(self):
-        f = feedparser.parse('http://localhost:8097/tests/http/http_status_404.xml')
-        self.assertEqual(f.status, 404)
-    def test_redirect_to_304(self):
-        # ensure that an http redirect to an http 304 doesn't
-        # trigger a bozo_exception
-        u = 'http://localhost:8097/tests/http/http_redirect_to_304.xml'
-        f = feedparser.parse(u)
-        self.assertTrue(f.bozo == 0)
-        self.assertTrue(f.status == 302)
-
-class TestDateParsers(unittest.TestCase):
-    "Test the various date parsers; most of the test cases are constructed " \
-    "dynamically based on the contents of the `date_tests` dict, below"
-    def test_None(self):
-        self.assertTrue(feedparser._parse_date(None) is None)
-    def _check_date(self, func, dtstring, expected_value):
-        try:
-            parsed_value = func(dtstring)
-        except (OverflowError, ValueError):
-            parsed_value = None
-        self.assertEqual(parsed_value, expected_value)
-        # self.assertEqual(parsed_value, feedparser._parse_date(dtstring))
-    def test_year_10000_date(self):
-        # On some systems this date string will trigger an OverflowError.
-        # On Jython and x64 systems, however, it's interpreted just fine.
-        try:
-            date = feedparser._parse_date_rfc822(u'Sun, 31 Dec 9999 23:59:59 -9999')
-        except OverflowError:
-            date = None
-        self.assertTrue(date in (None, (10000, 1, 5, 4, 38, 59, 2, 5, 0)))
-
-date_tests = {
-    feedparser._parse_date_greek: (
-        (u'', None), # empty string
-        (u'\u039a\u03c5\u03c1, 11 \u0399\u03bf\u03cd\u03bb 2004 12:00:00 EST', (2004, 7, 11, 17, 0, 0, 6, 193, 0)),
-    ),
-    feedparser._parse_date_hungarian: (
-        (u'', None), # empty string
-        (u'2004-j\u00falius-13T9:15-05:00', (2004, 7, 13, 14, 15, 0, 1, 195, 0)),
-    ),
-    feedparser._parse_date_iso8601: (
-        (u'', None), # empty string
-        (u'-0312', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # 2-digit year/month only variant
-        (u'031231', (2003, 12, 31, 0, 0, 0, 2, 365, 0)), # 2-digit year/month/day only, no hyphens
-        (u'03-12-31', (2003, 12, 31, 0, 0, 0, 2, 365, 0)), # 2-digit year/month/day only
-        (u'-03-12', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # 2-digit year/month only
-        (u'03335', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # 2-digit year/ordinal, no hyphens
-        (u'2003-12-31T10:14:55.1234Z', (2003, 12, 31, 10, 14, 55, 2, 365, 0)), # fractional seconds
-        # Special case for Google's extra zero in the month
-        (u'2003-012-31T10:14:55+00:00', (2003, 12, 31, 10, 14, 55, 2, 365, 0)),
-    ),
-    feedparser._parse_date_nate: (
-        (u'', None), # empty string
-        (u'2004-05-25 \uc624\ud6c4 11:23:17', (2004, 5, 25, 14, 23, 17, 1, 146, 0)),
-    ),
-    feedparser._parse_date_onblog: (
-        (u'', None), # empty string
-        (u'2004\ub144 05\uc6d4 28\uc77c  01:31:15', (2004, 5, 27, 16, 31, 15, 3, 148, 0)),
-    ),
-    feedparser._parse_date_perforce: (
-        (u'', None), # empty string
-        (u'Fri, 2006/09/15 08:19:53 EDT', (2006, 9, 15, 12, 19, 53, 4, 258, 0)),
-    ),
-    feedparser._parse_date_rfc822: (
-        (u'', None), # empty string
-        (u'Thu, 01 Jan 0100 00:00:01 +0100', (99, 12, 31, 23, 0, 1, 3, 365, 0)), # ancient date
-        (u'Thu, 01 Jan 04 19:48:21 GMT', (2004, 1, 1, 19, 48, 21, 3, 1, 0)), # 2-digit year
-        (u'Thu, 01 Jan 2004 19:48:21 GMT', (2004, 1, 1, 19, 48, 21, 3, 1, 0)), # 4-digit year
-        (u'Thu,  5 Apr 2012 10:00:00 GMT', (2012, 4, 5, 10, 0, 0, 3, 96, 0)), # 1-digit day
-        (u'Wed, 19 Aug 2009 18:28:00 Etc/GMT', (2009, 8, 19, 18, 28, 0, 2, 231, 0)), # etc/gmt timezone
-        (u'Wed, 19 Feb 2012 22:40:00 GMT-01:01', (2012, 2, 19, 23, 41, 0, 6, 50, 0)), # gmt+hh:mm timezone
-        (u'Mon, 13 Feb, 2012 06:28:00 UTC', (2012, 2, 13, 6, 28, 0, 0, 44, 0)), # extraneous comma
-        (u'Thu, 01 Jan 2004 00:00 GMT', (2004, 1, 1, 0, 0, 0, 3, 1, 0)), # no seconds
-        (u'Thu, 01 Jan 2004', (2004, 1, 1, 0, 0, 0, 3, 1, 0)), # no time
-        # Additional tests to handle Disney's long month names and invalid timezones
-        (u'Mon, 26 January 2004 16:31:00 AT', (2004, 1, 26, 20, 31, 0, 0, 26, 0)),
-        (u'Mon, 26 January 2004 16:31:00 ET', (2004, 1, 26, 21, 31, 0, 0, 26, 0)),
-        (u'Mon, 26 January 2004 16:31:00 CT', (2004, 1, 26, 22, 31, 0, 0, 26, 0)),
-        (u'Mon, 26 January 2004 16:31:00 MT', (2004, 1, 26, 23, 31, 0, 0, 26, 0)),
-        (u'Mon, 26 January 2004 16:31:00 PT', (2004, 1, 27, 0, 31, 0, 1, 27, 0)),
-        # Swapped month and day
-        (u'Thu Aug 30 2012 17:26:16 +0200', (2012, 8, 30, 15, 26, 16, 3, 243, 0)),
-        (u'Sun, 16 Dec 2012 1:2:3:4 GMT', None), # invalid time
-        (u'Sun, 16 zzz 2012 11:47:32 GMT', None), # invalid month
-        (u'Sun, Dec x 2012 11:47:32 GMT', None), # invalid day (swapped day/month)
-        ('Sun, 16 Dec zz 11:47:32 GMT', None), # invalid year
-        ('Sun, 16 Dec 2012 11:47:32 +zz:00', None), # invalid timezone hour
-        ('Sun, 16 Dec 2012 11:47:32 +00:zz', None), # invalid timezone minute
-        ('Sun, 99 Jun 2009 12:00:00 GMT', None), # out-of-range day
-    ),
-    feedparser._parse_date_asctime: (
-        (u'Sun Jan  4 16:29:06 2004', (2004, 1, 4, 16, 29, 6, 6, 4, 0)),
-    ),
-    feedparser._parse_date_w3dtf: (
-        (u'', None), # empty string
-        (u'2003-12-31T10:14:55Z', (2003, 12, 31, 10, 14, 55, 2, 365, 0)), # UTC
-        (u'2003-12-31T10:14:55-08:00', (2003, 12, 31, 18, 14, 55, 2, 365, 0)), # San Francisco timezone
-        (u'2003-12-31T18:14:55+08:00', (2003, 12, 31, 10, 14, 55, 2, 365, 0)), # Tokyo timezone
-        (u'2007-04-23T23:25:47.538+10:00', (2007, 4, 23, 13, 25, 47, 0, 113, 0)), # fractional seconds
-        (u'2003-12-31', (2003, 12, 31, 0, 0, 0, 2, 365, 0)), # year/month/day only
-        (u'2003-12', (2003, 12, 1, 0, 0, 0, 0, 335, 0)), # year/month only
-        (u'2003', (2003, 1, 1, 0, 0, 0, 2, 1, 0)), # year only
-        # Special cases for rollovers in leap years
-        (u'2004-02-28T18:14:55-08:00', (2004, 2, 29, 2, 14, 55, 6, 60, 0)), # feb 28 in leap year
-        (u'2003-02-28T18:14:55-08:00', (2003, 3, 1, 2, 14, 55, 5, 60, 0)), # feb 28 in non-leap year
-        (u'2000-02-28T18:14:55-08:00', (2000, 2, 29, 2, 14, 55, 1, 60, 0)), # feb 28 in leap year on century divisible by 400
-        # Out-of-range times
-        (u'9999-12-31T23:59:59-99:99', None), # Date is out-of-range
-        (u'2003-12-31T25:14:55Z', None), # invalid (25 hours)
-        (u'2003-12-31T10:61:55Z', None), # invalid (61 minutes)
-        (u'2003-12-31T10:14:61Z', None), # invalid (61 seconds)
-        # Invalid formats
-        (u'22013', None), # Year is too long
-        (u'013', None), # Year is too short
-        (u'2013-01-27-01', None), # Date has to many parts
-        (u'2013-01-28T11:30:00-06:00Textra', None), # Too many 't's
-        # Non-integer values
-        (u'2013-xx-27', None), # Date
-        (u'2013-01-28T09:xx:00Z', None), # Time
-        (u'2013-01-28T09:00:00+00:xx', None), # Timezone
-        # MSSQL-style dates
-        (u'2004-07-08 23:56:58 -00:20', (2004, 7, 9, 0, 16, 58, 4, 191, 0)), # with timezone
-        (u'2004-07-08 23:56:58', (2004, 7, 8, 23, 56, 58, 3, 190, 0)), # without timezone
-        (u'2004-07-08 23:56:58.0', (2004, 7, 8, 23, 56, 58, 3, 190, 0)), # with fractional second
-    )
-}
-
-def make_date_test(f, s, t):
-    return lambda self: self._check_date(f, s, t)
-
-for func, items in date_tests.iteritems():
-    for i, (dtstring, dttuple) in enumerate(items):
-        uniqfunc = make_date_test(func, dtstring, dttuple)
-        setattr(TestDateParsers, 'test_%s_%02i' % (func.__name__, i), uniqfunc)
-
-
-class TestHTMLGuessing(unittest.TestCase):
-    "Exercise the HTML sniffing code"
-    def _mktest(text, expect, doc):
-        def fn(self):
-            value = bool(feedparser._FeedParserMixin.lookslikehtml(text))
-            self.assertEqual(value, expect)
-        fn.__doc__ = doc
-        return fn
-
-    test_text_1 = _mktest(u'plain text', False, u'plain text')
-    test_text_2 = _mktest(u'2 < 3', False, u'plain text with angle bracket')
-    test_html_1 = _mktest(u'<a href="">a</a>', True, u'anchor tag')
-    test_html_2 = _mktest(u'<i>i</i>', True, u'italics tag')
-    test_html_3 = _mktest(u'<b>b</b>', True, u'bold tag')
-    test_html_4 = _mktest(u'<code>', False, u'allowed tag, no end tag')
-    test_html_5 = _mktest(u'<rss> .. </rss>', False, u'disallowed tag')
-    test_entity_1 = _mktest(u'AT&T', False, u'corporation name')
-    test_entity_2 = _mktest(u'&copy;', True, u'named entity reference')
-    test_entity_3 = _mktest(u'&#169;', True, u'numeric entity reference')
-    test_entity_4 = _mktest(u'&#xA9;', True, u'hex numeric entity reference')
-
-#---------- additional api unit tests, not backed by files
-
-class TestBuildRequest(unittest.TestCase):
-    "Test that HTTP request objects are created as expected"
-    def test_extra_headers(self):
-        """You can pass in extra headers and they go into the request object."""
-
-        request = feedparser._build_urllib2_request(
-          'http://example.com/feed',
-          'agent-name',
-          None, None, None, None,
-          {'Cache-Control': 'max-age=0'})
-        # nb, urllib2 folds the case of the headers
-        self.assertEqual(
-          request.get_header('Cache-control'), 'max-age=0')
-
-
-class TestLxmlBug(unittest.TestCase):
-    def test_lxml_etree_bug(self):
-        try:
-            import lxml.etree
-        except ImportError:
-            pass
-        else:
-            doc = u"<feed>&illformed_charref</feed>".encode('utf8')
-            # Importing lxml.etree currently causes libxml2 to
-            # throw SAXException instead of SAXParseException.
-            feedparser.parse(feedparser._StringIO(doc))
-        self.assertTrue(True)
-
-#---------- parse test files and create test methods ----------
-def convert_to_utf8(data):
-    "Identify data's encoding using its byte order mark" \
-    "and convert it to its utf-8 equivalent"
-    if data[:4] == _l2bytes([0x4c, 0x6f, 0xa7, 0x94]):
-        return data.decode('cp037').encode('utf-8')
-    elif data[:4] == _l2bytes([0x00, 0x00, 0xfe, 0xff]):
-        if not _UTF32_AVAILABLE:
-            return None
-        return data.decode('utf-32be').encode('utf-8')
-    elif data[:4] == _l2bytes([0xff, 0xfe, 0x00, 0x00]):
-        if not _UTF32_AVAILABLE:
-            return None
-        return data.decode('utf-32le').encode('utf-8')
-    elif data[:4] == _l2bytes([0x00, 0x00, 0x00, 0x3c]):
-        if not _UTF32_AVAILABLE:
-            return None
-        return data.decode('utf-32be').encode('utf-8')
-    elif data[:4] == _l2bytes([0x3c, 0x00, 0x00, 0x00]):
-        if not _UTF32_AVAILABLE:
-            return None
-        return data.decode('utf-32le').encode('utf-8')
-    elif data[:4] == _l2bytes([0x00, 0x3c, 0x00, 0x3f]):
-        return data.decode('utf-16be').encode('utf-8')
-    elif data[:4] == _l2bytes([0x3c, 0x00, 0x3f, 0x00]):
-        return data.decode('utf-16le').encode('utf-8')
-    elif (data[:2] == _l2bytes([0xfe, 0xff])) and (data[2:4] != _l2bytes([0x00, 0x00])):
-        return data[2:].decode('utf-16be').encode('utf-8')
-    elif (data[:2] == _l2bytes([0xff, 0xfe])) and (data[2:4] != _l2bytes([0x00, 0x00])):
-        return data[2:].decode('utf-16le').encode('utf-8')
-    elif data[:3] == _l2bytes([0xef, 0xbb, 0xbf]):
-        return data[3:]
-    # no byte order mark was found
-    return data
-
-skip_re = re.compile(_s2bytes("SkipUnless:\s*(.*?)\n"))
-desc_re = re.compile(_s2bytes("Description:\s*(.*?)\s*Expect:\s*(.*)\s*-->"))
-def getDescription(xmlfile, data):
-    """Extract test data
-
-    Each test case is an XML file which contains not only a test feed
-    but also the description of the test and the condition that we
-    would expect the parser to create when it parses the feed.  Example:
-    <!--
-    Description: feed title
-    Expect:      feed['title'] == u'Example feed'
-    -->
-    """
-    skip_results = skip_re.search(data)
-    if skip_results:
-        skipUnless = skip_results.group(1).strip()
-    else:
-        skipUnless = '1'
-    search_results = desc_re.search(data)
-    if not search_results:
-        raise RuntimeError, "can't parse %s" % xmlfile
-    description, evalString = map(lambda s: s.strip(), list(search_results.groups()))
-    description = xmlfile + ": " + unicode(description, 'utf8')
-    return description, evalString, skipUnless
-
-def buildTestCase(xmlfile, description, evalString):
-    func = lambda self, xmlfile=xmlfile, evalString=evalString: \
-         self.failUnlessEval(xmlfile, evalString)
-    func.__doc__ = description
-    return func
-
-def runtests():
-    "Read the files in the tests/ directory, dynamically add tests to the " \
-    "TestCases above, spawn the HTTP server, and run the test suite"
-    if sys.argv[1:]:
-        allfiles = filter(lambda s: s.endswith('.xml'), reduce(operator.add, map(glob.glob, sys.argv[1:]), []))
-        wellformedfiles = illformedfiles = encodingfiles = entitiesfiles = microformatfiles = []
-        sys.argv = [sys.argv[0]] #+ sys.argv[2:]
-    else:
-        allfiles = glob.glob(os.path.join('.', 'tests', '**', '**', '*.xml'))
-        wellformedfiles = glob.glob(os.path.join('.', 'tests', 'wellformed', '**', '*.xml'))
-        illformedfiles = glob.glob(os.path.join('.', 'tests', 'illformed', '*.xml'))
-        encodingfiles = glob.glob(os.path.join('.', 'tests', 'encoding', '*.xml'))
-        entitiesfiles = glob.glob(os.path.join('.', 'tests', 'entities', '*.xml'))
-        microformatfiles = glob.glob(os.path.join('.', 'tests', 'microformats', '**', '*.xml'))
-    httpd = None
-    # there are several compression test cases that must be accounted for
-    # as well as a number of http status tests that redirect to a target
-    # and a few `_open_resource`-related tests
-    httpcount = 6 + 16 + 2
-    httpcount += len([f for f in allfiles if 'http' in f])
-    httpcount += len([f for f in wellformedfiles if 'http' in f])
-    httpcount += len([f for f in illformedfiles if 'http' in f])
-    httpcount += len([f for f in encodingfiles if 'http' in f])
-    try:
-        for c, xmlfile in enumerate(allfiles + encodingfiles + illformedfiles + entitiesfiles):
-            addTo = TestCase
-            if xmlfile in encodingfiles:
-                addTo = TestEncodings
-            elif xmlfile in entitiesfiles:
-                addTo = (TestStrictParser, TestLooseParser)
-            elif xmlfile in microformatfiles:
-                addTo = TestMicroformats
-            elif xmlfile in wellformedfiles:
-                addTo = (TestStrictParser, TestLooseParser)
-            f = open(xmlfile, 'rb')
-            data = f.read()
-            f.close()
-            if 'encoding' in xmlfile:
-                data = convert_to_utf8(data)
-                if data is None:
-                    # convert_to_utf8 found a byte order mark for utf_32
-                    # but it's not supported in this installation of Python
-                    if 'http' in xmlfile:
-                        httpcount -= 1 + (xmlfile in wellformedfiles)
-                    continue
-            description, evalString, skipUnless = getDescription(xmlfile, data)
-            testName = 'test_%06d' % c
-            ishttp = 'http' in xmlfile
-            try:
-                if not eval(skipUnless): raise NotImplementedError
-            except (ImportError, LookupError, NotImplementedError, AttributeError):
-                if ishttp:
-                    httpcount -= 1 + (xmlfile in wellformedfiles)
-                continue
-            if ishttp:
-                xmlfile = 'http://%s:%s/%s' % (_HOST, _PORT, posixpath.normpath(xmlfile.replace('\\', '/')))
-            testFunc = buildTestCase(xmlfile, description, evalString)
-            if isinstance(addTo, tuple):
-                setattr(addTo[0], testName, testFunc)
-                setattr(addTo[1], testName, testFunc)
-            else:
-                setattr(addTo, testName, testFunc)
-        if httpcount:
-            httpd = FeedParserTestServer(httpcount)
-            httpd.daemon = True
-            httpd.start()
-            httpd.ready.wait()
-        testsuite = unittest.TestSuite()
-        testloader = unittest.TestLoader()
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestCase))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestStrictParser))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestLooseParser))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestEncodings))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestDateParsers))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestHTMLGuessing))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestHTTPStatus))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestCompression))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestConvertToIdn))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestMicroformats))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestOpenResource))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestFeedParserDict))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestMakeSafeAbsoluteURI))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestEverythingIsUnicode))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestTemporaryFallbackBehavior))
-        testsuite.addTest(testloader.loadTestsFromTestCase(TestLxmlBug))
-        testresults = unittest.TextTestRunner(verbosity=1).run(testsuite)
-
-        # Return 0 if successful, 1 if there was a failure
-        sys.exit(not testresults.wasSuccessful())
-    finally:
-        if httpd:
-            if httpd.requests:
-                # Should never get here unless something went horribly wrong, like the
-                # user hitting Ctrl-C.  Tell our HTTP server that it's done, then do
-                # one more request to flush it.  This rarely works; the combination of
-                # threading, self-terminating HTTP servers, and unittest is really
-                # quite flaky.  Just what you want in a testing framework, no?
-                httpd.requests = 0
-                if httpd.ready:
-                    urllib.urlopen('http://127.0.0.1:8097/tests/wellformed/rss/aaa_wellformed.xml').read()
-            httpd.join(0)
-
-if __name__ == "__main__":
-    runtests()
diff --git a/lib/feedparser/html.py b/lib/feedparser/html.py
new file mode 100644
index 0000000000000000000000000000000000000000..18f5e8da9f4620df18e3a6930619dbf71654095d
--- /dev/null
+++ b/lib/feedparser/html.py
@@ -0,0 +1,213 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+try:
+    from html.entities import name2codepoint
+except ImportError:
+    from htmlentitydefs import name2codepoint
+
+from .sgml import *
+
+_cp1252 = {
+    128: '\u20ac', # euro sign
+    130: '\u201a', # single low-9 quotation mark
+    131: '\u0192', # latin small letter f with hook
+    132: '\u201e', # double low-9 quotation mark
+    133: '\u2026', # horizontal ellipsis
+    134: '\u2020', # dagger
+    135: '\u2021', # double dagger
+    136: '\u02c6', # modifier letter circumflex accent
+    137: '\u2030', # per mille sign
+    138: '\u0160', # latin capital letter s with caron
+    139: '\u2039', # single left-pointing angle quotation mark
+    140: '\u0152', # latin capital ligature oe
+    142: '\u017d', # latin capital letter z with caron
+    145: '\u2018', # left single quotation mark
+    146: '\u2019', # right single quotation mark
+    147: '\u201c', # left double quotation mark
+    148: '\u201d', # right double quotation mark
+    149: '\u2022', # bullet
+    150: '\u2013', # en dash
+    151: '\u2014', # em dash
+    152: '\u02dc', # small tilde
+    153: '\u2122', # trade mark sign
+    154: '\u0161', # latin small letter s with caron
+    155: '\u203a', # single right-pointing angle quotation mark
+    156: '\u0153', # latin small ligature oe
+    158: '\u017e', # latin small letter z with caron
+    159: '\u0178', # latin capital letter y with diaeresis
+}
+
+class _BaseHTMLProcessor(sgmllib.SGMLParser, object):
+    special = re.compile('''[<>'"]''')
+    bare_ampersand = re.compile("&(?!#\d+;|#x[0-9a-fA-F]+;|\w+;)")
+    elements_no_end_tag = set([
+      'area', 'base', 'basefont', 'br', 'col', 'command', 'embed', 'frame',
+      'hr', 'img', 'input', 'isindex', 'keygen', 'link', 'meta', 'param',
+      'source', 'track', 'wbr'
+    ])
+
+    def __init__(self, encoding=None, _type='application/xhtml+xml'):
+        if encoding:
+            self.encoding = encoding
+        self._type = _type
+        super(_BaseHTMLProcessor, self).__init__()
+
+    def reset(self):
+        self.pieces = []
+        sgmllib.SGMLParser.reset(self)
+
+    def _shorttag_replace(self, match):
+        tag = match.group(1)
+        if tag in self.elements_no_end_tag:
+            return '<' + tag + ' />'
+        else:
+            return '<' + tag + '></' + tag + '>'
+
+    # By declaring these methods and overriding their compiled code
+    # with the code from sgmllib, the original code will execute in
+    # feedparser's scope instead of sgmllib's. This means that the
+    # `tagfind` and `charref` regular expressions will be found as
+    # they're declared above, not as they're declared in sgmllib.
+    def goahead(self, i):
+        pass
+    try:
+        goahead.__code__ = sgmllib.SGMLParser.goahead.__code__
+    except AttributeError:
+        goahead.func_code = sgmllib.SGMLParser.goahead.func_code
+
+    def __parse_starttag(self, i):
+        pass
+    try:
+        __parse_starttag.__code__ = sgmllib.SGMLParser.parse_starttag.__code__
+    except AttributeError:
+        __parse_starttag.func_code = sgmllib.SGMLParser.parse_starttag.func_code
+
+    def parse_starttag(self,i):
+        j = self.__parse_starttag(i)
+        if self._type == 'application/xhtml+xml':
+            if j>2 and self.rawdata[j-2:j]=='/>':
+                self.unknown_endtag(self.lasttag)
+        return j
+
+    def feed(self, data):
+        data = re.compile(r'<!((?!DOCTYPE|--|\[))', re.IGNORECASE).sub(r'&lt;!\1', data)
+        data = re.sub(r'<([^<>\s]+?)\s*/>', self._shorttag_replace, data)
+        data = data.replace('&#39;', "'")
+        data = data.replace('&#34;', '"')
+        sgmllib.SGMLParser.feed(self, data)
+        sgmllib.SGMLParser.close(self)
+
+    def normalize_attrs(self, attrs):
+        if not attrs:
+            return attrs
+        # utility method to be called by descendants
+        attrs = dict([(k.lower(), v) for k, v in attrs]).items()
+        attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs]
+        attrs.sort()
+        return attrs
+
+    def unknown_starttag(self, tag, attrs):
+        # called for each start tag
+        # attrs is a list of (attr, value) tuples
+        # e.g. for <pre class='screen'>, tag='pre', attrs=[('class', 'screen')]
+        uattrs = []
+        strattrs=''
+        if attrs:
+            for key, value in attrs:
+                value=value.replace('>','&gt;').replace('<','&lt;').replace('"','&quot;')
+                value = self.bare_ampersand.sub("&amp;", value)
+                uattrs.append((key, value))
+            strattrs = ''.join([' %s="%s"' % (key, value) for key, value in uattrs])
+        if tag in self.elements_no_end_tag:
+            self.pieces.append('<%s%s />' % (tag, strattrs))
+        else:
+            self.pieces.append('<%s%s>' % (tag, strattrs))
+
+    def unknown_endtag(self, tag):
+        # called for each end tag, e.g. for </pre>, tag will be 'pre'
+        # Reconstruct the original end tag.
+        if tag not in self.elements_no_end_tag:
+            self.pieces.append("</%s>" % tag)
+
+    def handle_charref(self, ref):
+        # called for each character reference, e.g. for '&#160;', ref will be '160'
+        # Reconstruct the original character reference.
+        ref = ref.lower()
+        if ref.startswith('x'):
+            value = int(ref[1:], 16)
+        else:
+            value = int(ref)
+
+        if value in _cp1252:
+            self.pieces.append('&#%s;' % hex(ord(_cp1252[value]))[1:])
+        else:
+            self.pieces.append('&#%s;' % ref)
+
+    def handle_entityref(self, ref):
+        # called for each entity reference, e.g. for '&copy;', ref will be 'copy'
+        # Reconstruct the original entity reference.
+        if ref in name2codepoint or ref == 'apos':
+            self.pieces.append('&%s;' % ref)
+        else:
+            self.pieces.append('&amp;%s' % ref)
+
+    def handle_data(self, text):
+        # called for each block of plain text, i.e. outside of any tag and
+        # not containing any character or entity references
+        # Store the original text verbatim.
+        self.pieces.append(text)
+
+    def handle_comment(self, text):
+        # called for each HTML comment, e.g. <!-- insert Javascript code here -->
+        # Reconstruct the original comment.
+        self.pieces.append('<!--%s-->' % text)
+
+    def handle_pi(self, text):
+        # called for each processing instruction, e.g. <?instruction>
+        # Reconstruct original processing instruction.
+        self.pieces.append('<?%s>' % text)
+
+    def handle_decl(self, text):
+        # called for the DOCTYPE, if present, e.g.
+        # <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+        #     "http://www.w3.org/TR/html4/loose.dtd">
+        # Reconstruct original DOCTYPE
+        self.pieces.append('<!%s>' % text)
+
+    _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match
+    def _scan_name(self, i, declstartpos):
+        rawdata = self.rawdata
+        n = len(rawdata)
+        if i == n:
+            return None, -1
+        m = self._new_declname_match(rawdata, i)
+        if m:
+            s = m.group()
+            name = s.strip()
+            if (i + len(s)) == n:
+                return None, -1  # end of buffer
+            return name.lower(), m.end()
+        else:
+            self.handle_data(rawdata)
+#            self.updatepos(declstartpos, i)
+            return None, -1
+
+    def convert_charref(self, name):
+        return '&#%s;' % name
+
+    def convert_entityref(self, name):
+        return '&%s;' % name
+
+    def output(self):
+        '''Return processed HTML as a single string'''
+        return ''.join(self.pieces)
+
+    def parse_declaration(self, i):
+        try:
+            return sgmllib.SGMLParser.parse_declaration(self, i)
+        except sgmllib.SGMLParseError:
+            # escape the doctype declaration and continue parsing
+            self.handle_data('&lt;')
+            return i+1
diff --git a/lib/feedparser/http.py b/lib/feedparser/http.py
new file mode 100644
index 0000000000000000000000000000000000000000..980dd2c56f2ffff56681314c3ffc3492ff4a756e
--- /dev/null
+++ b/lib/feedparser/http.py
@@ -0,0 +1,231 @@
+from __future__ import absolute_import, unicode_literals, with_statement
+
+import datetime
+import gzip
+import re
+import struct
+import zlib
+
+try:
+    import urllib.parse
+    import urllib.request
+except ImportError:
+    from urllib import splithost, splittype, splituser
+    from urllib2 import build_opener, HTTPDigestAuthHandler, HTTPRedirectHandler, HTTPDefaultErrorHandler, Request
+    from urlparse import urlparse
+
+    class urllib(object):
+        class parse(object):
+            splithost = staticmethod(splithost)
+            splittype = staticmethod(splittype)
+            splituser = staticmethod(splituser)
+            urlparse = staticmethod(urlparse)
+        class request(object):
+            build_opener = staticmethod(build_opener)
+            HTTPDigestAuthHandler = HTTPDigestAuthHandler
+            HTTPRedirectHandler = HTTPRedirectHandler
+            HTTPDefaultErrorHandler = HTTPDefaultErrorHandler
+            Request = Request
+
+try:
+    from io import BytesIO as _StringIO
+except ImportError:
+    try:
+        from cStringIO import StringIO as _StringIO
+    except ImportError:
+        from StringIO import StringIO as _StringIO
+
+try:
+    import base64, binascii
+except ImportError:
+    base64 = binascii = None
+else:
+    # Python 3.1 deprecated decodestring in favor of decodebytes
+    _base64decode = getattr(base64, 'decodebytes', base64.decodestring)
+
+from .datetimes import _parse_date
+from .urls import _convert_to_idn
+
+try:
+    basestring
+except NameError:
+    basestring = str
+
+bytes_ = type(b'')
+
+# HTTP "Accept" header to send to servers when downloading feeds.  If you don't
+# want to send an Accept header, set this to None.
+ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1"
+
+class _FeedURLHandler(urllib.request.HTTPDigestAuthHandler, urllib.request.HTTPRedirectHandler, urllib.request.HTTPDefaultErrorHandler):
+    def http_error_default(self, req, fp, code, msg, headers):
+        # The default implementation just raises HTTPError.
+        # Forget that.
+        fp.status = code
+        return fp
+
+    def http_error_301(self, req, fp, code, msg, hdrs):
+        result = urllib.request.HTTPRedirectHandler.http_error_301(self, req, fp,
+                                                            code, msg, hdrs)
+        result.status = code
+        result.newurl = result.geturl()
+        return result
+    # The default implementations in urllib.request.HTTPRedirectHandler
+    # are identical, so hardcoding a http_error_301 call above
+    # won't affect anything
+    http_error_300 = http_error_301
+    http_error_302 = http_error_301
+    http_error_303 = http_error_301
+    http_error_307 = http_error_301
+
+    def http_error_401(self, req, fp, code, msg, headers):
+        # Check if
+        # - server requires digest auth, AND
+        # - we tried (unsuccessfully) with basic auth, AND
+        # If all conditions hold, parse authentication information
+        # out of the Authorization header we sent the first time
+        # (for the username and password) and the WWW-Authenticate
+        # header the server sent back (for the realm) and retry
+        # the request with the appropriate digest auth headers instead.
+        # This evil genius hack has been brought to you by Aaron Swartz.
+        host = urllib.parse.urlparse(req.get_full_url())[1]
+        if base64 is None or 'Authorization' not in req.headers \
+                          or 'WWW-Authenticate' not in headers:
+            return self.http_error_default(req, fp, code, msg, headers)
+        auth = _base64decode(req.headers['Authorization'].split(' ')[1])
+        user, passw = auth.split(':')
+        realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0]
+        self.add_password(realm, host, user, passw)
+        retry = self.http_error_auth_reqed('www-authenticate', host, req, headers)
+        self.reset_retry_count()
+        return retry
+
+def _build_urllib2_request(url, agent, accept_header, etag, modified, referrer, auth, request_headers):
+    request = urllib.request.Request(url)
+    request.add_header('User-Agent', agent)
+    if etag:
+        request.add_header('If-None-Match', etag)
+    if isinstance(modified, basestring):
+        modified = _parse_date(modified)
+    elif isinstance(modified, datetime.datetime):
+        modified = modified.utctimetuple()
+    if modified:
+        # format into an RFC 1123-compliant timestamp. We can't use
+        # time.strftime() since the %a and %b directives can be affected
+        # by the current locale, but RFC 2616 states that dates must be
+        # in English.
+        short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+        months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
+        request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5]))
+    if referrer:
+        request.add_header('Referer', referrer)
+    if gzip and zlib:
+        request.add_header('Accept-encoding', 'gzip, deflate')
+    elif gzip:
+        request.add_header('Accept-encoding', 'gzip')
+    elif zlib:
+        request.add_header('Accept-encoding', 'deflate')
+    else:
+        request.add_header('Accept-encoding', '')
+    if auth:
+        request.add_header('Authorization', 'Basic %s' % auth)
+    if accept_header:
+        request.add_header('Accept', accept_header)
+    # use this for whatever -- cookies, special headers, etc
+    # [('Cookie','Something'),('x-special-header','Another Value')]
+    for header_name, header_value in request_headers.items():
+        request.add_header(header_name, header_value)
+    request.add_header('A-IM', 'feed') # RFC 3229 support
+    return request
+
+def get(url, etag=None, modified=None, agent=None, referrer=None, handlers=None, request_headers=None, result=None):
+    if handlers is None:
+        handlers = []
+    elif not isinstance(handlers, list):
+        handlers = [handlers]
+    if request_headers is None:
+        request_headers = {}
+
+    # Deal with the feed URI scheme
+    if url.startswith('feed:http'):
+        url = url[5:]
+    elif url.startswith('feed:'):
+        url = 'http:' + url[5:]
+    if not agent:
+        agent = USER_AGENT
+    # Test for inline user:password credentials for HTTP basic auth
+    auth = None
+    if base64 and not url.startswith('ftp:'):
+        urltype, rest = urllib.parse.splittype(url)
+        realhost, rest = urllib.parse.splithost(rest)
+        if realhost:
+            user_passwd, realhost = urllib.parse.splituser(realhost)
+            if user_passwd:
+                url = '%s://%s%s' % (urltype, realhost, rest)
+                auth = base64.standard_b64encode(user_passwd).strip()
+
+    # iri support
+    if not isinstance(url, bytes_):
+        url = _convert_to_idn(url)
+
+    # try to open with urllib2 (to use optional headers)
+    request = _build_urllib2_request(url, agent, ACCEPT_HEADER, etag, modified, referrer, auth, request_headers)
+    opener = urllib.request.build_opener(*tuple(handlers + [_FeedURLHandler()]))
+    opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent
+    f = opener.open(request)
+    data = f.read()
+    f.close()
+
+    # lowercase all of the HTTP headers for comparisons per RFC 2616
+    result['headers'] = dict((k.lower(), v) for k, v in f.headers.items())
+
+    # if feed is gzip-compressed, decompress it
+    if data and 'gzip' in result['headers'].get('content-encoding', ''):
+        try:
+            data = gzip.GzipFile(fileobj=_StringIO(data)).read()
+        except (EOFError, IOError, struct.error) as e:
+            # IOError can occur if the gzip header is bad.
+            # struct.error can occur if the data is damaged.
+            result['bozo'] = True
+            result['bozo_exception'] = e
+            if isinstance(e, struct.error):
+                # A gzip header was found but the data is corrupt.
+                # Ideally, we should re-request the feed without the
+                # 'Accept-encoding: gzip' header, but we don't.
+                data = None
+    elif data and 'deflate' in result['headers'].get('content-encoding', ''):
+        try:
+            data = zlib.decompress(data)
+        except zlib.error as e:
+            try:
+                # The data may have no headers and no checksum.
+                data = zlib.decompress(data, -15)
+            except zlib.error as e:
+                result['bozo'] = True
+                result['bozo_exception'] = e
+
+    # save HTTP headers
+    if 'etag' in result['headers']:
+        etag = result['headers'].get('etag', '')
+        if isinstance(etag, bytes_):
+            etag = etag.decode('utf-8', 'ignore')
+        if etag:
+            result['etag'] = etag
+    if 'last-modified' in result['headers']:
+        modified = result['headers'].get('last-modified', '')
+        if modified:
+            result['modified'] = modified
+            result['modified_parsed'] = _parse_date(modified)
+    if isinstance(f.url, bytes_):
+        result['href'] = f.url.decode('utf-8', 'ignore')
+    else:
+        result['href'] = f.url
+    result['status'] = getattr(f, 'status', 200)
+
+    # Stop processing if the server sent HTTP 304 Not Modified.
+    if getattr(f, 'code', 0) == 304:
+        result['version'] = ''
+        result['debug_message'] = 'The feed has not changed since you last checked, ' + \
+            'so the server sent no data.  This is a feature, not a bug!'
+
+    return data
diff --git a/lib/feedparser/mixin.py b/lib/feedparser/mixin.py
new file mode 100644
index 0000000000000000000000000000000000000000..be73f4e2f1ccc737b9618d31abc0a521dd267f73
--- /dev/null
+++ b/lib/feedparser/mixin.py
@@ -0,0 +1,754 @@
+# Shared code that is common to the strict and loose feed parsers
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import copy
+import re
+
+from xml.sax.saxutils import escape as _xmlescape
+
+# base64 support for Atom feeds that contain embedded binary data
+try:
+    import base64, binascii
+except ImportError:
+    base64 = binascii = None
+else:
+    # Python 3.1 deprecates decodestring in favor of decodebytes
+    _base64decode = getattr(base64, 'decodebytes', base64.decodestring)
+
+try:
+    from html.entities import name2codepoint, entitydefs
+except ImportError:
+    from htmlentitydefs import name2codepoint, entitydefs
+
+from .html import _cp1252
+from .namespaces import _base, cc, dc, georss, itunes, mediarss, psc
+from .sanitizer import _sanitizeHTML, _HTMLSanitizer
+from .util import FeedParserDict
+from .urls import _urljoin, _makeSafeAbsoluteURI, _resolveRelativeURIs
+
+bytes_ = type(b'')
+try:
+    chr = unichr
+except NameError:
+    pass
+
+class _FeedParserMixin(
+        _base.Namespace,
+        cc.Namespace,
+        dc.Namespace,
+        georss.Namespace,
+        itunes.Namespace,
+        mediarss.Namespace,
+        psc.Namespace,
+):
+    namespaces = {
+        '': '',
+        'http://backend.userland.com/rss': '',
+        'http://blogs.law.harvard.edu/tech/rss': '',
+        'http://purl.org/rss/1.0/': '',
+        'http://my.netscape.com/rdf/simple/0.9/': '',
+        'http://example.com/newformat#': '',
+        'http://example.com/necho': '',
+        'http://purl.org/echo/': '',
+        'uri/of/echo/namespace#': '',
+        'http://purl.org/pie/': '',
+        'http://purl.org/atom/ns#': '',
+        'http://www.w3.org/2005/Atom': '',
+        'http://purl.org/rss/1.0/modules/rss091#': '',
+
+        'http://webns.net/mvcb/':                                'admin',
+        'http://purl.org/rss/1.0/modules/aggregation/':          'ag',
+        'http://purl.org/rss/1.0/modules/annotate/':             'annotate',
+        'http://media.tangent.org/rss/1.0/':                     'audio',
+        'http://backend.userland.com/blogChannelModule':         'blogChannel',
+        'http://creativecommons.org/ns#license':                 'cc',
+        'http://web.resource.org/cc/':                           'cc',
+        'http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html': 'creativeCommons',
+        'http://backend.userland.com/creativeCommonsRssModule':  'creativeCommons',
+        'http://purl.org/rss/1.0/modules/company':               'co',
+        'http://purl.org/rss/1.0/modules/content/':              'content',
+        'http://my.theinfo.org/changed/1.0/rss/':                'cp',
+        'http://purl.org/dc/elements/1.1/':                      'dc',
+        'http://purl.org/dc/terms/':                             'dcterms',
+        'http://purl.org/rss/1.0/modules/email/':                'email',
+        'http://purl.org/rss/1.0/modules/event/':                'ev',
+        'http://rssnamespace.org/feedburner/ext/1.0':            'feedburner',
+        'http://freshmeat.net/rss/fm/':                          'fm',
+        'http://xmlns.com/foaf/0.1/':                            'foaf',
+        'http://www.w3.org/2003/01/geo/wgs84_pos#':              'geo',
+        'http://www.georss.org/georss':                          'georss',
+        'http://www.opengis.net/gml':                            'gml',
+        'http://postneo.com/icbm/':                              'icbm',
+        'http://purl.org/rss/1.0/modules/image/':                'image',
+        'http://www.itunes.com/DTDs/PodCast-1.0.dtd':            'itunes',
+        'http://example.com/DTDs/PodCast-1.0.dtd':               'itunes',
+        'http://purl.org/rss/1.0/modules/link/':                 'l',
+        'http://search.yahoo.com/mrss':                          'media',
+        # Version 1.1.2 of the Media RSS spec added the trailing slash on the namespace
+        'http://search.yahoo.com/mrss/':                         'media',
+        'http://madskills.com/public/xml/rss/module/pingback/':  'pingback',
+        'http://prismstandard.org/namespaces/1.2/basic/':        'prism',
+        'http://www.w3.org/1999/02/22-rdf-syntax-ns#':           'rdf',
+        'http://www.w3.org/2000/01/rdf-schema#':                 'rdfs',
+        'http://purl.org/rss/1.0/modules/reference/':            'ref',
+        'http://purl.org/rss/1.0/modules/richequiv/':            'reqv',
+        'http://purl.org/rss/1.0/modules/search/':               'search',
+        'http://purl.org/rss/1.0/modules/slash/':                'slash',
+        'http://schemas.xmlsoap.org/soap/envelope/':             'soap',
+        'http://purl.org/rss/1.0/modules/servicestatus/':        'ss',
+        'http://hacks.benhammersley.com/rss/streaming/':         'str',
+        'http://purl.org/rss/1.0/modules/subscription/':         'sub',
+        'http://purl.org/rss/1.0/modules/syndication/':          'sy',
+        'http://schemas.pocketsoap.com/rss/myDescModule/':       'szf',
+        'http://purl.org/rss/1.0/modules/taxonomy/':             'taxo',
+        'http://purl.org/rss/1.0/modules/threading/':            'thr',
+        'http://purl.org/rss/1.0/modules/textinput/':            'ti',
+        'http://madskills.com/public/xml/rss/module/trackback/': 'trackback',
+        'http://wellformedweb.org/commentAPI/':                  'wfw',
+        'http://purl.org/rss/1.0/modules/wiki/':                 'wiki',
+        'http://www.w3.org/1999/xhtml':                          'xhtml',
+        'http://www.w3.org/1999/xlink':                          'xlink',
+        'http://www.w3.org/XML/1998/namespace':                  'xml',
+        'http://podlove.org/simple-chapters':                    'psc',
+    }
+    _matchnamespaces = {}
+
+    can_be_relative_uri = set(['link', 'id', 'wfw_comment', 'wfw_commentrss', 'docs', 'url', 'href', 'comments', 'icon', 'logo'])
+    can_contain_relative_uris = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'])
+    can_contain_dangerous_markup = set(['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'])
+    html_types = ['text/html', 'application/xhtml+xml']
+
+    def __init__(self):
+        if not self._matchnamespaces:
+            for k, v in self.namespaces.items():
+                self._matchnamespaces[k.lower()] = v
+        self.feeddata = FeedParserDict() # feed-level data
+        self.entries = [] # list of entry-level data
+        self.version = '' # feed type/version, see SUPPORTED_VERSIONS
+        self.namespacesInUse = {} # dictionary of namespaces defined by the feed
+
+        # the following are used internally to track state;
+        # this is really out of control and should be refactored
+        self.infeed = 0
+        self.inentry = 0
+        self.incontent = 0
+        self.intextinput = 0
+        self.inimage = 0
+        self.inauthor = 0
+        self.incontributor = 0
+        self.inpublisher = 0
+        self.insource = 0
+
+        self.sourcedata = FeedParserDict()
+        self.contentparams = FeedParserDict()
+        self._summaryKey = None
+        self.namespacemap = {}
+        self.elementstack = []
+        self.basestack = []
+        self.langstack = []
+        self.svgOK = 0
+        self.title_depth = -1
+        self.depth = 0
+        if self.lang:
+            self.feeddata['language'] = self.lang.replace('_','-')
+
+        # A map of the following form:
+        #     {
+        #         object_that_value_is_set_on: {
+        #             property_name: depth_of_node_property_was_extracted_from,
+        #             other_property: depth_of_node_property_was_extracted_from,
+        #         },
+        #     }
+        self.property_depth_map = {}
+        super(_FeedParserMixin, self).__init__()
+
+    def unknown_starttag(self, tag, attrs):
+        # increment depth counter
+        self.depth += 1
+
+        # normalize attrs
+        attrs = [self._normalize_attributes(attr) for attr in attrs]
+
+        # track xml:base and xml:lang
+        attrsD = dict(attrs)
+        baseuri = attrsD.get('xml:base', attrsD.get('base')) or self.baseuri
+        if isinstance(baseuri, bytes_):
+            baseuri = baseuri.decode(self.encoding, 'ignore')
+        # ensure that self.baseuri is always an absolute URI that
+        # uses a whitelisted URI scheme (e.g. not `javscript:`)
+        if self.baseuri:
+            self.baseuri = _makeSafeAbsoluteURI(self.baseuri, baseuri) or self.baseuri
+        else:
+            self.baseuri = _urljoin(self.baseuri, baseuri)
+        lang = attrsD.get('xml:lang', attrsD.get('lang'))
+        if lang == '':
+            # xml:lang could be explicitly set to '', we need to capture that
+            lang = None
+        elif lang is None:
+            # if no xml:lang is specified, use parent lang
+            lang = self.lang
+        if lang:
+            if tag in ('feed', 'rss', 'rdf:RDF'):
+                self.feeddata['language'] = lang.replace('_','-')
+        self.lang = lang
+        self.basestack.append(self.baseuri)
+        self.langstack.append(lang)
+
+        # track namespaces
+        for prefix, uri in attrs:
+            if prefix.startswith('xmlns:'):
+                self.trackNamespace(prefix[6:], uri)
+            elif prefix == 'xmlns':
+                self.trackNamespace(None, uri)
+
+        # track inline content
+        if self.incontent and not self.contentparams.get('type', 'xml').endswith('xml'):
+            if tag in ('xhtml:div', 'div'):
+                return # typepad does this 10/2007
+            # element declared itself as escaped markup, but it isn't really
+            self.contentparams['type'] = 'application/xhtml+xml'
+        if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml':
+            if tag.find(':') != -1:
+                prefix, tag = tag.split(':', 1)
+                namespace = self.namespacesInUse.get(prefix, '')
+                if tag=='math' and namespace=='http://www.w3.org/1998/Math/MathML':
+                    attrs.append(('xmlns',namespace))
+                if tag=='svg' and namespace=='http://www.w3.org/2000/svg':
+                    attrs.append(('xmlns',namespace))
+            if tag == 'svg':
+                self.svgOK += 1
+            return self.handle_data('<%s%s>' % (tag, self.strattrs(attrs)), escape=0)
+
+        # match namespaces
+        if tag.find(':') != -1:
+            prefix, suffix = tag.split(':', 1)
+        else:
+            prefix, suffix = '', tag
+        prefix = self.namespacemap.get(prefix, prefix)
+        if prefix:
+            prefix = prefix + '_'
+
+        # special hack for better tracking of empty textinput/image elements in illformed feeds
+        if (not prefix) and tag not in ('title', 'link', 'description', 'name'):
+            self.intextinput = 0
+        if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'):
+            self.inimage = 0
+
+        # call special handler (if defined) or default handler
+        methodname = '_start_' + prefix + suffix
+        try:
+            method = getattr(self, methodname)
+            return method(attrsD)
+        except AttributeError:
+            # Since there's no handler or something has gone wrong we explicitly add the element and its attributes
+            unknown_tag = prefix + suffix
+            if len(attrsD) == 0:
+                # No attributes so merge it into the encosing dictionary
+                return self.push(unknown_tag, 1)
+            else:
+                # Has attributes so create it in its own dictionary
+                context = self._getContext()
+                context[unknown_tag] = attrsD
+
+    def unknown_endtag(self, tag):
+        # match namespaces
+        if tag.find(':') != -1:
+            prefix, suffix = tag.split(':', 1)
+        else:
+            prefix, suffix = '', tag
+        prefix = self.namespacemap.get(prefix, prefix)
+        if prefix:
+            prefix = prefix + '_'
+        if suffix == 'svg' and self.svgOK:
+            self.svgOK -= 1
+
+        # call special handler (if defined) or default handler
+        methodname = '_end_' + prefix + suffix
+        try:
+            if self.svgOK:
+                raise AttributeError()
+            method = getattr(self, methodname)
+            method()
+        except AttributeError:
+            self.pop(prefix + suffix)
+
+        # track inline content
+        if self.incontent and not self.contentparams.get('type', 'xml').endswith('xml'):
+            # element declared itself as escaped markup, but it isn't really
+            if tag in ('xhtml:div', 'div'):
+                return # typepad does this 10/2007
+            self.contentparams['type'] = 'application/xhtml+xml'
+        if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml':
+            tag = tag.split(':')[-1]
+            self.handle_data('</%s>' % tag, escape=0)
+
+        # track xml:base and xml:lang going out of scope
+        if self.basestack:
+            self.basestack.pop()
+            if self.basestack and self.basestack[-1]:
+                self.baseuri = self.basestack[-1]
+        if self.langstack:
+            self.langstack.pop()
+            if self.langstack: # and (self.langstack[-1] is not None):
+                self.lang = self.langstack[-1]
+
+        self.depth -= 1
+
+    def handle_charref(self, ref):
+        # called for each character reference, e.g. for '&#160;', ref will be '160'
+        if not self.elementstack:
+            return
+        ref = ref.lower()
+        if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'):
+            text = '&#%s;' % ref
+        else:
+            if ref[0] == 'x':
+                c = int(ref[1:], 16)
+            else:
+                c = int(ref)
+            text = chr(c).encode('utf-8')
+        self.elementstack[-1][2].append(text)
+
+    def handle_entityref(self, ref):
+        # called for each entity reference, e.g. for '&copy;', ref will be 'copy'
+        if not self.elementstack:
+            return
+        if ref in ('lt', 'gt', 'quot', 'amp', 'apos'):
+            text = '&%s;' % ref
+        elif ref in self.entities:
+            text = self.entities[ref]
+            if text.startswith('&#') and text.endswith(';'):
+                return self.handle_entityref(text)
+        else:
+            try:
+                name2codepoint[ref]
+            except KeyError:
+                text = '&%s;' % ref
+            else:
+                text = chr(name2codepoint[ref]).encode('utf-8')
+        self.elementstack[-1][2].append(text)
+
+    def handle_data(self, text, escape=1):
+        # called for each block of plain text, i.e. outside of any tag and
+        # not containing any character or entity references
+        if not self.elementstack:
+            return
+        if escape and self.contentparams.get('type') == 'application/xhtml+xml':
+            text = _xmlescape(text)
+        self.elementstack[-1][2].append(text)
+
+    def handle_comment(self, text):
+        # called for each comment, e.g. <!-- insert message here -->
+        pass
+
+    def handle_pi(self, text):
+        # called for each processing instruction, e.g. <?instruction>
+        pass
+
+    def handle_decl(self, text):
+        pass
+
+    def parse_declaration(self, i):
+        # override internal declaration handler to handle CDATA blocks
+        if self.rawdata[i:i+9] == '<![CDATA[':
+            k = self.rawdata.find(']]>', i)
+            if k == -1:
+                # CDATA block began but didn't finish
+                k = len(self.rawdata)
+                return k
+            self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0)
+            return k+3
+        else:
+            k = self.rawdata.find('>', i)
+            if k >= 0:
+                return k+1
+            else:
+                # We have an incomplete CDATA block.
+                return k
+
+    def mapContentType(self, contentType):
+        contentType = contentType.lower()
+        if contentType == 'text' or contentType == 'plain':
+            contentType = 'text/plain'
+        elif contentType == 'html':
+            contentType = 'text/html'
+        elif contentType == 'xhtml':
+            contentType = 'application/xhtml+xml'
+        return contentType
+
+    def trackNamespace(self, prefix, uri):
+        loweruri = uri.lower()
+        if not self.version:
+            if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/'):
+                self.version = 'rss090'
+            elif loweruri == 'http://purl.org/rss/1.0/':
+                self.version = 'rss10'
+            elif loweruri == 'http://www.w3.org/2005/atom':
+                self.version = 'atom10'
+        if loweruri.find('backend.userland.com/rss') != -1:
+            # match any backend.userland.com namespace
+            uri = 'http://backend.userland.com/rss'
+            loweruri = uri
+        if loweruri in self._matchnamespaces:
+            self.namespacemap[prefix] = self._matchnamespaces[loweruri]
+            self.namespacesInUse[self._matchnamespaces[loweruri]] = uri
+        else:
+            self.namespacesInUse[prefix or ''] = uri
+
+    def resolveURI(self, uri):
+        return _urljoin(self.baseuri or '', uri)
+
+    def decodeEntities(self, element, data):
+        return data
+
+    def strattrs(self, attrs):
+        return ''.join([' %s="%s"' % (t[0],_xmlescape(t[1],{'"':'&quot;'})) for t in attrs])
+
+    def push(self, element, expectingText):
+        self.elementstack.append([element, expectingText, []])
+
+    def pop(self, element, stripWhitespace=1):
+        if not self.elementstack:
+            return
+        if self.elementstack[-1][0] != element:
+            return
+
+        element, expectingText, pieces = self.elementstack.pop()
+
+        if self.version == 'atom10' and self.contentparams.get('type', 'text') == 'application/xhtml+xml':
+            # remove enclosing child element, but only if it is a <div> and
+            # only if all the remaining content is nested underneath it.
+            # This means that the divs would be retained in the following:
+            #    <div>foo</div><div>bar</div>
+            while pieces and len(pieces)>1 and not pieces[-1].strip():
+                del pieces[-1]
+            while pieces and len(pieces)>1 and not pieces[0].strip():
+                del pieces[0]
+            if pieces and (pieces[0] == '<div>' or pieces[0].startswith('<div ')) and pieces[-1]=='</div>':
+                depth = 0
+                for piece in pieces[:-1]:
+                    if piece.startswith('</'):
+                        depth -= 1
+                        if depth == 0:
+                            break
+                    elif piece.startswith('<') and not piece.endswith('/>'):
+                        depth += 1
+                else:
+                    pieces = pieces[1:-1]
+
+        # Ensure each piece is a str for Python 3
+        for (i, v) in enumerate(pieces):
+            if isinstance(v, bytes_):
+                pieces[i] = v.decode('utf-8')
+
+        output = ''.join(pieces)
+        if stripWhitespace:
+            output = output.strip()
+        if not expectingText:
+            return output
+
+        # decode base64 content
+        if base64 and self.contentparams.get('base64', 0):
+            try:
+                output = _base64decode(output)
+            except binascii.Error:
+                pass
+            except binascii.Incomplete:
+                pass
+            except TypeError:
+                # In Python 3, base64 takes and outputs bytes, not str
+                # This may not be the most correct way to accomplish this
+                output = _base64decode(output.encode('utf-8')).decode('utf-8')
+
+        # resolve relative URIs
+        if (element in self.can_be_relative_uri) and output:
+            # do not resolve guid elements with isPermalink="false"
+            if not element == 'id' or self.guidislink:
+                output = self.resolveURI(output)
+
+        # decode entities within embedded markup
+        if not self.contentparams.get('base64', 0):
+            output = self.decodeEntities(element, output)
+
+        # some feed formats require consumers to guess
+        # whether the content is html or plain text
+        if not self.version.startswith('atom') and self.contentparams.get('type') == 'text/plain':
+            if self.lookslikehtml(output):
+                self.contentparams['type'] = 'text/html'
+
+        # remove temporary cruft from contentparams
+        try:
+            del self.contentparams['mode']
+        except KeyError:
+            pass
+        try:
+            del self.contentparams['base64']
+        except KeyError:
+            pass
+
+        is_htmlish = self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types
+        # resolve relative URIs within embedded markup
+        if is_htmlish and RESOLVE_RELATIVE_URIS:
+            if element in self.can_contain_relative_uris:
+                output = _resolveRelativeURIs(output, self.baseuri, self.encoding, self.contentparams.get('type', 'text/html'))
+
+        # sanitize embedded markup
+        if is_htmlish and SANITIZE_HTML:
+            if element in self.can_contain_dangerous_markup:
+                output = _sanitizeHTML(output, self.encoding, self.contentparams.get('type', 'text/html'))
+
+        if self.encoding and isinstance(output, bytes_):
+            output = output.decode(self.encoding, 'ignore')
+
+        # address common error where people take data that is already
+        # utf-8, presume that it is iso-8859-1, and re-encode it.
+        if self.encoding in ('utf-8', 'utf-8_INVALID_PYTHON_3') and not isinstance(output, bytes_):
+            try:
+                output = output.encode('iso-8859-1').decode('utf-8')
+            except (UnicodeEncodeError, UnicodeDecodeError):
+                pass
+
+        # map win-1252 extensions to the proper code points
+        if not isinstance(output, bytes_):
+            output = output.translate(_cp1252)
+
+        # categories/tags/keywords/whatever are handled in _end_category or _end_tags or _end_itunes_keywords
+        if element in ('category', 'tags', 'itunes_keywords'):
+            return output
+
+        if element == 'title' and -1 < self.title_depth <= self.depth:
+            return output
+
+        # store output in appropriate place(s)
+        if self.inentry and not self.insource:
+            if element == 'content':
+                self.entries[-1].setdefault(element, [])
+                contentparams = copy.deepcopy(self.contentparams)
+                contentparams['value'] = output
+                self.entries[-1][element].append(contentparams)
+            elif element == 'link':
+                if not self.inimage:
+                    # query variables in urls in link elements are improperly
+                    # converted from `?a=1&b=2` to `?a=1&b;=2` as if they're
+                    # unhandled character references. fix this special case.
+                    output = output.replace('&amp;', '&')
+                    output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output)
+                    self.entries[-1][element] = output
+                    if output:
+                        self.entries[-1]['links'][-1]['href'] = output
+            else:
+                if element == 'description':
+                    element = 'summary'
+                old_value_depth = self.property_depth_map.setdefault(self.entries[-1], {}).get(element)
+                if old_value_depth is None or self.depth <= old_value_depth:
+                    self.property_depth_map[self.entries[-1]][element] = self.depth
+                    self.entries[-1][element] = output
+                if self.incontent:
+                    contentparams = copy.deepcopy(self.contentparams)
+                    contentparams['value'] = output
+                    self.entries[-1][element + '_detail'] = contentparams
+        elif (self.infeed or self.insource):# and (not self.intextinput) and (not self.inimage):
+            context = self._getContext()
+            if element == 'description':
+                element = 'subtitle'
+            context[element] = output
+            if element == 'link':
+                # fix query variables; see above for the explanation
+                output = re.sub("&([A-Za-z0-9_]+);", "&\g<1>", output)
+                context[element] = output
+                context['links'][-1]['href'] = output
+            elif self.incontent:
+                contentparams = copy.deepcopy(self.contentparams)
+                contentparams['value'] = output
+                context[element + '_detail'] = contentparams
+        return output
+
+    def pushContent(self, tag, attrsD, defaultContentType, expectingText):
+        self.incontent += 1
+        if self.lang:
+            self.lang=self.lang.replace('_','-')
+        self.contentparams = FeedParserDict({
+            'type': self.mapContentType(attrsD.get('type', defaultContentType)),
+            'language': self.lang,
+            'base': self.baseuri})
+        self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams)
+        self.push(tag, expectingText)
+
+    def popContent(self, tag):
+        value = self.pop(tag)
+        self.incontent -= 1
+        self.contentparams.clear()
+        return value
+
+    # a number of elements in a number of RSS variants are nominally plain
+    # text, but this is routinely ignored.  This is an attempt to detect
+    # the most common cases.  As false positives often result in silent
+    # data loss, this function errs on the conservative side.
+    @staticmethod
+    def lookslikehtml(s):
+        # must have a close tag or an entity reference to qualify
+        if not (re.search(r'</(\w+)>', s) or re.search(r'&#?\w+;', s)):
+            return
+
+        # all tags must be in a restricted subset of valid HTML tags
+        if any((t for t in re.findall(r'</?(\w+)', s) if t.lower() not in _HTMLSanitizer.acceptable_elements)):
+            return
+
+        # all entities must have been defined as valid HTML entities
+        if any((e for e in re.findall(r'&(\w+);', s) if e not in entitydefs)):
+            return
+
+        return 1
+
+    def _mapToStandardPrefix(self, name):
+        colonpos = name.find(':')
+        if colonpos != -1:
+            prefix = name[:colonpos]
+            suffix = name[colonpos+1:]
+            prefix = self.namespacemap.get(prefix, prefix)
+            name = prefix + ':' + suffix
+        return name
+
+    def _getAttribute(self, attrsD, name):
+        return attrsD.get(self._mapToStandardPrefix(name))
+
+    def _isBase64(self, attrsD, contentparams):
+        if attrsD.get('mode', '') == 'base64':
+            return 1
+        if self.contentparams['type'].startswith('text/'):
+            return 0
+        if self.contentparams['type'].endswith('+xml'):
+            return 0
+        if self.contentparams['type'].endswith('/xml'):
+            return 0
+        return 1
+
+    def _itsAnHrefDamnIt(self, attrsD):
+        href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None)))
+        if href:
+            try:
+                del attrsD['url']
+            except KeyError:
+                pass
+            try:
+                del attrsD['uri']
+            except KeyError:
+                pass
+            attrsD['href'] = href
+        return attrsD
+
+    def _save(self, key, value, overwrite=False):
+        context = self._getContext()
+        if overwrite:
+            context[key] = value
+        else:
+            context.setdefault(key, value)
+
+    def _getContext(self):
+        if self.insource:
+            context = self.sourcedata
+        elif self.inimage and 'image' in self.feeddata:
+            context = self.feeddata['image']
+        elif self.intextinput:
+            context = self.feeddata['textinput']
+        elif self.inentry:
+            context = self.entries[-1]
+        else:
+            context = self.feeddata
+        return context
+
+    def _save_author(self, key, value, prefix='author'):
+        context = self._getContext()
+        context.setdefault(prefix + '_detail', FeedParserDict())
+        context[prefix + '_detail'][key] = value
+        self._sync_author_detail()
+        context.setdefault('authors', [FeedParserDict()])
+        context['authors'][-1][key] = value
+
+    def _save_contributor(self, key, value):
+        context = self._getContext()
+        context.setdefault('contributors', [FeedParserDict()])
+        context['contributors'][-1][key] = value
+
+    def _sync_author_detail(self, key='author'):
+        context = self._getContext()
+        detail = context.get('%ss' % key, [FeedParserDict()])[-1]
+        if detail:
+            name = detail.get('name')
+            email = detail.get('email')
+            if name and email:
+                context[key] = '%s (%s)' % (name, email)
+            elif name:
+                context[key] = name
+            elif email:
+                context[key] = email
+        else:
+            author, email = context.get(key), None
+            if not author:
+                return
+            emailmatch = re.search(r'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))(\?subject=\S+)?''', author)
+            if emailmatch:
+                email = emailmatch.group(0)
+                # probably a better way to do the following, but it passes all the tests
+                author = author.replace(email, '')
+                author = author.replace('()', '')
+                author = author.replace('<>', '')
+                author = author.replace('&lt;&gt;', '')
+                author = author.strip()
+                if author and (author[0] == '('):
+                    author = author[1:]
+                if author and (author[-1] == ')'):
+                    author = author[:-1]
+                author = author.strip()
+            if author or email:
+                context.setdefault('%s_detail' % key, detail)
+            if author:
+                detail['name'] = author
+            if email:
+                detail['email'] = email
+
+    def _addTag(self, term, scheme, label):
+        context = self._getContext()
+        tags = context.setdefault('tags', [])
+        if (not term) and (not scheme) and (not label):
+            return
+        value = FeedParserDict(term=term, scheme=scheme, label=label)
+        if value not in tags:
+            tags.append(value)
+
+    def _start_tags(self, attrsD):
+        # This is a completely-made up element. Its semantics are determined
+        # only by a single feed that precipitated bug report 392 on Google Code.
+        # In short, this is junk code.
+        self.push('tags', 1)
+
+    def _end_tags(self):
+        for term in self.pop('tags').split(','):
+            self._addTag(term.strip(), None, None)
diff --git a/gui/slick/js/new/config_subtitles.js b/lib/feedparser/namespaces/__init__.py
similarity index 100%
rename from gui/slick/js/new/config_subtitles.js
rename to lib/feedparser/namespaces/__init__.py
diff --git a/lib/feedparser/namespaces/_base.py b/lib/feedparser/namespaces/_base.py
new file mode 100644
index 0000000000000000000000000000000000000000..f25edb6251d6022e34c1dc443beb1f238f5a18f0
--- /dev/null
+++ b/lib/feedparser/namespaces/_base.py
@@ -0,0 +1,499 @@
+# Support for the Atom, RSS, RDF, and CDF feed formats
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import copy
+
+from ..datetimes import registerDateHandler, _parse_date
+from ..urls import _makeSafeAbsoluteURI
+from ..util import FeedParserDict
+
+class Namespace(object):
+    """Support for the Atom, RSS, RDF, and CDF feed formats.
+
+    The feed formats all share common elements, some of which have conflicting
+    interpretations. For simplicity, all of the base feed format support is
+    collected here.
+    """
+
+    supported_namespaces = {
+        '': '',
+        'http://backend.userland.com/rss': '',
+        'http://blogs.law.harvard.edu/tech/rss': '',
+        'http://purl.org/rss/1.0/': '',
+        'http://my.netscape.com/rdf/simple/0.9/': '',
+        'http://example.com/newformat#': '',
+        'http://example.com/necho': '',
+        'http://purl.org/echo/': '',
+        'uri/of/echo/namespace#': '',
+        'http://purl.org/pie/': '',
+        'http://purl.org/atom/ns#': '',
+        'http://www.w3.org/2005/Atom': '',
+        'http://purl.org/rss/1.0/modules/rss091#': '',
+    }
+
+    def _start_rss(self, attrsD):
+        versionmap = {'0.91': 'rss091u',
+                      '0.92': 'rss092',
+                      '0.93': 'rss093',
+                      '0.94': 'rss094'}
+        #If we're here then this is an RSS feed.
+        #If we don't have a version or have a version that starts with something
+        #other than RSS then there's been a mistake. Correct it.
+        if not self.version or not self.version.startswith('rss'):
+            attr_version = attrsD.get('version', '')
+            version = versionmap.get(attr_version)
+            if version:
+                self.version = version
+            elif attr_version.startswith('2.'):
+                self.version = 'rss20'
+            else:
+                self.version = 'rss'
+
+    def _start_channel(self, attrsD):
+        self.infeed = 1
+        self._cdf_common(attrsD)
+
+    def _cdf_common(self, attrsD):
+        if 'lastmod' in attrsD:
+            self._start_modified({})
+            self.elementstack[-1][-1] = attrsD['lastmod']
+            self._end_modified()
+        if 'href' in attrsD:
+            self._start_link({})
+            self.elementstack[-1][-1] = attrsD['href']
+            self._end_link()
+
+    def _start_feed(self, attrsD):
+        self.infeed = 1
+        versionmap = {'0.1': 'atom01',
+                      '0.2': 'atom02',
+                      '0.3': 'atom03'}
+        if not self.version:
+            attr_version = attrsD.get('version')
+            version = versionmap.get(attr_version)
+            if version:
+                self.version = version
+            else:
+                self.version = 'atom'
+
+    def _end_channel(self):
+        self.infeed = 0
+    _end_feed = _end_channel
+
+    def _start_image(self, attrsD):
+        context = self._getContext()
+        if not self.inentry:
+            context.setdefault('image', FeedParserDict())
+        self.inimage = 1
+        self.title_depth = -1
+        self.push('image', 0)
+
+    def _end_image(self):
+        self.pop('image')
+        self.inimage = 0
+
+    def _start_textinput(self, attrsD):
+        context = self._getContext()
+        context.setdefault('textinput', FeedParserDict())
+        self.intextinput = 1
+        self.title_depth = -1
+        self.push('textinput', 0)
+    _start_textInput = _start_textinput
+
+    def _end_textinput(self):
+        self.pop('textinput')
+        self.intextinput = 0
+    _end_textInput = _end_textinput
+
+    def _start_author(self, attrsD):
+        self.inauthor = 1
+        self.push('author', 1)
+        # Append a new FeedParserDict when expecting an author
+        context = self._getContext()
+        context.setdefault('authors', [])
+        context['authors'].append(FeedParserDict())
+    _start_managingeditor = _start_author
+
+    def _end_author(self):
+        self.pop('author')
+        self.inauthor = 0
+        self._sync_author_detail()
+    _end_managingeditor = _end_author
+
+    def _start_contributor(self, attrsD):
+        self.incontributor = 1
+        context = self._getContext()
+        context.setdefault('contributors', [])
+        context['contributors'].append(FeedParserDict())
+        self.push('contributor', 0)
+
+    def _end_contributor(self):
+        self.pop('contributor')
+        self.incontributor = 0
+
+    def _start_name(self, attrsD):
+        self.push('name', 0)
+
+    def _end_name(self):
+        value = self.pop('name')
+        if self.inpublisher:
+            self._save_author('name', value, 'publisher')
+        elif self.inauthor:
+            self._save_author('name', value)
+        elif self.incontributor:
+            self._save_contributor('name', value)
+        elif self.intextinput:
+            context = self._getContext()
+            context['name'] = value
+
+    def _start_width(self, attrsD):
+        self.push('width', 0)
+
+    def _end_width(self):
+        value = self.pop('width')
+        try:
+            value = int(value)
+        except ValueError:
+            value = 0
+        if self.inimage:
+            context = self._getContext()
+            context['width'] = value
+
+    def _start_height(self, attrsD):
+        self.push('height', 0)
+
+    def _end_height(self):
+        value = self.pop('height')
+        try:
+            value = int(value)
+        except ValueError:
+            value = 0
+        if self.inimage:
+            context = self._getContext()
+            context['height'] = value
+
+    def _start_url(self, attrsD):
+        self.push('href', 1)
+    _start_homepage = _start_url
+    _start_uri = _start_url
+
+    def _end_url(self):
+        value = self.pop('href')
+        if self.inauthor:
+            self._save_author('href', value)
+        elif self.incontributor:
+            self._save_contributor('href', value)
+    _end_homepage = _end_url
+    _end_uri = _end_url
+
+    def _start_email(self, attrsD):
+        self.push('email', 0)
+
+    def _end_email(self):
+        value = self.pop('email')
+        if self.inpublisher:
+            self._save_author('email', value, 'publisher')
+        elif self.inauthor:
+            self._save_author('email', value)
+        elif self.incontributor:
+            self._save_contributor('email', value)
+
+    def _start_subtitle(self, attrsD):
+        self.pushContent('subtitle', attrsD, 'text/plain', 1)
+    _start_tagline = _start_subtitle
+
+    def _end_subtitle(self):
+        self.popContent('subtitle')
+    _end_tagline = _end_subtitle
+
+    def _start_rights(self, attrsD):
+        self.pushContent('rights', attrsD, 'text/plain', 1)
+    _start_copyright = _start_rights
+
+    def _end_rights(self):
+        self.popContent('rights')
+    _end_copyright = _end_rights
+
+    def _start_item(self, attrsD):
+        self.entries.append(FeedParserDict())
+        self.push('item', 0)
+        self.inentry = 1
+        self.guidislink = 0
+        self.title_depth = -1
+        id = self._getAttribute(attrsD, 'rdf:about')
+        if id:
+            context = self._getContext()
+            context['id'] = id
+        self._cdf_common(attrsD)
+    _start_entry = _start_item
+
+    def _end_item(self):
+        self.pop('item')
+        self.inentry = 0
+    _end_entry = _end_item
+
+    def _start_language(self, attrsD):
+        self.push('language', 1)
+
+    def _end_language(self):
+        self.lang = self.pop('language')
+
+    def _start_webmaster(self, attrsD):
+        self.push('publisher', 1)
+
+    def _end_webmaster(self):
+        self.pop('publisher')
+        self._sync_author_detail('publisher')
+
+    def _start_published(self, attrsD):
+        self.push('published', 1)
+    _start_issued = _start_published
+    _start_pubdate = _start_published
+
+    def _end_published(self):
+        value = self.pop('published')
+        self._save('published_parsed', _parse_date(value), overwrite=True)
+    _end_issued = _end_published
+    _end_pubdate = _end_published
+
+    def _start_updated(self, attrsD):
+        self.push('updated', 1)
+    _start_modified = _start_updated
+    _start_lastbuilddate = _start_updated
+
+    def _end_updated(self):
+        value = self.pop('updated')
+        parsed_value = _parse_date(value)
+        self._save('updated_parsed', parsed_value, overwrite=True)
+    _end_modified = _end_updated
+    _end_lastbuilddate = _end_updated
+
+    def _start_created(self, attrsD):
+        self.push('created', 1)
+
+    def _end_created(self):
+        value = self.pop('created')
+        self._save('created_parsed', _parse_date(value), overwrite=True)
+
+    def _start_expirationdate(self, attrsD):
+        self.push('expired', 1)
+
+    def _end_expirationdate(self):
+        self._save('expired_parsed', _parse_date(self.pop('expired')), overwrite=True)
+
+    def _start_category(self, attrsD):
+        term = attrsD.get('term')
+        scheme = attrsD.get('scheme', attrsD.get('domain'))
+        label = attrsD.get('label')
+        self._addTag(term, scheme, label)
+        self.push('category', 1)
+    _start_keywords = _start_category
+
+    def _end_category(self):
+        value = self.pop('category')
+        if not value:
+            return
+        context = self._getContext()
+        tags = context['tags']
+        if value and len(tags) and not tags[-1]['term']:
+            tags[-1]['term'] = value
+        else:
+            self._addTag(value, None, None)
+    _end_keywords = _end_category
+
+    def _start_cloud(self, attrsD):
+        self._getContext()['cloud'] = FeedParserDict(attrsD)
+
+    def _start_link(self, attrsD):
+        attrsD.setdefault('rel', 'alternate')
+        if attrsD['rel'] == 'self':
+            attrsD.setdefault('type', 'application/atom+xml')
+        else:
+            attrsD.setdefault('type', 'text/html')
+        context = self._getContext()
+        attrsD = self._itsAnHrefDamnIt(attrsD)
+        if 'href' in attrsD:
+            attrsD['href'] = self.resolveURI(attrsD['href'])
+        expectingText = self.infeed or self.inentry or self.insource
+        context.setdefault('links', [])
+        if not (self.inentry and self.inimage):
+            context['links'].append(FeedParserDict(attrsD))
+        if 'href' in attrsD:
+            expectingText = 0
+            if (attrsD.get('rel') == 'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types):
+                context['link'] = attrsD['href']
+        else:
+            self.push('link', expectingText)
+
+    def _end_link(self):
+        value = self.pop('link')
+
+    def _start_guid(self, attrsD):
+        self.guidislink = (attrsD.get('ispermalink', 'true') == 'true')
+        self.push('id', 1)
+    _start_id = _start_guid
+
+    def _end_guid(self):
+        value = self.pop('id')
+        self._save('guidislink', self.guidislink and 'link' not in self._getContext())
+        if self.guidislink:
+            # guid acts as link, but only if 'ispermalink' is not present or is 'true',
+            # and only if the item doesn't already have a link element
+            self._save('link', value)
+    _end_id = _end_guid
+
+    def _start_title(self, attrsD):
+        if self.svgOK:
+            return self.unknown_starttag('title', list(attrsD.items()))
+        self.pushContent('title', attrsD, 'text/plain', self.infeed or self.inentry or self.insource)
+
+    def _end_title(self):
+        if self.svgOK:
+            return
+        value = self.popContent('title')
+        if not value:
+            return
+        self.title_depth = self.depth
+
+    def _start_description(self, attrsD):
+        context = self._getContext()
+        if 'summary' in context:
+            self._summaryKey = 'content'
+            self._start_content(attrsD)
+        else:
+            self.pushContent('description', attrsD, 'text/html', self.infeed or self.inentry or self.insource)
+
+    def _start_abstract(self, attrsD):
+        self.pushContent('description', attrsD, 'text/plain', self.infeed or self.inentry or self.insource)
+
+    def _end_description(self):
+        if self._summaryKey == 'content':
+            self._end_content()
+        else:
+            value = self.popContent('description')
+        self._summaryKey = None
+    _end_abstract = _end_description
+
+    def _start_info(self, attrsD):
+        self.pushContent('info', attrsD, 'text/plain', 1)
+    _start_feedburner_browserfriendly = _start_info
+
+    def _end_info(self):
+        self.popContent('info')
+    _end_feedburner_browserfriendly = _end_info
+
+    def _start_generator(self, attrsD):
+        if attrsD:
+            attrsD = self._itsAnHrefDamnIt(attrsD)
+            if 'href' in attrsD:
+                attrsD['href'] = self.resolveURI(attrsD['href'])
+        self._getContext()['generator_detail'] = FeedParserDict(attrsD)
+        self.push('generator', 1)
+
+    def _end_generator(self):
+        value = self.pop('generator')
+        context = self._getContext()
+        if 'generator_detail' in context:
+            context['generator_detail']['name'] = value
+
+    def _start_summary(self, attrsD):
+        context = self._getContext()
+        if 'summary' in context:
+            self._summaryKey = 'content'
+            self._start_content(attrsD)
+        else:
+            self._summaryKey = 'summary'
+            self.pushContent(self._summaryKey, attrsD, 'text/plain', 1)
+
+    def _end_summary(self):
+        if self._summaryKey == 'content':
+            self._end_content()
+        else:
+            self.popContent(self._summaryKey or 'summary')
+        self._summaryKey = None
+
+    def _start_enclosure(self, attrsD):
+        attrsD = self._itsAnHrefDamnIt(attrsD)
+        context = self._getContext()
+        attrsD['rel'] = 'enclosure'
+        context.setdefault('links', []).append(FeedParserDict(attrsD))
+
+    def _start_source(self, attrsD):
+        if 'url' in attrsD:
+            # This means that we're processing a source element from an RSS 2.0 feed
+            self.sourcedata['href'] = attrsD['url']
+        self.push('source', 1)
+        self.insource = 1
+        self.title_depth = -1
+
+    def _end_source(self):
+        self.insource = 0
+        value = self.pop('source')
+        if value:
+            self.sourcedata['title'] = value
+        self._getContext()['source'] = copy.deepcopy(self.sourcedata)
+        self.sourcedata.clear()
+
+    def _start_content(self, attrsD):
+        self.pushContent('content', attrsD, 'text/plain', 1)
+        src = attrsD.get('src')
+        if src:
+            self.contentparams['src'] = src
+        self.push('content', 1)
+
+    def _start_body(self, attrsD):
+        self.pushContent('content', attrsD, 'application/xhtml+xml', 1)
+    _start_xhtml_body = _start_body
+
+    def _start_content_encoded(self, attrsD):
+        self.pushContent('content', attrsD, 'text/html', 1)
+    _start_fullitem = _start_content_encoded
+
+    def _end_content(self):
+        copyToSummary = self.mapContentType(self.contentparams.get('type')) in (['text/plain'] + self.html_types)
+        value = self.popContent('content')
+        if copyToSummary:
+            self._save('summary', value)
+
+    _end_body = _end_content
+    _end_xhtml_body = _end_content
+    _end_content_encoded = _end_content
+    _end_fullitem = _end_content
+
+    def _start_newlocation(self, attrsD):
+        self.push('newlocation', 1)
+
+    def _end_newlocation(self):
+        url = self.pop('newlocation')
+        context = self._getContext()
+        # don't set newlocation if the context isn't right
+        if context is not self.feeddata:
+            return
+        context['newlocation'] = _makeSafeAbsoluteURI(self.baseuri, url.strip())
diff --git a/lib/feedparser/namespaces/admin.py b/lib/feedparser/namespaces/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..7c663aef8257e1ee57ca37b752fd11095e632537
--- /dev/null
+++ b/lib/feedparser/namespaces/admin.py
@@ -0,0 +1,55 @@
+# Support for the administrative elements extension
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+
+class Namespace(object):
+    # RDF Site Summary 1.0 Modules: Administrative
+    # http://web.resource.org/rss/1.0/modules/admin/
+
+    supported_namespaces = {
+        'http://webns.net/mvcb/': 'admin',
+    }
+
+    def _start_admin_generatoragent(self, attrsD):
+        self.push('generator', 1)
+        value = self._getAttribute(attrsD, 'rdf:resource')
+        if value:
+            self.elementstack[-1][2].append(value)
+        self.pop('generator')
+        self._getContext()['generator_detail'] = FeedParserDict({'href': value})
+
+    def _start_admin_errorreportsto(self, attrsD):
+        self.push('errorreportsto', 1)
+        value = self._getAttribute(attrsD, 'rdf:resource')
+        if value:
+            self.elementstack[-1][2].append(value)
+        self.pop('errorreportsto')
+
diff --git a/lib/feedparser/namespaces/cc.py b/lib/feedparser/namespaces/cc.py
new file mode 100644
index 0000000000000000000000000000000000000000..6d8d3933d44a7346b1dec7da18841361788bb744
--- /dev/null
+++ b/lib/feedparser/namespaces/cc.py
@@ -0,0 +1,71 @@
+# Support for the Creative Commons licensing extensions
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+
+class Namespace(object):
+    supported_namespaces = {
+        # RDF-based namespace
+        'http://creativecommons.org/ns#license': 'cc',
+
+        # Old RDF-based namespace
+        'http://web.resource.org/cc/': 'cc',
+
+        # RSS-based namespace
+        'http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html': 'creativecommons',
+
+        # Old RSS-based namespace
+        'http://backend.userland.com/creativeCommonsRssModule': 'creativecommons',
+    }
+
+    def _start_cc_license(self, attrsD):
+        context = self._getContext()
+        value = self._getAttribute(attrsD, 'rdf:resource')
+        attrsD = FeedParserDict()
+        attrsD['rel'] = 'license'
+        if value:
+            attrsD['href'] = value
+        context.setdefault('links', []).append(attrsD)
+
+    def _start_creativecommons_license(self, attrsD):
+        self.push('license', 1)
+    _start_creativeCommons_license = _start_creativecommons_license
+
+    def _end_creativecommons_license(self):
+        value = self.pop('license')
+        context = self._getContext()
+        attrsD = FeedParserDict()
+        attrsD['rel'] = 'license'
+        if value:
+            attrsD['href'] = value
+        context.setdefault('links', []).append(attrsD)
+        del context['license']
+    _end_creativeCommons_license = _end_creativecommons_license
+
diff --git a/lib/feedparser/namespaces/dc.py b/lib/feedparser/namespaces/dc.py
new file mode 100644
index 0000000000000000000000000000000000000000..035bbadd94dfa4c75884f3dd0b772a503d9ed047
--- /dev/null
+++ b/lib/feedparser/namespaces/dc.py
@@ -0,0 +1,136 @@
+# Support for the Dublin Core metadata extensions
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+from ..datetimes import _parse_date
+
+class Namespace(object):
+    supported_namespaces = {
+        'http://purl.org/dc/elements/1.1/': 'dc',
+        'http://purl.org/dc/terms/': 'dcterms',
+    }
+
+    def _end_dc_author(self):
+        self._end_author()
+
+    def _end_dc_creator(self):
+        self._end_author()
+
+    def _end_dc_date(self):
+        self._end_updated()
+
+    def _end_dc_description(self):
+        self._end_description()
+
+    def _end_dc_language(self):
+        self._end_language()
+
+    def _end_dc_publisher(self):
+        self._end_webmaster()
+
+    def _end_dc_rights(self):
+        self._end_rights()
+
+    def _end_dc_subject(self):
+        self._end_category()
+
+    def _end_dc_title(self):
+        self._end_title()
+
+    def _end_dcterms_created(self):
+        self._end_created()
+
+    def _end_dcterms_issued(self):
+        self._end_published()
+
+    def _end_dcterms_modified(self):
+        self._end_updated()
+
+    def _start_dc_author(self, attrsD):
+        self._start_author(attrsD)
+
+    def _start_dc_creator(self, attrsD):
+        self._start_author(attrsD)
+
+    def _start_dc_date(self, attrsD):
+        self._start_updated(attrsD)
+
+    def _start_dc_description(self, attrsD):
+        self._start_description(attrsD)
+
+    def _start_dc_language(self, attrsD):
+        self._start_language(attrsD)
+
+    def _start_dc_publisher(self, attrsD):
+        self._start_webmaster(attrsD)
+
+    def _start_dc_rights(self, attrsD):
+        self._start_rights(attrsD)
+
+    def _start_dc_subject(self, attrsD):
+        self._start_category(attrsD)
+
+    def _start_dc_title(self, attrsD):
+        self._start_title(attrsD)
+
+    def _start_dcterms_created(self, attrsD):
+        self._start_created(attrsD)
+
+    def _start_dcterms_issued(self, attrsD):
+        self._start_published(attrsD)
+
+    def _start_dcterms_modified(self, attrsD):
+        self._start_updated(attrsD)
+
+    def _start_dcterms_valid(self, attrsD):
+        self.push('validity', 1)
+
+    def _end_dcterms_valid(self):
+        for validity_detail in self.pop('validity').split(';'):
+            if '=' in validity_detail:
+                key, value = validity_detail.split('=', 1)
+                if key == 'start':
+                    self._save('validity_start', value, overwrite=True)
+                    self._save('validity_start_parsed', _parse_date(value), overwrite=True)
+                elif key == 'end':
+                    self._save('validity_end', value, overwrite=True)
+                    self._save('validity_end_parsed', _parse_date(value), overwrite=True)
+
+    def _start_dc_contributor(self, attrsD):
+        self.incontributor = 1
+        context = self._getContext()
+        context.setdefault('contributors', [])
+        context['contributors'].append(FeedParserDict())
+        self.push('name', 0)
+
+    def _end_dc_contributor(self):
+        self._end_name()
+        self.incontributor = 0
+
diff --git a/lib/feedparser/namespaces/georss.py b/lib/feedparser/namespaces/georss.py
new file mode 100644
index 0000000000000000000000000000000000000000..7bac04a18495b5ad15b771297997e29df989a6d0
--- /dev/null
+++ b/lib/feedparser/namespaces/georss.py
@@ -0,0 +1,264 @@
+# Support for the GeoRSS format
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+
+class Namespace(object):
+    supported_namespaces = {
+        'http://www.w3.org/2003/01/geo/wgs84_pos#': 'geo',
+        'http://www.georss.org/georss': 'georss',
+        'http://www.opengis.net/gml': 'gml',
+    }
+
+    def __init__(self):
+        self.ingeometry = 0
+        super(Namespace, self).__init__()
+
+    def _start_georssgeom(self, attrsD):
+        self.push('geometry', 0)
+        context = self._getContext()
+        context['where'] = FeedParserDict()
+
+    _start_georss_point = _start_georssgeom
+    _start_georss_line = _start_georssgeom
+    _start_georss_polygon = _start_georssgeom
+    _start_georss_box = _start_georssgeom
+
+    def _save_where(self, geometry):
+        context = self._getContext()
+        context['where'].update(geometry)
+
+    def _end_georss_point(self):
+        geometry = _parse_georss_point(self.pop('geometry'))
+        if geometry:
+            self._save_where(geometry)
+
+    def _end_georss_line(self):
+        geometry = _parse_georss_line(self.pop('geometry'))
+        if geometry:
+            self._save_where(geometry)
+
+    def _end_georss_polygon(self):
+        this = self.pop('geometry')
+        geometry = _parse_georss_polygon(this)
+        if geometry:
+            self._save_where(geometry)
+
+    def _end_georss_box(self):
+        geometry = _parse_georss_box(self.pop('geometry'))
+        if geometry:
+            self._save_where(geometry)
+
+    def _start_where(self, attrsD):
+        self.push('where', 0)
+        context = self._getContext()
+        context['where'] = FeedParserDict()
+    _start_georss_where = _start_where
+
+    def _parse_srs_attrs(self, attrsD):
+        srsName = attrsD.get('srsname')
+        try:
+            srsDimension = int(attrsD.get('srsdimension', '2'))
+        except ValueError:
+            srsDimension = 2
+        context = self._getContext()
+        context['where']['srsName'] = srsName
+        context['where']['srsDimension'] = srsDimension
+
+    def _start_gml_point(self, attrsD):
+        self._parse_srs_attrs(attrsD)
+        self.ingeometry = 1
+        self.push('geometry', 0)
+
+    def _start_gml_linestring(self, attrsD):
+        self._parse_srs_attrs(attrsD)
+        self.ingeometry = 'linestring'
+        self.push('geometry', 0)
+
+    def _start_gml_polygon(self, attrsD):
+        self._parse_srs_attrs(attrsD)
+        self.push('geometry', 0)
+
+    def _start_gml_exterior(self, attrsD):
+        self.push('geometry', 0)
+
+    def _start_gml_linearring(self, attrsD):
+        self.ingeometry = 'polygon'
+        self.push('geometry', 0)
+
+    def _start_gml_pos(self, attrsD):
+        self.push('pos', 0)
+
+    def _end_gml_pos(self):
+        this = self.pop('pos')
+        context = self._getContext()
+        srsName = context['where'].get('srsName')
+        srsDimension = context['where'].get('srsDimension', 2)
+        swap = True
+        if srsName and "EPSG" in srsName:
+            epsg = int(srsName.split(":")[-1])
+            swap = bool(epsg in _geogCS)
+        geometry = _parse_georss_point(this, swap=swap, dims=srsDimension)
+        if geometry:
+            self._save_where(geometry)
+
+    def _start_gml_poslist(self, attrsD):
+        self.push('pos', 0)
+
+    def _end_gml_poslist(self):
+        this = self.pop('pos')
+        context = self._getContext()
+        srsName = context['where'].get('srsName')
+        srsDimension = context['where'].get('srsDimension', 2)
+        swap = True
+        if srsName and "EPSG" in srsName:
+            epsg = int(srsName.split(":")[-1])
+            swap = bool(epsg in _geogCS)
+        geometry = _parse_poslist(
+            this, self.ingeometry, swap=swap, dims=srsDimension)
+        if geometry:
+            self._save_where(geometry)
+
+    def _end_geom(self):
+        self.ingeometry = 0
+        self.pop('geometry')
+    _end_gml_point = _end_geom
+    _end_gml_linestring = _end_geom
+    _end_gml_linearring = _end_geom
+    _end_gml_exterior = _end_geom
+    _end_gml_polygon = _end_geom
+
+    def _end_where(self):
+        self.pop('where')
+    _end_georss_where = _end_where
+
+
+# GeoRSS geometry parsers. Each return a dict with 'type' and 'coordinates'
+# items, or None in the case of a parsing error.
+
+def _parse_poslist(value, geom_type, swap=True, dims=2):
+    if geom_type == 'linestring':
+        return _parse_georss_line(value, swap, dims)
+    elif geom_type == 'polygon':
+        ring = _parse_georss_line(value, swap, dims)
+        return {'type': 'Polygon', 'coordinates': (ring['coordinates'],)}
+    else:
+        return None
+
+def _gen_georss_coords(value, swap=True, dims=2):
+    # A generator of (lon, lat) pairs from a string of encoded GeoRSS
+    # coordinates. Converts to floats and swaps order.
+    latlons = (float(ll) for ll in value.replace(',', ' ').split())
+    while True:
+        t = [next(latlons), next(latlons)][::swap and -1 or 1]
+        if dims == 3:
+            t.append(next(latlons))
+        yield tuple(t)
+
+def _parse_georss_point(value, swap=True, dims=2):
+    # A point contains a single latitude-longitude pair, separated by
+    # whitespace. We'll also handle comma separators.
+    try:
+        coords = list(_gen_georss_coords(value, swap, dims))
+        return {'type': 'Point', 'coordinates': coords[0]}
+    except (IndexError, ValueError):
+        return None
+
+def _parse_georss_line(value, swap=True, dims=2):
+    # A line contains a space separated list of latitude-longitude pairs in
+    # WGS84 coordinate reference system, with each pair separated by
+    # whitespace. There must be at least two pairs.
+    try:
+        coords = list(_gen_georss_coords(value, swap, dims))
+        return {'type': 'LineString', 'coordinates': coords}
+    except (IndexError, ValueError):
+        return None
+
+def _parse_georss_polygon(value, swap=True, dims=2):
+    # A polygon contains a space separated list of latitude-longitude pairs,
+    # with each pair separated by whitespace. There must be at least four
+    # pairs, with the last being identical to the first (so a polygon has a
+    # minimum of three actual points).
+    try:
+        ring = list(_gen_georss_coords(value, swap, dims))
+    except (IndexError, ValueError):
+        return None
+    if len(ring) < 4:
+        return None
+    return {'type': 'Polygon', 'coordinates': (ring,)}
+
+def _parse_georss_box(value, swap=True, dims=2):
+    # A bounding box is a rectangular region, often used to define the extents
+    # of a map or a rough area of interest. A box contains two space seperate
+    # latitude-longitude pairs, with each pair separated by whitespace. The
+    # first pair is the lower corner, the second is the upper corner.
+    try:
+        coords = list(_gen_georss_coords(value, swap, dims))
+        return {'type': 'Box', 'coordinates': tuple(coords)}
+    except (IndexError, ValueError):
+        return None
+
+# The list of EPSG codes for geographic (latitude/longitude) coordinate
+# systems to support decoding of GeoRSS GML profiles.
+_geogCS = [
+3819, 3821, 3824, 3889, 3906, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008,
+4009, 4010, 4011, 4012, 4013, 4014, 4015, 4016, 4018, 4019, 4020, 4021, 4022,
+4023, 4024, 4025, 4027, 4028, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036,
+4041, 4042, 4043, 4044, 4045, 4046, 4047, 4052, 4053, 4054, 4055, 4075, 4081,
+4120, 4121, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132,
+4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4142, 4143, 4144, 4145,
+4146, 4147, 4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 4156, 4157, 4158,
+4159, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171,
+4172, 4173, 4174, 4175, 4176, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185,
+4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196, 4197, 4198, 4199, 4200,
+4201, 4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 4211, 4212, 4213,
+4214, 4215, 4216, 4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227,
+4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240,
+4241, 4242, 4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 4251, 4252, 4253,
+4254, 4255, 4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266,
+4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279,
+4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4289, 4291, 4292, 4293,
+4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 4302, 4303, 4304, 4306, 4307,
+4308, 4309, 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, 4318, 4319, 4322,
+4324, 4326, 4463, 4470, 4475, 4483, 4490, 4555, 4558, 4600, 4601, 4602, 4603,
+4604, 4605, 4606, 4607, 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 4616,
+4617, 4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 4626, 4627, 4628, 4629,
+4630, 4631, 4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642,
+4643, 4644, 4645, 4646, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665,
+4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, 4675, 4676, 4677, 4678,
+4679, 4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, 4691,
+4692, 4693, 4694, 4695, 4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 4704,
+4705, 4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, 4715, 4716, 4717,
+4718, 4719, 4720, 4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730,
+4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 4740, 4741, 4742, 4743,
+4744, 4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 4756,
+4757, 4758, 4759, 4760, 4761, 4762, 4763, 4764, 4765, 4801, 4802, 4803, 4804,
+4805, 4806, 4807, 4808, 4809, 4810, 4811, 4813, 4814, 4815, 4816, 4817, 4818,
+4819, 4820, 4821, 4823, 4824, 4901, 4902, 4903, 4904, 4979 ]
diff --git a/lib/feedparser/namespaces/itunes.py b/lib/feedparser/namespaces/itunes.py
new file mode 100644
index 0000000000000000000000000000000000000000..37faa7e46896bcdb086a41e978a685dadc7c116b
--- /dev/null
+++ b/lib/feedparser/namespaces/itunes.py
@@ -0,0 +1,111 @@
+# Support for the iTunes format
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+
+class Namespace(object):
+    supported_namespaces = {
+        # Canonical namespace
+        'http://www.itunes.com/DTDs/PodCast-1.0.dtd': 'itunes',
+
+        # Extra namespace
+        'http://example.com/DTDs/PodCast-1.0.dtd': 'itunes',
+    }
+
+    def _start_itunes_author(self, attrsD):
+        self._start_author(attrsD)
+
+    def _end_itunes_author(self):
+        self._end_author()
+
+    def _end_itunes_category(self):
+        self._end_category()
+
+    def _start_itunes_name(self, attrsD):
+        self._start_name(attrsD)
+
+    def _end_itunes_name(self):
+        self._end_name()
+
+    def _start_itunes_email(self, attrsD):
+        self._start_email(attrsD)
+
+    def _end_itunes_email(self):
+        self._end_email()
+
+    def _start_itunes_subtitle(self, attrsD):
+        self._start_subtitle(attrsD)
+
+    def _end_itunes_subtitle(self):
+        self._end_subtitle()
+
+    def _start_itunes_summary(self, attrsD):
+        self._start_summary(attrsD)
+
+    def _end_itunes_summary(self):
+        self._end_summary()
+
+    def _start_itunes_owner(self, attrsD):
+        self.inpublisher = 1
+        self.push('publisher', 0)
+
+    def _end_itunes_owner(self):
+        self.pop('publisher')
+        self.inpublisher = 0
+        self._sync_author_detail('publisher')
+
+    def _end_itunes_keywords(self):
+        for term in self.pop('itunes_keywords').split(','):
+            if term.strip():
+                self._addTag(term.strip(), 'http://www.itunes.com/', None)
+
+    def _start_itunes_category(self, attrsD):
+        self._addTag(attrsD.get('text'), 'http://www.itunes.com/', None)
+        self.push('category', 1)
+
+    def _start_itunes_image(self, attrsD):
+        self.push('itunes_image', 0)
+        if attrsD.get('href'):
+            self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')})
+        elif attrsD.get('url'):
+            self._getContext()['image'] = FeedParserDict({'href': attrsD.get('url')})
+    _start_itunes_link = _start_itunes_image
+
+    def _end_itunes_block(self):
+        value = self.pop('itunes_block', 0)
+        self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0
+
+    def _end_itunes_explicit(self):
+        value = self.pop('itunes_explicit', 0)
+        # Convert 'yes' -> True, 'clean' to False, and any other value to None
+        # False and None both evaluate as False, so the difference can be ignored
+        # by applications that only need to know if the content is explicit.
+        self._getContext()['itunes_explicit'] = (None, False, True)[(value == 'yes' and 2) or value == 'clean' or 0]
+
diff --git a/lib/feedparser/namespaces/mediarss.py b/lib/feedparser/namespaces/mediarss.py
new file mode 100644
index 0000000000000000000000000000000000000000..878ed7c8e0dbb24d60621527c65119469893148f
--- /dev/null
+++ b/lib/feedparser/namespaces/mediarss.py
@@ -0,0 +1,142 @@
+# Support for the Media RSS format
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..util import FeedParserDict
+
+class Namespace(object):
+    supported_namespaces = {
+        # Canonical namespace
+        'http://search.yahoo.com/mrss/': 'media',
+
+        # Old namespace (no trailing slash)
+        'http://search.yahoo.com/mrss': 'media',
+    }
+
+    def _start_media_category(self, attrsD):
+        attrsD.setdefault('scheme', 'http://search.yahoo.com/mrss/category_schema')
+        self._start_category(attrsD)
+
+    def _end_media_category(self):
+        self._end_category()
+
+    def _end_media_keywords(self):
+        for term in self.pop('media_keywords').split(','):
+            if term.strip():
+                self._addTag(term.strip(), None, None)
+
+    def _start_media_title(self, attrsD):
+        self._start_title(attrsD)
+
+    def _end_media_title(self):
+        title_depth = self.title_depth
+        self._end_title()
+        self.title_depth = title_depth
+
+    def _start_media_group(self, attrsD):
+        # don't do anything, but don't break the enclosed tags either
+        pass
+
+    def _start_media_rating(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_rating', attrsD)
+        self.push('rating', 1)
+
+    def _end_media_rating(self):
+        rating = self.pop('rating')
+        if rating is not None and rating.strip():
+            context = self._getContext()
+            context['media_rating']['content'] = rating
+
+    def _start_media_credit(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_credit', [])
+        context['media_credit'].append(attrsD)
+        self.push('credit', 1)
+
+    def _end_media_credit(self):
+        credit = self.pop('credit')
+        if credit != None and len(credit.strip()) != 0:
+            context = self._getContext()
+            context['media_credit'][-1]['content'] = credit
+
+    def _start_media_description(self, attrsD):
+        self._start_description(attrsD)
+
+    def _end_media_description(self):
+        self._end_description()
+
+    def _start_media_restriction(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_restriction', attrsD)
+        self.push('restriction', 1)
+
+    def _end_media_restriction(self):
+        restriction = self.pop('restriction')
+        if restriction != None and len(restriction.strip()) != 0:
+            context = self._getContext()
+            context['media_restriction']['content'] = [cc.strip().lower() for cc in restriction.split(' ')]
+
+    def _start_media_license(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_license', attrsD)
+        self.push('license', 1)
+
+    def _end_media_license(self):
+        license = self.pop('license')
+        if license != None and len(license.strip()) != 0:
+            context = self._getContext()
+            context['media_license']['content'] = license
+
+    def _start_media_content(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_content', [])
+        context['media_content'].append(attrsD)
+
+    def _start_media_thumbnail(self, attrsD):
+        context = self._getContext()
+        context.setdefault('media_thumbnail', [])
+        self.push('url', 1) # new
+        context['media_thumbnail'].append(attrsD)
+
+    def _end_media_thumbnail(self):
+        url = self.pop('url')
+        context = self._getContext()
+        if url != None and len(url.strip()) != 0:
+            if 'url' not in context['media_thumbnail'][-1]:
+                context['media_thumbnail'][-1]['url'] = url
+
+    def _start_media_player(self, attrsD):
+        self.push('media_player', 0)
+        self._getContext()['media_player'] = FeedParserDict(attrsD)
+
+    def _end_media_player(self):
+        value = self.pop('media_player')
+        context = self._getContext()
+        context['media_player']['content'] = value
diff --git a/lib/feedparser/namespaces/psc.py b/lib/feedparser/namespaces/psc.py
new file mode 100644
index 0000000000000000000000000000000000000000..c7dc843e2a5d8cdf371b78a2f888125c24340628
--- /dev/null
+++ b/lib/feedparser/namespaces/psc.py
@@ -0,0 +1,72 @@
+# Support for the Podlove Simple Chapters format
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import datetime
+import re
+
+from .. import util
+class Namespace(object):
+    supported_namespaces = {
+        'http://podlove.org/simple-chapters': 'psc',
+    }
+
+    def __init__(self):
+        # chapters will only be captured while psc_chapters_flag is True.
+        self.psc_chapters_flag = False
+        super(Namespace, self).__init__()
+
+    def _start_psc_chapters(self, attrsD):
+        context = self._getContext()
+        if 'psc_chapters' not in context:
+            self.psc_chapters_flag = True
+            attrsD['chapters'] = []
+            context['psc_chapters'] = util.FeedParserDict(attrsD)
+
+    def _end_psc_chapters(self):
+        self.psc_chapters_flag = False
+
+    def _start_psc_chapter(self, attrsD):
+        if self.psc_chapters_flag:
+            start = self._getAttribute(attrsD, 'start')
+            attrsD['start_parsed'] = _parse_psc_chapter_start(start)
+
+            context = self._getContext()['psc_chapters']
+            context['chapters'].append(util.FeedParserDict(attrsD))
+
+def _parse_psc_chapter_start(start):
+    FORMAT = r'^((\d{2}):)?(\d{2}):(\d{2})(\.(\d{3}))?$'
+
+    m = re.compile(FORMAT).match(start)
+    if m is None:
+        return None
+
+    _, h, m, s, _, ms = m.groups()
+    h, m, s, ms = (int(h or 0), int(m), int(s), int(ms or 0))
+    return datetime.timedelta(0, h*60*60 + m*60 + s, ms*1000)
diff --git a/lib/feedparser/parsers/__init__.py b/lib/feedparser/parsers/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/lib/feedparser/parsers/loose.py b/lib/feedparser/parsers/loose.py
new file mode 100644
index 0000000000000000000000000000000000000000..597ce8b7afa193888f93348ed934d4a73eeca191
--- /dev/null
+++ b/lib/feedparser/parsers/loose.py
@@ -0,0 +1,72 @@
+# The loose feed parser that interfaces with an SGML parsing library
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+class _LooseFeedParser(object):
+    def __init__(self, baseuri=None, baselang=None, encoding=None, entities=None):
+        self.baseuri = baseuri or ''
+        self.lang = baselang or None
+        self.encoding = encoding or 'utf-8' # character encoding
+        self.entities = entities or {}
+        super(_LooseFeedParser, self).__init__()
+
+    def _normalize_attributes(self, kv):
+        k = kv[0].lower()
+        v = k in ('rel', 'type') and kv[1].lower() or kv[1]
+        # the sgml parser doesn't handle entities in attributes, nor
+        # does it pass the attribute values through as unicode, while
+        # strict xml parsers do -- account for this difference
+        v = v.replace('&amp;', '&')
+        return (k, v)
+
+    def decodeEntities(self, element, data):
+        data = data.replace('&#60;', '&lt;')
+        data = data.replace('&#x3c;', '&lt;')
+        data = data.replace('&#x3C;', '&lt;')
+        data = data.replace('&#62;', '&gt;')
+        data = data.replace('&#x3e;', '&gt;')
+        data = data.replace('&#x3E;', '&gt;')
+        data = data.replace('&#38;', '&amp;')
+        data = data.replace('&#x26;', '&amp;')
+        data = data.replace('&#34;', '&quot;')
+        data = data.replace('&#x22;', '&quot;')
+        data = data.replace('&#39;', '&apos;')
+        data = data.replace('&#x27;', '&apos;')
+        if not self.contentparams.get('type', 'xml').endswith('xml'):
+            data = data.replace('&lt;', '<')
+            data = data.replace('&gt;', '>')
+            data = data.replace('&amp;', '&')
+            data = data.replace('&quot;', '"')
+            data = data.replace('&apos;', "'")
+            data = data.replace('&#x2f;', '/')
+            data = data.replace('&#x2F;', '/')
+        return data
+
+    def strattrs(self, attrs):
+        return ''.join([' %s="%s"' % (n,v.replace('"','&quot;')) for n,v in attrs])
diff --git a/lib/feedparser/parsers/strict.py b/lib/feedparser/parsers/strict.py
new file mode 100644
index 0000000000000000000000000000000000000000..29ad2be362696dc5fb095e4a5cd8c5d6fd222c96
--- /dev/null
+++ b/lib/feedparser/parsers/strict.py
@@ -0,0 +1,135 @@
+# The strict feed parser that interfaces with an XML parsing library
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+from ..exceptions import UndeclaredNamespace
+
+class _StrictFeedParser(object):
+    def __init__(self, baseuri, baselang, encoding):
+        self.bozo = 0
+        self.exc = None
+        self.decls = {}
+        self.baseuri = baseuri or ''
+        self.lang = baselang
+        self.encoding = encoding
+        super(_StrictFeedParser, self).__init__()
+
+    def _normalize_attributes(self, kv):
+        k = kv[0].lower()
+        v = k in ('rel', 'type') and kv[1].lower() or kv[1]
+        return (k, v)
+
+    def startPrefixMapping(self, prefix, uri):
+        if not uri:
+            return
+        # Jython uses '' instead of None; standardize on None
+        prefix = prefix or None
+        self.trackNamespace(prefix, uri)
+        if prefix and uri == 'http://www.w3.org/1999/xlink':
+            self.decls['xmlns:' + prefix] = uri
+
+    def startElementNS(self, name, qname, attrs):
+        namespace, localname = name
+        lowernamespace = str(namespace or '').lower()
+        if lowernamespace.find('backend.userland.com/rss') != -1:
+            # match any backend.userland.com namespace
+            namespace = 'http://backend.userland.com/rss'
+            lowernamespace = namespace
+        if qname and qname.find(':') > 0:
+            givenprefix = qname.split(':')[0]
+        else:
+            givenprefix = None
+        prefix = self._matchnamespaces.get(lowernamespace, givenprefix)
+        if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and givenprefix not in self.namespacesInUse:
+            raise UndeclaredNamespace("'%s' is not associated with a namespace" % givenprefix)
+        localname = str(localname).lower()
+
+        # qname implementation is horribly broken in Python 2.1 (it
+        # doesn't report any), and slightly broken in Python 2.2 (it
+        # doesn't report the xml: namespace). So we match up namespaces
+        # with a known list first, and then possibly override them with
+        # the qnames the SAX parser gives us (if indeed it gives us any
+        # at all).  Thanks to MatejC for helping me test this and
+        # tirelessly telling me that it didn't work yet.
+        attrsD, self.decls = self.decls, {}
+        if localname=='math' and namespace=='http://www.w3.org/1998/Math/MathML':
+            attrsD['xmlns']=namespace
+        if localname=='svg' and namespace=='http://www.w3.org/2000/svg':
+            attrsD['xmlns']=namespace
+
+        if prefix:
+            localname = prefix.lower() + ':' + localname
+        elif namespace and not qname: #Expat
+            for name,value in self.namespacesInUse.items():
+                if name and value == namespace:
+                    localname = name + ':' + localname
+                    break
+
+        for (namespace, attrlocalname), attrvalue in attrs.items():
+            lowernamespace = (namespace or '').lower()
+            prefix = self._matchnamespaces.get(lowernamespace, '')
+            if prefix:
+                attrlocalname = prefix + ':' + attrlocalname
+            attrsD[str(attrlocalname).lower()] = attrvalue
+        for qname in attrs.getQNames():
+            attrsD[str(qname).lower()] = attrs.getValueByQName(qname)
+        localname = str(localname).lower()
+        self.unknown_starttag(localname, list(attrsD.items()))
+
+    def characters(self, text):
+        self.handle_data(text)
+
+    def endElementNS(self, name, qname):
+        namespace, localname = name
+        lowernamespace = str(namespace or '').lower()
+        if qname and qname.find(':') > 0:
+            givenprefix = qname.split(':')[0]
+        else:
+            givenprefix = ''
+        prefix = self._matchnamespaces.get(lowernamespace, givenprefix)
+        if prefix:
+            localname = prefix + ':' + localname
+        elif namespace and not qname: #Expat
+            for name,value in self.namespacesInUse.items():
+                if name and value == namespace:
+                    localname = name + ':' + localname
+                    break
+        localname = str(localname).lower()
+        self.unknown_endtag(localname)
+
+    def error(self, exc):
+        self.bozo = 1
+        self.exc = exc
+
+    # drv_libxml2 calls warning() in some cases
+    warning = error
+
+    def fatalError(self, exc):
+        self.error(exc)
+        raise exc
diff --git a/lib/feedparser/sanitizer.py b/lib/feedparser/sanitizer.py
new file mode 100644
index 0000000000000000000000000000000000000000..04096b3ac4536ba5846ac6eb63659a28f9064606
--- /dev/null
+++ b/lib/feedparser/sanitizer.py
@@ -0,0 +1,466 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+from .html import _BaseHTMLProcessor
+from .sgml import _SGML_AVAILABLE
+from .urls import _makeSafeAbsoluteURI
+
+class _HTMLSanitizer(_BaseHTMLProcessor):
+    acceptable_elements = set(['a', 'abbr', 'acronym', 'address', 'area',
+        'article', 'aside', 'audio', 'b', 'big', 'blockquote', 'br', 'button',
+        'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup',
+        'command', 'datagrid', 'datalist', 'dd', 'del', 'details', 'dfn',
+        'dialog', 'dir', 'div', 'dl', 'dt', 'em', 'event-source', 'fieldset',
+        'figcaption', 'figure', 'footer', 'font', 'form', 'header', 'h1',
+        'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', 'ins',
+        'keygen', 'kbd', 'label', 'legend', 'li', 'm', 'map', 'menu', 'meter',
+        'multicol', 'nav', 'nextid', 'ol', 'output', 'optgroup', 'option',
+        'p', 'pre', 'progress', 'q', 's', 'samp', 'section', 'select',
+        'small', 'sound', 'source', 'spacer', 'span', 'strike', 'strong',
+        'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'time', 'tfoot',
+        'th', 'thead', 'tr', 'tt', 'u', 'ul', 'var', 'video', 'noscript'])
+
+    acceptable_attributes = set(['abbr', 'accept', 'accept-charset', 'accesskey',
+      'action', 'align', 'alt', 'autocomplete', 'autofocus', 'axis',
+      'background', 'balance', 'bgcolor', 'bgproperties', 'border',
+      'bordercolor', 'bordercolordark', 'bordercolorlight', 'bottompadding',
+      'cellpadding', 'cellspacing', 'ch', 'challenge', 'char', 'charoff',
+      'choff', 'charset', 'checked', 'cite', 'class', 'clear', 'color', 'cols',
+      'colspan', 'compact', 'contenteditable', 'controls', 'coords', 'data',
+      'datafld', 'datapagesize', 'datasrc', 'datetime', 'default', 'delay',
+      'dir', 'disabled', 'draggable', 'dynsrc', 'enctype', 'end', 'face', 'for',
+      'form', 'frame', 'galleryimg', 'gutter', 'headers', 'height', 'hidefocus',
+      'hidden', 'high', 'href', 'hreflang', 'hspace', 'icon', 'id', 'inputmode',
+      'ismap', 'keytype', 'label', 'leftspacing', 'lang', 'list', 'longdesc',
+      'loop', 'loopcount', 'loopend', 'loopstart', 'low', 'lowsrc', 'max',
+      'maxlength', 'media', 'method', 'min', 'multiple', 'name', 'nohref',
+      'noshade', 'nowrap', 'open', 'optimum', 'pattern', 'ping', 'point-size',
+      'poster', 'pqg', 'preload', 'prompt', 'radiogroup', 'readonly', 'rel',
+      'repeat-max', 'repeat-min', 'replace', 'required', 'rev', 'rightspacing',
+      'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', 'span',
+      'src', 'start', 'step', 'summary', 'suppress', 'tabindex', 'target',
+      'template', 'title', 'toppadding', 'type', 'unselectable', 'usemap',
+      'urn', 'valign', 'value', 'variable', 'volume', 'vspace', 'vrml',
+      'width', 'wrap', 'xml:lang'])
+
+    unacceptable_elements_with_end_tag = set(['script', 'applet', 'style'])
+
+    acceptable_css_properties = set(['azimuth', 'background-color',
+      'border-bottom-color', 'border-collapse', 'border-color',
+      'border-left-color', 'border-right-color', 'border-top-color', 'clear',
+      'color', 'cursor', 'direction', 'display', 'elevation', 'float', 'font',
+      'font-family', 'font-size', 'font-style', 'font-variant', 'font-weight',
+      'height', 'letter-spacing', 'line-height', 'overflow', 'pause',
+      'pause-after', 'pause-before', 'pitch', 'pitch-range', 'richness',
+      'speak', 'speak-header', 'speak-numeral', 'speak-punctuation',
+      'speech-rate', 'stress', 'text-align', 'text-decoration', 'text-indent',
+      'unicode-bidi', 'vertical-align', 'voice-family', 'volume',
+      'white-space', 'width'])
+
+    # survey of common keywords found in feeds
+    acceptable_css_keywords = set(['auto', 'aqua', 'black', 'block', 'blue',
+      'bold', 'both', 'bottom', 'brown', 'center', 'collapse', 'dashed',
+      'dotted', 'fuchsia', 'gray', 'green', '!important', 'italic', 'left',
+      'lime', 'maroon', 'medium', 'none', 'navy', 'normal', 'nowrap', 'olive',
+      'pointer', 'purple', 'red', 'right', 'solid', 'silver', 'teal', 'top',
+      'transparent', 'underline', 'white', 'yellow'])
+
+    valid_css_values = re.compile('^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|' +
+      '\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$')
+
+    mathml_elements = set([
+        'annotation',
+        'annotation-xml',
+        'maction',
+        'maligngroup',
+        'malignmark',
+        'math',
+        'menclose',
+        'merror',
+        'mfenced',
+        'mfrac',
+        'mglyph',
+        'mi',
+        'mlabeledtr',
+        'mlongdiv',
+        'mmultiscripts',
+        'mn',
+        'mo',
+        'mover',
+        'mpadded',
+        'mphantom',
+        'mprescripts',
+        'mroot',
+        'mrow',
+        'ms',
+        'mscarries',
+        'mscarry',
+        'msgroup',
+        'msline',
+        'mspace',
+        'msqrt',
+        'msrow',
+        'mstack',
+        'mstyle',
+        'msub',
+        'msubsup',
+        'msup',
+        'mtable',
+        'mtd',
+        'mtext',
+        'mtr',
+        'munder',
+        'munderover',
+        'none',
+        'semantics',
+    ])
+
+    mathml_attributes = set([
+        'accent',
+        'accentunder',
+        'actiontype',
+        'align',
+        'alignmentscope',
+        'altimg',
+        'altimg-height',
+        'altimg-valign',
+        'altimg-width',
+        'alttext',
+        'bevelled',
+        'charalign',
+        'close',
+        'columnalign',
+        'columnlines',
+        'columnspacing',
+        'columnspan',
+        'columnwidth',
+        'crossout',
+        'decimalpoint',
+        'denomalign',
+        'depth',
+        'dir',
+        'display',
+        'displaystyle',
+        'edge',
+        'encoding',
+        'equalcolumns',
+        'equalrows',
+        'fence',
+        'fontstyle',
+        'fontweight',
+        'form',
+        'frame',
+        'framespacing',
+        'groupalign',
+        'height',
+        'href',
+        'id',
+        'indentalign',
+        'indentalignfirst',
+        'indentalignlast',
+        'indentshift',
+        'indentshiftfirst',
+        'indentshiftlast',
+        'indenttarget',
+        'infixlinebreakstyle',
+        'largeop',
+        'length',
+        'linebreak',
+        'linebreakmultchar',
+        'linebreakstyle',
+        'lineleading',
+        'linethickness',
+        'location',
+        'longdivstyle',
+        'lquote',
+        'lspace',
+        'mathbackground',
+        'mathcolor',
+        'mathsize',
+        'mathvariant',
+        'maxsize',
+        'minlabelspacing',
+        'minsize',
+        'movablelimits',
+        'notation',
+        'numalign',
+        'open',
+        'other',
+        'overflow',
+        'position',
+        'rowalign',
+        'rowlines',
+        'rowspacing',
+        'rowspan',
+        'rquote',
+        'rspace',
+        'scriptlevel',
+        'scriptminsize',
+        'scriptsizemultiplier',
+        'selection',
+        'separator',
+        'separators',
+        'shift',
+        'side',
+        'src',
+        'stackalign',
+        'stretchy',
+        'subscriptshift',
+        'superscriptshift',
+        'symmetric',
+        'voffset',
+        'width',
+        'xlink:href',
+        'xlink:show',
+        'xlink:type',
+        'xmlns',
+        'xmlns:xlink',
+    ])
+
+    # svgtiny - foreignObject + linearGradient + radialGradient + stop
+    svg_elements = set(['a', 'animate', 'animateColor', 'animateMotion',
+      'animateTransform', 'circle', 'defs', 'desc', 'ellipse', 'foreignObject',
+      'font-face', 'font-face-name', 'font-face-src', 'g', 'glyph', 'hkern',
+      'linearGradient', 'line', 'marker', 'metadata', 'missing-glyph', 'mpath',
+      'path', 'polygon', 'polyline', 'radialGradient', 'rect', 'set', 'stop',
+      'svg', 'switch', 'text', 'title', 'tspan', 'use'])
+
+    # svgtiny + class + opacity + offset + xmlns + xmlns:xlink
+    svg_attributes = set(['accent-height', 'accumulate', 'additive', 'alphabetic',
+       'arabic-form', 'ascent', 'attributeName', 'attributeType',
+       'baseProfile', 'bbox', 'begin', 'by', 'calcMode', 'cap-height',
+       'class', 'color', 'color-rendering', 'content', 'cx', 'cy', 'd', 'dx',
+       'dy', 'descent', 'display', 'dur', 'end', 'fill', 'fill-opacity',
+       'fill-rule', 'font-family', 'font-size', 'font-stretch', 'font-style',
+       'font-variant', 'font-weight', 'from', 'fx', 'fy', 'g1', 'g2',
+       'glyph-name', 'gradientUnits', 'hanging', 'height', 'horiz-adv-x',
+       'horiz-origin-x', 'id', 'ideographic', 'k', 'keyPoints', 'keySplines',
+       'keyTimes', 'lang', 'mathematical', 'marker-end', 'marker-mid',
+       'marker-start', 'markerHeight', 'markerUnits', 'markerWidth', 'max',
+       'min', 'name', 'offset', 'opacity', 'orient', 'origin',
+       'overline-position', 'overline-thickness', 'panose-1', 'path',
+       'pathLength', 'points', 'preserveAspectRatio', 'r', 'refX', 'refY',
+       'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures',
+       'restart', 'rotate', 'rx', 'ry', 'slope', 'stemh', 'stemv',
+       'stop-color', 'stop-opacity', 'strikethrough-position',
+       'strikethrough-thickness', 'stroke', 'stroke-dasharray',
+       'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin',
+       'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'systemLanguage',
+       'target', 'text-anchor', 'to', 'transform', 'type', 'u1', 'u2',
+       'underline-position', 'underline-thickness', 'unicode', 'unicode-range',
+       'units-per-em', 'values', 'version', 'viewBox', 'visibility', 'width',
+       'widths', 'x', 'x-height', 'x1', 'x2', 'xlink:actuate', 'xlink:arcrole',
+       'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type',
+       'xml:base', 'xml:lang', 'xml:space', 'xmlns', 'xmlns:xlink', 'y', 'y1',
+       'y2', 'zoomAndPan'])
+
+    svg_attr_map = None
+    svg_elem_map = None
+
+    acceptable_svg_properties = set([ 'fill', 'fill-opacity', 'fill-rule',
+      'stroke', 'stroke-width', 'stroke-linecap', 'stroke-linejoin',
+      'stroke-opacity'])
+
+    def reset(self):
+        _BaseHTMLProcessor.reset(self)
+        self.unacceptablestack = 0
+        self.mathmlOK = 0
+        self.svgOK = 0
+
+    def unknown_starttag(self, tag, attrs):
+        acceptable_attributes = self.acceptable_attributes
+        keymap = {}
+        if not tag in self.acceptable_elements or self.svgOK:
+            if tag in self.unacceptable_elements_with_end_tag:
+                self.unacceptablestack += 1
+
+            # add implicit namespaces to html5 inline svg/mathml
+            if self._type.endswith('html'):
+                if not dict(attrs).get('xmlns'):
+                    if tag=='svg':
+                        attrs.append( ('xmlns','http://www.w3.org/2000/svg') )
+                    if tag=='math':
+                        attrs.append( ('xmlns','http://www.w3.org/1998/Math/MathML') )
+
+            # not otherwise acceptable, perhaps it is MathML or SVG?
+            if tag=='math' and ('xmlns','http://www.w3.org/1998/Math/MathML') in attrs:
+                self.mathmlOK += 1
+            if tag=='svg' and ('xmlns','http://www.w3.org/2000/svg') in attrs:
+                self.svgOK += 1
+
+            # chose acceptable attributes based on tag class, else bail
+            if  self.mathmlOK and tag in self.mathml_elements:
+                acceptable_attributes = self.mathml_attributes
+            elif self.svgOK and tag in self.svg_elements:
+                # for most vocabularies, lowercasing is a good idea.  Many
+                # svg elements, however, are camel case
+                if not self.svg_attr_map:
+                    lower=[attr.lower() for attr in self.svg_attributes]
+                    mix=[a for a in self.svg_attributes if a not in lower]
+                    self.svg_attributes = lower
+                    self.svg_attr_map = dict([(a.lower(),a) for a in mix])
+
+                    lower=[attr.lower() for attr in self.svg_elements]
+                    mix=[a for a in self.svg_elements if a not in lower]
+                    self.svg_elements = lower
+                    self.svg_elem_map = dict([(a.lower(),a) for a in mix])
+                acceptable_attributes = self.svg_attributes
+                tag = self.svg_elem_map.get(tag,tag)
+                keymap = self.svg_attr_map
+            elif not tag in self.acceptable_elements:
+                return
+
+        # declare xlink namespace, if needed
+        if self.mathmlOK or self.svgOK:
+            if any((a for a in attrs if a[0].startswith('xlink:'))):
+                if not ('xmlns:xlink','http://www.w3.org/1999/xlink') in attrs:
+                    attrs.append(('xmlns:xlink','http://www.w3.org/1999/xlink'))
+
+        clean_attrs = []
+        for key, value in self.normalize_attrs(attrs):
+            if key in acceptable_attributes:
+                key=keymap.get(key,key)
+                # make sure the uri uses an acceptable uri scheme
+                if key == 'href':
+                    value = _makeSafeAbsoluteURI(value)
+                clean_attrs.append((key,value))
+            elif key=='style':
+                clean_value = self.sanitize_style(value)
+                if clean_value:
+                    clean_attrs.append((key,clean_value))
+        _BaseHTMLProcessor.unknown_starttag(self, tag, clean_attrs)
+
+    def unknown_endtag(self, tag):
+        if not tag in self.acceptable_elements:
+            if tag in self.unacceptable_elements_with_end_tag:
+                self.unacceptablestack -= 1
+            if self.mathmlOK and tag in self.mathml_elements:
+                if tag == 'math' and self.mathmlOK:
+                    self.mathmlOK -= 1
+            elif self.svgOK and tag in self.svg_elements:
+                tag = self.svg_elem_map.get(tag,tag)
+                if tag == 'svg' and self.svgOK:
+                    self.svgOK -= 1
+            else:
+                return
+        _BaseHTMLProcessor.unknown_endtag(self, tag)
+
+    def handle_pi(self, text):
+        pass
+
+    def handle_decl(self, text):
+        pass
+
+    def handle_data(self, text):
+        if not self.unacceptablestack:
+            _BaseHTMLProcessor.handle_data(self, text)
+
+    def sanitize_style(self, style):
+        # disallow urls
+        style=re.compile('url\s*\(\s*[^\s)]+?\s*\)\s*').sub(' ',style)
+
+        # gauntlet
+        if not re.match("""^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$""", style):
+            return ''
+        # This replaced a regexp that used re.match and was prone to pathological back-tracking.
+        if re.sub("\s*[-\w]+\s*:\s*[^:;]*;?", '', style).strip():
+            return ''
+
+        clean = []
+        for prop,value in re.findall("([-\w]+)\s*:\s*([^:;]*)",style):
+            if not value:
+                continue
+            if prop.lower() in self.acceptable_css_properties:
+                clean.append(prop + ': ' + value + ';')
+            elif prop.split('-')[0].lower() in ['background','border','margin','padding']:
+                for keyword in value.split():
+                    if not keyword in self.acceptable_css_keywords and \
+                        not self.valid_css_values.match(keyword):
+                        break
+                else:
+                    clean.append(prop + ': ' + value + ';')
+            elif self.svgOK and prop.lower() in self.acceptable_svg_properties:
+                clean.append(prop + ': ' + value + ';')
+
+        return ' '.join(clean)
+
+    def parse_comment(self, i, report=1):
+        ret = _BaseHTMLProcessor.parse_comment(self, i, report)
+        if ret >= 0:
+            return ret
+        # if ret == -1, this may be a malicious attempt to circumvent
+        # sanitization, or a page-destroying unclosed comment
+        match = re.compile(r'--[^>]*>').search(self.rawdata, i+4)
+        if match:
+            return match.end()
+        # unclosed comment; deliberately fail to handle_data()
+        return len(self.rawdata)
+
+
+def _sanitizeHTML(htmlSource, encoding, _type):
+    if not _SGML_AVAILABLE:
+        return htmlSource
+    p = _HTMLSanitizer(encoding, _type)
+    htmlSource = htmlSource.replace('<![CDATA[', '&lt;![CDATA[')
+    p.feed(htmlSource)
+    data = p.output()
+    data = data.strip().replace('\r\n', '\n')
+    return data
+
+# Match XML entity declarations.
+# Example: <!ENTITY copyright "(C)">
+RE_ENTITY_PATTERN = re.compile(br'^\s*<!ENTITY([^>]*?)>', re.MULTILINE)
+
+# Match XML DOCTYPE declarations.
+# Example: <!DOCTYPE feed [ ]>
+RE_DOCTYPE_PATTERN = re.compile(br'^\s*<!DOCTYPE([^>]*?)>', re.MULTILINE)
+
+# Match safe entity declarations.
+# This will allow hexadecimal character references through,
+# as well as text, but not arbitrary nested entities.
+# Example: cubed "&#179;"
+# Example: copyright "(C)"
+# Forbidden: explode1 "&explode2;&explode2;"
+RE_SAFE_ENTITY_PATTERN = re.compile(b'\s+(\w+)\s+"(&#\w+;|[^&"]*)"')
+
+def replace_doctype(data):
+    '''Strips and replaces the DOCTYPE, returns (rss_version, stripped_data)
+
+    rss_version may be 'rss091n' or None
+    stripped_data is the same XML document with a replaced DOCTYPE
+    '''
+
+    # Divide the document into two groups by finding the location
+    # of the first element that doesn't begin with '<?' or '<!'.
+    start = re.search(b'<\w', data)
+    start = start and start.start() or -1
+    head, data = data[:start+1], data[start+1:]
+
+    # Save and then remove all of the ENTITY declarations.
+    entity_results = RE_ENTITY_PATTERN.findall(head)
+    head = RE_ENTITY_PATTERN.sub(b'', head)
+
+    # Find the DOCTYPE declaration and check the feed type.
+    doctype_results = RE_DOCTYPE_PATTERN.findall(head)
+    doctype = doctype_results and doctype_results[0] or b''
+    if b'netscape' in doctype.lower():
+        version = 'rss091n'
+    else:
+        version = None
+
+    # Re-insert the safe ENTITY declarations if a DOCTYPE was found.
+    replacement = b''
+    if len(doctype_results) == 1 and entity_results:
+        match_safe_entities = lambda e: RE_SAFE_ENTITY_PATTERN.match(e)
+        safe_entities = [e for e in entity_results if match_safe_entities(e)]
+        if safe_entities:
+            replacement = b'<!DOCTYPE feed [\n<!ENTITY' \
+                        + b'>\n<!ENTITY '.join(safe_entities) \
+                        + b'>\n]>'
+    data = RE_DOCTYPE_PATTERN.sub(replacement, head) + data
+
+    # Precompute the safe entities for the loose parser.
+    safe_entities = dict((k.decode('utf-8'), v.decode('utf-8'))
+                      for k, v in RE_SAFE_ENTITY_PATTERN.findall(replacement))
+    return version, data, safe_entities
diff --git a/lib/feedparser/sgml.py b/lib/feedparser/sgml.py
new file mode 100644
index 0000000000000000000000000000000000000000..2cfcd86343dedb8b2be6ae090b206fef2a608e41
--- /dev/null
+++ b/lib/feedparser/sgml.py
@@ -0,0 +1,76 @@
+from __future__ import absolute_import
+
+import re
+
+__all__ = [
+    '_SGML_AVAILABLE',
+    'sgmllib',
+    'charref',
+    'tagfind',
+    'attrfind',
+    'entityref',
+    'incomplete',
+    'interesting',
+    'shorttag',
+    'shorttagopen',
+    'starttagopen',
+    'endbracket',
+]
+
+# sgmllib is not available by default in Python 3; if the end user doesn't have
+# it available then we'll lose illformed XML parsing and content santizing
+try:
+    import sgmllib
+except ImportError:
+    # This is probably Python 3, which doesn't include sgmllib anymore
+    _SGML_AVAILABLE = 0
+
+    # Mock sgmllib enough to allow subclassing later on
+    class sgmllib(object):
+        class SGMLParser(object):
+            def goahead(self, i):
+                pass
+            def parse_starttag(self, i):
+                pass
+else:
+    _SGML_AVAILABLE = 1
+
+    # sgmllib defines a number of module-level regular expressions that are
+    # insufficient for the XML parsing feedparser needs. Rather than modify
+    # the variables directly in sgmllib, they're defined here using the same
+    # names, and the compiled code objects of several sgmllib.SGMLParser
+    # methods are copied into _BaseHTMLProcessor so that they execute in
+    # feedparser's scope instead of sgmllib's scope.
+    charref = re.compile('&#(\d+|[xX][0-9a-fA-F]+);')
+    tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*')
+    attrfind = re.compile(
+        r'\s*([a-zA-Z_][-:.a-zA-Z_0-9]*)[$]?(\s*=\s*'
+        r'(\'[^\']*\'|"[^"]*"|[][\-a-zA-Z0-9./,:;+*%?!&$\(\)_#=~\'"@]*))?'
+    )
+
+    # Unfortunately, these must be copied over to prevent NameError exceptions
+    entityref = sgmllib.entityref
+    incomplete = sgmllib.incomplete
+    interesting = sgmllib.interesting
+    shorttag = sgmllib.shorttag
+    shorttagopen = sgmllib.shorttagopen
+    starttagopen = sgmllib.starttagopen
+
+    class _EndBracketRegEx:
+        def __init__(self):
+            # Overriding the built-in sgmllib.endbracket regex allows the
+            # parser to find angle brackets embedded in element attributes.
+            self.endbracket = re.compile('''([^'"<>]|"[^"]*"(?=>|/|\s|\w+=)|'[^']*'(?=>|/|\s|\w+=))*(?=[<>])|.*?(?=[<>])''')
+        def search(self, target, index=0):
+            match = self.endbracket.match(target, index)
+            if match is not None:
+                # Returning a new object in the calling thread's context
+                # resolves a thread-safety.
+                return EndBracketMatch(match)
+            return None
+    class EndBracketMatch:
+        def __init__(self, match):
+            self.match = match
+        def start(self, n):
+            return self.match.end(n)
+    endbracket = _EndBracketRegEx()
diff --git a/lib/feedparser/sgmllib.py b/lib/feedparser/sgmllib3.py
similarity index 99%
rename from lib/feedparser/sgmllib.py
rename to lib/feedparser/sgmllib3.py
index 899a35f0df07c26073691fcc865a1a0a73fa7b55..88a02a307f4013abccb867cac97075e22acf06a5 100644
--- a/lib/feedparser/sgmllib.py
+++ b/lib/feedparser/sgmllib3.py
@@ -481,9 +481,9 @@ class TestSGMLParser(SGMLParser):
         if not attrs:
             print('start tag: <' + tag + '>')
         else:
-            print('start tag: <' + tag)
+            print('start tag: <' + tag, end=' ')
             for name, value in attrs:
-                print(name + '=' + '"' + value + '"')
+                print(name + '=' + '"' + value + '"', end=' ')
             print('>')
 
     def unknown_endtag(self, tag):
diff --git a/lib/feedparser/tests/compression/deflate-no-headers.z b/lib/feedparser/tests/compression/deflate-no-headers.z
deleted file mode 100644
index 04b5c303cf7091b3e83da88ebe49e93ef4fb58e9..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/compression/deflate-no-headers.z and /dev/null differ
diff --git a/lib/feedparser/tests/compression/deflate-not-compressed.z b/lib/feedparser/tests/compression/deflate-not-compressed.z
deleted file mode 100644
index ddd282214ae43d31176709b06fb400c63da8c74a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/compression/deflate-not-compressed.z
+++ /dev/null
@@ -1 +0,0 @@
-<feed><title>deflate</title></feed>
diff --git a/lib/feedparser/tests/compression/deflate.z b/lib/feedparser/tests/compression/deflate.z
deleted file mode 100644
index e68e620e667c073322b750851e86ad64df8d17e6..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/compression/deflate.z and /dev/null differ
diff --git a/lib/feedparser/tests/compression/gzip-not-compressed.gz b/lib/feedparser/tests/compression/gzip-not-compressed.gz
deleted file mode 100644
index f74317830c1606bd655fd0af5558793704351d83..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/compression/gzip-not-compressed.gz and /dev/null differ
diff --git a/lib/feedparser/tests/compression/gzip-struct-error.gz b/lib/feedparser/tests/compression/gzip-struct-error.gz
deleted file mode 100644
index d4c59941f375babaeada61fadabb84832a7a8407..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/compression/gzip-struct-error.gz and /dev/null differ
diff --git a/lib/feedparser/tests/compression/gzip.gz b/lib/feedparser/tests/compression/gzip.gz
deleted file mode 100644
index 52a063f73f07f80e394190fd5b51d7fe29f57075..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/compression/gzip.gz and /dev/null differ
diff --git a/lib/feedparser/tests/compression/sample.xml b/lib/feedparser/tests/compression/sample.xml
deleted file mode 100644
index d6e8416dc630ef7fc3f8feebdcddfa3ee6035ed4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/compression/sample.xml
+++ /dev/null
@@ -1 +0,0 @@
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/encoding/big5.xml b/lib/feedparser/tests/encoding/big5.xml
deleted file mode 100644
index 823966bbf7ddeec8e186ec5cb52b7241a74976cd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/big5.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="big5"?>
-<!--
-SkipUnless:   __import__('codecs').lookup('big5')
-Description:  big5
-Expect:       not bozo and encoding == 'big5'
--->
-<rss>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/bozo_bogus_encoding.xml b/lib/feedparser/tests/encoding/bozo_bogus_encoding.xml
deleted file mode 100644
index 89638b7bd8b8e7589d6d80c36008387ab52eaa63..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/bozo_bogus_encoding.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="bogus"?>
-<!--
-Description: bogus encoding
-Expect:      bozo
--->
-<rss>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/bozo_double-encoded-html.xml b/lib/feedparser/tests/encoding/bozo_double-encoded-html.xml
deleted file mode 100644
index b268d6a963cebc494e3cc7fd2517d977868c61f7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/bozo_double-encoded-html.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description:  utf-8 interpreted as iso-8859-1 and re-encoded as utf-8
-Expect:       bozo and ord(entries[0]['description']) == 8230
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>&acirc;&#128;&brvbar;</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/bozo_encoding_mismatch_crash.xml b/lib/feedparser/tests/encoding/bozo_encoding_mismatch_crash.xml
deleted file mode 100644
index 315980b94afeec8c30075c65175fef54d252153a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/bozo_encoding_mismatch_crash.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-SkipUnless:   __import__('sys').version.split()[0] >= '2.2.0'
-Description: crashes
-Expect:      1
--->
-<rss>
-<item>
-<description><![CDATA[<a href="http://www.example.com/">�</a><a href="&#38;"></a>]]></description>
-</item>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/bozo_http_i18n.xml b/lib/feedparser/tests/encoding/bozo_http_i18n.xml
deleted file mode 100644
index 5dae79730bbd11dd977fc59713b7e1dd7748c85f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/bozo_http_i18n.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Note:         text/xml defaults to us-ascii, in conflict with the XML declaration of utf-8
-Header:       Content-type: text/xml
-Description:  Content-type with no charset (text/xml defaults to us-ascii)
-Expect:       bozo and isinstance(bozo_exception, feedparser.CharacterEncodingOverride)
--->
-
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Iñtërnâtiônàlizætiøn</title>
-</feed>
diff --git a/lib/feedparser/tests/encoding/bozo_http_text_plain.xml b/lib/feedparser/tests/encoding/bozo_http_text_plain.xml
deleted file mode 100644
index 7e0adfe82bd371624a3efd2eaec261b0edfa053c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/bozo_http_text_plain.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/plain
-Description: text/plain + no encoding
-Expect:      bozo
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/bozo_http_text_plain_charset.xml b/lib/feedparser/tests/encoding/bozo_http_text_plain_charset.xml
deleted file mode 100644
index 89c36e87b6a7336777398176728abb3d3237d8ee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/bozo_http_text_plain_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/plain; charset=utf-8
-Description: text/plain + charset
-Expect:      bozo and encoding == 'utf-8'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/bozo_invalid-bytes-with-bom.xml b/lib/feedparser/tests/encoding/bozo_invalid-bytes-with-bom.xml
deleted file mode 100644
index 4c1b349fba1086b861e58834e99a0e50c96ed590..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/bozo_invalid-bytes-with-bom.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: Ensure when there are invalid bytes in encoding specified by BOM, feedparser doesn't crash
-Expect:      bozo
--->
-<rss version="2.0">
-<channel>
-<title>Valid UTF8: ѨInvalid UTF8: Espa�a</title>
-<description><pre class="screen"></pre></description>
-</channel>
-</rss
diff --git a/lib/feedparser/tests/encoding/bozo_linenoise.xml b/lib/feedparser/tests/encoding/bozo_linenoise.xml
deleted file mode 100644
index 60903fce0e29f5138f57388c1a0f1d7ba8109b77..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/bozo_linenoise.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: unguessable characters
-Expect:      bozo and entries[0].summary == u'\xe2\u20ac\u2122\xe2\u20ac\x9d\u0160'
--->
-
-<rss version="2.0">
-<channel>
-<item>
-<description><![CDATA[ ’<>”� ]]></description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/encoding/csucs4.xml b/lib/feedparser/tests/encoding/csucs4.xml
deleted file mode 100644
index 6a5e88ae368e4cfde37461ae57cd2c3f799781f7..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/csucs4.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/csunicode.xml b/lib/feedparser/tests/encoding/csunicode.xml
deleted file mode 100644
index aac9a437e38e387498afad922a99dc82a6236f5e..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/csunicode.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/demoronize-1.xml b/lib/feedparser/tests/encoding/demoronize-1.xml
deleted file mode 100644
index 8b2345f623b71afb8e4ccf8d84923bb360c49e0c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/demoronize-1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description:  using win-1252 character points instead of unicode
-Expect:       not bozo and entries[0]['description'] == u'don\u2019t'
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>don’t</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/demoronize-2.xml b/lib/feedparser/tests/encoding/demoronize-2.xml
deleted file mode 100644
index f96d4549f816a2495f05a981ad95b493a28c0fb9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/demoronize-2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description:  using win-1252 character points instead of unicode
-Expect:       not bozo and entries[0]['description'] == u'don\u2019t'
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>don&#146;t</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/demoronize-3.xml b/lib/feedparser/tests/encoding/demoronize-3.xml
deleted file mode 100644
index c54ef84a39754f16c4676c0272243b2cb2a22b17..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/demoronize-3.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description:  using win-1252 character points instead of unicode
-Expect:       not bozo and entries[0]['description'] == u'don&#x2019;t'
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>don&amp;#146;t</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/double-encoded-html.xml b/lib/feedparser/tests/encoding/double-encoded-html.xml
deleted file mode 100644
index f98916c9a045896689fc5747af327ecc8c5ad563..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/double-encoded-html.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description:  utf-8 interpreted as iso-8859-1 and re-encoded as utf-8
-Expect:       not bozo and ord(entries[0]['description']) == 8230
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>&#226;&#128;&#166;</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/encoding_attribute_crash.xml b/lib/feedparser/tests/encoding/encoding_attribute_crash.xml
deleted file mode 100644
index b270005a2dbb49d864f4d09598b19f49435677ce..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/encoding_attribute_crash.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: crashes
-Expect:      1
--->
-<rss>
-<item>
-<description><![CDATA[<img alt="&#169;" />]]></description>
-</item>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/encoding_attribute_crash_2.xml b/lib/feedparser/tests/encoding/encoding_attribute_crash_2.xml
deleted file mode 100644
index a000acc98f9717f63f1cec175acfd1cbf8b2348c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/encoding_attribute_crash_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: crashes
-Expect:      1
--->
-<rss>
-<item>
-<description>&lt;a href=&quot;http://example.com&quot;&gt;&lt;img src=&quot;http://example.com/logo.gif&quot; alt=&quot;The image &amp;acirc;&amp;#128;&amp;#156;http://example.com/logo.gif&amp;acirc;&amp;#128;&amp;#65533; cannot be displayed, because it contains errors.&quot;&gt;&lt;/a&gt;&lt;br&gt;</description>
-</item>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/euc-kr-attribute.xml b/lib/feedparser/tests/encoding/euc-kr-attribute.xml
deleted file mode 100644
index 0dd60882309c443bb88a6ebf7968d30437416225..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/euc-kr-attribute.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="euc-kr"?>
-<!--
-SkipUnless:   __import__('codecs').lookup('euc-kr')
-Description:  euc-kr character in attribute of embedded HTML
-Expect:       not bozo and entries[0]['description'] == u'<img alt="\ub144" />'
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>&lt;img alt="��" /></description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/euc-kr-item.xml b/lib/feedparser/tests/encoding/euc-kr-item.xml
deleted file mode 100644
index 29a316da567915dbb580b4534fadee0fde55b8cf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/euc-kr-item.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="euc-kr"?>
-<!--
-SkipUnless:   __import__('codecs').lookup('euc-kr')
-Description:  euc-kr encoding in item description
-Expect:       not bozo and entries[0]['description'] == u'\ub144'
--->
-<rss version="2.0">
-<channel>
-  <item>
-    <description>��</description>
-  </item>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/euc-kr.xml b/lib/feedparser/tests/encoding/euc-kr.xml
deleted file mode 100644
index 96e110f56e09a077a43c92cfd5c4980c5f340eb4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/euc-kr.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="euc-kr"?>
-<!--
-SkipUnless:   __import__('codecs').lookup('euc-kr')
-Description:  euc-kr encoding
-Expect:       not bozo and feed['title'] == u'\ub144'
--->
-<rss version="2.0">
-<channel>
-  <title>��</title>
-</channel>
-</rss>
-
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_charset.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_charset.xml
deleted file mode 100644
index a945704e03f089905df73ba50853b3324d2f6af8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/atom+xml;charset='us-ascii'
-Description: application/atom+xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_charset_overrides_encoding.xml
deleted file mode 100644
index f587bcc52419f9b56ed27da7909367d1868a9c56..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/atom+xml; charset='us-ascii'
-Description: application/atom+xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_default.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_default.xml
deleted file mode 100644
index 6ef0efeceb096ad29525f2a647590d9e6652bcb7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/atom+xml
-Description: application/atom+xml + no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_encoding.xml
deleted file mode 100644
index 4b46cab741bb857b19260b6c89de5e9300ca3314..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/atom+xml
-Description: application/atom+xml + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset.xml
deleted file mode 100644
index 5a31ff01998527af78ac8d9223ee88522b9cd2a9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('gb2312')
-Header:      Content-type: application/atom+xml;charset='gb2312'
-Description: application/atom+xml + explicit charset
-Expect:      not bozo and encoding == 'gb18030'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset_overrides_encoding.xml
deleted file mode 100644
index bb3c3fcdb0df37da72a5a0d864ac7e41e890c209..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('gb2312')
-Header:      Content-type: application/atom+xml; charset='gb2312'
-Description: application/atom+xml + charset overrides encoding
-Expect:      not bozo and encoding == 'gb18030'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_encoding.xml b/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_encoding.xml
deleted file mode 100644
index ab91a82d4a5ba633fa8d1f4acd66eec9a2025516..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_atom_xml_gb2312_encoding.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="gb2312"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('gb2312')
-Header:      Content-type: application/atom+xml
-Description: application/atom+xml + explicit encoding
-Expect:      not bozo and encoding == 'gb18030'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_charset.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_charset.xml
deleted file mode 100644
index 8ca929b14b146bdc243d03805fbdf865ce6c89f0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_rss_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/rss+xml;charset= 'us-ascii'
-Description: application/rss+xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_charset_overrides_encoding.xml
deleted file mode 100644
index 80c214f15234cf4daa4a129c7a1f666e0306dbae..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_rss_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/rss+xml;charset= "us-ascii"
-Description: application/rss+xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_default.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_default.xml
deleted file mode 100644
index 781e703e043d2a44f85429c78223c885c16261da..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_rss_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/rss+xml
-Description: application/rss+xml + no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_application_rss_xml_encoding.xml b/lib/feedparser/tests/encoding/http_application_rss_xml_encoding.xml
deleted file mode 100644
index 53ee7ff154d17462bcdf7ae450c7cf071ea78ac6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_rss_xml_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/rss+xml
-Description: application/rss+xml + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_application_xml_charset.xml b/lib/feedparser/tests/encoding/http_application_xml_charset.xml
deleted file mode 100644
index 2ea8437e2c88213b00a773e7a3f00cb8d6e8ead9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml;charset= "us-ascii"
-Description: application/xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_application_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_charset_overrides_encoding.xml
deleted file mode 100644
index cd314dd04f704c6386cdf34b3957ca60a7c0eaab..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml;charset = us-ascii
-Description: application/xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_application_xml_default.xml b/lib/feedparser/tests/encoding/http_application_xml_default.xml
deleted file mode 100644
index 309496c66ca9e75cfa51caa79a2fd79d88db29ce..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml
-Description: application/xml + no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_charset.xml
deleted file mode 100644
index 99bfcba96fedcd5b7ea3741d40f8430fb9bf663d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml-dtd; charset="us-ascii"
-Description: application/xml-dtd + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_charset_overrides_encoding.xml
deleted file mode 100644
index fa01fef0b49d39d1434826041575a1092f0e8f3c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_dtd_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml-dtd; charset="us-ascii"
-Description: application/xml-dtd + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_default.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_default.xml
deleted file mode 100644
index 390e70e4e92a253567d9920cec9acfedf2677489..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_dtd_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml-dtd
-Description: application/xml-dtd + no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_dtd_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_dtd_encoding.xml
deleted file mode 100644
index ae67ce1d66920cd79bc89142c5f54b0510f2aacf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_dtd_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml-dtd
-Description: application/xml-dtd + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_encoding.xml
deleted file mode 100644
index 771663f96bb7e9c4b5d777902322e440dd3d173b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml
-Description: application/xml + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_charset.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_charset.xml
deleted file mode 100644
index 52ef00245289edb402244dd71d4141f9dac72c13..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_epe_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml-external-parsed-entity; charset="us-ascii"
-Description: application/xml-external-parsed-entity + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_charset_overrides_encoding.xml
deleted file mode 100644
index ce10433ebf391aab6b464e5e7f7264c2c8ff28c8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_epe_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml-external-parsed-entity;charset=us-ascii
-Description: application/xml-external-parsed-entity + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_default.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_default.xml
deleted file mode 100644
index 85af85963c3e5fc0728a8e58ae31a7526756dca9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_epe_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: application/xml-external-parsed-entity
-Description: application/xml-external-parsed-entity + no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_application_xml_epe_encoding.xml b/lib/feedparser/tests/encoding/http_application_xml_epe_encoding.xml
deleted file mode 100644
index 4085fa2866955e5ee3da9cac6a04a3d9597ac95d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_application_xml_epe_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: application/xml-external-parsed-entity
-Description: application/xml-parsed-entity + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_encoding_attribute_crash.xml b/lib/feedparser/tests/encoding/http_encoding_attribute_crash.xml
deleted file mode 100644
index 19c9dd63635d41825ae3a499c38be6881e61b75d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_encoding_attribute_crash.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!--
-Header:      Content-type: application/atom+xml
-Description: crashes while resolving relative URIs when content contains attributes which contain (valid) non-ASCII characters
-Expect:      not bozo
--->
-<feed xmlns='http://www.w3.org/2005/Atom'>
-<entry>
-<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
-<img alt="Browser market shares at ‘ongoing’" />
-</div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_i18n.xml b/lib/feedparser/tests/encoding/http_i18n.xml
deleted file mode 100644
index e61ad6ae466a15652ed7cd026b93c2c7391e3f3f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_i18n.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Header:       Content-type: application/xml
-Description:  application/xml with no charset (control for tests/illformed/encoding/http_i18n.xml)
-Expect:       not bozo
--->
-
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Iñtërnâtiônàlizætiøn</title>
-  <link rel='alternate' type='text/html' href='http://example.com/'/>
-  <modified>2004-06-02T19:07:55-04:00</modified>
-  <tagline>If your parser thinks this is well-formed, it's right.</tagline>
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_charset.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_charset.xml
deleted file mode 100644
index bffafae6bbb076818f6eb6f50cbcae7a1941f8c3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_atom_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/atom+xml;charset='us-ascii'
-Description: text/atom+xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_charset_overrides_encoding.xml
deleted file mode 100644
index be4fbf9eee7f35fecb79d61c8d3d5ff5eed605de..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_atom_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/atom+xml; charset='us-ascii'
-Description: text/atom+xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_default.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_default.xml
deleted file mode 100644
index 2d3088f731e05c6bd6b7b1edf52ba66eaee01f77..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_atom_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/atom+xml
-Description: text/atom+xml + no encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_atom_xml_encoding.xml b/lib/feedparser/tests/encoding/http_text_atom_xml_encoding.xml
deleted file mode 100644
index f3a25faa5e8eab952977e4bbbce4f504cc8755cf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_atom_xml_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/atom+xml
-Description: text/atom+xml + explicit encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_charset.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_charset.xml
deleted file mode 100644
index 88aa4176110e6242154b7164146a131fe845e983..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_rss_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/rss+xml;charset= 'us-ascii'
-Description: text/rss+xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_charset_overrides_encoding.xml
deleted file mode 100644
index 84436b53c06fd8609aab8f1df390c60e1eee26bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_rss_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/rss+xml;charset= "us-ascii"
-Description: text/rss+xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_default.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_default.xml
deleted file mode 100644
index d7a90255c9e94e5875eabf188ee9293c17cc4002..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_rss_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/rss+xml
-Description: text/rss+xml + no encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_text_rss_xml_encoding.xml b/lib/feedparser/tests/encoding/http_text_rss_xml_encoding.xml
deleted file mode 100644
index a786e7eb60f75ab9806c5f17d09975a718bf0a0e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_rss_xml_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/rss+xml
-Description: text/rss+xml + explicit encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_bogus_charset.xml b/lib/feedparser/tests/encoding/http_text_xml_bogus_charset.xml
deleted file mode 100644
index 09997938a65af80d3d5a52e0fcddaf8cb6581b18..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_bogus_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml;
-Description: text/xml + bogus charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_bogus_param.xml b/lib/feedparser/tests/encoding/http_text_xml_bogus_param.xml
deleted file mode 100644
index b76cc1f5f21bdc43c876160a41339422c1990c92..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_bogus_param.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml; charset:iso-8859-1
-Description: text/xml + bogus parameter
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset.xml b/lib/feedparser/tests/encoding/http_text_xml_charset.xml
deleted file mode 100644
index 3917214ed478ed35da10c18930abf584e1d225bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml;charset= "us-ascii"
-Description: text/xml + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset_2.xml b/lib/feedparser/tests/encoding/http_text_xml_charset_2.xml
deleted file mode 100644
index aac1bec9a4852fcc630467595d1581e1b505ef52..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_charset_2.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-SkipUnless:   __import__('codecs').lookup('windows-1252')
-Header:       Content-type: text/xml; charset=windows-1252
-Description:  text/xml + explicit charset (this one is harder than the others)
-Expect:       not bozo and entries[0]['description'] == u'This is a \xa3\u201ctest.\u201d'
--->
-
-<rss version="2.0">
-<channel>
-<item>
-<title>Foo</title>
-<link>http://purl.org/rss/2.0/?item</link>
-<description>This is a ��test.�</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding.xml
deleted file mode 100644
index 5b05f6b312ec1dbe58e453ef2188d8145c6c9e50..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/xml;charset = us-ascii
-Description: text/xml + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding_2.xml b/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding_2.xml
deleted file mode 100644
index 0a0eed406b40ce546253054d768ecb47dfd5fb07..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_charset_overrides_encoding_2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version='1.0' encoding='iso-8859-1'?>
-<!--
-SkipUnless:   __import__('codecs').lookup('windows-1252')
-Header:       Content-type: text/xml; charset=windows-1252
-Description:  text/xml + charset overrides encoding (this one is harder than the others)
-Expect:       not bozo and entries[0]['description'] == u'This is a \xa3\u201ctest.\u201d'
--->
-
-<rss version="2.0">
-<channel>
-<item>
-<title>Foo</title>
-<link>http://purl.org/rss/2.0/?item</link>
-<description>This is a ��test.�</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_default.xml b/lib/feedparser/tests/encoding/http_text_xml_default.xml
deleted file mode 100644
index eb7236f506fdd25303a63faac3e0f17712ad5431..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml
-Description: text/xml + no encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_charset.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_charset.xml
deleted file mode 100644
index 2552bedf82abf1518ff8913de33ff3e0d69907b8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_epe_charset.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml-external-parsed-entity; charset="us-ascii"
-Description: text/xml-external-parsed-entity + explicit charset
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_charset_overrides_encoding.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_charset_overrides_encoding.xml
deleted file mode 100644
index 353429e10451f2b2005f3d088f058d1acec0ec62..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_epe_charset_overrides_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/xml-external-parsed-entity;charset=us-ascii
-Description: text/xml-external-parsed-entity + charset overrides encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_default.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_default.xml
deleted file mode 100644
index 7f5c0ee5f600408cd2af2c539d353317944f009d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_epe_default.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml-external-parsed-entity
-Description: text/xml-external-parsed-entity + no encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_epe_encoding.xml b/lib/feedparser/tests/encoding/http_text_xml_epe_encoding.xml
deleted file mode 100644
index b85e3bca142ed90a44678c61d66f35a3a4fe5c9a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_epe_encoding.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Header:      Content-type: text/xml-external-parsed-entity
-Description: text/xml-parsed-entity + explicit encoding
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/http_text_xml_qs.xml b/lib/feedparser/tests/encoding/http_text_xml_qs.xml
deleted file mode 100644
index fa5f346bc2a37fc81718c2f994f4474e0b7d376d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/http_text_xml_qs.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Header:      Content-type: text/xml; qs=0.9
-Description: text/xml + qs value
-Expect:      not bozo and encoding == 'us-ascii'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/iso-10646-ucs-2.xml b/lib/feedparser/tests/encoding/iso-10646-ucs-2.xml
deleted file mode 100644
index e2d2e93ab55e9eb184caec1f2ce33a5f164dcb03..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/iso-10646-ucs-2.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/iso-10646-ucs-4.xml b/lib/feedparser/tests/encoding/iso-10646-ucs-4.xml
deleted file mode 100644
index c111659647cb9a3f18b2330ded1df7cb82f0e77f..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/iso-10646-ucs-4.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/no_content_type_default.xml b/lib/feedparser/tests/encoding/no_content_type_default.xml
deleted file mode 100644
index cab1544e2fe268f331a20f94dee92363efbb9f46..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/no_content_type_default.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description: no content-type and no encoding
-Expect:      not bozo and encoding == 'utf-8'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/no_content_type_encoding.xml b/lib/feedparser/tests/encoding/no_content_type_encoding.xml
deleted file mode 100644
index 6ad16c691aa423753afd6cde8ca345bfb34e3cc9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/no_content_type_encoding.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!--
-Description: no content-type + explicit encoding
-Expect:      not bozo and encoding == 'iso-8859-1'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/encoding/u16.xml b/lib/feedparser/tests/encoding/u16.xml
deleted file mode 100644
index 3110f17a894a86dd2590c8ef61f8ce83bd186df7..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/u16.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/ucs-2.xml b/lib/feedparser/tests/encoding/ucs-2.xml
deleted file mode 100644
index d4e3defb7cdb42eed79930cc8d3e00fdf7568950..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/ucs-2.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/ucs-4.xml b/lib/feedparser/tests/encoding/ucs-4.xml
deleted file mode 100644
index 143fdcad223d42c8df449097004357c1ab9a95e5..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/ucs-4.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-16be-autodetect.xml b/lib/feedparser/tests/encoding/utf-16be-autodetect.xml
deleted file mode 100644
index 08976b7a5b5813987b2cde40db9010b1991f1edf..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-16be-autodetect.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-16be-bom.xml b/lib/feedparser/tests/encoding/utf-16be-bom.xml
deleted file mode 100644
index 1f629657d1e9a220e9c86141a881b482d10df6c4..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-16be-bom.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-16be.xml b/lib/feedparser/tests/encoding/utf-16be.xml
deleted file mode 100644
index c9a0f145d5762cb728e8301dd9de11a542b7fb25..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-16be.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-16le-autodetect.xml b/lib/feedparser/tests/encoding/utf-16le-autodetect.xml
deleted file mode 100644
index 60938826761b28a2527dd4cabff921a2eb935730..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-16le-autodetect.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-16le-bom.xml b/lib/feedparser/tests/encoding/utf-16le-bom.xml
deleted file mode 100644
index 89cb4f776ad403ac77e10c847c7efa18d4a18dae..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-16le-bom.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-16le.xml b/lib/feedparser/tests/encoding/utf-16le.xml
deleted file mode 100644
index ec8effdc8838c2a5d7470ccb102c4b61ccd01c27..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-16le.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-32be-autodetect.xml b/lib/feedparser/tests/encoding/utf-32be-autodetect.xml
deleted file mode 100644
index deabb603eee30b20ad973937db10f69f51f2a7d4..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-32be-autodetect.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-32be-bom.xml b/lib/feedparser/tests/encoding/utf-32be-bom.xml
deleted file mode 100644
index f09e8aefd67aeda483feb59d39100d59dcfb420e..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-32be-bom.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-32be.xml b/lib/feedparser/tests/encoding/utf-32be.xml
deleted file mode 100644
index f912031039b3b7700391b9a1531c7d04fb354a61..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-32be.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-32le-autodetect.xml b/lib/feedparser/tests/encoding/utf-32le-autodetect.xml
deleted file mode 100644
index 37fd72a64934d76635c9d70c729326812a20b243..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-32le-autodetect.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-32le-bom.xml b/lib/feedparser/tests/encoding/utf-32le-bom.xml
deleted file mode 100644
index c62cae4039b2659b45eaeb949896ddad88563ffe..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-32le-bom.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-32le.xml b/lib/feedparser/tests/encoding/utf-32le.xml
deleted file mode 100644
index 4b83b240f5350c646ef41222282d5e7f84000698..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf-32le.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf-8-bom.xml b/lib/feedparser/tests/encoding/utf-8-bom.xml
deleted file mode 100644
index 079031567c4e41757a36d5e0badf7f2349b0c0f6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/utf-8-bom.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-SkipUnless:   __import__('codecs').lookup('utf-8')
-Description:  Wellformed UTF-8 with Byte Order Mark
-Expect:       not bozo and encoding == 'utf-8'
--->
-<rss>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/utf16.xml b/lib/feedparser/tests/encoding/utf16.xml
deleted file mode 100644
index 053b03e347ca6a3d4a6d8140979ba3b5acf4735d..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf16.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf_16.xml b/lib/feedparser/tests/encoding/utf_16.xml
deleted file mode 100644
index 63dd6a69268571f28b86daed795de7b18af25010..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf_16.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/utf_32.xml b/lib/feedparser/tests/encoding/utf_32.xml
deleted file mode 100644
index 7489048375233332b0547314e1fe96840a2454c4..0000000000000000000000000000000000000000
Binary files a/lib/feedparser/tests/encoding/utf_32.xml and /dev/null differ
diff --git a/lib/feedparser/tests/encoding/x80_437.xml b/lib/feedparser/tests/encoding/x80_437.xml
deleted file mode 100644
index 747bffe652d653b37682624104ee613f538c2b4f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_437.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="437"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('437')
-Description: \x80 character in 437 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_850.xml b/lib/feedparser/tests/encoding/x80_850.xml
deleted file mode 100644
index 89b51ddf0c7b13df7e5285d4caa28cde6662cd08..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_850.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="850"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('850')
-Description: \x80 character in 850 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_852.xml b/lib/feedparser/tests/encoding/x80_852.xml
deleted file mode 100644
index 1fb1898e065e15fe2fb68c696e604f0dc8fe5c47..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_852.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="852"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('852')
-Description: \x80 character in 852 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_855.xml b/lib/feedparser/tests/encoding/x80_855.xml
deleted file mode 100644
index fbd5240f4f9cb0352578c0375bb97c3ddacde2c6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_855.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="855"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('855')
-Description: \x80 character in 855 encoding
-Expect:      not bozo and feed['title'] == u'\u0452'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_857.xml b/lib/feedparser/tests/encoding/x80_857.xml
deleted file mode 100644
index 2ebe084771a1e8b609e033f6863a29d910c6cc42..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_857.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="857"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('857')
-Description: \x80 character in 857 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_860.xml b/lib/feedparser/tests/encoding/x80_860.xml
deleted file mode 100644
index dbe53c9ccb2eb0337edf188c29bd8c4d5f83eb53..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_860.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="860"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('860')
-Description: \x80 character in 860 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_861.xml b/lib/feedparser/tests/encoding/x80_861.xml
deleted file mode 100644
index a2a69ddfb3199f6694c711e65b42c493bbb5e5e4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_861.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="861"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('861')
-Description: \x80 character in 861 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_862.xml b/lib/feedparser/tests/encoding/x80_862.xml
deleted file mode 100644
index 70947b414349cd83ea17e1338e578f674bc5e79b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_862.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="862"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('862')
-Description: \x80 character in 862 encoding
-Expect:      not bozo and feed['title'] == u'\u05d0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_863.xml b/lib/feedparser/tests/encoding/x80_863.xml
deleted file mode 100644
index dce7c36006f30283ae390e0d5a0464732d1c55bb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_863.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="863"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('863')
-Description: \x80 character in 863 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_865.xml b/lib/feedparser/tests/encoding/x80_865.xml
deleted file mode 100644
index bfe7e3a6217a120514e49e9c9cf847f7442ee2ac..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_865.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="865"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('865')
-Description: \x80 character in 865 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_866.xml b/lib/feedparser/tests/encoding/x80_866.xml
deleted file mode 100644
index d83badab36e984930ed01553c745efa4f737c12f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_866.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="866"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('866')
-Description: \x80 character in 866 encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp037.xml b/lib/feedparser/tests/encoding/x80_cp037.xml
deleted file mode 100644
index bf80bdeb9489672dc35bad37f52dad61ab85b85f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp037.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~�����on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}�����}]%ą���������z@���@���������@��@�����@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1125.xml b/lib/feedparser/tests/encoding/x80_cp1125.xml
deleted file mode 100644
index ab540d1eeda6999d5609d10df6a658b0819f1128..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp1125.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1125"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1125')
-Description: \x80 character in cp1125 encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1250.xml b/lib/feedparser/tests/encoding/x80_cp1250.xml
deleted file mode 100644
index c32c6abe1cde6748490ce433ff0002362c90f9e0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp1250.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1250"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1250')
-Description: \x80 character in cp1250 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1251.xml b/lib/feedparser/tests/encoding/x80_cp1251.xml
deleted file mode 100644
index 5892eb3938b288a29f7c70799a4095f67aeedd07..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp1251.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1251"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1251')
-Description: \x80 character in cp1251 encoding
-Expect:      not bozo and feed['title'] == u'\u0402'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1252.xml b/lib/feedparser/tests/encoding/x80_cp1252.xml
deleted file mode 100644
index 960f8dfc302a5b5935c1f83cf68a8b1c550a54aa..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp1252.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1252"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1252')
-Description: \x80 character in cp1252 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1253.xml b/lib/feedparser/tests/encoding/x80_cp1253.xml
deleted file mode 100644
index 0f3fae968fc73a6d7bb65ffd259748b0facd2a4c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp1253.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1253"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1253')
-Description: \x80 character in cp1253 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1254.xml b/lib/feedparser/tests/encoding/x80_cp1254.xml
deleted file mode 100644
index 5a5160f569c05847e22ea60d1cfb0a33f41f9132..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp1254.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1254"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1254')
-Description: \x80 character in cp1254 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1255.xml b/lib/feedparser/tests/encoding/x80_cp1255.xml
deleted file mode 100644
index 64fa7b6a07698a49a1a85e4a45b0d6bbea4e28f8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp1255.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1255"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1255')
-Description: \x80 character in cp1255 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1256.xml b/lib/feedparser/tests/encoding/x80_cp1256.xml
deleted file mode 100644
index 87ad5178efa4629ec681afe92bcf7a19561b5264..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp1256.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1256"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1256')
-Description: \x80 character in cp1256 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1257.xml b/lib/feedparser/tests/encoding/x80_cp1257.xml
deleted file mode 100644
index 9496f0b5657e2e060eeb28f61ef58b713afd2acb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp1257.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1257"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1257')
-Description: \x80 character in cp1257 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp1258.xml b/lib/feedparser/tests/encoding/x80_cp1258.xml
deleted file mode 100644
index 4fc927e72042db3fbe1454ca9720a9f2895b989f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp1258.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp1258"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp1258')
-Description: \x80 character in cp1258 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp437.xml b/lib/feedparser/tests/encoding/x80_cp437.xml
deleted file mode 100644
index d6fb55cafc082ae5f10b1d0362aba6fdc99c0be8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp437.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp437"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp437')
-Description: \x80 character in cp437 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp500.xml b/lib/feedparser/tests/encoding/x80_cp500.xml
deleted file mode 100644
index bc7abbdcd68a5ffae855385348de03ca2b45e888..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp500.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~�����on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}�����}]%ą���������z@���@���������@��@�����@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp737.xml b/lib/feedparser/tests/encoding/x80_cp737.xml
deleted file mode 100644
index 6798237dfb54e9bda5ebe10711823f0007a7996e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp737.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp737"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp737')
-Description: \x80 character in cp737 encoding
-Expect:      not bozo and feed['title'] == u'\u0391'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp775.xml b/lib/feedparser/tests/encoding/x80_cp775.xml
deleted file mode 100644
index d04ed5f837a68f1de9b70848bb334f0b86a94821..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp775.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp775"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp775')
-Description: \x80 character in cp775 encoding
-Expect:      not bozo and feed['title'] == u'\u0106'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp850.xml b/lib/feedparser/tests/encoding/x80_cp850.xml
deleted file mode 100644
index b510c43fc45c85aa2bc84e37c524358dfe78604e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp850.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp850"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp850')
-Description: \x80 character in cp850 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp852.xml b/lib/feedparser/tests/encoding/x80_cp852.xml
deleted file mode 100644
index 1c7d3e9524029e9b4f560e5b97c5fa207ad1a8b5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp852.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp852"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp852')
-Description: \x80 character in cp852 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp855.xml b/lib/feedparser/tests/encoding/x80_cp855.xml
deleted file mode 100644
index 069b059529fe68806c2c2abdfd692983333bd1f3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp855.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp855"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp855')
-Description: \x80 character in cp855 encoding
-Expect:      not bozo and feed['title'] == u'\u0452'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp856.xml b/lib/feedparser/tests/encoding/x80_cp856.xml
deleted file mode 100644
index d4d940ab19d7d5996518b614309a2ad26c4d5c73..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp856.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp856"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp856')
-Description: \x80 character in cp856 encoding
-Expect:      not bozo and feed['title'] == u'\u05d0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp857.xml b/lib/feedparser/tests/encoding/x80_cp857.xml
deleted file mode 100644
index 5682d7fa2f3e30a38595c6f0df7c85d481ac1a3d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp857.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp857"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp857')
-Description: \x80 character in cp857 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp860.xml b/lib/feedparser/tests/encoding/x80_cp860.xml
deleted file mode 100644
index a572284a05c0dcaa18288bce090316ea45251501..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp860.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp860"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp860')
-Description: \x80 character in cp860 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp861.xml b/lib/feedparser/tests/encoding/x80_cp861.xml
deleted file mode 100644
index fb1a529d60170e531f13e9dd1d443d45e1fa052b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp861.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp861"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp861')
-Description: \x80 character in cp861 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp862.xml b/lib/feedparser/tests/encoding/x80_cp862.xml
deleted file mode 100644
index e9121d0f78f3cd25c2f0647f16247a269a50a0ac..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp862.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp862"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp862')
-Description: \x80 character in cp862 encoding
-Expect:      not bozo and feed['title'] == u'\u05d0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp863.xml b/lib/feedparser/tests/encoding/x80_cp863.xml
deleted file mode 100644
index 3a2de4f2c89756dde948a5db8578fe85c23ab57b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp863.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp863"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp863')
-Description: \x80 character in cp863 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp864.xml b/lib/feedparser/tests/encoding/x80_cp864.xml
deleted file mode 100644
index fa501d7ab394232947e0bc754e349dc9bf5e2fbf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp864.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp864"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp864')
-Description: \x80 character in cp864 encoding
-Expect:      not bozo and feed['title'] == u'\xb0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp865.xml b/lib/feedparser/tests/encoding/x80_cp865.xml
deleted file mode 100644
index 1a59191f6ead8dbc4e4b8a05b589743174b89ba3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp865.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp865"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp865')
-Description: \x80 character in cp865 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp866.xml b/lib/feedparser/tests/encoding/x80_cp866.xml
deleted file mode 100644
index 62c9e95822d97e2e8b97056546152bdf9a99031f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp866.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp866"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp866')
-Description: \x80 character in cp866 encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp874.xml b/lib/feedparser/tests/encoding/x80_cp874.xml
deleted file mode 100644
index 80dd0ffd57a19e7745efea3655530f0e1d7818f0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp874.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp874"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp874')
-Description: \x80 character in cp874 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp875.xml b/lib/feedparser/tests/encoding/x80_cp875.xml
deleted file mode 100644
index b8b0d245ade2fa5acf7bb66e11a7dfa08ac49bd1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp875.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~�����on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}�����}]%ą���������z@���@���������@��@�����@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}�����}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cp_is.xml b/lib/feedparser/tests/encoding/x80_cp_is.xml
deleted file mode 100644
index 231ac77bfd19c5a7ad102d44e463f4a11a3d5129..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cp_is.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cp_is"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cp_is')
-Description: \x80 character in cp_is encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm037.xml b/lib/feedparser/tests/encoding/x80_csibm037.xml
deleted file mode 100644
index de1073be6c101a76f2502324ee1a16d8c3c399c9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_csibm037.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~��������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}��������}]%ą���������z@���@���������@��@��������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm500.xml b/lib/feedparser/tests/encoding/x80_csibm500.xml
deleted file mode 100644
index 2a499828efc1aaa4acdd0389baa3155147ce1257..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_csibm500.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~��������on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}��������}]%ą���������z@���@���������@��@��������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm855.xml b/lib/feedparser/tests/encoding/x80_csibm855.xml
deleted file mode 100644
index cf078a7478d657066f4bccc614180f740a7fb361..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_csibm855.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm855"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm855')
-Description: \x80 character in csibm855 encoding
-Expect:      not bozo and feed['title'] == u'\u0452'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm857.xml b/lib/feedparser/tests/encoding/x80_csibm857.xml
deleted file mode 100644
index b2df462721488849df004ae4c6a539b504f74f95..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_csibm857.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm857"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm857')
-Description: \x80 character in csibm857 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm860.xml b/lib/feedparser/tests/encoding/x80_csibm860.xml
deleted file mode 100644
index 28269f79b94ab8e8cd959b1f604a00fe4dc1b52d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_csibm860.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm860"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm860')
-Description: \x80 character in csibm860 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm861.xml b/lib/feedparser/tests/encoding/x80_csibm861.xml
deleted file mode 100644
index 2300d2d96cc3633a74da002d44142a043a32a2cc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_csibm861.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm861"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm861')
-Description: \x80 character in csibm861 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm863.xml b/lib/feedparser/tests/encoding/x80_csibm863.xml
deleted file mode 100644
index af23c2bdfda198ea2b8ccb5b656451905876507c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_csibm863.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm863"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm863')
-Description: \x80 character in csibm863 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm864.xml b/lib/feedparser/tests/encoding/x80_csibm864.xml
deleted file mode 100644
index 6d820bec1390ac1baed26f663ce241ac7d62bdc3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_csibm864.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm864"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm864')
-Description: \x80 character in csibm864 encoding
-Expect:      not bozo and feed['title'] == u'\xb0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm865.xml b/lib/feedparser/tests/encoding/x80_csibm865.xml
deleted file mode 100644
index 5ca7a89abfae529bc27e8ab6fe0f2d087542f5d9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_csibm865.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm865"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm865')
-Description: \x80 character in csibm865 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csibm866.xml b/lib/feedparser/tests/encoding/x80_csibm866.xml
deleted file mode 100644
index 0c962ed575e83263c9d28da96b82a2bbe4fb08c2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_csibm866.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csibm866"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csibm866')
-Description: \x80 character in csibm866 encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cskoi8r.xml b/lib/feedparser/tests/encoding/x80_cskoi8r.xml
deleted file mode 100644
index 2a41be100fe3d62bf0db3a8b5d2df5b321547dad..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cskoi8r.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cskoi8r"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cskoi8r')
-Description: \x80 character in cskoi8r encoding
-Expect:      not bozo and feed['title'] == u'\u2500'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_csmacintosh.xml b/lib/feedparser/tests/encoding/x80_csmacintosh.xml
deleted file mode 100644
index 3d387895c892418014800c695c1651b779cdb9e1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_csmacintosh.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="csmacintosh"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('csmacintosh')
-Description: \x80 character in csmacintosh encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cspc775baltic.xml b/lib/feedparser/tests/encoding/x80_cspc775baltic.xml
deleted file mode 100644
index e5b9993f313f5c0948c6039ff9040a8157a6095a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cspc775baltic.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cspc775baltic"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cspc775baltic')
-Description: \x80 character in cspc775baltic encoding
-Expect:      not bozo and feed['title'] == u'\u0106'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cspc850multilingual.xml b/lib/feedparser/tests/encoding/x80_cspc850multilingual.xml
deleted file mode 100644
index 21f5f7dc3b24985ee5f1fcace77d24f4f4aac9a0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cspc850multilingual.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cspc850multilingual"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cspc850multilingual')
-Description: \x80 character in cspc850multilingual encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cspc862latinhebrew.xml b/lib/feedparser/tests/encoding/x80_cspc862latinhebrew.xml
deleted file mode 100644
index b282482a68e8b0c88602c54cdb0245093a68920f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cspc862latinhebrew.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cspc862latinhebrew"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cspc862latinhebrew')
-Description: \x80 character in cspc862latinhebrew encoding
-Expect:      not bozo and feed['title'] == u'\u05d0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cspc8codepage437.xml b/lib/feedparser/tests/encoding/x80_cspc8codepage437.xml
deleted file mode 100644
index 74dffe055393f22e42ccf5591c84f7f4415228e5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cspc8codepage437.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cspc8codepage437"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cspc8codepage437')
-Description: \x80 character in cspc8codepage437 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_cspcp852.xml b/lib/feedparser/tests/encoding/x80_cspcp852.xml
deleted file mode 100644
index bb0b3f2f1cd938e69d1b2b63ee6022f2f1b51e6b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_cspcp852.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="cspcp852"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('cspcp852')
-Description: \x80 character in cspcp852 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_dbcs.xml b/lib/feedparser/tests/encoding/x80_dbcs.xml
deleted file mode 100644
index 6d7ff4157a7b1a4ed385654bce41f569e2343b9c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_dbcs.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="dbcs"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('dbcs')
-Description: \x80 character in dbcs encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-be.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-be.xml
deleted file mode 100644
index 605593c4db7baf4f8e2d0cf410b7b649558ecfe3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-be.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ca.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-ca.xml
deleted file mode 100644
index 346fa178a6d7b74dff347f1bce416e29c01cf6ae..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ca.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ch.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-ch.xml
deleted file mode 100644
index 1ed34d98eb7bdee7bd7470fb0314f85007fe363b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-ch.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-nl.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-nl.xml
deleted file mode 100644
index 158a9b889d8f8338edb0cd5641ce0ac1b28a6c5f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-nl.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-us.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-us.xml
deleted file mode 100644
index 9bc45ffac671cc657557e0d3f809a109bb19199d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-us.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic-cp-wt.xml b/lib/feedparser/tests/encoding/x80_ebcdic-cp-wt.xml
deleted file mode 100644
index 692714356d1c795546f8a7c8e4000de8e32878a0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic-cp-wt.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������`��`��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������`��`��}]%ą���������z@���@���������@��@������`��`��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_be.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_be.xml
deleted file mode 100644
index fe4d13b63e89c2b771779ebde11f8adfe400ba18..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_be.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ca.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_ca.xml
deleted file mode 100644
index 1999ff5f274256ade8148f252eb5bc5d22a3fd0f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ca.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ch.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_ch.xml
deleted file mode 100644
index 8a7d36df987a8d65e67de52e12a1474f40430677..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_ch.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_nl.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_nl.xml
deleted file mode 100644
index 2917b9543c9790615e9f6903246578565e8d64ff..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_nl.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_us.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_us.xml
deleted file mode 100644
index 8d3d7612d618ba3f3ecc9ffafc0ce81b9609f9f9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_us.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ebcdic_cp_wt.xml b/lib/feedparser/tests/encoding/x80_ebcdic_cp_wt.xml
deleted file mode 100644
index b110ada1d132ffefb7c6d642a199ba540bec364e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ebcdic_cp_wt.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������m��m��on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������m��m��}]%ą���������z@���@���������@��@������m��m��@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm037.xml b/lib/feedparser/tests/encoding/x80_ibm037.xml
deleted file mode 100644
index e3ab6ec5c3c4e7691304f15f3abca6cb9ba07b21..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm037.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������}]%ą���������z@���@���������@��@������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm039.xml b/lib/feedparser/tests/encoding/x80_ibm039.xml
deleted file mode 100644
index 211553d9f173dc9f13b9199a9618e3f672a7f151..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm039.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}������}]%ą���������z@���@���������@��@������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm1140.xml b/lib/feedparser/tests/encoding/x80_ibm1140.xml
deleted file mode 100644
index c1cde5f98f49f67408c5d894ce1ed5270ad87f6b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm1140.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~�������on%LZ``%⒉�䕓���z@@mm������mmM}������}]K������M}�������}]%ą���������z@���@���������@��@�������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm437.xml b/lib/feedparser/tests/encoding/x80_ibm437.xml
deleted file mode 100644
index c9689dc725c73d59651e7dfa5a1384ccfb77c954..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm437.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm437"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm437')
-Description: \x80 character in ibm437 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm500.xml b/lib/feedparser/tests/encoding/x80_ibm500.xml
deleted file mode 100644
index 1c32c88675d3036cfd3d355a6819acd5440f9574..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm500.xml
+++ /dev/null
@@ -1 +0,0 @@
-Lo���@�������~�K�@��������~������on%LO``%⒉�䕓���z@@mm������mmM}������}]K������M}������}]%ą���������z@���@���������@��@������@��������%ŧ����z@@@@@@���@����@���@����K�����@~~@�}ৄ�}%``n%L����@�������~�K�@�����~����zaa����K���a����a��{n%L�����n�La�����n%La����n
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm775.xml b/lib/feedparser/tests/encoding/x80_ibm775.xml
deleted file mode 100644
index a6ac0bf00d028bef455138324f1f6960cce0c010..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm775.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm775"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm775')
-Description: \x80 character in ibm775 encoding
-Expect:      not bozo and feed['title'] == u'\u0106'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm850.xml b/lib/feedparser/tests/encoding/x80_ibm850.xml
deleted file mode 100644
index e3385b76947d422142c349819baec1c967661bd3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm850.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm850"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm850')
-Description: \x80 character in ibm850 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm852.xml b/lib/feedparser/tests/encoding/x80_ibm852.xml
deleted file mode 100644
index ed4831087d461d0a58101232bb52a532ce025a0c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm852.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm852"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm852')
-Description: \x80 character in ibm852 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm855.xml b/lib/feedparser/tests/encoding/x80_ibm855.xml
deleted file mode 100644
index 7574077aa07fcbfaf317d3104bf25c806a2617cc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm855.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm855"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm855')
-Description: \x80 character in ibm855 encoding
-Expect:      not bozo and feed['title'] == u'\u0452'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm857.xml b/lib/feedparser/tests/encoding/x80_ibm857.xml
deleted file mode 100644
index 41f684896fb39576f4e0e8b87e74456ed409c4aa..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm857.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm857"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm857')
-Description: \x80 character in ibm857 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm860.xml b/lib/feedparser/tests/encoding/x80_ibm860.xml
deleted file mode 100644
index 68c3f5ef6d37acbb666acfce47eeb5b6638747de..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm860.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm860"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm860')
-Description: \x80 character in ibm860 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm861.xml b/lib/feedparser/tests/encoding/x80_ibm861.xml
deleted file mode 100644
index b9c19d768a4191f3e8c5b48a53417b5def345453..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm861.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm861"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm861')
-Description: \x80 character in ibm861 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm862.xml b/lib/feedparser/tests/encoding/x80_ibm862.xml
deleted file mode 100644
index 15a957b93588f47a771f5dac9665f9d8f948774b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm862.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm862"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm862')
-Description: \x80 character in ibm862 encoding
-Expect:      not bozo and feed['title'] == u'\u05d0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm863.xml b/lib/feedparser/tests/encoding/x80_ibm863.xml
deleted file mode 100644
index 884ca842a33bd85f6041f605ffd14e90aede1641..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm863.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm863"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm863')
-Description: \x80 character in ibm863 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm864.xml b/lib/feedparser/tests/encoding/x80_ibm864.xml
deleted file mode 100644
index cc5522f49fa19fe7f9336ca236d605572f583945..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm864.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm864"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm864')
-Description: \x80 character in ibm864 encoding
-Expect:      not bozo and feed['title'] == u'\xb0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm865.xml b/lib/feedparser/tests/encoding/x80_ibm865.xml
deleted file mode 100644
index 4419a8b3b35bcbc8f662a1d9a0364c2cc2f27cee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm865.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm865"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm865')
-Description: \x80 character in ibm865 encoding
-Expect:      not bozo and feed['title'] == u'\xc7'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ibm866.xml b/lib/feedparser/tests/encoding/x80_ibm866.xml
deleted file mode 100644
index cf2478793cf6e24b2cfb6352c63697cc5b9262b4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ibm866.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ibm866"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ibm866')
-Description: \x80 character in ibm866 encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_koi8-r.xml b/lib/feedparser/tests/encoding/x80_koi8-r.xml
deleted file mode 100644
index 9e6c9a6b8ef0042d30cae526344e1a8817c4ef4d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_koi8-r.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="koi8-r"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('koi8-r')
-Description: \x80 character in koi8-r encoding
-Expect:      not bozo and feed['title'] == u'\u2500'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_koi8-t.xml b/lib/feedparser/tests/encoding/x80_koi8-t.xml
deleted file mode 100644
index 502735cfc5119462be9c98b5874ff6b6d25fc119..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_koi8-t.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="koi8-t"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('koi8-t')
-Description: \x80 character in koi8-t encoding
-Expect:      not bozo and feed['title'] == u'\u049b'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_koi8-u.xml b/lib/feedparser/tests/encoding/x80_koi8-u.xml
deleted file mode 100644
index f8ea0abbbb4fa14974cd24fc2b8a1f89f33b948b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_koi8-u.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="koi8-u"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('koi8-u')
-Description: \x80 character in koi8-u encoding
-Expect:      not bozo and feed['title'] == u'\u2500'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_mac-cyrillic.xml b/lib/feedparser/tests/encoding/x80_mac-cyrillic.xml
deleted file mode 100644
index 7a49eb05ec304c0932e4a49e7ee97c3005511974..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_mac-cyrillic.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="mac-cyrillic"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('mac-cyrillic')
-Description: \x80 character in mac-cyrillic encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_mac.xml b/lib/feedparser/tests/encoding/x80_mac.xml
deleted file mode 100644
index b5361482078bf2c13bf464c9a625fa2e6246f41c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_mac.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="mac"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('mac')
-Description: \x80 character in mac encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_maccentraleurope.xml b/lib/feedparser/tests/encoding/x80_maccentraleurope.xml
deleted file mode 100644
index abcedfd302d47f69c57105e9785b2b1c8bd916a1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_maccentraleurope.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="maccentraleurope"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('maccentraleurope')
-Description: \x80 character in maccentraleurope encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_maccyrillic.xml b/lib/feedparser/tests/encoding/x80_maccyrillic.xml
deleted file mode 100644
index 89ae2309b1e62e9e76fb984c3e14da220778aa56..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_maccyrillic.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="maccyrillic"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('maccyrillic')
-Description: \x80 character in maccyrillic encoding
-Expect:      not bozo and feed['title'] == u'\u0410'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_macgreek.xml b/lib/feedparser/tests/encoding/x80_macgreek.xml
deleted file mode 100644
index ac91a79d3f9d791ef91404721812d0146ec7312e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_macgreek.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="macgreek"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('macgreek')
-Description: \x80 character in macgreek encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_maciceland.xml b/lib/feedparser/tests/encoding/x80_maciceland.xml
deleted file mode 100644
index d93cfa5631dbd90b28587bee9ed7bff6fc67f9be..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_maciceland.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="maciceland"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('maciceland')
-Description: \x80 character in maciceland encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_macintosh.xml b/lib/feedparser/tests/encoding/x80_macintosh.xml
deleted file mode 100644
index e01a0e31692f604f008262d7d538bdb7bae7df91..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_macintosh.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="macintosh"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('macintosh')
-Description: \x80 character in macintosh encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_maclatin2.xml b/lib/feedparser/tests/encoding/x80_maclatin2.xml
deleted file mode 100644
index fe1d5c43b345796c742171583cd52a5df4c0db99..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_maclatin2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="maclatin2"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('maclatin2')
-Description: \x80 character in maclatin2 encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_macroman.xml b/lib/feedparser/tests/encoding/x80_macroman.xml
deleted file mode 100644
index 0700f3af075ba34a1db572bf588e88c7af09cb70..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_macroman.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="macroman"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('macroman')
-Description: \x80 character in macroman encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_macturkish.xml b/lib/feedparser/tests/encoding/x80_macturkish.xml
deleted file mode 100644
index fa4ec82fdeaab41fe1f988a64d76f16f59dbc668..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_macturkish.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="macturkish"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('macturkish')
-Description: \x80 character in macturkish encoding
-Expect:      not bozo and feed['title'] == u'\xc4'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-ansi.xml b/lib/feedparser/tests/encoding/x80_ms-ansi.xml
deleted file mode 100644
index b3312ec6f2cfd8632b9d7f86ba678f2f0550d3ce..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ms-ansi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-ansi"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-ansi')
-Description: \x80 character in ms-ansi encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-arab.xml b/lib/feedparser/tests/encoding/x80_ms-arab.xml
deleted file mode 100644
index b67bee60161dd446d73239975e20834d347a7163..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ms-arab.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-arab"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-arab')
-Description: \x80 character in ms-arab encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-cyrl.xml b/lib/feedparser/tests/encoding/x80_ms-cyrl.xml
deleted file mode 100644
index 57bfc929b2b9b3523c8201ea9e21199baa74fd2b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ms-cyrl.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-cyrl"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-cyrl')
-Description: \x80 character in ms-cyrl encoding
-Expect:      not bozo and feed['title'] == u'\u0402'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-ee.xml b/lib/feedparser/tests/encoding/x80_ms-ee.xml
deleted file mode 100644
index eb034d0bfa3bc4ccd2120196915870f5642a20b7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ms-ee.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-ee"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-ee')
-Description: \x80 character in ms-ee encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-greek.xml b/lib/feedparser/tests/encoding/x80_ms-greek.xml
deleted file mode 100644
index b8bfc78a832ac0fbe7a668411556a57f4cdece0a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ms-greek.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-greek"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-greek')
-Description: \x80 character in ms-greek encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-hebr.xml b/lib/feedparser/tests/encoding/x80_ms-hebr.xml
deleted file mode 100644
index d170a9c67bf2b126fa94b6d32c3904c4266aeb48..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ms-hebr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-hebr"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-hebr')
-Description: \x80 character in ms-hebr encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_ms-turk.xml b/lib/feedparser/tests/encoding/x80_ms-turk.xml
deleted file mode 100644
index dad6cbe97b848bbda60dbe6dc1b406a2e404f2dd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_ms-turk.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="ms-turk"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('ms-turk')
-Description: \x80 character in ms-turk encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_tcvn-5712.xml b/lib/feedparser/tests/encoding/x80_tcvn-5712.xml
deleted file mode 100644
index 684c52f4e946f0d0e3aa6423b474512b614815fe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_tcvn-5712.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="tcvn-5712"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('tcvn-5712')
-Description: \x80 character in tcvn-5712 encoding
-Expect:      not bozo and feed['title'] == u'\xc0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_tcvn.xml b/lib/feedparser/tests/encoding/x80_tcvn.xml
deleted file mode 100644
index 5b17c9d7212bf95fe3369bd32d9f074f84438e98..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_tcvn.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="tcvn"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('tcvn')
-Description: \x80 character in tcvn encoding
-Expect:      not bozo and feed['title'] == u'\xc0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_tcvn5712-1.xml b/lib/feedparser/tests/encoding/x80_tcvn5712-1.xml
deleted file mode 100644
index f6e92eefbaae5d0120e621a717844796b43dbe26..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_tcvn5712-1.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="tcvn5712-1"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('tcvn5712-1')
-Description: \x80 character in tcvn5712-1 encoding
-Expect:      not bozo and feed['title'] == u'\xc0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_viscii.xml b/lib/feedparser/tests/encoding/x80_viscii.xml
deleted file mode 100644
index b872c5b3343416e988de71a1e9cb27ac1d8bc9b8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_viscii.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="viscii"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('viscii')
-Description: \x80 character in viscii encoding
-Expect:      not bozo and feed['title'] == u'\u1ea0'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_winbaltrim.xml b/lib/feedparser/tests/encoding/x80_winbaltrim.xml
deleted file mode 100644
index a109e279fc323620468ba501fc7fb96653fc27e0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_winbaltrim.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="winbaltrim"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('winbaltrim')
-Description: \x80 character in winbaltrim encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1250.xml b/lib/feedparser/tests/encoding/x80_windows-1250.xml
deleted file mode 100644
index 7449843e2608a2653203665a75ab4ee31e053e28..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1250.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1250"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1250')
-Description: \x80 character in windows-1250 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1251.xml b/lib/feedparser/tests/encoding/x80_windows-1251.xml
deleted file mode 100644
index 15f51c58fe20f364d2cd3cf59dbd6fcf7f3c40b6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1251.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1251"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1251')
-Description: \x80 character in windows-1251 encoding
-Expect:      not bozo and feed['title'] == u'\u0402'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1252.xml b/lib/feedparser/tests/encoding/x80_windows-1252.xml
deleted file mode 100644
index 742278a0e96e651e6618ea03f123f2efffeca1fa..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1252.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1252"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1252')
-Description: \x80 character in windows-1252 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1253.xml b/lib/feedparser/tests/encoding/x80_windows-1253.xml
deleted file mode 100644
index 001199908a429f029ccb0c186cf346f269c9bfff..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1253.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1253"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1253')
-Description: \x80 character in windows-1253 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1254.xml b/lib/feedparser/tests/encoding/x80_windows-1254.xml
deleted file mode 100644
index 7e9078947b2597e0c23ce8b33a18c1d703c90a78..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1254.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1254"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1254')
-Description: \x80 character in windows-1254 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1255.xml b/lib/feedparser/tests/encoding/x80_windows-1255.xml
deleted file mode 100644
index 53cfc19144c096b4c07efece77fce89f98e796c8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1255.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1255"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1255')
-Description: \x80 character in windows-1255 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1256.xml b/lib/feedparser/tests/encoding/x80_windows-1256.xml
deleted file mode 100644
index 4b2b6303a31ea2b5ba82da83b8832020a69c7e1c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1256.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1256"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1256')
-Description: \x80 character in windows-1256 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1257.xml b/lib/feedparser/tests/encoding/x80_windows-1257.xml
deleted file mode 100644
index 00e807fad6294d4900674ba692e98692a540b669..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1257.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1257"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1257')
-Description: \x80 character in windows-1257 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows-1258.xml b/lib/feedparser/tests/encoding/x80_windows-1258.xml
deleted file mode 100644
index 7a6d4105fad1af7b251892a6d2975caec27b3a9e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows-1258.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows-1258"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows-1258')
-Description: \x80 character in windows-1258 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1250.xml b/lib/feedparser/tests/encoding/x80_windows_1250.xml
deleted file mode 100644
index 6728513e31713066975d6083d7037219a94952a5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1250.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1250"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1250')
-Description: \x80 character in windows_1250 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1251.xml b/lib/feedparser/tests/encoding/x80_windows_1251.xml
deleted file mode 100644
index 9ea04a6ab692062e06b4310e8d8c3e5ea4f71857..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1251.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1251"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1251')
-Description: \x80 character in windows_1251 encoding
-Expect:      not bozo and feed['title'] == u'\u0402'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1252.xml b/lib/feedparser/tests/encoding/x80_windows_1252.xml
deleted file mode 100644
index 7adeea4b2deda4f348061f8ea3c6d36a42527f9e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1252.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1252"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1252')
-Description: \x80 character in windows_1252 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1253.xml b/lib/feedparser/tests/encoding/x80_windows_1253.xml
deleted file mode 100644
index ab21d9ef74290eec63e8d3c8b8ed7c34efde2d92..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1253.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1253"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1253')
-Description: \x80 character in windows_1253 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1254.xml b/lib/feedparser/tests/encoding/x80_windows_1254.xml
deleted file mode 100644
index a35a78b821472b4c464b984aedaebbd32a87f74a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1254.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1254"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1254')
-Description: \x80 character in windows_1254 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1255.xml b/lib/feedparser/tests/encoding/x80_windows_1255.xml
deleted file mode 100644
index e71a73671649bf6611a63dc6ed4f1262ba853e51..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1255.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1255"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1255')
-Description: \x80 character in windows_1255 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1256.xml b/lib/feedparser/tests/encoding/x80_windows_1256.xml
deleted file mode 100644
index 6f9f98d3d5355b33f03e7e0acd0c358901002d78..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1256.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1256"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1256')
-Description: \x80 character in windows_1256 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1257.xml b/lib/feedparser/tests/encoding/x80_windows_1257.xml
deleted file mode 100644
index 42649b7423e039be34733df49ddfa820131c54f0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1257.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1257"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1257')
-Description: \x80 character in windows_1257 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/encoding/x80_windows_1258.xml b/lib/feedparser/tests/encoding/x80_windows_1258.xml
deleted file mode 100644
index c8bc701e4307e940d7d69c7721c32a2042f7c1fc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/encoding/x80_windows_1258.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="windows_1258"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('windows_1258')
-Description: \x80 character in windows_1258 encoding
-Expect:      not bozo and feed['title'] == u'\u20ac'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title>�</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/160.xml b/lib/feedparser/tests/entities/160.xml
deleted file mode 100644
index a6d0c7fa484d545b82721eaa9ac149af15c6d9ec..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/160.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 160
-Expect:      feed['title'] == u'testing \xa0 entity'
--->
-<rss>
-<channel>
-<title>testing &#160; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/732.xml b/lib/feedparser/tests/entities/732.xml
deleted file mode 100644
index 89edc330b9ae3a9f789f32b1b0e57cd7a6b7a3ae..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/732.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 732
-Expect:      feed['title'] == u'testing \u02dc entity'
--->
-<rss>
-<channel>
-<title>testing &#732; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/8216.xml b/lib/feedparser/tests/entities/8216.xml
deleted file mode 100644
index cb45c0fdc2ef683c0c81087077f36420776f7fa4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/8216.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 8216
-Expect:      feed['title'] == u'testing \u2018 entity'
--->
-<rss>
-<channel>
-<title>testing &#8216; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/8217.xml b/lib/feedparser/tests/entities/8217.xml
deleted file mode 100644
index bb2ebc1d7db1bdd3a2f70d883dda3c26456952d4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/8217.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 8217
-Expect:      feed['title'] == u'testing \u2019 entity'
--->
-<rss>
-<channel>
-<title>testing &#8217; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/8220.xml b/lib/feedparser/tests/entities/8220.xml
deleted file mode 100644
index 1c666fd3036263b3931bb4186872e4cee4eb9f00..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/8220.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 8220
-Expect:      feed['title'] == u'testing \u201c entity'
--->
-<rss>
-<channel>
-<title>testing &#8220; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/8221.xml b/lib/feedparser/tests/entities/8221.xml
deleted file mode 100644
index d433bd00668faaeeed94c66d8928be163cbf7356..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/8221.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 8221
-Expect:      feed['title'] == u'testing \u201d entity'
--->
-<rss>
-<channel>
-<title>testing &#8221; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/9830.xml b/lib/feedparser/tests/entities/9830.xml
deleted file mode 100644
index bac2b7666905e312ca5f03acb6a37edc8947ffd3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/9830.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: 9830
-Expect:      feed['title'] == u'testing \u2666 entity'
--->
-<rss>
-<channel>
-<title>testing &#9830; entity</title>
-</channel>
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/aacute.xml b/lib/feedparser/tests/entities/aacute.xml
deleted file mode 100644
index cbe788e59b7459584f5b33d323d19b5a97359260..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/aacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: aacute
-Expect:      feed['title'] == u'testing \xe1 entity'
--->
-<rss>
-<channel>
-<title>testing &aacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/acirc.xml b/lib/feedparser/tests/entities/acirc.xml
deleted file mode 100644
index 88be77914222029295fb58e988a5ea9a94f6295b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/acirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: acirc
-Expect:      feed['title'] == u'testing \xe2 entity'
--->
-<rss>
-<channel>
-<title>testing &acirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/acute.xml b/lib/feedparser/tests/entities/acute.xml
deleted file mode 100644
index bea2c4959603d3c07bc79d034be84202098a45a2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/acute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: acute
-Expect:      feed['title'] == u'testing \xb4 entity'
--->
-<rss>
-<channel>
-<title>testing &acute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/aelig.xml b/lib/feedparser/tests/entities/aelig.xml
deleted file mode 100644
index a616a1b65d72b52358959ffe1c57fcf0333205f8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/aelig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: aelig
-Expect:      feed['title'] == u'testing \xe6 entity'
--->
-<rss>
-<channel>
-<title>testing &aelig; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/agrave.xml b/lib/feedparser/tests/entities/agrave.xml
deleted file mode 100644
index c9f4d73fc571a5f8e43c9ff2f0a4b8c1181baf3d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/agrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: agrave
-Expect:      feed['title'] == u'testing \xe0 entity'
--->
-<rss>
-<channel>
-<title>testing &agrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/alefsym.xml b/lib/feedparser/tests/entities/alefsym.xml
deleted file mode 100644
index c3d383d9288089e5d797c07c65e8ba33ac964cd5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/alefsym.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: alefsym
-Expect:      feed['title'] == u'testing \u2135 entity'
--->
-<rss>
-<channel>
-<title>testing &alefsym; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/alpha.xml b/lib/feedparser/tests/entities/alpha.xml
deleted file mode 100644
index b4c3aa9a379b3316ffc861a4325aa5bdfd66c875..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/alpha.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: alpha
-Expect:      feed['title'] == u'testing \u03b1 entity'
--->
-<rss>
-<channel>
-<title>testing &alpha; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/and.xml b/lib/feedparser/tests/entities/and.xml
deleted file mode 100644
index 4af0849e9f1f42effa16811f8b250df9139f1257..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/and.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: and
-Expect:      feed['title'] == u'testing \u2227 entity'
--->
-<rss>
-<channel>
-<title>testing &and; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ang.xml b/lib/feedparser/tests/entities/ang.xml
deleted file mode 100644
index cff7694d7272f0d725758188aa73ce3b45553f09..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ang
-Expect:      feed['title'] == u'testing \u2220 entity'
--->
-<rss>
-<channel>
-<title>testing &ang; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/aring.xml b/lib/feedparser/tests/entities/aring.xml
deleted file mode 100644
index d279eea210ad2ec11466fd960bcd6271e6697fff..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/aring.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: aring
-Expect:      feed['title'] == u'testing \xe5 entity'
--->
-<rss>
-<channel>
-<title>testing &aring; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/asymp.xml b/lib/feedparser/tests/entities/asymp.xml
deleted file mode 100644
index 37c5eb2d47563bad5b9aa2c9be3efa555d3840a7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/asymp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: asymp
-Expect:      feed['title'] == u'testing \u2248 entity'
--->
-<rss>
-<channel>
-<title>testing &asymp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/atilde.xml b/lib/feedparser/tests/entities/atilde.xml
deleted file mode 100644
index 2f31e87df9c553e3afd2b289cdcee6a58042e879..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/atilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: atilde
-Expect:      feed['title'] == u'testing \xe3 entity'
--->
-<rss>
-<channel>
-<title>testing &atilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/attr_amp.xml b/lib/feedparser/tests/entities/attr_amp.xml
deleted file mode 100644
index 64b523feb0935dc80ae2b01a371a8028c3e96e79..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/attr_amp.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Resolve &amp; in attributes
-Expect: feed.link == u"http://domain/?a=1&b=2"
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <link rel="alternate" href="http://domain/?a=1&amp;b=2" />
-</feed
diff --git a/lib/feedparser/tests/entities/auml.xml b/lib/feedparser/tests/entities/auml.xml
deleted file mode 100644
index 051c2aded990618b1c03a01c65c6c6db13aa7517..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/auml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: auml
-Expect:      feed['title'] == u'testing \xe4 entity'
--->
-<rss>
-<channel>
-<title>testing &auml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/bdquo.xml b/lib/feedparser/tests/entities/bdquo.xml
deleted file mode 100644
index e126e252232ce0ce7297748417aac45d125cc95c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/bdquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: bdquo
-Expect:      feed['title'] == u'testing \u201e entity'
--->
-<rss>
-<channel>
-<title>testing &bdquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/beta.xml b/lib/feedparser/tests/entities/beta.xml
deleted file mode 100644
index 588ba2d613f525130cc30bde481fc9bc6dffe8c5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/beta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: beta
-Expect:      feed['title'] == u'testing \u03b2 entity'
--->
-<rss>
-<channel>
-<title>testing &beta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/brvbar.xml b/lib/feedparser/tests/entities/brvbar.xml
deleted file mode 100644
index 9a940e430b776a929ca2616f455ec8139bb9308e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/brvbar.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: brvbar
-Expect:      feed['title'] == u'testing \xa6 entity'
--->
-<rss>
-<channel>
-<title>testing &brvbar; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/bull.xml b/lib/feedparser/tests/entities/bull.xml
deleted file mode 100644
index d2d396da019c67bc162c94d62e1842a906657e99..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/bull.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: bull
-Expect:      feed['title'] == u'testing \u2022 entity'
--->
-<rss>
-<channel>
-<title>testing &bull; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/cap.xml b/lib/feedparser/tests/entities/cap.xml
deleted file mode 100644
index f8898e38ce050815a39d89b74ed4ecf391f98af3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/cap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cap
-Expect:      feed['title'] == u'testing \u2229 entity'
--->
-<rss>
-<channel>
-<title>testing &cap; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ccedil.xml b/lib/feedparser/tests/entities/ccedil.xml
deleted file mode 100644
index 9a35ab0c88a6d3aec7c85068ea11e04e623d1023..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ccedil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ccedil
-Expect:      feed['title'] == u'testing \xe7 entity'
--->
-<rss>
-<channel>
-<title>testing &ccedil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/cedil.xml b/lib/feedparser/tests/entities/cedil.xml
deleted file mode 100644
index 9b93fb818b7f976d1fb13daa96c6e6666f6b1fda..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/cedil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cedil
-Expect:      feed['title'] == u'testing \xb8 entity'
--->
-<rss>
-<channel>
-<title>testing &cedil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/cent.xml b/lib/feedparser/tests/entities/cent.xml
deleted file mode 100644
index 431017305bfd7cf21400285488409a9ffa61d0c1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/cent.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cent
-Expect:      feed['title'] == u'testing \xa2 entity'
--->
-<rss>
-<channel>
-<title>testing &cent; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/chi.xml b/lib/feedparser/tests/entities/chi.xml
deleted file mode 100644
index c63d3e556def1d07bf01e4d64c718ea89e18fa47..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/chi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: chi
-Expect:      feed['title'] == u'testing \u03c7 entity'
--->
-<rss>
-<channel>
-<title>testing &chi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/circ.xml b/lib/feedparser/tests/entities/circ.xml
deleted file mode 100644
index 76b6762b3a221605592cf7ec4b55c0a5a244fbe1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/circ.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: circ
-Expect:      feed['title'] == u'testing \u02c6 entity'
--->
-<rss>
-<channel>
-<title>testing &circ; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/clubs.xml b/lib/feedparser/tests/entities/clubs.xml
deleted file mode 100644
index efe1ea34b29820fa50c374d32c03a092b2fdc3fb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/clubs.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: clubs
-Expect:      feed['title'] == u'testing \u2663 entity'
--->
-<rss>
-<channel>
-<title>testing &clubs; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/cong.xml b/lib/feedparser/tests/entities/cong.xml
deleted file mode 100644
index e6dd55c99722074bed3ac074c377c017283c38b8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/cong.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cong
-Expect:      feed['title'] == u'testing \u2245 entity'
--->
-<rss>
-<channel>
-<title>testing &cong; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/copy.xml b/lib/feedparser/tests/entities/copy.xml
deleted file mode 100644
index 7ec6367f6f3ab09a558f692bfa05c1fea037811b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/copy.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: copy
-Expect:      feed['title'] == u'testing \xa9 entity'
--->
-<rss>
-<channel>
-<title>testing &copy; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/crarr.xml b/lib/feedparser/tests/entities/crarr.xml
deleted file mode 100644
index d1ced14d31c6c33741cc7dd9b7bf536c43fb1f06..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/crarr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: crarr
-Expect:      feed['title'] == u'testing \u21b5 entity'
--->
-<rss>
-<channel>
-<title>testing &crarr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/cup.xml b/lib/feedparser/tests/entities/cup.xml
deleted file mode 100644
index d81b582d00ff6e86f9927bea6e1f52cd0cd131b2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/cup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cup
-Expect:      feed['title'] == u'testing \u222a entity'
--->
-<rss>
-<channel>
-<title>testing &cup; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/curren.xml b/lib/feedparser/tests/entities/curren.xml
deleted file mode 100644
index 3aa6b87191d6675c3f2ac1af8b562b12f2c2a6d7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/curren.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: curren
-Expect:      feed['title'] == u'testing \xa4 entity'
--->
-<rss>
-<channel>
-<title>testing &curren; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/dagger.xml b/lib/feedparser/tests/entities/dagger.xml
deleted file mode 100644
index c8360b8db297fcab436a8dfdf4ed8a808023e0b5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/dagger.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: dagger
-Expect:      feed['title'] == u'testing \u2020 entity'
--->
-<rss>
-<channel>
-<title>testing &dagger; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/darr.xml b/lib/feedparser/tests/entities/darr.xml
deleted file mode 100644
index d6ccf87fcf307632c90462137f908de48070fa68..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/darr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: dArr
-Expect:      feed['title'] == u'testing \u21d3 entity'
--->
-<rss>
-<channel>
-<title>testing &dArr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/deg.xml b/lib/feedparser/tests/entities/deg.xml
deleted file mode 100644
index c09fb85898f1784f9b5fe6a7f51d95b681bcbe82..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/deg.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: deg
-Expect:      feed['title'] == u'testing \xb0 entity'
--->
-<rss>
-<channel>
-<title>testing &deg; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/delta.xml b/lib/feedparser/tests/entities/delta.xml
deleted file mode 100644
index a68be93dc2f582e4bda78b5ba26c4274dfd5a49e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/delta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: delta
-Expect:      feed['title'] == u'testing \u03b4 entity'
--->
-<rss>
-<channel>
-<title>testing &delta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/diams.xml b/lib/feedparser/tests/entities/diams.xml
deleted file mode 100644
index f41b8b16d9cadc80693a32d9a473795b70d16da8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/diams.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: diams
-Expect:      feed['title'] == u'testing \u2666 entity'
--->
-<rss>
-<channel>
-<title>testing &diams; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/divide.xml b/lib/feedparser/tests/entities/divide.xml
deleted file mode 100644
index 6d9262373e0c7f71fabb47843f9025823f668c6d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/divide.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: divide
-Expect:      feed['title'] == u'testing \xf7 entity'
--->
-<rss>
-<channel>
-<title>testing &divide; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/doesnotexist.xml b/lib/feedparser/tests/entities/doesnotexist.xml
deleted file mode 100644
index 8712505109fdac0ce0d9771bf3280fff29ff4e99..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/doesnotexist.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: doesnotexist
-Expect:      feed['title'] == u'testing &doesnotexist; entity'
--->
-<rss>
-<channel>
-<title>testing &doesnotexist; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/eacute.xml b/lib/feedparser/tests/entities/eacute.xml
deleted file mode 100644
index ae8f8ece85d8b1fa7c04317c17cbbe0657fed8cd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/eacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: eacute
-Expect:      feed['title'] == u'testing \xe9 entity'
--->
-<rss>
-<channel>
-<title>testing &eacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ecirc.xml b/lib/feedparser/tests/entities/ecirc.xml
deleted file mode 100644
index b03136f7d458268802580eba211ad66940fa7d67..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ecirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ecirc
-Expect:      feed['title'] == u'testing \xea entity'
--->
-<rss>
-<channel>
-<title>testing &ecirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/egrave.xml b/lib/feedparser/tests/entities/egrave.xml
deleted file mode 100644
index 38bbe154881660b37e5964835ad761c7f5314c53..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/egrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: egrave
-Expect:      feed['title'] == u'testing \xe8 entity'
--->
-<rss>
-<channel>
-<title>testing &egrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/empty.xml b/lib/feedparser/tests/entities/empty.xml
deleted file mode 100644
index e59e94de6d6e7152fa3fa556b71d7ddee9544657..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/empty.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: empty
-Expect:      feed['title'] == u'testing \u2205 entity'
--->
-<rss>
-<channel>
-<title>testing &empty; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/emsp.xml b/lib/feedparser/tests/entities/emsp.xml
deleted file mode 100644
index 29fe31f575957a971ebe096fb797e5ae9ff376bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/emsp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: emsp
-Expect:      feed['title'] == u'testing \u2003 entity'
--->
-<rss>
-<channel>
-<title>testing &emsp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ensp.xml b/lib/feedparser/tests/entities/ensp.xml
deleted file mode 100644
index dcaddd14f6910dbb4c84f47f6d27f0217373a556..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ensp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ensp
-Expect:      feed['title'] == u'testing \u2002 entity'
--->
-<rss>
-<channel>
-<title>testing &ensp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/epsilon.xml b/lib/feedparser/tests/entities/epsilon.xml
deleted file mode 100644
index b053ec5c9a8b2295b46832ff77a18f4c5d7fd78c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/epsilon.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: epsilon
-Expect:      feed['title'] == u'testing \u03b5 entity'
--->
-<rss>
-<channel>
-<title>testing &epsilon; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/equiv.xml b/lib/feedparser/tests/entities/equiv.xml
deleted file mode 100644
index c63fe40cb0236bfae8d2df247f2de0582f205744..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/equiv.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: equiv
-Expect:      feed['title'] == u'testing \u2261 entity'
--->
-<rss>
-<channel>
-<title>testing &equiv; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/eta.xml b/lib/feedparser/tests/entities/eta.xml
deleted file mode 100644
index e2692d50ad49af1f473851a1d966fa1302a3707b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/eta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: eta
-Expect:      feed['title'] == u'testing \u03b7 entity'
--->
-<rss>
-<channel>
-<title>testing &eta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/eth.xml b/lib/feedparser/tests/entities/eth.xml
deleted file mode 100644
index 056d4c0c933f808c9e2cf7ba54f609efca9608da..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/eth.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: eth
-Expect:      feed['title'] == u'testing \xf0 entity'
--->
-<rss>
-<channel>
-<title>testing &eth; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/euml.xml b/lib/feedparser/tests/entities/euml.xml
deleted file mode 100644
index e3f5640723084e7e2a6564ab4b2ed330d1fbfe2c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/euml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: euml
-Expect:      feed['title'] == u'testing \xeb entity'
--->
-<rss>
-<channel>
-<title>testing &euml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/euro.xml b/lib/feedparser/tests/entities/euro.xml
deleted file mode 100644
index 77a782da9eb0f6b9428d66db7ef800b6b4f440c6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/euro.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: euro
-Expect:      feed['title'] == u'testing \u20ac entity'
--->
-<rss>
-<channel>
-<title>testing &euro; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/exist.xml b/lib/feedparser/tests/entities/exist.xml
deleted file mode 100644
index 7332cdd45716108604892365cf7ee8ce578b2eeb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/exist.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: exist
-Expect:      feed['title'] == u'testing \u2203 entity'
--->
-<rss>
-<channel>
-<title>testing &exist; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/fnof.xml b/lib/feedparser/tests/entities/fnof.xml
deleted file mode 100644
index c50f39242b60ee3d03f9c990f1743073ec6ef456..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/fnof.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: fnof
-Expect:      feed['title'] == u'testing \u0192 entity'
--->
-<rss>
-<channel>
-<title>testing &fnof; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/forall.xml b/lib/feedparser/tests/entities/forall.xml
deleted file mode 100644
index e939eca16f7366e58f8228f56e7bbe2fa759fe80..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/forall.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: forall
-Expect:      feed['title'] == u'testing \u2200 entity'
--->
-<rss>
-<channel>
-<title>testing &forall; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/frac12.xml b/lib/feedparser/tests/entities/frac12.xml
deleted file mode 100644
index 1d567cb92a99c5d369f60d7c200aa11d5c27ad21..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/frac12.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: frac12
-Expect:      feed['title'] == u'testing \xbd entity'
--->
-<rss>
-<channel>
-<title>testing &frac12; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/frac14.xml b/lib/feedparser/tests/entities/frac14.xml
deleted file mode 100644
index 7d99994eca6161cdd3a5af486eded108ea5c4b99..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/frac14.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: frac14
-Expect:      feed['title'] == u'testing \xbc entity'
--->
-<rss>
-<channel>
-<title>testing &frac14; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/frac34.xml b/lib/feedparser/tests/entities/frac34.xml
deleted file mode 100644
index c106acc98183395f3492b36610bb6dee9943cb35..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/frac34.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: frac34
-Expect:      feed['title'] == u'testing \xbe entity'
--->
-<rss>
-<channel>
-<title>testing &frac34; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/frasl.xml b/lib/feedparser/tests/entities/frasl.xml
deleted file mode 100644
index e0af9ea50fc50a54b35fff8265da0ae6b0f39868..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/frasl.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: frasl
-Expect:      feed['title'] == u'testing \u2044 entity'
--->
-<rss>
-<channel>
-<title>testing &frasl; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/gamma.xml b/lib/feedparser/tests/entities/gamma.xml
deleted file mode 100644
index f75e253a5d773d455fe0f4cbb28092d9a1ccb0be..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/gamma.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: gamma
-Expect:      feed['title'] == u'testing \u03b3 entity'
--->
-<rss>
-<channel>
-<title>testing &gamma; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ge.xml b/lib/feedparser/tests/entities/ge.xml
deleted file mode 100644
index 662d99db487be96701435af5bcaf4ed1f2d88c76..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ge.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ge
-Expect:      feed['title'] == u'testing \u2265 entity'
--->
-<rss>
-<channel>
-<title>testing &ge; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/hArr.xml b/lib/feedparser/tests/entities/hArr.xml
deleted file mode 100644
index 0d600f34aa4d4293db8b8865e29874c9f37379eb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/hArr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: harr
-Expect:      feed['title'] == u'testing \u2194 entity'
--->
-<rss>
-<channel>
-<title>testing &harr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/hearts.xml b/lib/feedparser/tests/entities/hearts.xml
deleted file mode 100644
index b46f1920d70ec9cbe5541b78a693367ac5261f90..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/hearts.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: hearts
-Expect:      feed['title'] == u'testing \u2665 entity'
--->
-<rss>
-<channel>
-<title>testing &hearts; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/hellip.xml b/lib/feedparser/tests/entities/hellip.xml
deleted file mode 100644
index 0cc416e9c9a152a679b8ce4b8eb1a9e64a31a6f2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/hellip.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: hellip
-Expect:      feed['title'] == u'testing \u2026 entity'
--->
-<rss>
-<channel>
-<title>testing &hellip; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/hex_entity_x_lowercase.xml b/lib/feedparser/tests/entities/hex_entity_x_lowercase.xml
deleted file mode 100644
index 1811573930b604ad2314fc856055ee3a79a84fc0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/hex_entity_x_lowercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: test that lowercase x in &#x41 translates to 'A'
-Expect:      entries[0]['title'] == u'A'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml">&#x41;</title>
-</entry>
-</feed
diff --git a/lib/feedparser/tests/entities/hex_entity_x_uppercase.xml b/lib/feedparser/tests/entities/hex_entity_x_uppercase.xml
deleted file mode 100644
index c25fda59bf0f6406a142741f87b2619df5534cdc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/hex_entity_x_uppercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: test that lowercase x in &#x41 translates to 'A'
-Expect:      entries[0]['title'] == u'A'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml">&#X41;</title>
-</entry>
-</feed
diff --git a/lib/feedparser/tests/entities/iacute.xml b/lib/feedparser/tests/entities/iacute.xml
deleted file mode 100644
index 4150b7db148c526a328257692b98c9700694925d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/iacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iacute
-Expect:      feed['title'] == u'testing \xed entity'
--->
-<rss>
-<channel>
-<title>testing &iacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/icirc.xml b/lib/feedparser/tests/entities/icirc.xml
deleted file mode 100644
index 42de099af339f9cc358a6bcd962c8b278c82e214..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/icirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: icirc
-Expect:      feed['title'] == u'testing \xee entity'
--->
-<rss>
-<channel>
-<title>testing &icirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/iexcl.xml b/lib/feedparser/tests/entities/iexcl.xml
deleted file mode 100644
index e8eb65637ee5567a24db781c52276b6809e2292d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/iexcl.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iexcl
-Expect:      feed['title'] == u'testing \xa1 entity'
--->
-<rss>
-<channel>
-<title>testing &iexcl; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/igrave.xml b/lib/feedparser/tests/entities/igrave.xml
deleted file mode 100644
index 788cf5a8fe55ecc2ad4e645bea1620e19c0b09ba..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/igrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: igrave
-Expect:      feed['title'] == u'testing \xec entity'
--->
-<rss>
-<channel>
-<title>testing &igrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/image.xml b/lib/feedparser/tests/entities/image.xml
deleted file mode 100644
index a49bb6ec741ab168d32b93c0eca11d7771a76369..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/image.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: image
-Expect:      feed['title'] == u'testing \u2111 entity'
--->
-<rss>
-<channel>
-<title>testing &image; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/infin.xml b/lib/feedparser/tests/entities/infin.xml
deleted file mode 100644
index 37e2cce3c499e25ceb9f454230bdaf976985b382..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/infin.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: infin
-Expect:      feed['title'] == u'testing \u221e entity'
--->
-<rss>
-<channel>
-<title>testing &infin; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/int.xml b/lib/feedparser/tests/entities/int.xml
deleted file mode 100644
index f84f9645ab1af4be8ac63cf33f70723131b0e2dd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/int.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: int
-Expect:      feed['title'] == u'testing \u222b entity'
--->
-<rss>
-<channel>
-<title>testing &int; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/iota.xml b/lib/feedparser/tests/entities/iota.xml
deleted file mode 100644
index 38e239668f30d3254b992156b43865cac5e55ae9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/iota.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iota
-Expect:      feed['title'] == u'testing \u03b9 entity'
--->
-<rss>
-<channel>
-<title>testing &iota; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/iquest.xml b/lib/feedparser/tests/entities/iquest.xml
deleted file mode 100644
index f73b3f735fa0b72f4701dc848a31964ab03a51e3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/iquest.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iquest
-Expect:      feed['title'] == u'testing \xbf entity'
--->
-<rss>
-<channel>
-<title>testing &iquest; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/isin.xml b/lib/feedparser/tests/entities/isin.xml
deleted file mode 100644
index 2ef0469b70ca3ce50def30974a367d7bca85e168..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/isin.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: isin
-Expect:      feed['title'] == u'testing \u2208 entity'
--->
-<rss>
-<channel>
-<title>testing &isin; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/iuml.xml b/lib/feedparser/tests/entities/iuml.xml
deleted file mode 100644
index ca69817c60ecb28cae71bdc7e5b7547feb24e616..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/iuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iuml
-Expect:      feed['title'] == u'testing \xef entity'
--->
-<rss>
-<channel>
-<title>testing &iuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/kappa.xml b/lib/feedparser/tests/entities/kappa.xml
deleted file mode 100644
index 2ab0736b22698d262c48f849dce6e961b56adde4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/kappa.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: kappa
-Expect:      feed['title'] == u'testing \u03ba entity'
--->
-<rss>
-<channel>
-<title>testing &kappa; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lArr.xml b/lib/feedparser/tests/entities/lArr.xml
deleted file mode 100644
index 156f8e91b8d2475d559f512c8cd8cc1db258f866..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/lArr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: larr
-Expect:      feed['title'] == u'testing \u2190 entity'
--->
-<rss>
-<channel>
-<title>testing &larr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lambda.xml b/lib/feedparser/tests/entities/lambda.xml
deleted file mode 100644
index 8910ed30559e9165a1627d4a6424cffdb346d11b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/lambda.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lambda
-Expect:      feed['title'] == u'testing \u03bb entity'
--->
-<rss>
-<channel>
-<title>testing &lambda; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lang.xml b/lib/feedparser/tests/entities/lang.xml
deleted file mode 100644
index db4e4e9f205ef5dbb7de9b4d731ce24ebd221467..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/lang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lang
-Expect:      feed['title'] == u'testing \u2329 entity'
--->
-<rss>
-<channel>
-<title>testing &lang; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/laquo.xml b/lib/feedparser/tests/entities/laquo.xml
deleted file mode 100644
index 79537ca0ccff6d2f3fb8c705af4c3cdc8fbfac99..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/laquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: laquo
-Expect:      feed['title'] == u'testing \xab entity'
--->
-<rss>
-<channel>
-<title>testing &laquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lceil.xml b/lib/feedparser/tests/entities/lceil.xml
deleted file mode 100644
index eef0da64178e839aa308e64cbf9e8c823b207c6c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/lceil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lceil
-Expect:      feed['title'] == u'testing \u2308 entity'
--->
-<rss>
-<channel>
-<title>testing &lceil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ldquo.xml b/lib/feedparser/tests/entities/ldquo.xml
deleted file mode 100644
index 791e48919bb6dce2830e7b1daf1baddc879a4060..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ldquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ldquo
-Expect:      feed['title'] == u'testing \u201c entity'
--->
-<rss>
-<channel>
-<title>testing &ldquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/le.xml b/lib/feedparser/tests/entities/le.xml
deleted file mode 100644
index f25859512d42d2f10908a2c1b8db5ccec2002ba9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/le.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: le
-Expect:      feed['title'] == u'testing \u2264 entity'
--->
-<rss>
-<channel>
-<title>testing &le; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lfloor.xml b/lib/feedparser/tests/entities/lfloor.xml
deleted file mode 100644
index 50d5a226a40b87a0144d551d1b10074654ea4f85..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/lfloor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lfloor
-Expect:      feed['title'] == u'testing \u230a entity'
--->
-<rss>
-<channel>
-<title>testing &lfloor; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lowast.xml b/lib/feedparser/tests/entities/lowast.xml
deleted file mode 100644
index 008218044fe6cc05712b68ebdbe5f677f6cf4b7c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/lowast.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lowast
-Expect:      feed['title'] == u'testing \u2217 entity'
--->
-<rss>
-<channel>
-<title>testing &lowast; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/loz.xml b/lib/feedparser/tests/entities/loz.xml
deleted file mode 100644
index 29ffb0690e64c96198e6dd6cbc7def0187e72883..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/loz.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: loz
-Expect:      feed['title'] == u'testing \u25ca entity'
--->
-<rss>
-<channel>
-<title>testing &loz; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lrm.xml b/lib/feedparser/tests/entities/lrm.xml
deleted file mode 100644
index d672bc3146e908ad76c25e88b18955967d047d02..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/lrm.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lrm
-Expect:      feed['title'] == u'testing \u200e entity'
--->
-<rss>
-<channel>
-<title>testing &lrm; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lsaquo.xml b/lib/feedparser/tests/entities/lsaquo.xml
deleted file mode 100644
index 2faa2ed597064642ebc35a26bc62692589566bd3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/lsaquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lsaquo
-Expect:      feed['title'] == u'testing \u2039 entity'
--->
-<rss>
-<channel>
-<title>testing &lsaquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/lsquo.xml b/lib/feedparser/tests/entities/lsquo.xml
deleted file mode 100644
index 2297817bfa66b3c209b93f84346433e55703a151..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/lsquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: lsquo
-Expect:      feed['title'] == u'testing \u2018 entity'
--->
-<rss>
-<channel>
-<title>testing &lsquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/macr.xml b/lib/feedparser/tests/entities/macr.xml
deleted file mode 100644
index 4699e32dccde530cc16d9e23fd48a59e56c8a49e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/macr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: macr
-Expect:      feed['title'] == u'testing \xaf entity'
--->
-<rss>
-<channel>
-<title>testing &macr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/mdash.xml b/lib/feedparser/tests/entities/mdash.xml
deleted file mode 100644
index e2f8503afefc27a5719b2c3ddf94b3a96144388e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/mdash.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: mdash
-Expect:      feed['title'] == u'testing \u2014 entity'
--->
-<rss>
-<channel>
-<title>testing &mdash; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/micro.xml b/lib/feedparser/tests/entities/micro.xml
deleted file mode 100644
index 5feecd06924b6b9eee7f8f5df8ecef97c14ce3a0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/micro.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: micro
-Expect:      feed['title'] == u'testing \xb5 entity'
--->
-<rss>
-<channel>
-<title>testing &micro; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/middot.xml b/lib/feedparser/tests/entities/middot.xml
deleted file mode 100644
index c436115f953bf5978b0fae7e6875297a0e2ce922..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/middot.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: middot
-Expect:      feed['title'] == u'testing \xb7 entity'
--->
-<rss>
-<channel>
-<title>testing &middot; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/minus.xml b/lib/feedparser/tests/entities/minus.xml
deleted file mode 100644
index 08baeac43380d7a9279b4b641ae0699ba4e23214..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/minus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: minus
-Expect:      feed['title'] == u'testing \u2212 entity'
--->
-<rss>
-<channel>
-<title>testing &minus; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/mu.xml b/lib/feedparser/tests/entities/mu.xml
deleted file mode 100644
index 81eb6fa89d7854becb40becff6fa03815c0c8ba3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/mu.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: mu
-Expect:      feed['title'] == u'testing \u03bc entity'
--->
-<rss>
-<channel>
-<title>testing &mu; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/nabla.xml b/lib/feedparser/tests/entities/nabla.xml
deleted file mode 100644
index 770ce74a7ff0c5521266e392c45a41fb2eaa038d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/nabla.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: nabla
-Expect:      feed['title'] == u'testing \u2207 entity'
--->
-<rss>
-<channel>
-<title>testing &nabla; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/nbsp.xml b/lib/feedparser/tests/entities/nbsp.xml
deleted file mode 100644
index e61d94f510eb06e9b891657a2e9b349a8e556d5e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/nbsp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: nbsp
-Expect:      feed['title'] == u'testing \xa0 entity'
--->
-<rss>
-<channel>
-<title>testing &nbsp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ndash.xml b/lib/feedparser/tests/entities/ndash.xml
deleted file mode 100644
index 801b4e7e4b2f4b24bc5553ad4680daa9e2d72b27..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ndash.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ndash
-Expect:      feed['title'] == u'testing \u2013 entity'
--->
-<rss>
-<channel>
-<title>testing &ndash; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ne.xml b/lib/feedparser/tests/entities/ne.xml
deleted file mode 100644
index 911a7f1650d704f065d8d88639eecb4627b93b8c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ne.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ne
-Expect:      feed['title'] == u'testing \u2260 entity'
--->
-<rss>
-<channel>
-<title>testing &ne; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ni.xml b/lib/feedparser/tests/entities/ni.xml
deleted file mode 100644
index 5022ec68a9c5307d6666c14605df72fafcfa6ca3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ni.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ni
-Expect:      feed['title'] == u'testing \u220b entity'
--->
-<rss>
-<channel>
-<title>testing &ni; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/not.xml b/lib/feedparser/tests/entities/not.xml
deleted file mode 100644
index 0179bb8cf62b37c3a8188b835006fcffeb064a81..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/not.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: not
-Expect:      feed['title'] == u'testing \xac entity'
--->
-<rss>
-<channel>
-<title>testing &not; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/notin.xml b/lib/feedparser/tests/entities/notin.xml
deleted file mode 100644
index 3c8f1f483f658edcd91be8a4657df2657ff5e640..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/notin.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: notin
-Expect:      feed['title'] == u'testing \u2209 entity'
--->
-<rss>
-<channel>
-<title>testing &notin; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/nsub.xml b/lib/feedparser/tests/entities/nsub.xml
deleted file mode 100644
index a9f4aca5eaa6c9b6ba33054482f4074e90189e39..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/nsub.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: nsub
-Expect:      feed['title'] == u'testing \u2284 entity'
--->
-<rss>
-<channel>
-<title>testing &nsub; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ntilde.xml b/lib/feedparser/tests/entities/ntilde.xml
deleted file mode 100644
index 0160c98e70de4c1792e0698ff4bbd33a7b49bd74..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ntilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ntilde
-Expect:      feed['title'] == u'testing \xf1 entity'
--->
-<rss>
-<channel>
-<title>testing &ntilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/nu.xml b/lib/feedparser/tests/entities/nu.xml
deleted file mode 100644
index e9b99ef65746ee65672286673dc1df21411d4891..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/nu.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: nu
-Expect:      feed['title'] == u'testing \u03bd entity'
--->
-<rss>
-<channel>
-<title>testing &nu; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/oacute.xml b/lib/feedparser/tests/entities/oacute.xml
deleted file mode 100644
index 7e7ad9592cc0e4967528898b0eff789a8ed97889..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/oacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: oacute
-Expect:      feed['title'] == u'testing \xf3 entity'
--->
-<rss>
-<channel>
-<title>testing &oacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ocirc.xml b/lib/feedparser/tests/entities/ocirc.xml
deleted file mode 100644
index 561279ceebc249441b97aac369b359519828ab45..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ocirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ocirc
-Expect:      feed['title'] == u'testing \xf4 entity'
--->
-<rss>
-<channel>
-<title>testing &ocirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/oelig.xml b/lib/feedparser/tests/entities/oelig.xml
deleted file mode 100644
index 54322396a0d8521f4387d4be1bb81836a20e576c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/oelig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: oelig
-Expect:      feed['title'] == u'testing \u0153 entity'
--->
-<rss>
-<channel>
-<title>testing &oelig; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ograve.xml b/lib/feedparser/tests/entities/ograve.xml
deleted file mode 100644
index 44dbaf5b6cdaee9e2a84e892969c08206db5a9d8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ograve.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ograve
-Expect:      feed['title'] == u'testing \xf2 entity'
--->
-<rss>
-<channel>
-<title>testing &ograve; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/oline.xml b/lib/feedparser/tests/entities/oline.xml
deleted file mode 100644
index 193b139ecd32b974c9def980ba43ac340608495f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/oline.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: oline
-Expect:      feed['title'] == u'testing \u203e entity'
--->
-<rss>
-<channel>
-<title>testing &oline; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/omega.xml b/lib/feedparser/tests/entities/omega.xml
deleted file mode 100644
index 614ad7e7903810f0314578984f0fe3f963e1ccd8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/omega.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: omega
-Expect:      feed['title'] == u'testing \u03c9 entity'
--->
-<rss>
-<channel>
-<title>testing &omega; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/omicron.xml b/lib/feedparser/tests/entities/omicron.xml
deleted file mode 100644
index 5c23feb59b36e4618189f125b9d149852638bed0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/omicron.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: omicron
-Expect:      feed['title'] == u'testing \u03bf entity'
--->
-<rss>
-<channel>
-<title>testing &omicron; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/oplus.xml b/lib/feedparser/tests/entities/oplus.xml
deleted file mode 100644
index 374d1596c2baa5640eda0b7f2c312436bceb0784..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/oplus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: oplus
-Expect:      feed['title'] == u'testing \u2295 entity'
--->
-<rss>
-<channel>
-<title>testing &oplus; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/or.xml b/lib/feedparser/tests/entities/or.xml
deleted file mode 100644
index 8499a33aff7c416bcdd9053836e00ae8ed5920e2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/or.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: or
-Expect:      feed['title'] == u'testing \u2228 entity'
--->
-<rss>
-<channel>
-<title>testing &or; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ordf.xml b/lib/feedparser/tests/entities/ordf.xml
deleted file mode 100644
index 13faf67b93c2f86c5302ed9b31b1b363cd8db58e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ordf.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ordf
-Expect:      feed['title'] == u'testing \xaa entity'
--->
-<rss>
-<channel>
-<title>testing &ordf; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ordm.xml b/lib/feedparser/tests/entities/ordm.xml
deleted file mode 100644
index da47c1e4a32bfdf67b7a59bc28f2148cbe341fa1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ordm.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ordm
-Expect:      feed['title'] == u'testing \xba entity'
--->
-<rss>
-<channel>
-<title>testing &ordm; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/oslash.xml b/lib/feedparser/tests/entities/oslash.xml
deleted file mode 100644
index 50e6c86b7e29188081c74cdf0d6f613cf245dfdb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/oslash.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: oslash
-Expect:      feed['title'] == u'testing \xf8 entity'
--->
-<rss>
-<channel>
-<title>testing &oslash; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/otilde.xml b/lib/feedparser/tests/entities/otilde.xml
deleted file mode 100644
index e5636bfef62f5820b101b4a0f90dd7d156ba0985..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/otilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: otilde
-Expect:      feed['title'] == u'testing \xf5 entity'
--->
-<rss>
-<channel>
-<title>testing &otilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/otimes.xml b/lib/feedparser/tests/entities/otimes.xml
deleted file mode 100644
index 4f89df3ab3a85aa0cb9950c0a7473eb349b388a5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/otimes.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: otimes
-Expect:      feed['title'] == u'testing \u2297 entity'
--->
-<rss>
-<channel>
-<title>testing &otimes; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ouml.xml b/lib/feedparser/tests/entities/ouml.xml
deleted file mode 100644
index cc6f868de1dd7f9ed15825db8fed3c759be5b85c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ouml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ouml
-Expect:      feed['title'] == u'testing \xf6 entity'
--->
-<rss>
-<channel>
-<title>testing &ouml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/para.xml b/lib/feedparser/tests/entities/para.xml
deleted file mode 100644
index 6d86c990fc09991fb8574b8961bfab3b800eb4f1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/para.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: para
-Expect:      feed['title'] == u'testing \xb6 entity'
--->
-<rss>
-<channel>
-<title>testing &para; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/part.xml b/lib/feedparser/tests/entities/part.xml
deleted file mode 100644
index a60559cf50450702d52077df2e353c0ef3b77e21..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/part.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: part
-Expect:      feed['title'] == u'testing \u2202 entity'
--->
-<rss>
-<channel>
-<title>testing &part; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/permil.xml b/lib/feedparser/tests/entities/permil.xml
deleted file mode 100644
index 9d142215786b98076e1349df190faa2e24d8a5c2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/permil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: permil
-Expect:      feed['title'] == u'testing \u2030 entity'
--->
-<rss>
-<channel>
-<title>testing &permil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/perp.xml b/lib/feedparser/tests/entities/perp.xml
deleted file mode 100644
index a2a28141f0c1fc91f2f6b02faf4105ef7d42877a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/perp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: perp
-Expect:      feed['title'] == u'testing \u22a5 entity'
--->
-<rss>
-<channel>
-<title>testing &perp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/phi.xml b/lib/feedparser/tests/entities/phi.xml
deleted file mode 100644
index 815a262d20a7fa7c211bbd3ecf489f1ef26b8ad4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/phi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: phi
-Expect:      feed['title'] == u'testing \u03c6 entity'
--->
-<rss>
-<channel>
-<title>testing &phi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/pi.xml b/lib/feedparser/tests/entities/pi.xml
deleted file mode 100644
index c20d3ed25efbc8157943ef6e1030538f16437f32..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/pi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: pi
-Expect:      feed['title'] == u'testing \u03c0 entity'
--->
-<rss>
-<channel>
-<title>testing &pi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/piv.xml b/lib/feedparser/tests/entities/piv.xml
deleted file mode 100644
index 31560b543ae8cb2f0abfb18246c035aa20bed46c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/piv.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: piv
-Expect:      feed['title'] == u'testing \u03d6 entity'
--->
-<rss>
-<channel>
-<title>testing &piv; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/plusmn.xml b/lib/feedparser/tests/entities/plusmn.xml
deleted file mode 100644
index 77f181ae7f8428acdc1b70556a22e2d6af064831..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/plusmn.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: plusmn
-Expect:      feed['title'] == u'testing \xb1 entity'
--->
-<rss>
-<channel>
-<title>testing &plusmn; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/pound.xml b/lib/feedparser/tests/entities/pound.xml
deleted file mode 100644
index 8f58936fae9f9316c6a4db0f96aeb2aef22affc9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/pound.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: pound
-Expect:      feed['title'] == u'testing \xa3 entity'
--->
-<rss>
-<channel>
-<title>testing &pound; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/prime.xml b/lib/feedparser/tests/entities/prime.xml
deleted file mode 100644
index 56f95ee34e05efd1827edea022fe25529d7e40c4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/prime.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: prime
-Expect:      feed['title'] == u'testing \u2032 entity'
--->
-<rss>
-<channel>
-<title>testing &prime; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/prod.xml b/lib/feedparser/tests/entities/prod.xml
deleted file mode 100644
index 540e9350a758bcfd2952663aadfb642bc72b2461..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/prod.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: prod
-Expect:      feed['title'] == u'testing \u220f entity'
--->
-<rss>
-<channel>
-<title>testing &prod; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/prop.xml b/lib/feedparser/tests/entities/prop.xml
deleted file mode 100644
index 3996b342561a8cdab0c8d89270903cd400e46745..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/prop.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: prop
-Expect:      feed['title'] == u'testing \u221d entity'
--->
-<rss>
-<channel>
-<title>testing &prop; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/psi.xml b/lib/feedparser/tests/entities/psi.xml
deleted file mode 100644
index 104d58515b81d8d54563999e6449226f6e6735ff..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/psi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: psi
-Expect:      feed['title'] == u'testing \u03c8 entity'
--->
-<rss>
-<channel>
-<title>testing &psi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/query_variable_entry.xml b/lib/feedparser/tests/entities/query_variable_entry.xml
deleted file mode 100644
index 565c3d905aa067aa92b8307d43aaf2f69df807de..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/query_variable_entry.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: unescaped ampersand in URL query variable doesn't affect entry URL
-Expect: entries[0].link == u'http://example/?a=1&b=2&c'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://example/?a=1&b=2&c</link>
-</item>
-</channel>
-</rss
diff --git a/lib/feedparser/tests/entities/query_variable_feed.xml b/lib/feedparser/tests/entities/query_variable_feed.xml
deleted file mode 100644
index 014f070b776367aa9d0bc5c7d736b305cf32cfd5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/query_variable_feed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: unescaped ampersand in URL query variable doesn't affect feed URL
-Expect: feed.link == u'http://example/?a=1&b=2&c'
--->
-<rss version="2.0">
-<channel>
-<link>http://example/?a=1&b=2&c</link>
-</channel>
-</rss
diff --git a/lib/feedparser/tests/entities/radic.xml b/lib/feedparser/tests/entities/radic.xml
deleted file mode 100644
index e9da90e06f5b0a26fb11a2580c2a581ab967346d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/radic.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: radic
-Expect:      feed['title'] == u'testing \u221a entity'
--->
-<rss>
-<channel>
-<title>testing &radic; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rang.xml b/lib/feedparser/tests/entities/rang.xml
deleted file mode 100644
index 19be10430d30e2945efc69976c1815e94d91d5c7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/rang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rang
-Expect:      feed['title'] == u'testing \u232a entity'
--->
-<rss>
-<channel>
-<title>testing &rang; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/raquo.xml b/lib/feedparser/tests/entities/raquo.xml
deleted file mode 100644
index 60dec82dd3847ea2ae8a063805ecaa42fc63e570..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/raquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: raquo
-Expect:      feed['title'] == u'testing \xbb entity'
--->
-<rss>
-<channel>
-<title>testing &raquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rarr.xml b/lib/feedparser/tests/entities/rarr.xml
deleted file mode 100644
index 95c8403bd4cd5190f467404d45a22c118bbfde58..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/rarr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rArr
-Expect:      feed['title'] == u'testing \u21d2 entity'
--->
-<rss>
-<channel>
-<title>testing &rArr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rceil.xml b/lib/feedparser/tests/entities/rceil.xml
deleted file mode 100644
index 6059028b6257b39d6c3c1159bd76ace2acabd9f2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/rceil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rceil
-Expect:      feed['title'] == u'testing \u2309 entity'
--->
-<rss>
-<channel>
-<title>testing &rceil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rdquo.xml b/lib/feedparser/tests/entities/rdquo.xml
deleted file mode 100644
index 05c2b2dd4c3b119195f53b7e181365630b5be1d7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/rdquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rdquo
-Expect:      feed['title'] == u'testing \u201d entity'
--->
-<rss>
-<channel>
-<title>testing &rdquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/real.xml b/lib/feedparser/tests/entities/real.xml
deleted file mode 100644
index da61fb9b44ddb3ba573102ce0639adc9f90bc40b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/real.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: real
-Expect:      feed['title'] == u'testing \u211c entity'
--->
-<rss>
-<channel>
-<title>testing &real; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/reg.xml b/lib/feedparser/tests/entities/reg.xml
deleted file mode 100644
index 5c4ab1d81029e6238b5972ae4bd7982352e1c901..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/reg.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: reg
-Expect:      feed['title'] == u'testing \xae entity'
--->
-<rss>
-<channel>
-<title>testing &reg; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rfloor.xml b/lib/feedparser/tests/entities/rfloor.xml
deleted file mode 100644
index 2cbfe724e978a8a716dfb819de28ab8c3714005a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/rfloor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rfloor
-Expect:      feed['title'] == u'testing \u230b entity'
--->
-<rss>
-<channel>
-<title>testing &rfloor; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rho.xml b/lib/feedparser/tests/entities/rho.xml
deleted file mode 100644
index 9593cf3d6efa57c0c353f41978f802024c55cc94..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/rho.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rho
-Expect:      feed['title'] == u'testing \u03c1 entity'
--->
-<rss>
-<channel>
-<title>testing &rho; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rlm.xml b/lib/feedparser/tests/entities/rlm.xml
deleted file mode 100644
index 39607338fdc4acf0ceaeea5a896af427daf6b938..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/rlm.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rlm
-Expect:      feed['title'] == u'testing \u200f entity'
--->
-<rss>
-<channel>
-<title>testing &rlm; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rsaquo.xml b/lib/feedparser/tests/entities/rsaquo.xml
deleted file mode 100644
index da3fe76443ad94dc8c29bbfa79f08de66520b1af..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/rsaquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rsaquo
-Expect:      feed['title'] == u'testing \u203a entity'
--->
-<rss>
-<channel>
-<title>testing &rsaquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/rsquo.xml b/lib/feedparser/tests/entities/rsquo.xml
deleted file mode 100644
index a24bc0b37dd334d2a8e80cf07dd741caa437cea6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/rsquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rsquo
-Expect:      feed['title'] == u'testing \u2019 entity'
--->
-<rss>
-<channel>
-<title>testing &rsquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sbquo.xml b/lib/feedparser/tests/entities/sbquo.xml
deleted file mode 100644
index 65d011c9c6bf2e9991e9e18cff60fc9375bbfa11..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sbquo.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sbquo
-Expect:      feed['title'] == u'testing \u201a entity'
--->
-<rss>
-<channel>
-<title>testing &sbquo; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/scaron.xml b/lib/feedparser/tests/entities/scaron.xml
deleted file mode 100644
index 5b0a075ea2bf0bc47b9543c8606f95f40ea8a694..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/scaron.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: scaron
-Expect:      feed['title'] == u'testing \u0161 entity'
--->
-<rss>
-<channel>
-<title>testing &scaron; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sdot.xml b/lib/feedparser/tests/entities/sdot.xml
deleted file mode 100644
index 580263b5a655e90de3f88fd0e48b73e29f2259a9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sdot.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sdot
-Expect:      feed['title'] == u'testing \u22c5 entity'
--->
-<rss>
-<channel>
-<title>testing &sdot; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sect.xml b/lib/feedparser/tests/entities/sect.xml
deleted file mode 100644
index 90d72799c0b4db08f70512f5ff98d83362c1da33..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sect.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sect
-Expect:      feed['title'] == u'testing \xa7 entity'
--->
-<rss>
-<channel>
-<title>testing &sect; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/shy.xml b/lib/feedparser/tests/entities/shy.xml
deleted file mode 100644
index e0257093e1da1e18edb30a9714a4c7f2fb2e700a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/shy.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: shy
-Expect:      feed['title'] == u'testing \xad entity'
--->
-<rss>
-<channel>
-<title>testing &shy; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sigma.xml b/lib/feedparser/tests/entities/sigma.xml
deleted file mode 100644
index 3d080ba128d571e52defb3716346c48665d47e38..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sigma.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sigma
-Expect:      feed['title'] == u'testing \u03c3 entity'
--->
-<rss>
-<channel>
-<title>testing &sigma; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sigmaf.xml b/lib/feedparser/tests/entities/sigmaf.xml
deleted file mode 100644
index 3dbf8a0111fa685c809ba24874dca238164b1a63..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sigmaf.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sigmaf
-Expect:      feed['title'] == u'testing \u03c2 entity'
--->
-<rss>
-<channel>
-<title>testing &sigmaf; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sim.xml b/lib/feedparser/tests/entities/sim.xml
deleted file mode 100644
index 7b1eadd6d8ca438c013fc2bc73b45d8e1a83e369..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sim.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sim
-Expect:      feed['title'] == u'testing \u223c entity'
--->
-<rss>
-<channel>
-<title>testing &sim; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/spades.xml b/lib/feedparser/tests/entities/spades.xml
deleted file mode 100644
index 806acfe09d0c25746c061b0b3ae4b538df8987f4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/spades.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: spades
-Expect:      feed['title'] == u'testing \u2660 entity'
--->
-<rss>
-<channel>
-<title>testing &spades; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sub.xml b/lib/feedparser/tests/entities/sub.xml
deleted file mode 100644
index e52b46ea3436e8f89bff39ef3f540f99e7f972c5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sub.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sub
-Expect:      feed['title'] == u'testing \u2282 entity'
--->
-<rss>
-<channel>
-<title>testing &sub; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sube.xml b/lib/feedparser/tests/entities/sube.xml
deleted file mode 100644
index 163e2e6bcd6cee78b89ad681eadcc9b4c83681e5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sube.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sube
-Expect:      feed['title'] == u'testing \u2286 entity'
--->
-<rss>
-<channel>
-<title>testing &sube; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sum.xml b/lib/feedparser/tests/entities/sum.xml
deleted file mode 100644
index 415dcc319bce2eb07e484162ca3a9ddeb0222d67..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sum.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sum
-Expect:      feed['title'] == u'testing \u2211 entity'
--->
-<rss>
-<channel>
-<title>testing &sum; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sup.xml b/lib/feedparser/tests/entities/sup.xml
deleted file mode 100644
index 19d6c56ef5e717a0547d9326b7ee2653653dbe17..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sup
-Expect:      feed['title'] == u'testing \u2283 entity'
--->
-<rss>
-<channel>
-<title>testing &sup; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sup1.xml b/lib/feedparser/tests/entities/sup1.xml
deleted file mode 100644
index 37b4adb8f171b02c48909bb839e27d5be1cbec72..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sup1.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sup1
-Expect:      feed['title'] == u'testing \xb9 entity'
--->
-<rss>
-<channel>
-<title>testing &sup1; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sup2.xml b/lib/feedparser/tests/entities/sup2.xml
deleted file mode 100644
index e4793553ac1a3367a301f2a169286e0fddd3a216..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sup2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sup2
-Expect:      feed['title'] == u'testing \xb2 entity'
--->
-<rss>
-<channel>
-<title>testing &sup2; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/sup3.xml b/lib/feedparser/tests/entities/sup3.xml
deleted file mode 100644
index dd47f583fd782c13a004a24c376db4ca151e8411..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/sup3.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: sup3
-Expect:      feed['title'] == u'testing \xb3 entity'
--->
-<rss>
-<channel>
-<title>testing &sup3; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/supe.xml b/lib/feedparser/tests/entities/supe.xml
deleted file mode 100644
index 4091ca785f717d82265c6c5f3a44105ab96ade3a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/supe.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: supe
-Expect:      feed['title'] == u'testing \u2287 entity'
--->
-<rss>
-<channel>
-<title>testing &supe; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/szlig.xml b/lib/feedparser/tests/entities/szlig.xml
deleted file mode 100644
index b7698fde49646984088085de4b6edbe7c5469908..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/szlig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: szlig
-Expect:      feed['title'] == u'testing \xdf entity'
--->
-<rss>
-<channel>
-<title>testing &szlig; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/tau.xml b/lib/feedparser/tests/entities/tau.xml
deleted file mode 100644
index 9a367ddd896f1eaaa51d659101a739298ca8279b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/tau.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: tau
-Expect:      feed['title'] == u'testing \u03c4 entity'
--->
-<rss>
-<channel>
-<title>testing &tau; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/there4.xml b/lib/feedparser/tests/entities/there4.xml
deleted file mode 100644
index 14b9c375ba1121b17fbc3a97c44c20a9861604b0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/there4.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: there4
-Expect:      feed['title'] == u'testing \u2234 entity'
--->
-<rss>
-<channel>
-<title>testing &there4; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/theta.xml b/lib/feedparser/tests/entities/theta.xml
deleted file mode 100644
index eb85cdf2af9f23f369cc0d7145e86ff24e822cd6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/theta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: theta
-Expect:      feed['title'] == u'testing \u03b8 entity'
--->
-<rss>
-<channel>
-<title>testing &theta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/thetasym.xml b/lib/feedparser/tests/entities/thetasym.xml
deleted file mode 100644
index 8244ba1af448d74889551169ad5849abd0b346c4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/thetasym.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: thetasym
-Expect:      feed['title'] == u'testing \u03d1 entity'
--->
-<rss>
-<channel>
-<title>testing &thetasym; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/thinsp.xml b/lib/feedparser/tests/entities/thinsp.xml
deleted file mode 100644
index 580abadb06223fa4b473a4c5b1223d79cfae2ff6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/thinsp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: thinsp
-Expect:      feed['title'] == u'testing \u2009 entity'
--->
-<rss>
-<channel>
-<title>testing &thinsp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/thorn.xml b/lib/feedparser/tests/entities/thorn.xml
deleted file mode 100644
index a8694f089585faeee14f68145eb518c627cf14bd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/thorn.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: thorn
-Expect:      feed['title'] == u'testing \xfe entity'
--->
-<rss>
-<channel>
-<title>testing &thorn; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/tilde.xml b/lib/feedparser/tests/entities/tilde.xml
deleted file mode 100644
index a12b983c524d774bff512803c26572a719b5bc12..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/tilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: tilde
-Expect:      feed['title'] == u'testing \u02dc entity'
--->
-<rss>
-<channel>
-<title>testing &tilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/times.xml b/lib/feedparser/tests/entities/times.xml
deleted file mode 100644
index 6c40e69e292b0db79a462e5d21945a8406c4efd8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/times.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: times
-Expect:      feed['title'] == u'testing \xd7 entity'
--->
-<rss>
-<channel>
-<title>testing &times; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/trade.xml b/lib/feedparser/tests/entities/trade.xml
deleted file mode 100644
index e93bd48279bb02669d40d0c9675835376d1442d1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/trade.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: trade
-Expect:      feed['title'] == u'testing \u2122 entity'
--->
-<rss>
-<channel>
-<title>testing &trade; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/uacute.xml b/lib/feedparser/tests/entities/uacute.xml
deleted file mode 100644
index 4d9cff3be9a66c02904aa4d97ac6f4366535b6e3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/uacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: uacute
-Expect:      feed['title'] == u'testing \xfa entity'
--->
-<rss>
-<channel>
-<title>testing &uacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/uarr.xml b/lib/feedparser/tests/entities/uarr.xml
deleted file mode 100644
index ca3ae5d24e8108f70ce96a5303f242e0599768b5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/uarr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: uArr
-Expect:      feed['title'] == u'testing \u21d1 entity'
--->
-<rss>
-<channel>
-<title>testing &uArr; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ucirc.xml b/lib/feedparser/tests/entities/ucirc.xml
deleted file mode 100644
index 5da01a03ef2413034ab225c2a388989e79369a4b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ucirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ucirc
-Expect:      feed['title'] == u'testing \xfb entity'
--->
-<rss>
-<channel>
-<title>testing &ucirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/ugrave.xml b/lib/feedparser/tests/entities/ugrave.xml
deleted file mode 100644
index e949fa11b72272d782fd4d30024811cb4820c3fc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/ugrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ugrave
-Expect:      feed['title'] == u'testing \xf9 entity'
--->
-<rss>
-<channel>
-<title>testing &ugrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/uml.xml b/lib/feedparser/tests/entities/uml.xml
deleted file mode 100644
index 5245577f4231c547d6a56080b38e17029f695914..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/uml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: uml
-Expect:      feed['title'] == u'testing \xa8 entity'
--->
-<rss>
-<channel>
-<title>testing &uml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_AElig.xml b/lib/feedparser/tests/entities/upper_AElig.xml
deleted file mode 100644
index d18840743efad949030e31e45eee32c9e2310e75..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_AElig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: AElig
-Expect:      feed['title'] == u'testing \xc6 entity'
--->
-<rss>
-<channel>
-<title>testing &AElig; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Aacute.xml b/lib/feedparser/tests/entities/upper_Aacute.xml
deleted file mode 100644
index d33622b92abfd40e0f76bd8dc120859076a4a364..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Aacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Aacute
-Expect:      feed['title'] == u'testing \xc1 entity'
--->
-<rss>
-<channel>
-<title>testing &Aacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Acirc.xml b/lib/feedparser/tests/entities/upper_Acirc.xml
deleted file mode 100644
index be9093cf7f5e12b36bfd5af3ef2802c240a91b64..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Acirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Acirc
-Expect:      feed['title'] == u'testing \xc2 entity'
--->
-<rss>
-<channel>
-<title>testing &Acirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Agrave.xml b/lib/feedparser/tests/entities/upper_Agrave.xml
deleted file mode 100644
index 5635d5b0f607fc255c7dcdd643ac57a2e5ebb398..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Agrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Agrave
-Expect:      feed['title'] == u'testing \xc0 entity'
--->
-<rss>
-<channel>
-<title>testing &Agrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Alpha.xml b/lib/feedparser/tests/entities/upper_Alpha.xml
deleted file mode 100644
index d78bd94e597b1944750bd0eb54f9f1573ce83f4b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Alpha.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Alpha
-Expect:      feed['title'] == u'testing \u0391 entity'
--->
-<rss>
-<channel>
-<title>testing &Alpha; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Aring.xml b/lib/feedparser/tests/entities/upper_Aring.xml
deleted file mode 100644
index ce140cba442fc8f54ccf63431ebae57eb2959b46..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Aring.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Aring
-Expect:      feed['title'] == u'testing \xc5 entity'
--->
-<rss>
-<channel>
-<title>testing &Aring; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Atilde.xml b/lib/feedparser/tests/entities/upper_Atilde.xml
deleted file mode 100644
index cf4bc6fa642271a0d9fbd394f1da5f5453bc914d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Atilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Atilde
-Expect:      feed['title'] == u'testing \xc3 entity'
--->
-<rss>
-<channel>
-<title>testing &Atilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Auml.xml b/lib/feedparser/tests/entities/upper_Auml.xml
deleted file mode 100644
index 7e85269aafaa4c4609623fab1625bfb2582e9288..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Auml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Auml
-Expect:      feed['title'] == u'testing \xc4 entity'
--->
-<rss>
-<channel>
-<title>testing &Auml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Beta.xml b/lib/feedparser/tests/entities/upper_Beta.xml
deleted file mode 100644
index 871a11b6d4dac55034a7bc06a79a9ca0e9b2473f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Beta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Beta
-Expect:      feed['title'] == u'testing \u0392 entity'
--->
-<rss>
-<channel>
-<title>testing &Beta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ccedil.xml b/lib/feedparser/tests/entities/upper_Ccedil.xml
deleted file mode 100644
index 38a830b8468ee23919e61272c58f3af41807e0f9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Ccedil.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ccedil
-Expect:      feed['title'] == u'testing \xc7 entity'
--->
-<rss>
-<channel>
-<title>testing &Ccedil; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Chi.xml b/lib/feedparser/tests/entities/upper_Chi.xml
deleted file mode 100644
index ea02cd6343846ca9d54e1d806629b3e4f883d418..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Chi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Chi
-Expect:      feed['title'] == u'testing \u03a7 entity'
--->
-<rss>
-<channel>
-<title>testing &Chi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Dagger.xml b/lib/feedparser/tests/entities/upper_Dagger.xml
deleted file mode 100644
index 2a6c75aa7836cee91353eaa2849cc4b485b14fa2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Dagger.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Dagger
-Expect:      feed['title'] == u'testing \u2021 entity'
--->
-<rss>
-<channel>
-<title>testing &Dagger; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Delta.xml b/lib/feedparser/tests/entities/upper_Delta.xml
deleted file mode 100644
index 71d3cdd490e7075a95ff582b1fcbd15882d183af..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Delta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Delta
-Expect:      feed['title'] == u'testing \u0394 entity'
--->
-<rss>
-<channel>
-<title>testing &Delta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_ETH.xml b/lib/feedparser/tests/entities/upper_ETH.xml
deleted file mode 100644
index 32d8606329948d43aa0c742990db6cbff643c03c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_ETH.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ETH
-Expect:      feed['title'] == u'testing \xd0 entity'
--->
-<rss>
-<channel>
-<title>testing &ETH; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Eacute.xml b/lib/feedparser/tests/entities/upper_Eacute.xml
deleted file mode 100644
index 9ced3e1fbc42981280a2e647caa9f573b0ec7db7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Eacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Eacute
-Expect:      feed['title'] == u'testing \xc9 entity'
--->
-<rss>
-<channel>
-<title>testing &Eacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ecirc.xml b/lib/feedparser/tests/entities/upper_Ecirc.xml
deleted file mode 100644
index 2e22adab97bb3c7c74242ec37866d60a93a76b5c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Ecirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ecirc
-Expect:      feed['title'] == u'testing \xca entity'
--->
-<rss>
-<channel>
-<title>testing &Ecirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Egrave.xml b/lib/feedparser/tests/entities/upper_Egrave.xml
deleted file mode 100644
index 11323db2d38cf8456ca71e704c91084e6a285e99..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Egrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Egrave
-Expect:      feed['title'] == u'testing \xc8 entity'
--->
-<rss>
-<channel>
-<title>testing &Egrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Epsilon.xml b/lib/feedparser/tests/entities/upper_Epsilon.xml
deleted file mode 100644
index a4bfd65177da1c7bdef5007d597cf2956b2f5028..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Epsilon.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Epsilon
-Expect:      feed['title'] == u'testing \u0395 entity'
--->
-<rss>
-<channel>
-<title>testing &Epsilon; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Eta.xml b/lib/feedparser/tests/entities/upper_Eta.xml
deleted file mode 100644
index 0ba2a8928579076c1b78c6a34e248b5bbee15ec5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Eta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Eta
-Expect:      feed['title'] == u'testing \u0397 entity'
--->
-<rss>
-<channel>
-<title>testing &Eta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Euml.xml b/lib/feedparser/tests/entities/upper_Euml.xml
deleted file mode 100644
index 9a7ea4a90204f5d81aa8b3fb3ee65f7c805785f9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Euml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Euml
-Expect:      feed['title'] == u'testing \xcb entity'
--->
-<rss>
-<channel>
-<title>testing &Euml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Gamma.xml b/lib/feedparser/tests/entities/upper_Gamma.xml
deleted file mode 100644
index d0d85bb5a8b575dd7ba4dc1a1695aca213f5a4cb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Gamma.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Gamma
-Expect:      feed['title'] == u'testing \u0393 entity'
--->
-<rss>
-<channel>
-<title>testing &Gamma; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Iacute.xml b/lib/feedparser/tests/entities/upper_Iacute.xml
deleted file mode 100644
index e7ebad95e33d9b5fed273826332cbb9c37e81aae..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Iacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Iacute
-Expect:      feed['title'] == u'testing \xcd entity'
--->
-<rss>
-<channel>
-<title>testing &Iacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Icirc.xml b/lib/feedparser/tests/entities/upper_Icirc.xml
deleted file mode 100644
index 03d7e45bdbb5c391d1d4c3394d3a4fe7f681fa9b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Icirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Icirc
-Expect:      feed['title'] == u'testing \xce entity'
--->
-<rss>
-<channel>
-<title>testing &Icirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Igrave.xml b/lib/feedparser/tests/entities/upper_Igrave.xml
deleted file mode 100644
index 97a112b151ebddfee907f4e9c3ca3ca377dd6904..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Igrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Igrave
-Expect:      feed['title'] == u'testing \xcc entity'
--->
-<rss>
-<channel>
-<title>testing &Igrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Iota.xml b/lib/feedparser/tests/entities/upper_Iota.xml
deleted file mode 100644
index 08153102f949cbfeb9a3d09484fbed23957ecf43..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Iota.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Iota
-Expect:      feed['title'] == u'testing \u0399 entity'
--->
-<rss>
-<channel>
-<title>testing &Iota; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Iuml.xml b/lib/feedparser/tests/entities/upper_Iuml.xml
deleted file mode 100644
index 6403c363522a51671e84ffe23cf16e5cbb0e3e5a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Iuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Iuml
-Expect:      feed['title'] == u'testing \xcf entity'
--->
-<rss>
-<channel>
-<title>testing &Iuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Kappa.xml b/lib/feedparser/tests/entities/upper_Kappa.xml
deleted file mode 100644
index 347d70daacc38c12a72385a90f9cb8ff3967cd6d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Kappa.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Kappa
-Expect:      feed['title'] == u'testing \u039a entity'
--->
-<rss>
-<channel>
-<title>testing &Kappa; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Lambda.xml b/lib/feedparser/tests/entities/upper_Lambda.xml
deleted file mode 100644
index e67223cb08595a295af5572499e9492ca051c2ce..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Lambda.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Lambda
-Expect:      feed['title'] == u'testing \u039b entity'
--->
-<rss>
-<channel>
-<title>testing &Lambda; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Mu.xml b/lib/feedparser/tests/entities/upper_Mu.xml
deleted file mode 100644
index bfa0379a1411f3aff8cefb8d44dc872afba92961..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Mu.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Mu
-Expect:      feed['title'] == u'testing \u039c entity'
--->
-<rss>
-<channel>
-<title>testing &Mu; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ntilde.xml b/lib/feedparser/tests/entities/upper_Ntilde.xml
deleted file mode 100644
index bfbd3bd40f2ba2e2da34ce9a5de22882c70f0173..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Ntilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ntilde
-Expect:      feed['title'] == u'testing \xd1 entity'
--->
-<rss>
-<channel>
-<title>testing &Ntilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Nu.xml b/lib/feedparser/tests/entities/upper_Nu.xml
deleted file mode 100644
index 25779bf80853897707740937df0dd9d1d9d22a63..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Nu.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Nu
-Expect:      feed['title'] == u'testing \u039d entity'
--->
-<rss>
-<channel>
-<title>testing &Nu; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_OElig.xml b/lib/feedparser/tests/entities/upper_OElig.xml
deleted file mode 100644
index 7d4863447fd6342b4eb165372e9ff49578df6b80..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_OElig.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: OElig
-Expect:      feed['title'] == u'testing \u0152 entity'
--->
-<rss>
-<channel>
-<title>testing &OElig; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Oacute.xml b/lib/feedparser/tests/entities/upper_Oacute.xml
deleted file mode 100644
index eb3822583840ea262a8d0725dd872523e8c328d8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Oacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Oacute
-Expect:      feed['title'] == u'testing \xd3 entity'
--->
-<rss>
-<channel>
-<title>testing &Oacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ocirc.xml b/lib/feedparser/tests/entities/upper_Ocirc.xml
deleted file mode 100644
index 54e180732706e6f330f2942ebadf62926fa28638..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Ocirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ocirc
-Expect:      feed['title'] == u'testing \xd4 entity'
--->
-<rss>
-<channel>
-<title>testing &Ocirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ograve.xml b/lib/feedparser/tests/entities/upper_Ograve.xml
deleted file mode 100644
index 89503273129d6734a7976f8ca61c169611b1fef2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Ograve.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ograve
-Expect:      feed['title'] == u'testing \xd2 entity'
--->
-<rss>
-<channel>
-<title>testing &Ograve; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Omega.xml b/lib/feedparser/tests/entities/upper_Omega.xml
deleted file mode 100644
index 429ce59cb3052d9c8118ae0922b5163f5de56f5a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Omega.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Omega
-Expect:      feed['title'] == u'testing \u03a9 entity'
--->
-<rss>
-<channel>
-<title>testing &Omega; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Omicron.xml b/lib/feedparser/tests/entities/upper_Omicron.xml
deleted file mode 100644
index c74bec184812afc15e42c59a649f4f77396fbd0f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Omicron.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Omicron
-Expect:      feed['title'] == u'testing \u039f entity'
--->
-<rss>
-<channel>
-<title>testing &Omicron; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Oslash.xml b/lib/feedparser/tests/entities/upper_Oslash.xml
deleted file mode 100644
index 0f9e35335b396636c7f26823e2ecbfeb8725a3b8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Oslash.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Oslash
-Expect:      feed['title'] == u'testing \xd8 entity'
--->
-<rss>
-<channel>
-<title>testing &Oslash; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Otilde.xml b/lib/feedparser/tests/entities/upper_Otilde.xml
deleted file mode 100644
index d340030565a05bd1956b1092da75864b2a8dbd6b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Otilde.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Otilde
-Expect:      feed['title'] == u'testing \xd5 entity'
--->
-<rss>
-<channel>
-<title>testing &Otilde; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ouml.xml b/lib/feedparser/tests/entities/upper_Ouml.xml
deleted file mode 100644
index e32d9644b8a7293b6fb3fe1e26b53854904f7d46..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Ouml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ouml
-Expect:      feed['title'] == u'testing \xd6 entity'
--->
-<rss>
-<channel>
-<title>testing &Ouml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Phi.xml b/lib/feedparser/tests/entities/upper_Phi.xml
deleted file mode 100644
index 8f93027d39ac2b7aed2c570fb6f77ad4b9d8ff25..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Phi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Phi
-Expect:      feed['title'] == u'testing \u03a6 entity'
--->
-<rss>
-<channel>
-<title>testing &Phi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Pi.xml b/lib/feedparser/tests/entities/upper_Pi.xml
deleted file mode 100644
index 2b8951f92eaffb1b42168bd9d24cad7bfb7645d4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Pi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Pi
-Expect:      feed['title'] == u'testing \u03a0 entity'
--->
-<rss>
-<channel>
-<title>testing &Pi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Prime.xml b/lib/feedparser/tests/entities/upper_Prime.xml
deleted file mode 100644
index b29dc9ff68635ecf8b2b88122760289859a3ce2a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Prime.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Prime
-Expect:      feed['title'] == u'testing \u2033 entity'
--->
-<rss>
-<channel>
-<title>testing &Prime; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Psi.xml b/lib/feedparser/tests/entities/upper_Psi.xml
deleted file mode 100644
index 9d337bd47114cc4921bd2f99c27942a899b31e9e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Psi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Psi
-Expect:      feed['title'] == u'testing \u03a8 entity'
--->
-<rss>
-<channel>
-<title>testing &Psi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Rho.xml b/lib/feedparser/tests/entities/upper_Rho.xml
deleted file mode 100644
index 0e1879736c4ff61948d002c90b2da1a7806619ed..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Rho.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Rho
-Expect:      feed['title'] == u'testing \u03a1 entity'
--->
-<rss>
-<channel>
-<title>testing &Rho; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Scaron.xml b/lib/feedparser/tests/entities/upper_Scaron.xml
deleted file mode 100644
index 784c67e1fa422c863dd40cbfd8aff1f455197d55..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Scaron.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Scaron
-Expect:      feed['title'] == u'testing \u0160 entity'
--->
-<rss>
-<channel>
-<title>testing &Scaron; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Sigma.xml b/lib/feedparser/tests/entities/upper_Sigma.xml
deleted file mode 100644
index a722850961089200ddedba31876c8d11dbc7f2d6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Sigma.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Sigma
-Expect:      feed['title'] == u'testing \u03a3 entity'
--->
-<rss>
-<channel>
-<title>testing &Sigma; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_THORN.xml b/lib/feedparser/tests/entities/upper_THORN.xml
deleted file mode 100644
index 499d0b28c551aacd867c3bd4d8d81bd49b72305e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_THORN.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: THORN
-Expect:      feed['title'] == u'testing \xde entity'
--->
-<rss>
-<channel>
-<title>testing &THORN; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Tau.xml b/lib/feedparser/tests/entities/upper_Tau.xml
deleted file mode 100644
index 3ff9f6979af976c3bb25ab7b43e461956c34b384..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Tau.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Tau
-Expect:      feed['title'] == u'testing \u03a4 entity'
--->
-<rss>
-<channel>
-<title>testing &Tau; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Theta.xml b/lib/feedparser/tests/entities/upper_Theta.xml
deleted file mode 100644
index 85c43231d63f114211db1efce6c206a672bbdc89..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Theta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Theta
-Expect:      feed['title'] == u'testing \u0398 entity'
--->
-<rss>
-<channel>
-<title>testing &Theta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Uacute.xml b/lib/feedparser/tests/entities/upper_Uacute.xml
deleted file mode 100644
index e714b33c5c8ecaa161ed876b2c783b8574bfcfd3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Uacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Uacute
-Expect:      feed['title'] == u'testing \xda entity'
--->
-<rss>
-<channel>
-<title>testing &Uacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ucirc.xml b/lib/feedparser/tests/entities/upper_Ucirc.xml
deleted file mode 100644
index 2d6ddeb0852defe669db5623ba6b677f63c9e0d9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Ucirc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ucirc
-Expect:      feed['title'] == u'testing \xdb entity'
--->
-<rss>
-<channel>
-<title>testing &Ucirc; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Ugrave.xml b/lib/feedparser/tests/entities/upper_Ugrave.xml
deleted file mode 100644
index 5d859b8eb7529b8f6c9577a848bce3816b1483a9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Ugrave.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Ugrave
-Expect:      feed['title'] == u'testing \xd9 entity'
--->
-<rss>
-<channel>
-<title>testing &Ugrave; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Upsilon.xml b/lib/feedparser/tests/entities/upper_Upsilon.xml
deleted file mode 100644
index 3a8ba537726e7807986e4f2ecf2abca1844154e1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Upsilon.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Upsilon
-Expect:      feed['title'] == u'testing \u03a5 entity'
--->
-<rss>
-<channel>
-<title>testing &Upsilon; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Uuml.xml b/lib/feedparser/tests/entities/upper_Uuml.xml
deleted file mode 100644
index 0d0c4b2ab1022ca6cd873a6fdc0a8d46519a8721..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Uuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Uuml
-Expect:      feed['title'] == u'testing \xdc entity'
--->
-<rss>
-<channel>
-<title>testing &Uuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Xi.xml b/lib/feedparser/tests/entities/upper_Xi.xml
deleted file mode 100644
index 6d0411d3b6d01995bab72147c276d86a61b9b7eb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Xi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Xi
-Expect:      feed['title'] == u'testing \u039e entity'
--->
-<rss>
-<channel>
-<title>testing &Xi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Yacute.xml b/lib/feedparser/tests/entities/upper_Yacute.xml
deleted file mode 100644
index 96157bfb10de9b276ca244aac69cf1e3a05f5857..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Yacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Yacute
-Expect:      feed['title'] == u'testing \xdd entity'
--->
-<rss>
-<channel>
-<title>testing &Yacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Yuml.xml b/lib/feedparser/tests/entities/upper_Yuml.xml
deleted file mode 100644
index ee49cf3a01eba769ff556c6fc780bb1e45b5e224..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Yuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Yuml
-Expect:      feed['title'] == u'testing \u0178 entity'
--->
-<rss>
-<channel>
-<title>testing &Yuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upper_Zeta.xml b/lib/feedparser/tests/entities/upper_Zeta.xml
deleted file mode 100644
index 4bcf39272152da83794361abad1823defe4fe612..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upper_Zeta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Zeta
-Expect:      feed['title'] == u'testing \u0396 entity'
--->
-<rss>
-<channel>
-<title>testing &Zeta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upsih.xml b/lib/feedparser/tests/entities/upsih.xml
deleted file mode 100644
index 9248acdc1f8833bfda8d5248bdee5431f91b5113..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upsih.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: upsih
-Expect:      feed['title'] == u'testing \u03d2 entity'
--->
-<rss>
-<channel>
-<title>testing &upsih; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/upsilon.xml b/lib/feedparser/tests/entities/upsilon.xml
deleted file mode 100644
index 1f916c5db9c9773633c9c71e6406a2efdcb8fb06..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/upsilon.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: upsilon
-Expect:      feed['title'] == u'testing \u03c5 entity'
--->
-<rss>
-<channel>
-<title>testing &upsilon; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/uuml.xml b/lib/feedparser/tests/entities/uuml.xml
deleted file mode 100644
index 4c147b2a3832c6faae301851ba4c7e5ae70c43ff..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/uuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: uuml
-Expect:      feed['title'] == u'testing \xfc entity'
--->
-<rss>
-<channel>
-<title>testing &uuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/weierp.xml b/lib/feedparser/tests/entities/weierp.xml
deleted file mode 100644
index 63bd70c3ad0360c5244ff7cb8d1e898472e9b212..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/weierp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: weierp
-Expect:      feed['title'] == u'testing \u2118 entity'
--->
-<rss>
-<channel>
-<title>testing &weierp; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/xi.xml b/lib/feedparser/tests/entities/xi.xml
deleted file mode 100644
index d9b280b94244745041fa1c66a1eb87f18807a960..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/xi.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: xi
-Expect:      feed['title'] == u'testing \u03be entity'
--->
-<rss>
-<channel>
-<title>testing &xi; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/yacute.xml b/lib/feedparser/tests/entities/yacute.xml
deleted file mode 100644
index c8b3315019a3291b9afc4d050edc21b8afc7c3b2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/yacute.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: yacute
-Expect:      feed['title'] == u'testing \xfd entity'
--->
-<rss>
-<channel>
-<title>testing &yacute; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/yen.xml b/lib/feedparser/tests/entities/yen.xml
deleted file mode 100644
index af9f596c975f9b0fb0617c10e0510d8f236b276e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/yen.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: yen
-Expect:      feed['title'] == u'testing \xa5 entity'
--->
-<rss>
-<channel>
-<title>testing &yen; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/yuml.xml b/lib/feedparser/tests/entities/yuml.xml
deleted file mode 100644
index 253b60bc3fb18f9f35bdfddeffc5b09358b9dbe6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/yuml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: yuml
-Expect:      feed['title'] == u'testing \xff entity'
--->
-<rss>
-<channel>
-<title>testing &yuml; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/zeta.xml b/lib/feedparser/tests/entities/zeta.xml
deleted file mode 100644
index af665ecd11aefa4b57f5b97afe3a0a424e619875..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/zeta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: zeta
-Expect:      feed['title'] == u'testing \u03b6 entity'
--->
-<rss>
-<channel>
-<title>testing &zeta; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/zwj.xml b/lib/feedparser/tests/entities/zwj.xml
deleted file mode 100644
index 881246064393de2cac0653901b649c4ee74c32db..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/zwj.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: zwj
-Expect:      feed['title'] == u'testing \u200d entity'
--->
-<rss>
-<channel>
-<title>testing &zwj; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/entities/zwnj.xml b/lib/feedparser/tests/entities/zwnj.xml
deleted file mode 100644
index 3bcd5d4a7e6c98b6d6cc3b9b332a6c3b23ec87d7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/entities/zwnj.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: zwnj
-Expect:      feed['title'] == u'testing \u200c entity'
--->
-<rss>
-<channel>
-<title>testing &zwnj; entity</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/http/http_redirect_to_304.xml b/lib/feedparser/tests/http/http_redirect_to_304.xml
deleted file mode 100644
index a14cb0d35785a5157d3d5973769f3e507c32354c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/http/http_redirect_to_304.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Status: 302
-Header:      Location: http://localhost:8097/-/return-304.xml
-Description: ensure an http 302 redirect to an http 304 doesn't cause an xml parsing error
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_301.xml b/lib/feedparser/tests/http/http_status_301.xml
deleted file mode 100644
index 12d159ab6c48479986e7b0b317097aa388ae63fb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/http/http_status_301.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Status: 301
-Header:      Location: http://localhost:8097/tests/http/target.xml
-Description: http status 301 (moved permanently)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_302.xml b/lib/feedparser/tests/http/http_status_302.xml
deleted file mode 100644
index 4b15d437de30e03c6a25fffbbcb23f6832d2c61b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/http/http_status_302.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Status: 302
-Header:      Location: http://localhost:8097/tests/http/target.xml
-Description: http status 302 (found)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_303.xml b/lib/feedparser/tests/http/http_status_303.xml
deleted file mode 100644
index 2dd5d2f731ca62ec21aedcaa7ca5ef6c92f7070d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/http/http_status_303.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Status: 303
-Header:      Location: http://localhost:8097/tests/http/target.xml
-Description: http status 303 (moved permanently)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_304.xml b/lib/feedparser/tests/http/http_status_304.xml
deleted file mode 100644
index a2eb6953215bff19cfd0f98c5af2f29f51aa0642..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/http/http_status_304.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Header:      ETag: "abc123"
-Header:      Last-Modified: Thu, 21 Apr 2011 19:02:20 GMT
-Description: http status 304 (not modified)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <item><title>title 304</title></item>
-</feed>
diff --git a/lib/feedparser/tests/http/http_status_307.xml b/lib/feedparser/tests/http/http_status_307.xml
deleted file mode 100644
index 90074172726ca087ee7b9bd027208844d950c477..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/http/http_status_307.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Status: 307
-Header:      Location: http://localhost:8097/tests/http/target.xml
-Description: http status 307 (moved permanently)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_404.xml b/lib/feedparser/tests/http/http_status_404.xml
deleted file mode 100644
index 02e08089e6defdfb602fda101f4b73d9e3a70830..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/http/http_status_404.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Header:      Status: 404
-Description: http status 404 (not found)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/http_status_9001.xml b/lib/feedparser/tests/http/http_status_9001.xml
deleted file mode 100644
index b90dce3bf1589e6186cac95a8bf47c5bbe4a0635..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/http/http_status_9001.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Header:      Status: 9001
-Description: http status 9001 (bogus)
-Expect:      0
--->
-<feed xmlns="http://www.w3.org/2005/Atom"></feed>
diff --git a/lib/feedparser/tests/http/target.xml b/lib/feedparser/tests/http/target.xml
deleted file mode 100644
index a81736b1048efbae345ea760ab9675c4440715df..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/http/target.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: target for http status tests; no actual evaluation
-Expect:      1
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <item><title>target</title></item>
-</feed>
diff --git a/lib/feedparser/tests/illformed/aaa_illformed.xml b/lib/feedparser/tests/illformed/aaa_illformed.xml
deleted file mode 100644
index 044edc24026f8be483133f2fd539ee3f0ba49368..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/aaa_illformed.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: illformed XML
-Expect:      bozo
--->
-<rss version="2.0">
-</rss
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/always_strip_doctype.xml b/lib/feedparser/tests/illformed/always_strip_doctype.xml
deleted file mode 100644
index 9fc872454b6c0ddb64b2120e512dd417c730e31e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/always_strip_doctype.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://site.invalid/">
-<!--
-Description: unstripped invalid doctype
-Expect:      not bozo and feed['title'] == u'found'
--->
-<rss>
-    <channel>
-        <title>found</title>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/illformed/chardet/big5.xml b/lib/feedparser/tests/illformed/chardet/big5.xml
deleted file mode 100644
index 91c9ec0f7aa6e7d1a31159ca7690dbb8280c97ba..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/chardet/big5.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  Big5 with no encoding information
-Expect:       bozo and encoding == 'Big5'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>�m11�몺�����n</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/chardet/eucjp.xml b/lib/feedparser/tests/illformed/chardet/eucjp.xml
deleted file mode 100644
index ba288a5e2eaa23baa90ca5346f9d275947f59c7a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/chardet/eucjp.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  EUC-JP with no encoding information
-Expect:       bozo and encoding == 'EUC-JP'
--->
-<rss>
-<channel>
-<item>
-<title>�����໰�������</title>
-<description>��SD�������G�����ͥ졼�����NEO�٤򤺤äȥץ쥤���Ƥ��롣 �إ���ȥ�ޥ�٤ϥ��ȥ꡼�⡼�ɤ򽪤��ơ��ۤܤ��Ԥ����Ƥ��ޤä��� G������NEO�ϡ���ä����򤯤ʤ�ĤĤ��롣 �ʤ�ۤɡ�PS2�äƤ�������������ǽ�Ϥ��ʤ��Ⱥ�����ư���Ƥ��롣 ��ǯ�����٤�ʤ��褦PS3��XBOX360���㤪���ʤ�����������ʳ��ϥ�������ˤʤ��ۤ�˻���������͡ˡ� ����ˤ��Ƥ⡢����äƿ��٤ƤФä���ǥޥ������͡�...</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/chardet/euckr.xml b/lib/feedparser/tests/illformed/chardet/euckr.xml
deleted file mode 100644
index 767f3a59eee786b01c5db89e85100782e6eb3b7e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/chardet/euckr.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  EUC-KR with no encoding information
-Expect:       bozo and encoding == 'EUC-KR'
--->
-<rss>
-<channel>
-<item>
-<title>EUC-KR ���� TypeKey �ѱ۴г��� ǥ���ϱ�</title>
-<description>TypeKey �ý����� UTF-8�� ���ư��µ�, �ű⼭ �ѱ۷� �� �г����� ���� ��쿡, EUC-KR�� �� ������Ÿ�� ���Ͽ��� �����̷�Ʈ�Ǿ� ���۵Ǿ���� �г����� UTF�� �翬�� ������ ��Ÿ����. ���� ���� ��� ����ϴ� �ʸ� ������ �г����� �ѱ۷� ����ϴ� ���� �е鵵 Ÿ��Ű������ �г����� �̷� ���������� �����ڸԱ�� ����� ���� �ִ�....</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/chardet/gb2312.xml b/lib/feedparser/tests/illformed/chardet/gb2312.xml
deleted file mode 100644
index b28c101489cd59dbcde0f7e1cf15ab3e9b16feda..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/chardet/gb2312.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  GB2312 with no encoding information
-Expect:       bozo and encoding == 'GB2312'
--->
-<rss>
-<channel>
-<item>
-<title>������������ϵ�У�רҵ����</title>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/illformed/chardet/koi8r.xml b/lib/feedparser/tests/illformed/chardet/koi8r.xml
deleted file mode 100644
index 8cdea546f3b7427e6465ead3047691a8058fa716..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/chardet/koi8r.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  KOI8-R with no encoding information
-Expect:       bozo and encoding == 'KOI8-R'
--->
-<rss>
-<channel>
-<item>
-<title>��� �������� ���������� ����</title>
-<description>
-��������, ������������, �� ��� ������� ����� ������ �������������, ��� ��� � ��, ��� ����� ��� ����������� ��������. �������� �� �� ���! ��� �� ������ ��������� ��������, ��� - ����! � ���� � ����� ������� ��������. �������� ������ � ������ ���� ���-���... � ������ ��������������� &quot;������ �������&quot; � &quot;������ ��������&quot; ������������ ������ ���� �������� ���� ����� �������, ���� ��������� ������. ���� ����������� �������� ��������� ������ �������� ���������, ������� ��������� &quot;�����������&quot; ������ ���������� ������������.</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/chardet/shiftjis.xml b/lib/feedparser/tests/illformed/chardet/shiftjis.xml
deleted file mode 100644
index 28285d9664f619e13c1bc28ad5a2650ba8e1e057..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/chardet/shiftjis.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  SHIFT_JIS with no encoding information
-Expect:       bozo and encoding == 'SHIFT_JIS'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-    <title>DrecomRSS�ɋL�����e�����f����Ȃ��c</title>
-    <summary>�F�X���ׂĂ���AMT3.2��RSS1.0���T�|�[�g���Ă��Ȃ����Ƃ������B ���Ƃ�...</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/chardet/tis620.xml b/lib/feedparser/tests/illformed/chardet/tis620.xml
deleted file mode 100644
index 5dd109056785bb666eb1f8300a99d07d2abc0e14..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/chardet/tis620.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  TIS-620 with no encoding information
-Expect:       bozo and encoding == 'TIS-620'
--->
-<rss>
-<channel>
-<item>
-<description>�ӹѡ�ҹ��������ص��ˡ����Ϳ��������觪ҵ� ���� SIPA �����Ѻ MamboHub.com �����¹�ԭ�ء��ҹ���ʹ��� Template ���������û�СǴ &amp;#8220;Mambo Template Contest&amp;#8221; ���� Mambo 4.5.X ����Ѻ���ԧ����䫵� thaiopensource.org ���䫵��ٹ����������Ţ�����âͧ�Ϳ������ Open Source ����ͧ�� ������ö�觼ŧҹ��һ�СǴ�� ���㹹���ͧ����ѷ �ؤ�� ���� �����/��� ��駹�������Դ�͡�� ���ʹѺʹع������������ Mambo ����ͧ��������ǹ����㹡���͡Ẻ��оѲ�����䫵� thaiopensource.org �����͹Ҥ�</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/illformed/chardet/windows1255.xml b/lib/feedparser/tests/illformed/chardet/windows1255.xml
deleted file mode 100644
index 0ab773f508588042d7e3fd6d8a72574436190ac1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/chardet/windows1255.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:   __import__('chardet')
-Description:  windows-1255 with no encoding information
-Expect:       bozo and encoding == 'windows-1255'
--->
-<rss>
-<channel>
-<item>
-<description>
-��� ����� ���� �� ��� ������� ����� �� ��� ����� ��� ���� ���� ����� �� ��� ��������? ���� ����� ���, ������� �� ��� ����� ������ ����� ������ ��� ���� ������� ����� �����. ���, �� ��� �� ��. ��� ����� ����� ������.
-</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/illformed/http_high_bit_date.xml b/lib/feedparser/tests/illformed/http_high_bit_date.xml
deleted file mode 100644
index 480d3ae0e866eb18762f7b3982236139ad255833..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/http_high_bit_date.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-7"?>
-<!--
-SkipUnless:  __import__('codecs').lookup('iso-8859-7')
-Header:      Content-type: text/xml
-Description: non-ASCII characters in date crashes parser
-Expect:      1
--->
-<rss version="2.0">
-	<channel>
-	<pubDate>���, 29 ���� 2004 12:53:00 GMT</pubDate>
-	</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/non-ascii-tag.xml b/lib/feedparser/tests/illformed/non-ascii-tag.xml
deleted file mode 100644
index e07883ec29f552a1ea237858798dd7af5c92c94f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/non-ascii-tag.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-SkipUnless: feedparser.BeautifulSoup
-Description: prevent UnicodeEncodeError in microformat code
-Expect: bozo and entries[0]['summary'] == u'Some text'
--->
-<rss version="2.0">
-<channel>
-    <item>
-        <description>Some text</� </description>
-    </item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/illformed/rdf_channel_empty_textinput.xml b/lib/feedparser/tests/illformed/rdf_channel_empty_textinput.xml
deleted file mode 100644
index 7c09096d3a79bfbb31255d950d88c26e6f80f08a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/rdf_channel_empty_textinput.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-Description: empty textinput element confuses regex parser and crashes on setting item title (thinks we're still in textinput)
-Expect:      bozo
--->
-<?xml version="1.0"?>
-<rdf:RDF 
-  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-  xmlns="http://purl.org/rss/1.0/"
-> 
-  <channel rdf:about="http://example.com/">
-    <items>
-      <rdf:Seq>
-        <rdf:li rdf:resource="http://example.com/1" />
-      </rdf:Seq>
-    </items>
-    <textinput rdf:resource="http://example.com/" />
-  </channel>
-
-  <item rdf:about="http://example.com/1">
-    <title>crashes here</title>
-  </item>
-
-  <textinput rdf:about="http://meerkat.oreillynet.com/">
-  </textinput>
-
-</rdf:RDF
\ No newline at end of file
diff --git a/lib/feedparser/tests/illformed/rss_empty_document.xml b/lib/feedparser/tests/illformed/rss_empty_document.xml
deleted file mode 100644
index 6bddcad634fcf933569ab4280c9fcf6d89fb7033..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/rss_empty_document.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<!--
-Description: Empty document should be a bozo 
-Expect:      bozo
--->
diff --git a/lib/feedparser/tests/illformed/rss_incomplete_cdata.xml b/lib/feedparser/tests/illformed/rss_incomplete_cdata.xml
deleted file mode 100644
index 8fe311b95528e1fbac873eb5b033862f1a18d4bc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/rss_incomplete_cdata.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: Incomplete CDATA block
-Expect:      bozo
--->
-<?xml version="1.0"?>
-<rss version="2.0">
-<channel>
-<title>can feedparser read this xml</title>
-<link>http://adcdefgh.com</link>
-<description>feedparser goes into infinite loop while parsing this file</description>
-<language>en-us</language>
-<copyright>2005-10-28</copyright>
-<item><title><![CD
diff --git a/lib/feedparser/tests/illformed/undeclared_namespace.xml b/lib/feedparser/tests/illformed/undeclared_namespace.xml
deleted file mode 100644
index cffe6f48e9c3a004b7ea7782e80e3edf43c6677a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/illformed/undeclared_namespace.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-SkipUnless:   __import__('sys').version.split()[0] >= '2.2.0'
-Description: undeclared namespace
-Expect:      bozo
--->
-<rss version="2.0">
-<channel>
-<itunes:subtitle>Foo</itunes:subtitle>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/microformats/hcard/2-4-2-vcard.xml b/lib/feedparser/tests/microformats/hcard/2-4-2-vcard.xml
deleted file mode 100644
index 0e77f778a903bf3bc5ff25713d0303c9379b1f73..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/2-4-2-vcard.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 2.4.2 VCARD
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nAGENT:BEGIN:vCard\\nVERSION:3.0\\nFN:Joe Friday\\nN:Friday\\;Joe\\nTEL\\;TYPE=voi\n ce:+1-919-555-7878\\nEMAIL\\;TYPE=internet:jfriday@host.com\\nTITLE:Area Admi\n nistrator\\, Assistant\\nEND:vCard\\n\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>2.4.2 VCARD</title>
-<link rel="alternate" type="text/v-card" href="2-4-2-vcard.vcf" />
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<div class="agent vcard">
- <a class="email fn" href="mailto:jfriday@host.com">Joe Friday</a>
- <div class="tel">+1-919-555-7878</div>
- <div class="title">Area Administrator, Assistant</div>
-</div>
-</div>
-<p><a rel="next test" href="3-1-1-fn.xhtml">next</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-1-fn-unicode-char.xml b/lib/feedparser/tests/microformats/hcard/3-1-1-fn-unicode-char.xml
deleted file mode 100644
index ffbd28530cf0486465e4c64360971bec7b09dc8e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-1-fn-unicode-char.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless: feedparser.BeautifulSoup
-Description: unicode character in microformat
-Expect: not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Tantek \xc7elik\nN:\xc7elik;Tantek\nURL:http://tantek.com/\nEND:vCard'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-    <item>
-        <content:encoded>
-            <![CDATA[<span class="vcard"><a class="url fn" href="http://tantek.com/">Tantek Çelik</a></span>]]>
-        </content:encoded>
-    </item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-1-fn.xml b/lib/feedparser/tests/microformats/hcard/3-1-1-fn.xml
deleted file mode 100644
index ded9a64ba5a3bd49a412a47d98709f340caa0979..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-1-fn.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.1 FN
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Mr. John Q. Public\\, Esq.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.1 FN</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="fn">Mr. John Q. Public, Esq.</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-plural.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-plural.xml
deleted file mode 100644
index 4ddbbcb53a889dc2c4fe20cf99cfa934966ec671..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-plural.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.2 N (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.2 N (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="honorific-prefix">Dr.</span>
- <span class="given-name">John</span>
- <span class="additional-name">Philip</span>
- <span class="additional-name">Paul</span>
- <span class="family-name">Stevenson</span>,
- <span class="honorific-suffix">Jr.</span>,
- <span class="honorific-suffix">M.D.</span>,
- <span class="honorific-suffix">A.C.P.</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-singular.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-singular.xml
deleted file mode 100644
index 07c7ebd057bef8a21408a5d925e42964344699ef..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-2-singular.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.2 N (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Stevenson;John;Philip,Paul;Dr.;Jr.,M.D.,A.C.P.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.2 N (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="honorific-prefixes">Dr.</span>
- <span class="given-name">John</span>
- <ul class="additional-names">
-  <li>Philip</li>
-  <li>Paul</li>
- </ul>
- <span class="family-name">Stevenson</span>, 
- <ul class="honorific-suffixes">
-  <li>Jr.</li>
-  <li>M.D.</li>
-  <li>A.C.P.</li>
- </ul>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-plural.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-plural.xml
deleted file mode 100644
index 69efcb182ef51e68cfb3719311d6a0f02f39e018..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-plural.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.2 N
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Public;John;Quinlan;Mr.;Esq.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.2 N</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="honorific-prefixes">Mr.</span>
- <span class="given-name">John</span>
- <span class="additional-names">Quinlan</span>
- <span class="family-name">Public</span>, 
- <span class="honorific-suffixes">Esq.</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-2-n-singular.xml b/lib/feedparser/tests/microformats/hcard/3-1-2-n-singular.xml
deleted file mode 100644
index 5c4087d2485f7a774fcad5e74fe71bb1c9a9d1be..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-2-n-singular.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.2 N
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nN:Public;John;Quinlan;Mr.;Esq.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.2 N</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="honorific-prefix">Mr.</span>
- <span class="given-name">John</span>
- <span class="additional-name">Quinlan</span>
- <span class="family-name">Public</span>, 
- <span class="honorific-suffix">Esq.</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-plural.xml b/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-plural.xml
deleted file mode 100644
index d2423183b9e740d45db83f71fd293cb6df0464ac..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-plural.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.3 NICKNAME (example 2, plural)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNICKNAME:Jim,Jimmie\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.3 NICKNAME (example 2, plural)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<ul class="nickname"><li>Jim</li><li>Jimmie</li></ul>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-singular.xml b/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-singular.xml
deleted file mode 100644
index 13cb9890d8825fb870bd5125ff2ebc13f70df359..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname-2-singular.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.3 NICKNAME (example 2, singular)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNICKNAME:Jim,Jimmie\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.3 NICKNAME (example 2, singular)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="nickname">Jim</span>, 
-<span class="nickname">Jimmie</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname.xml b/lib/feedparser/tests/microformats/hcard/3-1-3-nickname.xml
deleted file mode 100644
index 84b7f1b665084eeaaccef310b42d2b903a4a662d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-3-nickname.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.3 NICKNAME
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNICKNAME:Robbie\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.3 NICKNAME</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="nickname">Robbie</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-4-photo-inline.xml b/lib/feedparser/tests/microformats/hcard/3-1-4-photo-inline.xml
deleted file mode 100644
index 25e62beba1a0316a3cd38cc4fd7028ef95802e4c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-4-photo-inline.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.4 PHOTO inline
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nPHOTO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzEL\n MAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW\n 9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.4 PHOTO inline</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<img class="photo" src="data:image/jpeg;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0" alt="" />
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-4-photo.xml b/lib/feedparser/tests/microformats/hcard/3-1-4-photo.xml
deleted file mode 100644
index 310284f18a4de2eb9aeae79263ea01a5d781a5b8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-4-photo.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.4 PHOTO
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nPHOTO;VALUE=uri:http://www.abc.com/pub/photos/jqpublic.gif\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.4 PHOTO</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<img class="photo" src="http://www.abc.com/pub/photos/jqpublic.gif" alt="" />
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-2.xml b/lib/feedparser/tests/microformats/hcard/3-1-5-bday-2.xml
deleted file mode 100644
index f6b020d653a0ecae64090207139002b01afa6a8d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.5 BCARD (example 2)
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nBDAY:1993-10-15T23:10:00Z\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.5 BCARD (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="bday" title="1993-10-15T23:10:00Z">Oct 15, 1993</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-3.xml b/lib/feedparser/tests/microformats/hcard/3-1-5-bday-3.xml
deleted file mode 100644
index 3ff0eb3f1d2c55f0c6c0fb7a8ad2a9ececaf70a5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-5-bday-3.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.5 BCARD (example 3)
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nBDAY:1987-09-27T14:30:00Z\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.5 BCARD (example 3)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="bday" title="1987-09-27T08:30:00-06:00">Sept 9, 1987</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-1-5-bday.xml b/lib/feedparser/tests/microformats/hcard/3-1-5-bday.xml
deleted file mode 100644
index 08a2ff3d93f6bc81d437efb9e7d95261589efd66..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-1-5-bday.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.1.5 BCARD
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nBDAY:1996-04-15T00:00:00Z\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.1.5 BCARD</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="bday" title="1996-04-15">April 15, 1996</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-2-1-adr.xml b/lib/feedparser/tests/microformats/hcard/3-2-1-adr.xml
deleted file mode 100644
index b9b37a008f473b4894bdab81384cc77cfecb71ae..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-2-1-adr.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.2.1 ADR
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nADR;TYPE=dom,home,postal,parcel:;;123 Main Street;Any Town;CA;91921-1234\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.2.1 ADR</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<div class="adr">
- <abbr class="type" title="dom">US</abbr>
- <span class="type">home</span> address, for
- <abbr class="type" title="postal">mail</abbr> and
- <abbr class="type" title="parcel">shipments</abbr>:
- <div class="street-address">123 Main Street</div>
- <span class="locality">Any Town</span>, <span class="region">CA</span>, 
- <span class="postal-code">91921-1234</span>
-</div>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-2-2-label.xml b/lib/feedparser/tests/microformats/hcard/3-2-2-label.xml
deleted file mode 100644
index 68624e070bcd772ea86ab0f426f669b6b9bdd0e7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-2-2-label.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.2.2 LABEL
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nLABEL;TYPE=dom,home,postal,parcel:Mr.John Q. Public, Esq.\nMail Drop: TNE QB\n \n123 Main Street\nAny Town, CA  91921-1234\nU.S.A.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.2.2 LABEL</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-Please use the following address label for 
-<div class="label">
- <abbr class="type" title="dom">local delivery</abbr>
- <abbr class="type" title="home">to my home</abbr>
- <abbr class="type" title="postal">of mail</abbr>
- <abbr class="type" title="parcel">and packages:</abbr>
-<pre>
-Mr.John Q. Public, Esq.
-Mail Drop: TNE QB
-123 Main Street
-Any Town, CA  91921-1234
-U.S.A.
-</pre>
-</div>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-3-1-tel.xml b/lib/feedparser/tests/microformats/hcard/3-3-1-tel.xml
deleted file mode 100644
index 0c59d044df05c2a01a1828f977fafad3b8d98ce9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-3-1-tel.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.3.1 TEL
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTEL;TYPE=pref,work,voice,msg:+1-213-555-1234\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.3.1 TEL</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="tel">
- <abbr class="type" title="pref">my</abbr> 
- <span class="type">work</span> 
- <abbr class="type" title="voice">phone</abbr>, with 
- <abbr class="type" title="msg">voicemail</abbr>:
- <span class="value">+1-213-555-1234</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-3-2-email-2.xml b/lib/feedparser/tests/microformats/hcard/3-3-2-email-2.xml
deleted file mode 100644
index 7a2093ec90d0ffc57b95e49940b5a9a610233deb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-3-2-email-2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.3.2 EMAIL (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nEMAIL;TYPE=internet:jdoe@isp.net\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.3.2 EMAIL (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="email" href="mailto:jdoe@isp.net">email jdoe</a>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-3-2-email-3.xml b/lib/feedparser/tests/microformats/hcard/3-3-2-email-3.xml
deleted file mode 100644
index 6864e1e37a3497b44fef92ffe72db0a295668e12..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-3-2-email-3.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.3.2 EMAIL (example 3)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nEMAIL;TYPE=internet,pref:jane_doe@abc.com\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.3.2 EMAIL (example 3)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="email" href="mailto:jane_doe@abc.com">
- <abbr class="type" title="pref">preferred</abbr> 
- email for jane_doe
-</a>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-3-2-email.xml b/lib/feedparser/tests/microformats/hcard/3-3-2-email.xml
deleted file mode 100644
index 6e2715e08ff645468fbb03978bd12023c1a0221a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-3-2-email.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.3.2 EMAIL
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nEMAIL;TYPE=internet:jqpublic@xyz.dom1.com\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.3.2 EMAIL</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="email" href="mailto:jqpublic@xyz.dom1.com">email jqpublic</a>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-3-3-mailer.xml b/lib/feedparser/tests/microformats/hcard/3-3-3-mailer.xml
deleted file mode 100644
index 0f71191dae30ac9cc0a23bef6bb3424287d73d48..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-3-3-mailer.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.3.3 MAILER
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nMAILER:PigeonMail 2.1\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.3.3 MAILER</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-Jane Doe uses <span class="mailer">PigeonMail 2.1</span> for email.
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-4-1-tz-2.xml b/lib/feedparser/tests/microformats/hcard/3-4-1-tz-2.xml
deleted file mode 100644
index 8ac539602d33d6dcadcf0d80a90d50a330fcf016..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-4-1-tz-2.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.4.1 TZ (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTZ:-05:00\\; EST\\; Raleigh/North America\\;This example has a single value\\, \n not a structure text value.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.4.1 TZ (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="tz"
- title="-05:00; EST; Raleigh/North America;This example has a single value, not a structure text value.">
- EST
-</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-4-1-tz.xml b/lib/feedparser/tests/microformats/hcard/3-4-1-tz.xml
deleted file mode 100644
index 999a6025faae58b89b76fd51ebeff8ecc0c98338..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-4-1-tz.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.4.1 TZ
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTZ:-05:00\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.4.1 TZ</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="tz">-05:00</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-4-2-geo.xml b/lib/feedparser/tests/microformats/hcard/3-4-2-geo.xml
deleted file mode 100644
index b62cff56204824bbcb4da4af682851a766203360..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-4-2-geo.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.4.2 GEO
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nGEO:37.386013;-122.082932\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.4.2 GEO</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="geo">
- <span class="latitude">37.386013</span>, 
- <span class="longitude">-122.082932</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-1-title.xml b/lib/feedparser/tests/microformats/hcard/3-5-1-title.xml
deleted file mode 100644
index 2831831a64a9e18692288666663234a051bc82bd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-1-title.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.1 TITLE
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nTITLE:Director\\, Research and Development\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.1 TITLE</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="title">Director, Research and Development</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-2-role.xml b/lib/feedparser/tests/microformats/hcard/3-5-2-role.xml
deleted file mode 100644
index bc11530b0c02f7a7f89b3573398521e9f2a2ec7c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-2-role.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.2 ROLE
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nROLE:Programmer\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.2 ROLE</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="role">Programmer</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-3-logo-2.xml b/lib/feedparser/tests/microformats/hcard/3-5-3-logo-2.xml
deleted file mode 100644
index 4ad497a8ffa81ac91085c2fbf613ba8ef29c3e55..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-3-logo-2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.3 LOGO (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nLOGO;ENCODING=b;TYPE=JPEG:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELM\n AkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9\n uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.3 LOGO (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<img class="logo" src="data:image/jpeg;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0" alt="" />
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-3-logo.xml b/lib/feedparser/tests/microformats/hcard/3-5-3-logo.xml
deleted file mode 100644
index 6e5f7bd76da90a827a237b1a1c14ae4e5dcacc41..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-3-logo.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.3 LOGO
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nLOGO;VALUE=uri:http://www.abc.com/pub/logos/abccorp.jpg\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.3 LOGO</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<img class="logo" src="http://www.abc.com/pub/logos/abccorp.jpg" alt="my logo" />
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-4-agent-2.xml b/lib/feedparser/tests/microformats/hcard/3-5-4-agent-2.xml
deleted file mode 100644
index 329eae1c840c86464a400fa5f3fc178a47c4d568..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-4-agent-2.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.4 AGENT (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nAGENT:BEGIN:vCard\\nVERSION:3.0\\nFN:Susan Thomas\\nN:\\nTEL\\;TYPE=voice:+1-919\n -555-1234\\nEMAIL\\;TYPE=internet:sthomas@host.com\\nEND:vCard\\n\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.4 AGENT (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="agent vcard">
- <a class="email fn n" href="mailto:sthomas@host.com">Susan Thomas</a>,
- <span class="tel">+1-919-555-1234</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-4-agent.xml b/lib/feedparser/tests/microformats/hcard/3-5-4-agent.xml
deleted file mode 100644
index 8e53253c4d98fba084014d089501deb1da062b9f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-4-agent.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.4 AGENT
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nAGENT;VALUE=uri:cid:JQPUBLIC.part3.960129T083020.xyzMail@host3.com\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.4 AGENT</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="agent" href="cid:JQPUBLIC.part3.960129T083020.xyzMail@host3.com">JQPUBLIC</a>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-5-5-org.xml b/lib/feedparser/tests/microformats/hcard/3-5-5-org.xml
deleted file mode 100644
index 8f2d7b82dedfd03e7aae1d577d8701569ef99a72..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-5-5-org.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.5.5 ORG
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nORG:ABC\\, Inc.;North American Division;Marketing\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.5.5 ORG</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="org">
- <span class="organization-name">ABC, Inc.</span>, 
- <span class="organization-unit">North American Division</span>,
- <span class="organization-unit">Marketing</span>,
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-plural.xml b/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-plural.xml
deleted file mode 100644
index 93908196d35173ab12650033d954f437a2cf7a23..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-plural.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.1 CATEGORIES (example 2, plural)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nCATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.1 CATEGORIES (example 2, plural)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<ul class="categories">
- <li>INTERNET</li>
- <li>IETF</li>
- <li>INDUSTRY</li>
- <li>INFORMATION TECHNOLOGY</li>
-</ul>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-singular.xml b/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-singular.xml
deleted file mode 100644
index fa2ac06631396403e741b1e84bfe1ec40a769c98..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-1-categories-2-singular.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.1 CATEGORIES (example 2, singular)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nCATEGORIES:INTERNET,IETF,INDUSTRY,INFORMATION TECHNOLOGY\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.1 CATEGORIES (example 2, singular)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="category">INTERNET</span>, 
-<span class="category">IETF</span>, 
-<span class="category">INDUSTRY</span>, 
-<span class="category">INFORMATION TECHNOLOGY</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-1-categories.xml b/lib/feedparser/tests/microformats/hcard/3-6-1-categories.xml
deleted file mode 100644
index 68382508fdac08f65b12b2ad1e2ff3009c12e942..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-1-categories.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.1 CATEGORIES
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nCATEGORIES:TRAVEL AGENT\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.1 CATEGORIES</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="categories">TRAVEL AGENT</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-2-note.xml b/lib/feedparser/tests/microformats/hcard/3-6-2-note.xml
deleted file mode 100644
index 1f37e624b7213dd93be977cc71b8ff81a620938c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-2-note.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.2 NOTE
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nNOTE:This fax number is operational 0800 to 1715 EST\\, Mon-Fri.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.2 NOTE</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<p class="note">This fax number is operational 0800 to 1715 EST, Mon-Fri.</p>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-4-rev-2.xml b/lib/feedparser/tests/microformats/hcard/3-6-4-rev-2.xml
deleted file mode 100644
index 24fb039700a781ad550cf2715c90b5c6a1d27fc0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-4-rev-2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.4 REV (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nREV:1997-11-15\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.4 REV (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="rev" title="1997-11-15">Updated: November 15</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-4-rev.xml b/lib/feedparser/tests/microformats/hcard/3-6-4-rev.xml
deleted file mode 100644
index bd6daf93bc67613e95a438fe8c4489d7c6c5f4e8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-4-rev.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.4 REV
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nREV:1995-10-31T22:27:10Z\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.4 REV</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<abbr class="rev" title="1995-10-31T22:27:10Z">Updated: 10/31 10:27p</abbr>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-2.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-2.xml
deleted file mode 100644
index ca80cd8633ee8939cba5c5cb7ced9a595565f47f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-2.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.5 SORT-STRING (example 2)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Robert Pau Shou Chang\nN:Pau;Shou Chang;Robert\nSORT-STRING:Pau\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.5 SORT-STRING (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="fn n">
- <span class="additional-names">Robert</span>
- <span class="family-name sort-string">Pau</span>
- <span class="given-name">Shou Chang</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-3.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-3.xml
deleted file mode 100644
index 72e36ee990c61fd2757f9c77f220a6de4c54e337..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-3.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.5 SORT-STRING (example 3)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Osamu Koura\nN:Koura;Osamu\nSORT-STRING:Koura\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.5 SORT-STRING (example 3)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="fn">
- Osamu <span class="sort-string">Koura</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-4.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-4.xml
deleted file mode 100644
index 00857ff7447d4f5ba7a3f33d9ba3cb72f38b9915..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-4.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.5 SORT-STRING (example 4)
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Oscar del Pozo\nN:del Pozo Triscon;Oscar\nSORT-STRING:Pozo\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.5 SORT-STRING (example 4)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="fn">
-  <span class="given-name">Oscar</span>
-  del <span class="sort-string">Pozo</span>
- </span>
- <span class="family-name" style="display:none">
-  del Pozo Triscon
- </span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-5.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-5.xml
deleted file mode 100644
index 715e4100f3b063d12856412366bf743f7871cb01..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string-5.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.5 SORT-STRING (example 5)
-Expect:      not bozo and entries[0].vcard == u"BEGIN:vCard\nVERSION:3.0\nFN:Christine d'Aboville\nN:d'Aboville;Christine\nSORT-STRING:Aboville\nEND:vCard"
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.5 SORT-STRING (example 5)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="fn">
- Christine d'<span class="sort-string">Aboville</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string.xml b/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string.xml
deleted file mode 100644
index a5ee5c16134bd9d1bb69b30f6ab5cf27fdbbf7de..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-5-sort-string.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.5 SORT-STRING
-Expect:      not bozo and entries[0].vcard == u'BEGIN:vCard\nVERSION:3.0\nFN:Rene van der Harten\nN:van der Harten;Rene;J.;Sir;R.D.O.N.\nSORT-STRING:Harten\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.5 SORT-STRING</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="n">
- <span class="honorific-prefixes">Sir</span>
- <span class="fn">
-  <span class="given-name">Rene</span>
-  <span class="family-name">
-   van der <span class="sort-string">Harten</span>
-  </span>
- </span>
- (<span class="additional-names">J.</span>),
- <span class="honorific-suffixes">R.D.O.N.</span>
-</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-6-sound-2.xml b/lib/feedparser/tests/microformats/hcard/3-6-6-sound-2.xml
deleted file mode 100644
index 29e138de731ab1d0d7f1fc430f07af13681bed12..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-6-sound-2.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.6 SOUND (example 2)
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nSOUND;ENCODING=b;TYPE=BASIC:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzE\n LMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0a\n W9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.6 SOUND (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<object class="sound" 
-data="data:audio/basic;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0">
-pronounciation
-</object>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-6-sound.xml b/lib/feedparser/tests/microformats/hcard/3-6-6-sound.xml
deleted file mode 100644
index 4c130bee8c21217d2adc31bdf1cbc54ca5c917b7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-6-sound.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.6 SOUND
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nSOUND;TYPE=BASIC;VALUE=uri:cid:JOHNQPUBLIC.part8.19960229T080000.xyzMail@ho\n st1.com\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.6 SOUND</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<object class="sound" type="audio/basic"
- data="cid:JOHNQPUBLIC.part8.19960229T080000.xyzMail@host1.com">
-pronounciation of "JOHN Q PUBLIC"
-</object>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-7-uid.xml b/lib/feedparser/tests/microformats/hcard/3-6-7-uid.xml
deleted file mode 100644
index da10a9d18a43d1a56c645bd11b52d6b5d0f0dcaa..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-7-uid.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.7 UID
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nUID:19950401-080045-40000F192713-0052\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.7 UID</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-Unique id: 
- <span class="uid">19950401-080045-40000F192713-0052</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-6-8-url.xml b/lib/feedparser/tests/microformats/hcard/3-6-8-url.xml
deleted file mode 100644
index dc1a1c6ec4befc03d3fc84f3496fa8eecafb19b2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-6-8-url.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.6.8 URL
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nURL:http://www.swbyps.restaurant.french/~chezchic.html\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.6.8 URL</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="url" href="http://www.swbyps.restaurant.french/~chezchic.html">Chez Chic</a>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-7-1-class-2.xml b/lib/feedparser/tests/microformats/hcard/3-7-1-class-2.xml
deleted file mode 100644
index 2ddcfa2d777606b85b22a35da9eb8740dbac91f6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-7-1-class-2.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.7.1 CLASS (example 2)
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nCLASS:PRIVATE\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.7.1 CLASS (example 2)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="class">PRIVATE</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-7-1-class-3.xml b/lib/feedparser/tests/microformats/hcard/3-7-1-class-3.xml
deleted file mode 100644
index 3be1a8896d790f117c281469a544bec3a1943cf9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-7-1-class-3.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.7.1 CLASS (example 3)
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nCLASS:CONFIDENTIAL\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.7.1 CLASS (example 3)</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="class">CONFIDENTIAL</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-7-1-class.xml b/lib/feedparser/tests/microformats/hcard/3-7-1-class.xml
deleted file mode 100644
index 795de978693d608487481932ea33745d0aa0c540..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-7-1-class.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.7.1 CLASS
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nCLASS:PUBLIC\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.7.1 CLASS</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<span class="class">PUBLIC</span>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/3-7-2-key.xml b/lib/feedparser/tests/microformats/hcard/3-7-2-key.xml
deleted file mode 100644
index c0fc56f81ecbd1efd52878ca6603b2c7c4380b02..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/3-7-2-key.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 3.7.2 KEY
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nKEY;ENCODING=b:MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMC\n VVMxLDAqBgNVBAoTI05ldHNjYXBlIENbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQ\n LExNJbmZvcm1hdGlvbiBTeXN0ZW1zMRwwGgYDVQQDExNyb290Y2EubmV0c2NhcGUuY29tMB4XD\n Tk3MDYwNjE5NDc1OVoXDTk3MTIwMzE5NDc1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYDVQQKEx1\n OZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLjEYMBYGA1UEAxMPVGltb3RoeSBBIEhvd2VzM\n SEwHwYJKoZIhvcNAQkBFhJob3dlc0BuZXRzY2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3d\n lczBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyr\n dN2dXcoX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MBEGCWCGSAGG+EI\n BAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau+hUMbsQukjANBgkqhkiG9w0BAQQFA\n AOBgQBexv7o7mi3PLXadkmNP9LcIPmx93HGp0Kgyx1jIVMyNgsemeAwBM+MSlhMfcpbTrONwNj\n ZYW8vJDSoi//yrZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8VUMk1U7jt8LYpo4YULU7UZH\n PYVUaSgVttImOHZIKi4hlPXBOhcUQ==\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>3.7.2 KEY</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<object class="key"
- data="data:application/octet-stream;base64,MIICajCCAdOgAwIBAgICBEUwDQYJKoZIhvcNAQEEBQAwdzELMAkGA1UEBhMCVVMxLDAqBgNVBAoTI05ldHNjYXBlIENbW11bmljYXRpb25zIENvcnBvcmF0aW9uMRwwGgYDVQQLExNJbmZvcm1hdGlvbiBTeXN0ZW1zMRwwGgYDVQQDExNyb290Y2EubmV0c2NhcGUuY29tMB4XDTk3MDYwNjE5NDc1OVoXDTk3MTIwMzE5NDc1OVowgYkxCzAJBgNVBAYTAlVTMSYwJAYDVQQKEx1OZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3JwLjEYMBYGA1UEAxMPVGltb3RoeSBBIEhvd2VzMSEwHwYJKoZIhvcNAQkBFhJob3dlc0BuZXRzY2FwZS5jb20xFTATBgoJkiaJk/IsZAEBEwVob3dlczBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC0JZf6wkg8pLMXHHCUvMfL5H6zjSk4vTTXZpYyrdN2dXcoX49LKiOmgeJSzoiFKHtLOIboyludF90CgqcxtwKnAgMBAAGjNjA0MBEGCWCGSAGG+EIBAQQEAwIAoDAfBgNVHSMEGDAWgBT84FToB/GV3jr3mcau+hUMbsQukjANBgkqhkiG9w0BAQQFAAOBgQBexv7o7mi3PLXadkmNP9LcIPmx93HGp0Kgyx1jIVMyNgsemeAwBM+MSlhMfcpbTrONwNjZYW8vJDSoi//yrZlVt9bJbs7MNYZVsyF1unsqaln4/vy6Uawfg8VUMk1U7jt8LYpo4YULU7UZHPYVUaSgVttImOHZIKi4hlPXBOhcUQ==">
-Key
-</object>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/hcard/7-authors.xml b/lib/feedparser/tests/microformats/hcard/7-authors.xml
deleted file mode 100644
index 5c134fe12aaa0b61babff1d9a6460a7a2f727c41..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/hcard/7-authors.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: 7. Authors
-Expect:      not bozo and entries[0].vcard == 'BEGIN:vCard\nVERSION:3.0\nFN:Frank Dawson\nN:Dawson;Frank\nADR;TYPE=work,postal,parcel:;;6544 Battleford Drive;Raleigh;NC;27613-3502;U\n .S.A.\nTEL;TYPE=WORK,VOICE,MSG:+1-919-676-9515\nTEL;TYPE=WORK,FAX:+1-919-676-9564\nEMAIL;TYPE=internet,pref:Frank_Dawson@Lotus.com\nEMAIL;TYPE=internet:fdawson@earthlink.net\nORG:Lotus Development Corporation\nURL:http://home.earthlink.net/~fdawson\nEND:vCard\nBEGIN:vCard\nVERSION:3.0\nFN:Tim Howes\nN:Howes;Tim\nADR;TYPE=work:;;501 E. Middlefield Rd.;Mountain View;CA;94043;U.S.A.\nTEL;TYPE=WORK,VOICE,MSG:+1-415-937-3419\nTEL;TYPE=WORK,FAX:+1-415-528-4164\nEMAIL;TYPE=internet:howes@netscape.com\nORG:Netscape Communications Corp.\nEND:vCard'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title>7. Authors</title>
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<div class="vcard">
-<a class="url fn" href="http://home.earthlink.net/~fdawson">Frank Dawson</a>
-<div class="org">Lotus Development Corporation</div>
-<div class="adr">
- <span class="type">work</span> address 
-(<abbr class="type" title="postal">mail</abbr> and
- <abbr class="type" title="parcel">packages</abbr>):
- <div class="street-address">6544 Battleford Drive</div>
- <span class="locality">Raleigh</span>
- <span class="region">NC</span>
- <span class="postal-code">27613-3502</span>
- <div class="country-name">U.S.A.</div>
-</div>
-<div class="tel">
- <span class="value">+1-919-676-9515</span> 
-(<abbr class="type" title="WORK">w</abbr>,
- <abbr class="type" title="VOICE">v</abbr><abbr class="type" title="MSG">m</abbr>)
-</div>
-<div class="tel">
- <span class="value">+1-919-676-9564</span>
-(<abbr class="type" title="WORK">w</abbr><abbr class="type" title="FAX">f</abbr>)
-</div>
-<a class="email" href="mailto:Frank_Dawson@Lotus.com">
- <span class="type">pref</span>erred email
-</a>,
-<a class="email" href="mailto:fdawson@earthlink.net">
- alternate email
-</a>
-</div>
-<div class="vcard">
-<a class="email fn" href="mailto:howes@netscape.com">Tim Howes</a>
-<div class="org">Netscape Communications Corp.</div>
-<div class="adr">
- <span class="type">work</span> address:
- <div class="street-address">501 E. Middlefield Rd.</div>
- <span class="locality">Mountain View</span>, 
- <span class="region">CA</span>
- <span class="postal-code">94043</span>
- <div class="country-name">U.S.A.</div>
-</div>
-<div class="tel">
- <span class="value">+1-415-937-3419</span> 
-(<abbr class="type" title="WORK">w</abbr>,
- <abbr class="type" title="VOICE">v</abbr><abbr class="type" title="MSG">m</abbr>)
-</div>
-<div class="tel">
- <span class="value">+1-415-528-4164</span>
-(<abbr class="type" title="WORK">w</abbr><abbr class="type" title="FAX">f</abbr>)
-</div>
-</div>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href.xml
deleted file mode 100644
index bc86bacf04afef4a8fd5395ec36ceec9c0906cd2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/movie.mp4'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_avi.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_avi.xml
deleted file mode 100644
index 02ba14fbb59d9b3c7c5f2ccb156c2a2857991261..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_avi.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.avi'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.avi">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bin.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bin.xml
deleted file mode 100644
index 069e3abb49307c2dff7f908546d388aa49e6b320..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bin.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.bin'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.bin">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bz2.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bz2.xml
deleted file mode 100644
index ad3e8721d475b5c307c4e89eb46c5023c81dc1d4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_bz2.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.bz2'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.bz2">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_deb.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_deb.xml
deleted file mode 100644
index 602638eaeef80321583b1b448586d84f48d78e20..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_deb.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.deb'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.deb">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_dmg.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_dmg.xml
deleted file mode 100644
index d0e74b20eba8a4376306af01e7562a33f603f61a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_dmg.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.dmg'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.dmg">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_exe.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_exe.xml
deleted file mode 100644
index 73fd39f21c9443a5f8d942ac8739841d33be713c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_exe.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.exe'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.exe">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_gz.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_gz.xml
deleted file mode 100644
index 9c95cdb8109d51f8ba0353d097aae4b7e63a03b9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_gz.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.gz'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.gz">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_hqx.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_hqx.xml
deleted file mode 100644
index 4047a729d0bcf52433e7029113881a2c40825df2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_hqx.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.hqx'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.hqx">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_img.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_img.xml
deleted file mode 100644
index 322125ea933abfa618b21fd1b5a17aab37a0cefd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_img.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.img'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.img">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_iso.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_iso.xml
deleted file mode 100644
index 683add447f3cb5f4ed01814793bb8ddeef087e15..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_iso.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.iso'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.iso">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_jar.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_jar.xml
deleted file mode 100644
index e39f8325c6b7cf74f45c145d16c1869d14006cf5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_jar.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.jar'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.jar">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4a.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4a.xml
deleted file mode 100644
index 84fc77825121166ec0fb09fecfe7dfb7b547fd25..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4a.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.m4a'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.m4a">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4v.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4v.xml
deleted file mode 100644
index b3dcd9091b1a5130d2f7dae9e53e61087fe854b3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_m4v.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.m4v'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.m4v">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp2.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp2.xml
deleted file mode 100644
index 3d3c6c70bf8b56da8be94ac936ae42089dd8ed0f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp2.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.mp2'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.mp2">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp3.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp3.xml
deleted file mode 100644
index c67a4143998698005dda7f246d3697b0278cfcb6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp3.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.mp3'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.mp3">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp4.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp4.xml
deleted file mode 100644
index e10bb622b063d6b021c00366a36f83725ad62fd1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_mp4.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.mp4'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.mp4">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_msi.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_msi.xml
deleted file mode 100644
index fcf83d2c38e79f3cdb03a42af7689408b3a45eb9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_msi.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.msi'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.msi">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_ogg.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_ogg.xml
deleted file mode 100644
index 4547dda097ee17ed2a5cf47abdab435e323e11c1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_ogg.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.ogg'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.ogg">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rar.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rar.xml
deleted file mode 100644
index 81a56ee0e431d4b55939da0a71bbc4e31023d559..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rar.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.rar'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.rar">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rpm.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rpm.xml
deleted file mode 100644
index e635cf2468a2b828485790e8decfc5c5cfa50751..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_rpm.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.rpm'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.rpm">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sit.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sit.xml
deleted file mode 100644
index fb3845a7a14a8cf01a66eea4f31aad8a381e4274..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sit.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.sit'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.sit">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sitx.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sitx.xml
deleted file mode 100644
index 5ac2cb294ad8e8894ba7d5067b4ada0973e6a3ad..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_sitx.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.sitx'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.sitx">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tar.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tar.xml
deleted file mode 100644
index 1ad3e78e2cf838ce7f0e6b5691413b8bc62396e9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tar.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.tar'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.tar">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tbz2.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tbz2.xml
deleted file mode 100644
index c53147bdcc4a7fd9b1edc38c5fce1b703e428c82..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tbz2.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.tbz2'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.tbz2">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tgz.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tgz.xml
deleted file mode 100644
index 676fb48ab3c32b54b7f7ccd18801cf958b31dec8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_tgz.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.tgz'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.tgz">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wma.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wma.xml
deleted file mode 100644
index 626d6ba47df0cd12f84a9de5a7b607c8e1711de1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wma.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.wma'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.wma">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wmv.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wmv.xml
deleted file mode 100644
index 4f1931b2b531ac78cdddc42221bb235ad94922d8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_wmv.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.wmv'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.wmv">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_z.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_z.xml
deleted file mode 100644
index ed2bc37ac85725e9719aa1e7edb23af7178cf148..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_z.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.z'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.z">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_zip.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_zip.xml
deleted file mode 100644
index ba6759c2f3a4c6b3a230b850fa1f79e886b951d3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_ext_zip.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/enclosure.zip'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/enclosure.zip">click here</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_application_ogg.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_application_ogg.xml
deleted file mode 100644
index 1ccbe63a67f2ae5998c3e302d9ab2b514b8f9ecd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_application_ogg.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/generate-enclosure.php'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/generate-enclosure.php" type="application/ogg">my song</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_audio.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_audio.xml
deleted file mode 100644
index 908e9016284dacd1fe3d01d6a6ad9544e4326e08..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_audio.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/generate-audio.php'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/generate-audio.php" type="audio/aiff">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_video.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_video.xml
deleted file mode 100644
index 6ac974795df8ad299da5807057d1e3b888ddb046..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_autodetect_by_type_video.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://example.com/generate-movie.php'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/generate-movie.php" type="video/mpeg">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_invalid.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_invalid.xml
deleted file mode 100644
index 0cf5716f88ce6c3e05df2e9c506739c8920414a9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_href_invalid.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: ensure that isProbablyDownloadable() will not throw ValueError on a bad URL
-Expect:      not bozo
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://bad]test">isProbablyDownloadable crasher</a></p>
-</div>
-</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect.xml
deleted file mode 100644
index 18a5fd469f0f7e10ec47fbaf471046799e88aa16..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and not entries[0].has_key('enclosures')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/generate-enclosure.php">my song</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect_xml.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect_xml.xml
deleted file mode 100644
index b5d2d3a7f9e7dc3101674b0fe942003b9c628bcf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_no_autodetect_xml.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and not entries[0].has_key('enclosures')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a href="http://example.com/generate-enclosure.php" type="application/atom+xml">my song</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title.xml
deleted file mode 100644
index ba812b5caa9f02198d41c2668bafc4ecb563924c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['title'] == u'my movie'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg" title="my movie"></a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_from_link_text.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_from_link_text.xml
deleted file mode 100644
index b69d85e76b62baf3c90c9e3aac550807af63f2b4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_from_link_text.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['title'] == u'my movie'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_overrides_link_text.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_overrides_link_text.xml
deleted file mode 100644
index 79c2a713204f1667a97fa878a102951026896e25..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_title_overrides_link_text.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['title'] == u'real title'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg" title="real title">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_type.xml b/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_type.xml
deleted file mode 100644
index bc6ced7ed7addd5400ca378304f46a00efc38da1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_enclosure/rel_enclosure_type.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='enclosure' link
-Expect:      not bozo and entries[0]['enclosures'][0]['type'] == u'video/mpeg'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="enclosure" href="http://example.com/movie.mp4" type="video/mpeg">my movie</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_duplicate.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_duplicate.xml
deleted file mode 100644
index 62ae4950de71d562c1575b28913ffc4839e6ec8f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_duplicate.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains duplicate rel='tag' link
-Expect:      not bozo and len(entries[0]['tags']) == 1
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<category term="tech" scheme="http://del.icio.us/tag/" label="Technology"/>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_label.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_label.xml
deleted file mode 100644
index 81aacadb07f2ac3cbc93dec6087e0fbf133df303..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_label.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='tag' link
-Expect:      not bozo and entries[0]['tags'][0]['label'] == u'Technology'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_scheme.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_scheme.xml
deleted file mode 100644
index 50a115e273dac24f1b1e573953d3ca53609028cd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_scheme.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='tag' link
-Expect:      not bozo and entries[0]['tags'][0]['scheme'] == u'http://del.icio.us/tag/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_term.xml
deleted file mode 100644
index c7876530379b2184b0c148ae9eec97d41b69d0ac..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='tag' link
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'tech'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="tag" href="http://del.icio.us/tag/tech">Technology</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term_trailing_slash.xml b/lib/feedparser/tests/microformats/rel_tag/rel_tag_term_trailing_slash.xml
deleted file mode 100644
index 56f75e2b29e991a738974e4c01311ff4db4b0ffc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/rel_tag/rel_tag_term_trailing_slash.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains rel='tag' link
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'tech'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="tag" href="http://del.icio.us/tag/tech/">Technology</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_acquaintance.xml b/lib/feedparser/tests/microformats/xfn/xfn_acquaintance.xml
deleted file mode 100644
index aef6e37627865bb215d95ed105923a0267895438..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_acquaintance.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'acquaintance']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="acquaintance" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_brother.xml b/lib/feedparser/tests/microformats/xfn/xfn_brother.xml
deleted file mode 100644
index eb201bf0abfeef81be8ec6bd404c6140948ef759..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_brother.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'brother']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="brother" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_child.xml b/lib/feedparser/tests/microformats/xfn/xfn_child.xml
deleted file mode 100644
index 507d91bb1d1c441319a4551d9a2e37085516a698..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_child.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'child']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="child" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_co-resident.xml b/lib/feedparser/tests/microformats/xfn/xfn_co-resident.xml
deleted file mode 100644
index 10267a9a47857a6af59d92d3ae4786529f40891b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_co-resident.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'co-resident']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="co-resident" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_co-worker.xml b/lib/feedparser/tests/microformats/xfn/xfn_co-worker.xml
deleted file mode 100644
index c385aeec1609ad7e7990f2141656b50360144e39..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_co-worker.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'co-worker']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="co-worker" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_colleague.xml b/lib/feedparser/tests/microformats/xfn/xfn_colleague.xml
deleted file mode 100644
index 9a8ca3b1c0b3234e24d89890ec99f6232938a0bd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_colleague.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'colleague']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="colleague" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_contact.xml b/lib/feedparser/tests/microformats/xfn/xfn_contact.xml
deleted file mode 100644
index 8ba482e62e65a0cd37929ccc14ad5b7c87220750..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_contact.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'contact']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="contact" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_coresident.xml b/lib/feedparser/tests/microformats/xfn/xfn_coresident.xml
deleted file mode 100644
index 64ecec5edab0ea2e8e367b02a665d847e3cd2da0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_coresident.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'coresident']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="coresident" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_coworker.xml b/lib/feedparser/tests/microformats/xfn/xfn_coworker.xml
deleted file mode 100644
index 9217d400416ce304343cefbed5124ced51ec8e07..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_coworker.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'coworker']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="coworker" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_crush.xml b/lib/feedparser/tests/microformats/xfn/xfn_crush.xml
deleted file mode 100644
index f5675382a073696d9a35614643e82762d96b2783..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_crush.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'crush']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="crush" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_date.xml b/lib/feedparser/tests/microformats/xfn/xfn_date.xml
deleted file mode 100644
index 1048765010217b22cca7a35619dc673329536e6a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_date.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'date']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="date" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_friend.xml b/lib/feedparser/tests/microformats/xfn/xfn_friend.xml
deleted file mode 100644
index b70aa2a360b5169501b8c8c4d906bad7fe77bba3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_friend.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'friend']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="friend" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_href.xml b/lib/feedparser/tests/microformats/xfn/xfn_href.xml
deleted file mode 100644
index e05a65914126b5561784467a112eaa2550617e6a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_href.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['href'] == u'http://example.com/johndoe'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="coworker" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_husband.xml b/lib/feedparser/tests/microformats/xfn/xfn_husband.xml
deleted file mode 100644
index e68275bc6dfc97f9d8b590cd2dac8fbbf66474df..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_husband.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'husband']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="husband" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_kin.xml b/lib/feedparser/tests/microformats/xfn/xfn_kin.xml
deleted file mode 100644
index 1d07e07966e9cb4fccbc2738825689b83f643541..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_kin.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'kin']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="kin" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_me.xml b/lib/feedparser/tests/microformats/xfn/xfn_me.xml
deleted file mode 100644
index cffd9fdedb2a5e2914acbbc4043363c2fa6f8a25..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_me.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'me']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="me" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_met.xml b/lib/feedparser/tests/microformats/xfn/xfn_met.xml
deleted file mode 100644
index f8df859efe7c75c1471581c57cff486e546d8222..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_met.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'met']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="met" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_multiple.xml b/lib/feedparser/tests/microformats/xfn/xfn_multiple.xml
deleted file mode 100644
index 9574495ded268b60af41233a93d259f54896d5f1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_multiple.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'coworker', u'friend']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="coworker friend" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_muse.xml b/lib/feedparser/tests/microformats/xfn/xfn_muse.xml
deleted file mode 100644
index 7832f542bc3523cdf96d0bc5acdb4dc96cb447fd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_muse.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'muse']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="muse" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_name.xml b/lib/feedparser/tests/microformats/xfn/xfn_name.xml
deleted file mode 100644
index cd1e9c377000b265261f37a13229470073a27955..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_name.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['name'] == u'John Doe'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="coworker" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_neighbor.xml b/lib/feedparser/tests/microformats/xfn/xfn_neighbor.xml
deleted file mode 100644
index 6b1b1aae24cbdfa891af80623f0dd877df3e75cf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_neighbor.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'neighbor']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="neighbor" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_parent.xml b/lib/feedparser/tests/microformats/xfn/xfn_parent.xml
deleted file mode 100644
index 13739d324cf85f44f9ddc0cd5e69d602a4c11ba6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_parent.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'parent']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="parent" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_relative.xml b/lib/feedparser/tests/microformats/xfn/xfn_relative.xml
deleted file mode 100644
index 06e5e37143a3af2bd2e3c88cbfe23f5cb3d1071e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_relative.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'relative']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="relative" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_sibling.xml b/lib/feedparser/tests/microformats/xfn/xfn_sibling.xml
deleted file mode 100644
index 7c12ed3cd9ff0db3687a6ca0f492e8f9da32b297..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_sibling.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'sibling']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="sibling" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_sister.xml b/lib/feedparser/tests/microformats/xfn/xfn_sister.xml
deleted file mode 100644
index 411ac9832ea437ec4bfbea9a966a855fa4d80b60..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_sister.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'sister']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="sister" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_spouse.xml b/lib/feedparser/tests/microformats/xfn/xfn_spouse.xml
deleted file mode 100644
index 157f26a54256be7d4517fe61850f1cce0231401f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_spouse.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'spouse']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="spouse" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_sweetheart.xml b/lib/feedparser/tests/microformats/xfn/xfn_sweetheart.xml
deleted file mode 100644
index 427156123f3c98db5cc3389eec54d439d96a7469..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_sweetheart.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'sweetheart']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="sweetheart" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/microformats/xfn/xfn_wife.xml b/lib/feedparser/tests/microformats/xfn/xfn_wife.xml
deleted file mode 100644
index 529b7af91bcf3353a73a886b6913ac831cba05f1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/microformats/xfn/xfn_wife.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: content contains XFN link
-Expect:      not bozo and entries[0]['xfn'][0]['relationships'] == [u'wife']
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml">
-<div xmlns="http://www.w3.org/1999/xhtml">
-<p><a rel="wife" href="http://example.com/johndoe">John Doe</a></p>
-</div>
-</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/amp01.xml b/lib/feedparser/tests/wellformed/amp/amp01.xml
deleted file mode 100644
index 3ca45835355386c2f67bd8c9a8851e724eb9b5b1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp01.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 1
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#38;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#38;#38;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp02.xml b/lib/feedparser/tests/wellformed/amp/amp02.xml
deleted file mode 100644
index 86e049f597110fb20c068a985eb38f4512e030c9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp02.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 2
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#x26;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#38;#x26;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp03.xml b/lib/feedparser/tests/wellformed/amp/amp03.xml
deleted file mode 100644
index 8fe783013f4db0b47348a5b8766dd61f21f5179a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp03.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 3
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title>&#38;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp04.xml b/lib/feedparser/tests/wellformed/amp/amp04.xml
deleted file mode 100644
index 7df221df0cb40d0aa201048c15e311396ad228fc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp04.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 4
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&amp;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#38;amp;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp05.xml b/lib/feedparser/tests/wellformed/amp/amp05.xml
deleted file mode 100644
index 4a8a46e323519c627c6222b7677322c3c4d10061..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp05.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 5
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#38;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#x26;#38;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp06.xml b/lib/feedparser/tests/wellformed/amp/amp06.xml
deleted file mode 100644
index 5a59cd4ddbae5e5a881bccebf0d5fad5b51ab3c2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp06.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 6
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#x26;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#x26;#x26;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp07.xml b/lib/feedparser/tests/wellformed/amp/amp07.xml
deleted file mode 100644
index a324d4ba17a26338d3e28b16e64093eb4a18d61e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp07.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 7
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title>&#x26;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp08.xml b/lib/feedparser/tests/wellformed/amp/amp08.xml
deleted file mode 100644
index 42ac2c70c3c58d150c0ca0ce76b91a194db5afd0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp08.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 8
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&amp;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&#x26;amp;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp09.xml b/lib/feedparser/tests/wellformed/amp/amp09.xml
deleted file mode 100644
index b634a90fd126012470be86635a7d02d86c122f59..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp09.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 9
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#38;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&amp;#38;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp10.xml b/lib/feedparser/tests/wellformed/amp/amp10.xml
deleted file mode 100644
index 87a050c522d0fc7ec4eadd9e42676b051b012a19..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp10.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 10
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#x26;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&amp;#x26;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp11.xml b/lib/feedparser/tests/wellformed/amp/amp11.xml
deleted file mode 100644
index 2b8d57447501caa5afe8b95dfaa7ca7714be757f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp11.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 11
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title>&amp;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp12.xml b/lib/feedparser/tests/wellformed/amp/amp12.xml
deleted file mode 100644
index ff9622c7776ebce89354a3ac92a44fb7c8d71c0c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp12.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 12
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&amp;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&amp;amp;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp13.xml b/lib/feedparser/tests/wellformed/amp/amp13.xml
deleted file mode 100644
index 486ce4858a83c74d7cc565313d3fefd09c425450..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp13.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 13
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#38;#38;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp14.xml b/lib/feedparser/tests/wellformed/amp/amp14.xml
deleted file mode 100644
index fc60ae17dc50c36607828e580e32d9b5f3803ef0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp14.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 14
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#38;#x26;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp15.xml b/lib/feedparser/tests/wellformed/amp/amp15.xml
deleted file mode 100644
index f2fecbdd475ffa61893682158ba99162d8aa2ccc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp15.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 15
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#38;amp;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp16.xml b/lib/feedparser/tests/wellformed/amp/amp16.xml
deleted file mode 100644
index 92ab7e45ba5361633d1b300d3163bc28727c4dc0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp16.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 16
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#x26;#38;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp17.xml b/lib/feedparser/tests/wellformed/amp/amp17.xml
deleted file mode 100644
index 1a4f2fa0131d8ad9ecc96b8d8a3537f4be899bcd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp17.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 17
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#x26;#x26;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp18.xml b/lib/feedparser/tests/wellformed/amp/amp18.xml
deleted file mode 100644
index dda68b05a91736b723218dedbddddc50bfc9bd77..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp18.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 18
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&#x26;amp;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp19.xml b/lib/feedparser/tests/wellformed/amp/amp19.xml
deleted file mode 100644
index 168e7446be973e70f1fc86ddafb91fd043b59525..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp19.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 19
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&amp;#38;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp20.xml b/lib/feedparser/tests/wellformed/amp/amp20.xml
deleted file mode 100644
index d105aba1baa2a41237ca52b9d5f14ed0c5ea0a63..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp20.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 20
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&amp;#x26;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp21.xml b/lib/feedparser/tests/wellformed/amp/amp21.xml
deleted file mode 100644
index 15b987d8e8c825a852c21a2e70b5c1bc1d58e6cb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp21.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 21
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b&gt;&amp;amp;&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp22.xml b/lib/feedparser/tests/wellformed/amp/amp22.xml
deleted file mode 100644
index a54b0aa6e3e5563300b8fb29cf7afac0c62e9746..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp22.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 22
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#38;#38;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp23.xml b/lib/feedparser/tests/wellformed/amp/amp23.xml
deleted file mode 100644
index c4b09b534383e922718af4cb6811bbc1bc39d951..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp23.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 23
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#38;#x26;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp24.xml b/lib/feedparser/tests/wellformed/amp/amp24.xml
deleted file mode 100644
index 8ff8f50b13ed569130c99506c0019e0dc3d18148..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp24.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 24
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#38;amp;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp25.xml b/lib/feedparser/tests/wellformed/amp/amp25.xml
deleted file mode 100644
index edac63bc1f468ad710764fc45bcb1949180ee195..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp25.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 25
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#x26;#38;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp26.xml b/lib/feedparser/tests/wellformed/amp/amp26.xml
deleted file mode 100644
index 0b0752faf2a85b9f57b6f8625c148db3fd13ee60..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp26.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 26
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#x26;#x26;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp27.xml b/lib/feedparser/tests/wellformed/amp/amp27.xml
deleted file mode 100644
index 9c9419d1d7e78608990a2fe411a3e62b4ab2b94e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp27.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 27
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&#x26;amp;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp28.xml b/lib/feedparser/tests/wellformed/amp/amp28.xml
deleted file mode 100644
index 8d6da5301f2a4d834ec266562fed178638e1c0b3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp28.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 28
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&amp;#38;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp29.xml b/lib/feedparser/tests/wellformed/amp/amp29.xml
deleted file mode 100644
index 7baae50b21a51084ad7c4cefb92d128d7091aa6a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp29.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 29
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&amp;#x26;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp30.xml b/lib/feedparser/tests/wellformed/amp/amp30.xml
deleted file mode 100644
index 5f6399c8286f7df79303091eaece149049a13db1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp30.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 30
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;b>&amp;amp;&lt;/b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp31.xml b/lib/feedparser/tests/wellformed/amp/amp31.xml
deleted file mode 100644
index 47b445ed65ceb04038bb05fa6bffe031054eb5b3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp31.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 31
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#38;#38;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp32.xml b/lib/feedparser/tests/wellformed/amp/amp32.xml
deleted file mode 100644
index ac95fffd0e56fd27c3914bf9b2ed3dc3e3efa4f8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp32.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 32
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#38;#x26;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp33.xml b/lib/feedparser/tests/wellformed/amp/amp33.xml
deleted file mode 100644
index 442c79e0ead41992608e4a3bd81dc4fa315390d7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp33.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 33
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#38;amp;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp34.xml b/lib/feedparser/tests/wellformed/amp/amp34.xml
deleted file mode 100644
index fd69c68005bdd5a9085f8dde4f32df4e48c0ca61..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp34.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 34
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#x26;#38;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp35.xml b/lib/feedparser/tests/wellformed/amp/amp35.xml
deleted file mode 100644
index d2e6c6049723a934cc2627aa209bbcd18ed0615d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp35.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 35
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#x26;#x26;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp36.xml b/lib/feedparser/tests/wellformed/amp/amp36.xml
deleted file mode 100644
index 545f4ddd3ec111686b1ec889377107c270a8b745..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp36.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 36
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&#x26;amp;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp37.xml b/lib/feedparser/tests/wellformed/amp/amp37.xml
deleted file mode 100644
index 5ed3590d00879522ece49548486a760fa3d70c13..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp37.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 37
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&amp;#38;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp38.xml b/lib/feedparser/tests/wellformed/amp/amp38.xml
deleted file mode 100644
index c4710040a2319c31305f6622fbf233f6dc949e4f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp38.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 38
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&amp;#x26;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp39.xml b/lib/feedparser/tests/wellformed/amp/amp39.xml
deleted file mode 100644
index 2d3a3d2b4c249f89d6d1b5eaaf1c805754f3c049..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp39.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 39
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong&gt;&amp;amp;&lt;/strong&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp40.xml b/lib/feedparser/tests/wellformed/amp/amp40.xml
deleted file mode 100644
index ddf24f362c6a78d08a294b791d65b58b167acf07..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp40.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 40
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#38;#38;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp41.xml b/lib/feedparser/tests/wellformed/amp/amp41.xml
deleted file mode 100644
index 18f570e8c674f46a2ef6f747fc4c9b3724389080..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp41.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 41
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#38;#x26;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp42.xml b/lib/feedparser/tests/wellformed/amp/amp42.xml
deleted file mode 100644
index 3857d6076775d58f08acccf17885a556995d28dd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp42.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 42
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#38;amp;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp43.xml b/lib/feedparser/tests/wellformed/amp/amp43.xml
deleted file mode 100644
index e5e35cf766e62a18d52f384d6bc0f86fdd4e8c1c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp43.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 43
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#x26;#38;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp44.xml b/lib/feedparser/tests/wellformed/amp/amp44.xml
deleted file mode 100644
index 290c33352259f6f4cb25aa882ab6f68fa2d0ef20..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp44.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 44
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#x26;#x26;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp45.xml b/lib/feedparser/tests/wellformed/amp/amp45.xml
deleted file mode 100644
index ecba32b029da5d080875cd8625383b6478b8062c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp45.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 45
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&#x26;amp;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp46.xml b/lib/feedparser/tests/wellformed/amp/amp46.xml
deleted file mode 100644
index 32b2f633d8105cda6fac4d20b0f4212ca34c6004..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp46.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 46
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&amp;#38;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp47.xml b/lib/feedparser/tests/wellformed/amp/amp47.xml
deleted file mode 100644
index 9e81f91f1d4a9212411e17944f693efc61022bed..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp47.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 47
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&amp;#x26;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp48.xml b/lib/feedparser/tests/wellformed/amp/amp48.xml
deleted file mode 100644
index 3c0c26ea316e48654a288a348b8f370c5e7193a1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp48.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 48
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;strong>&amp;amp;&lt;/strong></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp49.xml b/lib/feedparser/tests/wellformed/amp/amp49.xml
deleted file mode 100644
index 102f803a359201d3c6ef64b03d230e85349035d2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp49.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 49
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#38;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[&#38;]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp50.xml b/lib/feedparser/tests/wellformed/amp/amp50.xml
deleted file mode 100644
index 3f1ae00cb66209b1cacc0dafb320261ff10ef08b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp50.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 50
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&#x26;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[&#x26;]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp51.xml b/lib/feedparser/tests/wellformed/amp/amp51.xml
deleted file mode 100644
index a5644ff18fb58f6375cef92d054a85840e51580a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp51.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 51
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title><![CDATA[&]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp52.xml b/lib/feedparser/tests/wellformed/amp/amp52.xml
deleted file mode 100644
index b6e89c263817bc8dfba78d32308a4d61ae51a65a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp52.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 52
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'&amp;'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[&amp;]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp53.xml b/lib/feedparser/tests/wellformed/amp/amp53.xml
deleted file mode 100644
index 0556638d6dd61e982a383bed1bbf46f8f7d7d6bb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp53.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 53
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#38;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<b>&#38;</b>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp54.xml b/lib/feedparser/tests/wellformed/amp/amp54.xml
deleted file mode 100644
index 69dbde91f1427a12e0fc86a41fae246a1c798229..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp54.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 54
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&#x26;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<b>&#x26;</b>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp55.xml b/lib/feedparser/tests/wellformed/amp/amp55.xml
deleted file mode 100644
index 3173c775736b68eeeddc633bb92fb1586b8261b4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp55.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 55
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<b>&amp;</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<b>&amp;</b>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp56.xml b/lib/feedparser/tests/wellformed/amp/amp56.xml
deleted file mode 100644
index c577628bae710a2c1ac0c569ccee8e11a1dd9c11..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp56.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 56
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#38;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<strong>&#38;</strong>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp57.xml b/lib/feedparser/tests/wellformed/amp/amp57.xml
deleted file mode 100644
index 7abad46b90779411f97b2ee28557e770e72225a0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp57.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 57
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&#x26;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<strong>&#x26;</strong>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp58.xml b/lib/feedparser/tests/wellformed/amp/amp58.xml
deleted file mode 100644
index a204980d818ca708d9c5bcf8509fc9ba8f121a84..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp58.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 58
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<strong>&amp;</strong>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped"><![CDATA[<strong>&amp;</strong>]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp59.xml b/lib/feedparser/tests/wellformed/amp/amp59.xml
deleted file mode 100644
index 708471ad1a5f30f2214c76efadd7654901861373..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp59.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 59
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><b>&amp;</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><b>&#38;</b></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp60.xml b/lib/feedparser/tests/wellformed/amp/amp60.xml
deleted file mode 100644
index baac7d49becc742c8bcc0c8616dae582d12ffece..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp60.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 60
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><b>&amp;</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><b>&#x26;</b></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp61.xml b/lib/feedparser/tests/wellformed/amp/amp61.xml
deleted file mode 100644
index c77686f6dd334f9e494f62bfe4bc62289bd61ddd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp61.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 61
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><b>&amp;</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><b>&amp;</b></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp62.xml b/lib/feedparser/tests/wellformed/amp/amp62.xml
deleted file mode 100644
index 4016635e6bbfaba0564d14d819074491210f6c1b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp62.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 62
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><strong>&amp;</strong></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><strong>&#38;</strong></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp63.xml b/lib/feedparser/tests/wellformed/amp/amp63.xml
deleted file mode 100644
index 29eb52668a2b1117604754eebcb237f636609d4c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp63.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 63
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><strong>&amp;</strong></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><strong>&#x26;</strong></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/amp64.xml b/lib/feedparser/tests/wellformed/amp/amp64.xml
deleted file mode 100644
index b26a921e9aad10882e1430c1e133db5ff70baaab..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/amp64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & test 64
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<div><strong>&amp;</strong></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><strong>&amp;</strong></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/amp/attr01.xml b/lib/feedparser/tests/wellformed/amp/attr01.xml
deleted file mode 100644
index 1f3cdbc42ba1b0b5849ee86a266f41ad94634432..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/attr01.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 1
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&#38;">&#38;</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;a title="&#38;#38;"&gt;&#38;#38;&lt;/a&gt;</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/attr02.xml b/lib/feedparser/tests/wellformed/amp/attr02.xml
deleted file mode 100644
index 8086e7b0a195a0b36024ceecb932b7ec2c35db80..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/attr02.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 2
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&amp;">&amp;</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;a title="&amp;amp;"&gt;&amp;amp;&lt;/a&gt;</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/attr03.xml b/lib/feedparser/tests/wellformed/amp/attr03.xml
deleted file mode 100644
index 33d79f94d9e31b6e15b2e3aaa6042d18610ce53f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/attr03.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 3
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&#x26;">&#x26;</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-	  <title type="text/html" mode="escaped">&lt;a title="&#x26;#x26;"&gt;&#x26;#x26;&lt;/a&gt;</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/attr04.xml b/lib/feedparser/tests/wellformed/amp/attr04.xml
deleted file mode 100644
index a4be12190e0add7fe7d6ee2ba2efc1740e1b32e4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/attr04.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 4
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&amp;">&amp;</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a title="&#38;">&#38;</a></div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/attr05.xml b/lib/feedparser/tests/wellformed/amp/attr05.xml
deleted file mode 100644
index 3457934b63263546c1e14b85ad93bbcad9f60201..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/attr05.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 5
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&amp;">&amp;</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a title="&amp;">&amp;</a></div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/amp/attr06.xml b/lib/feedparser/tests/wellformed/amp/attr06.xml
deleted file mode 100644
index b01196e79525eceb3733721b71818cd60ea5e3dd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/amp/attr06.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: & attr test 6
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'<a title="&amp;">&amp;</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-	  <title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a title="&#x26;">&#x26;</a></div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_1.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_1.xml
deleted file mode 100644
index 96a90ce69cbd6d7c8319c55d0dba03490323b943..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/atom_namespace_1.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (official)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_2.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_2.xml
deleted file mode 100644
index 90cc0d3bf320c85e209285f96c86c9be3aeed41f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/atom_namespace_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (example.com)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://example.com/newformat#">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_3.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_3.xml
deleted file mode 100644
index d866205d5cd7d4b22074196b216bf4657c75dc9b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/atom_namespace_3.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (necho)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://example.com/necho">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_4.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_4.xml
deleted file mode 100644
index a805d9781cd7e04b5a1c727d52cf1c17743a2e4d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/atom_namespace_4.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (echo)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/echo/">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/atom_namespace_5.xml b/lib/feedparser/tests/wellformed/atom/atom_namespace_5.xml
deleted file mode 100644
index 0e6fa46efb872990fdc42b1c512a1a09404b85f2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/atom_namespace_5.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (pie)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/pie/">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_email.xml b/lib/feedparser/tests/wellformed/atom/entry_author_email.xml
deleted file mode 100644
index 8210f4cab8186627dcc63281baa3e6717dd8449c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_email.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author email
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_homepage.xml b/lib/feedparser/tests/wellformed/atom/entry_author_homepage.xml
deleted file mode 100644
index 21fdcae76ca5b129734eb4926a9fe408f53fb6da..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_homepage.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author homepage
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <homepage>http://example.com/</homepage>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_map_author.xml b/lib/feedparser/tests/wellformed/atom/entry_author_map_author.xml
deleted file mode 100644
index dfb004dc7994e9521b5727edc3e7e0b45af6cbf3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_map_author.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author name + email maps to author
-Expect:      not bozo and entries[0]['author'] == u'Example author (me@example.com)'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom/entry_author_map_author_2.xml
deleted file mode 100644
index bcd47e7788107d8b8d404df579fc3325d1fd2a57..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_map_author_2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry author name maps to author if no email present
-Expect:      not bozo and entries[0]['author'] == u'Example author'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_name.xml b/lib/feedparser/tests/wellformed/atom/entry_author_name.xml
deleted file mode 100644
index 6b302b01e055d1ada58ea37314976be933f7fb27..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_name.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author name
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example author'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_uri.xml b/lib/feedparser/tests/wellformed/atom/entry_author_uri.xml
deleted file mode 100644
index 653980846e4bd737897a8f26091e84cb87e82e3c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_uri.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author uri
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_author_url.xml b/lib/feedparser/tests/wellformed/atom/entry_author_url.xml
deleted file mode 100644
index 7192d04a95d4fe8b43f4094b4ce8840393b1979d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_author_url.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author url
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_content_mode_base64.xml
deleted file mode 100644
index 91818ba7cdce78e6ab57630b555a6d75b7dd7a4c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_content_mode_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry content mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/entry_content_mode_escaped.xml
deleted file mode 100644
index 67da8383e79b9df0857092e40dd07cc6878c6d79..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_content_mode_escaped.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_type.xml b/lib/feedparser/tests/wellformed/atom/entry_content_type.xml
deleted file mode 100644
index fd556e8820c6bf8711ec81b6f9c9e76f062f9d0f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_content_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content>Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_content_type_text_plain.xml
deleted file mode 100644
index 656dbd455de2125a15a612b473e5eca97126744e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_content_type_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content type='text/plain'
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content type="text/plain">Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_content_value.xml b/lib/feedparser/tests/wellformed/atom/entry_content_value.xml
deleted file mode 100644
index 6da460d0a140847dc4604a4c6050557cdfb4ccf5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content content value
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content>Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_email.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_email.xml
deleted file mode 100644
index f51fc17a095ceb5a11e69bed6e9325af98eeaa88..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_email.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor email
-Expect:      not bozo and entries[0]['contributors'][0]['email'] == u'me@example.com'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_homepage.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_homepage.xml
deleted file mode 100644
index f5a398d127b4710985e7d40f5ace05c4ce14b9a9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_homepage.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor homepage
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <homepage>http://example.com/</homepage>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_multiple.xml
deleted file mode 100644
index c58cd9165daaa8455bb2e95623ee7b0cb68cd40e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_multiple.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: multiple entry contributors
-Expect:      not bozo and entries[0]['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and entries[0]['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': u'http://two.example.com/'}
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Contributor 1</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-  <contributor>
-    <name>Contributor 2</name>
-    <email>you@example.com</email>
-    <url>http://two.example.com/</url>
-  </contributor>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_name.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_name.xml
deleted file mode 100644
index 1b82beebbd26cf8bf92997b373a3e4bd6e5a30b2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_name.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor name
-Expect:      not bozo and entries[0]['contributors'][0]['name'] == u'Example contributor'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_uri.xml
deleted file mode 100644
index a37f5773d905dc3c375c2f2c7df58091fa758558..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_uri.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor uri
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_contributor_url.xml b/lib/feedparser/tests/wellformed/atom/entry_contributor_url.xml
deleted file mode 100644
index 618511902f274e3dd31f51479ec3253bde138b2a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_contributor_url.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor url
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_created.xml b/lib/feedparser/tests/wellformed/atom/entry_created.xml
deleted file mode 100644
index 3175de0279ce9018f157f97256a46f9a520cc27c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_created.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry created
-Expect:      not bozo and entries[0]['created'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<created>Thu, 01 Jan 2004 19:48:21 GMT</created>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_created_multiple_values.xml b/lib/feedparser/tests/wellformed/atom/entry_created_multiple_values.xml
deleted file mode 100644
index 95688edd31d34b7354991e61ed38ce6c761942f7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_created_multiple_values.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry parsed created, multiple values, ensure overwrite
-Expect:      not bozo and entries[0]['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<created>2010-12-01T10:14:55Z</created>
-<created>2003-12-31T10:14:55Z</created>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_created_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_created_parsed.xml
deleted file mode 100644
index e7f9e9c380fda509ea972b53e6aa415b7f77c7e9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_created_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry created parsed
-Expect:      not bozo and entries[0]['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<created>2003-12-31T10:14:55Z</created>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_id.xml b/lib/feedparser/tests/wellformed/atom/entry_id.xml
deleted file mode 100644
index 827ca3792f361e9e9e634634ee7a7d39e0c7c22c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_id.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id
-Expect:      not bozo and entries[0]['id'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <id>http://example.com/</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom/entry_id_map_guid.xml
deleted file mode 100644
index bc2dfb10dc444cc376e28add35e17853782df511..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_id_map_guid.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id maps to guid
-Expect:      not bozo and entries[0]['guid'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <id>http://example.com/</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_issued.xml b/lib/feedparser/tests/wellformed/atom/entry_issued.xml
deleted file mode 100644
index fdc508141b6398527d8b15ff88f7e463bc4dc6e3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_issued.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry issued
-Expect:      not bozo and entries[0]['published'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<issued>Thu, 01 Jan 2004 19:48:21 GMT</issued>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_issued_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_issued_parsed.xml
deleted file mode 100644
index 5cf2729854ba43183a4a00ec69798dd18026956d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_issued_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry issued parsed
-Expect:      not bozo and entries[0]['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<issued>2003-12-31T10:14:55Z</issued>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link.xml
deleted file mode 100644
index d618df928a2a164bb6e27517e09ee5997b10be1f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href maps to link if rel="alternate" and type="text/html"
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link_2.xml
deleted file mode 100644
index 11e03b46f541c26f4fd78038cb55c55b0c2d7a54..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_alternate_map_link_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href maps to link if rel="alternate" and type="application/xhtml+xml"
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_href.xml b/lib/feedparser/tests/wellformed/atom/entry_link_href.xml
deleted file mode 100644
index 2be6dc7fa00ec0c3a22f5841030ad49c4c53036a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_href.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href
-Expect:      not bozo and entries[0]['links'][0]['href'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_multiple.xml b/lib/feedparser/tests/wellformed/atom/entry_link_multiple.xml
deleted file mode 100644
index 9d7228cef3c1a463be90c9e85359661da6f575d1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_multiple.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry multiple links
-Expect:      not bozo and entries[0]['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and entries[0]['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': u'http://www.example.com/post'}
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-  <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_rel.xml b/lib/feedparser/tests/wellformed/atom/entry_link_rel.xml
deleted file mode 100644
index db5d78a2a91fb0fe38061f182d2a795e264b5698..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_rel.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'alternate'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_title.xml b/lib/feedparser/tests/wellformed/atom/entry_link_title.xml
deleted file mode 100644
index 4d71c0574b365eb943c1e71c2c0602035c0ed566..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link title
-Expect:      not bozo and entries[0]['links'][0]['title'] == u'Example title'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_link_type.xml b/lib/feedparser/tests/wellformed/atom/entry_link_type.xml
deleted file mode 100644
index 8dbe49555bfa44a62f3054ea213ed192f374322d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_link_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link type
-Expect:      not bozo and entries[0]['links'][0]['type'] == u'text/html'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_modified.xml b/lib/feedparser/tests/wellformed/atom/entry_modified.xml
deleted file mode 100644
index 7bf362ccdd7efc5d35d8d7f879c5004a19942874..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_modified.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry modified
-Expect:      not bozo and entries[0]['updated'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_modified_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_modified_map_updated_parsed.xml
deleted file mode 100644
index 0eaa5c101b5609d60e319ececf17311efbd09be9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_modified_map_updated_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry modified parsed and mapped to updated_parsed
-Expect:      not bozo and entries[0]['updated_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_published_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_published_parsed.xml
deleted file mode 100644
index 6c0c05058f06dea1c27438fa9bc3f89fda627508..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_published_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry published parsed
-Expect:      not bozo and entries[0]['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<published>2003-12-31T10:14:55Z</published>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_published_parsed_date_overwriting.xml b/lib/feedparser/tests/wellformed/atom/entry_published_parsed_date_overwriting.xml
deleted file mode 100644
index bd30e91acbdcaa4847f36a4515f91f91b9a1b6eb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_published_parsed_date_overwriting.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry conflicting published/issued values overwrite parsed values
-Expect:      not bozo and entries[0]['published_parsed'] == (2010, 1, 1, 19, 48, 21, 4, 1, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<issued>Thu, 01 Jan 2004 19:48:21 GMT</issued>
-<published>Sat, 01 Jan 2010 19:48:21 GMT</published>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_source_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_source_updated_parsed.xml
deleted file mode 100644
index d518d3dfb89e3e70bf1673d018c1ab8452dc5349..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_source_updated_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source updated parsed
-Expect:      not bozo and entries[0]['source']['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-<updated>2003-12-31T10:14:55Z</updated>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary.xml b/lib/feedparser/tests/wellformed/atom/entry_summary.xml
deleted file mode 100644
index e12454b118807b490aa5463b437057dc3d79bcf3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary
-Expect:      not bozo and entries[0]['summary'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_base64.xml
deleted file mode 100644
index 9c34f5775bf41f557dfcfe40bc4d27f7f7f3cee3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary base64-encoded
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_base64_2.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_base64_2.xml
deleted file mode 100644
index bfcd183693ff1fa45f692e5360ad73fa661a7f8d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_base64_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary base64-encoded
-Expect:      not bozo and entries[0]['summary'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_base64.xml
deleted file mode 100644
index 282cff83b2c56a77d567bf8e08fbc4b99fce0306..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_escaped.xml
deleted file mode 100644
index 1be7ac6518ad032791f81689ed87371230878436..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_mode_escaped.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_type.xml
deleted file mode 100644
index f20078f7d810f99ba8c19f39e64adabcf7bb1e38..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['summary_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_type_text_plain.xml
deleted file mode 100644
index 704d21b60f4b7050eabce9ec7ce8d2957a204f87..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_type_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary type='text/plain'
-Expect:      not bozo and entries[0]['summary_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="text/plain">Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_content_value.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_content_value.xml
deleted file mode 100644
index bbb74f71eacf200f6ced2fab44fe31c865902aa1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content value
-Expect:      not bozo and entries[0]['summary_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_escaped_markup.xml
deleted file mode 100644
index fa1cd246e8c16909ad9651e94f85ae1de381620a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary escaped HTML
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup.xml
deleted file mode 100644
index be60d2c180e6e0517fd2957ee5cb3e6983f6cbcd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary inline XHTML
-Expect:      not bozo and entries[0]['summary'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup_2.xml
deleted file mode 100644
index fbd4dd80084ee4a93fc3409d89b3a8f3dfa689bb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['summary'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_naked_markup.xml
deleted file mode 100644
index d5926a7b21226951d3b5feade921e7a0336615ed..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_naked_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary with undeclared unqualified inline markup
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary>Example <b>Atom</b></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_summary_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_summary_text_plain.xml
deleted file mode 100644
index 3839a854ce0dbea631538f9e215e2b709281b079..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_summary_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary with explicit type='text/plain'
-Expect:      not bozo and entries[0]['summary'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="text/plain">Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title.xml b/lib/feedparser/tests/wellformed/atom/entry_title.xml
deleted file mode 100644
index 1dd56fcdc08ccf6c5443cd7bd7d873d77d5817ba..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title
-Expect:      not bozo and entries[0]['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_title_base64.xml
deleted file mode 100644
index 85ac6caa5207655754cd683d328235b641a8bd83..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title base64-encoded
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom/entry_title_base64_2.xml
deleted file mode 100644
index 330d38738c21148500b97ebbe91aac47e1d1e323..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_base64_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title base64-encoded
-Expect:      not bozo and entries[0]['title'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_base64.xml
deleted file mode 100644
index fc9893de07a21dfc8d0ca946f0003b47b2c4dd90..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_escaped.xml
deleted file mode 100644
index eb6dd1bf0f7417bd85a6480abfdcb4ec6c94bf86..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_content_mode_escaped.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_type.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_type.xml
deleted file mode 100644
index c14ef5a7afc519ec19e56f76f5edbe78b8f0d118..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_content_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['title_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_type_text_plain.xml
deleted file mode 100644
index bb0a1dcef39cc5d833d7e6f9b25da2b432b222a4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_content_type_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title type='text/plain'
-Expect:      not bozo and entries[0]['title_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="text/plain">Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_content_value.xml b/lib/feedparser/tests/wellformed/atom/entry_title_content_value.xml
deleted file mode 100644
index 043d0af58806d57f6b3d1d9cedd1bf5bd384beb7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content value
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_title_escaped_markup.xml
deleted file mode 100644
index ccc24b8a754d8d4a52dd17c74a3e4092fbacd200..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title escaped HTML
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup.xml
deleted file mode 100644
index eb7c9315e2687983124be362b88906c014d933cc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title inline XHTML
-Expect:      not bozo and entries[0]['title'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup_2.xml
deleted file mode 100644
index 71cfc507216a27b71ed0b737b6cb54416a1058f3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['title'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/entry_title_naked_markup.xml
deleted file mode 100644
index ffc9aa93f150c89bf4f01daddca3e8b1a81e4f13..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_naked_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title with undeclared unqualified inline markup
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title>Example <b>Atom</b></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom/entry_title_text_plain.xml
deleted file mode 100644
index f02a6264b4f21ca4f9ded0123fc39d9dc9353dc7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title with explicit type='text/plain'
-Expect:      not bozo and entries[0]['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="text/plain">Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom/entry_title_text_plain_brackets.xml
deleted file mode 100644
index cbd327cb1c5b72a3aa05aa944dd9b10d3c2f3d01..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_title_text_plain_brackets.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title with explicit type='text/plain' contains brackets that are not markup
-Expect:      not bozo and entries[0]['title'] == u'History of the <blink> tag'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="text/plain">History of the &lt;blink&gt; tag</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/entry_updated_multiple_values.xml b/lib/feedparser/tests/wellformed/atom/entry_updated_multiple_values.xml
deleted file mode 100644
index 386cd0761ce1d6257c6c8936f19bbb47720f7161..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_updated_multiple_values.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry parsed updated, multiple values, ensure overwrite
-Expect:      not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<updated>2010-12-01T10:14:55Z</updated>
-<updated>2003-12-31T10:14:55Z</updated>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/entry_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/entry_updated_parsed.xml
deleted file mode 100644
index 66a315be94a96ee632635b2baa1d1226f96ec6e1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/entry_updated_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry updated parsed
-Expect:      not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<updated>2003-12-31T10:14:55Z</updated>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_email.xml b/lib/feedparser/tests/wellformed/atom/feed_author_email.xml
deleted file mode 100644
index 3eb3f4a51f10bf55f993adbc918dd4c1979ee9d3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author email
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_homepage.xml b/lib/feedparser/tests/wellformed/atom/feed_author_homepage.xml
deleted file mode 100644
index 3d7abf7995ffb767d19422ef2ea052d443f6ea00..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_homepage.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author homepage
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <homepage>http://example.com/</homepage>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_map_author.xml b/lib/feedparser/tests/wellformed/atom/feed_author_map_author.xml
deleted file mode 100644
index 003a1f4d4e7aada125d9196598597c20bc9db03f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_map_author.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author name + email maps to author
-Expect:      not bozo and feed['author'] == u'Example author (me@example.com)'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom/feed_author_map_author_2.xml
deleted file mode 100644
index 977142f86ba34c9e6a1ff9cf66bdd0a8559debc0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_map_author_2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: feed author name maps to author if no email present
-Expect:      not bozo and feed['author'] == u'Example author'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_name.xml b/lib/feedparser/tests/wellformed/atom/feed_author_name.xml
deleted file mode 100644
index 8e2e0277fc0ff97e2ee79c926af2e1f7d1f1adf4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author name
-Expect:      not bozo and feed['author_detail']['name'] == u'Example author'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_uri.xml b/lib/feedparser/tests/wellformed/atom/feed_author_uri.xml
deleted file mode 100644
index 3df7ce32bf12c0f3c44caac626f35b21a4fdbba1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_uri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author uri
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_author_url.xml b/lib/feedparser/tests/wellformed/atom/feed_author_url.xml
deleted file mode 100644
index dd7cb1f90985b7aa91346be8f09d63ce1e59fdfb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_author_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author url
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_email.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_email.xml
deleted file mode 100644
index 664e2a5e68e16665ef362aa24070ec99f97286d8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor email
-Expect:      not bozo and feed['contributors'][0]['email'] == u'me@example.com'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_homepage.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_homepage.xml
deleted file mode 100644
index 14d518e2b2e3ba7fca95a0f38eddca88d76a3e0a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_homepage.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor homepage
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <homepage>http://example.com/</homepage>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_multiple.xml
deleted file mode 100644
index 64a1326ec6fe14b54f9e7865c203b70aaa03ff83..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_multiple.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: multiple feed contributors
-Expect:      not bozo and feed['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and feed['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': u'http://two.example.com/'}
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Contributor 1</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-  <contributor>
-    <name>Contributor 2</name>
-    <email>you@example.com</email>
-    <url>http://two.example.com/</url>
-  </contributor>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_name.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_name.xml
deleted file mode 100644
index 56de55938236e8c5dbc8f5b99013f7d775005aa1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor name
-Expect:      not bozo and feed['contributors'][0]['name'] == u'Example contributor'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_uri.xml
deleted file mode 100644
index c462dcabbc835bac0a176281fb4fe69e29f4e89e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_uri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor uri
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_contributor_url.xml b/lib/feedparser/tests/wellformed/atom/feed_contributor_url.xml
deleted file mode 100644
index f42c4ea9cafa2fbbe5cc17b0c91eee6f032bb8bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_contributor_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor url
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright.xml
deleted file mode 100644
index e1a8218160c0599a9e08d4a86e47c6c743a28ab6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright
-Expect:      not bozo and feed['copyright'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright>Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_base64.xml
deleted file mode 100644
index 7b65999357b74726de7861d697417013f13bbc37..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed copyright base64-encoded
-Expect:      not bozo and feed['copyright'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_base64_2.xml
deleted file mode 100644
index 3cffcff44b0207f08621abd3ecd3170f8cfbe5a4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed copyright base64-encoded
-Expect:      not bozo and feed['copyright'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_base64.xml
deleted file mode 100644
index 3c68739acc224fd6df5aff91f211f9c198bd69d9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed copyright mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_escaped.xml
deleted file mode 100644
index 72132f8e14669e18015ef20e64d415b9eb672e63..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_mode_escaped.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type.xml
deleted file mode 100644
index e77a8ee0c1013aa84f2d40155523a7ce1bad0c3e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content type defaults to 'text/plain'
-Expect:      not bozo and feed['copyright_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright>Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type_text_plain.xml
deleted file mode 100644
index 390313961a8db373b62479d0f620ba82d3383557..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_type_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright type='text/plain'
-Expect:      not bozo and feed['copyright_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="text/plain">Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_content_value.xml
deleted file mode 100644
index 491c10e412dc64419fd7ae68102990f18c0e3284..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content value
-Expect:      not bozo and feed['copyright_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright>Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_escaped_markup.xml
deleted file mode 100644
index 2f97df3e179dfeaca4eb242a2bba620417b5214f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright escaped HTML
-Expect:      not bozo and feed['copyright'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup.xml
deleted file mode 100644
index bf8f211b0445cb2338b341f74106a32d590f2981..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright inline XHTML
-Expect:      not bozo and feed['copyright'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup_2.xml
deleted file mode 100644
index d4e4df3a4eddea360879bda09af42f7380421061..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright inline XHTML with escaped markup
-Expect:      not bozo and feed['copyright'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_naked_markup.xml
deleted file mode 100644
index a04eed41b6c270ba6c778bdb4a54e5467b3b7183..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_naked_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright with undeclared unqualified inline markup
-Expect:      not bozo and feed['copyright'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright>Example <b>Atom</b></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_copyright_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_copyright_text_plain.xml
deleted file mode 100644
index 5c71c1b9ee2a9e79494391ec9697f77d37c46ac5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_copyright_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright with explicit type='text/plain'
-Expect:      not bozo and feed['copyright'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="text/plain">Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator.xml b/lib/feedparser/tests/wellformed/atom/feed_generator.xml
deleted file mode 100644
index 21bce92b6fb48fde37ee2841f9f51bd60474863a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_generator.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator
-Expect:      not bozo and feed['generator'] == u'Example generator'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <generator url="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator_name.xml b/lib/feedparser/tests/wellformed/atom/feed_generator_name.xml
deleted file mode 100644
index 349ed2deb9530ae0f3c9631c457043970712dd5d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_generator_name.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator name
-Expect:      not bozo and feed['generator_detail']['name'] == u'Example generator'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <generator url="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator_url.xml b/lib/feedparser/tests/wellformed/atom/feed_generator_url.xml
deleted file mode 100644
index 4efaed264e73cbd03a8297af619f214c1ba6dbb4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_generator_url.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator url
-Expect:      not bozo and feed['generator_detail']['url'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <generator url="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_generator_version.xml b/lib/feedparser/tests/wellformed/atom/feed_generator_version.xml
deleted file mode 100644
index c6c088559406bd33b971a8927c4c634c35c99359..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_generator_version.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator version
-Expect:      not bozo and feed['generator_detail']['version'] == u'2.65'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <generator url="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_id.xml b/lib/feedparser/tests/wellformed/atom/feed_id.xml
deleted file mode 100644
index a875baeb95a331c91ef1d353bddc16ef0c4dd047..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_id.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed id
-Expect:      not bozo and feed['id'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <id>http://example.com/</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom/feed_id_map_guid.xml
deleted file mode 100644
index 9e6392dc73d3c91ee10eab5b1170327fe482174b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_id_map_guid.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed id
-Expect:      not bozo and feed['guid'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <id>http://example.com/</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info.xml b/lib/feedparser/tests/wellformed/atom/feed_info.xml
deleted file mode 100644
index a4f98f723d595148df0538a001c270fd8bbfcf30..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info
-Expect:      not bozo and feed['info'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info>Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_info_base64.xml
deleted file mode 100644
index df6136f365fe7db848a4d230855e649d0b7c31fc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed info base64-encoded
-Expect:      not bozo and feed['info'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_info_base64_2.xml
deleted file mode 100644
index 4f50e30f0a902047351a2d4b17718918dc060fae..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed info base64-encoded
-Expect:      not bozo and feed['info'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_base64.xml
deleted file mode 100644
index 0c3de70436e35c7b06fe23983d52b04a0262e7c6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed info mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_escaped.xml
deleted file mode 100644
index fdc27e69ad5ef13d1558def08b036f4a76053a3a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_content_mode_escaped.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_type.xml
deleted file mode 100644
index 615d4d6855394b6dfd260e57d6a4ea966a90f116..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content type defaults to 'text/plain'
-Expect:      not bozo and feed['info_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info>Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_type_text_plain.xml
deleted file mode 100644
index c97aef9e031b0326920b85095e5da03d01ec375b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_content_type_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info type='text/plain'
-Expect:      not bozo and feed['info_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="text/plain">Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_info_content_value.xml
deleted file mode 100644
index d601f03ea1062ce56bd011622713cac816ec8899..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content value
-Expect:      not bozo and feed['info_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info>Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_info_escaped_markup.xml
deleted file mode 100644
index 4820f8be6942c2be8f4d2535b65039e041b3f69e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info escaped HTML
-Expect:      not bozo and feed['info'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup.xml
deleted file mode 100644
index 76e02eb060f32b846d1a83c927541f7d0b0daf55..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info inline XHTML
-Expect:      not bozo and feed['info'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup_2.xml
deleted file mode 100644
index a6313b75a1ca01dd166d6bdd61d42c35a81a0510..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info inline XHTML with escaped markup
-Expect:      not bozo and feed['info'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_info_naked_markup.xml
deleted file mode 100644
index 9dab661ccefcca72e2a3b664363c175a4b0e2049..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_naked_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info with undeclared unqualified inline markup
-Expect:      not bozo and feed['info'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info>Example <b>Atom</b></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_info_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_info_text_plain.xml
deleted file mode 100644
index e61ed050ab18275ae2c2238b5c1d14680b294a6c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_info_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info with explicit type='text/plain'
-Expect:      not bozo and feed['info'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="text/plain">Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link.xml
deleted file mode 100644
index 12842ffd7222f35e65d5e2558d51d462d061fb91..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href maps to link if rel="alternate" and type="text/html"
-Expect:      not bozo and feed['link'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link_2.xml
deleted file mode 100644
index e63141c533c719566c23207512f9b2cd4b8299e3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_alternate_map_link_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href maps to link if rel="alternate" and type="application/xhtml+xml"
-Expect:      not bozo and feed['link'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_href.xml b/lib/feedparser/tests/wellformed/atom/feed_link_href.xml
deleted file mode 100644
index 6ab44d88b68ff9cf80839ae96e2277b708bff0bc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_href.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href
-Expect:      not bozo and feed['links'][0]['href'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_multiple.xml b/lib/feedparser/tests/wellformed/atom/feed_link_multiple.xml
deleted file mode 100644
index 154fbbc33047c3e78438e7b640fb8b7db0f4f177..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_multiple.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed multiple links
-Expect:      not bozo and feed['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and feed['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': u'http://www.example.com/post'}
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-  <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_rel.xml b/lib/feedparser/tests/wellformed/atom/feed_link_rel.xml
deleted file mode 100644
index dd2fe64a47189474f888e84a17f56b18c539787e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_rel.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel
-Expect:      not bozo and feed['links'][0]['rel'] == u'alternate'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_title.xml b/lib/feedparser/tests/wellformed/atom/feed_link_title.xml
deleted file mode 100644
index b8339eb3caba37c300cacbf137a36b1cec64f72f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_title.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link title
-Expect:      not bozo and feed['links'][0]['title'] == u'Example title'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_link_type.xml b/lib/feedparser/tests/wellformed/atom/feed_link_type.xml
deleted file mode 100644
index 4fddbfd8f6da6ab2b7bcb3109d747e7d06de0bb6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_link_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link type
-Expect:      not bozo and feed['links'][0]['type'] == u'text/html'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_modified.xml b/lib/feedparser/tests/wellformed/atom/feed_modified.xml
deleted file mode 100644
index 984f8ab6b4409c1d070294ae198089bcfdf9629f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_modified.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed modified
-Expect:      not bozo and feed['updated'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-
-<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified>
-
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/feed_modified_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/feed_modified_map_updated_parsed.xml
deleted file mode 100644
index 9099adaf73f8bc474cd7d2ea3499ce807d2bd4e7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_modified_map_updated_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed modified parsed and mapped to updated_parsed
-Expect:      not bozo and feed['updated_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-
-<modified>Thu, 01 Jan 2004 19:48:21 GMT</modified>
-
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline.xml
deleted file mode 100644
index ce170ef8320bf8e66a41a74506863d40889a3fb2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline
-Expect:      not bozo and feed['tagline'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline>Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_base64.xml
deleted file mode 100644
index 196e08603bf0ed4db630f099c55ccd202b96cf35..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed tagline base64-encoded
-Expect:      not bozo and feed['tagline'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_base64_2.xml
deleted file mode 100644
index eb57d1515ab9410d755f9256ddf8478daf98d083..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed tagline base64-encoded
-Expect:      not bozo and feed['tagline'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_base64.xml
deleted file mode 100644
index ff55466c0eff03c55528405ecd89df07973f0d6f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed tagline mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_escaped.xml
deleted file mode 100644
index 2a28f0b4951bcbede6f46c789365c773d8c8afcb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_mode_escaped.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type.xml
deleted file mode 100644
index 8d7c831aa40834180b0eeea63d51698bf2c2cc22..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content type defaults to 'text/plain'
-Expect:      not bozo and feed['tagline_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline>Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type_text_plain.xml
deleted file mode 100644
index a63a3ca787acd722ed53a13a172ea0b66376c6f7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_type_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline type='text/plain'
-Expect:      not bozo and feed['tagline_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="text/plain">Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_content_value.xml
deleted file mode 100644
index 24bc7ae774dad2a9dc8ca81f9c11eb61bdefedb4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content value
-Expect:      not bozo and feed['tagline_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline>Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_escaped_markup.xml
deleted file mode 100644
index 4530eabc800ada2d8784bbaf3db92341da146331..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline escaped HTML
-Expect:      not bozo and feed['tagline'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup.xml
deleted file mode 100644
index 6330c385d69c9763953ff29a70950c5e72b7cc1b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline inline XHTML
-Expect:      not bozo and feed['tagline'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup_2.xml
deleted file mode 100644
index afb7ebee6cbe8bf073403b355ab1b803f1686d81..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline inline XHTML with escaped markup
-Expect:      not bozo and feed['tagline'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_naked_markup.xml
deleted file mode 100644
index 4e213464ddadd866caf84316fff09d4a91c6f784..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_naked_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline with undeclared unqualified inline markup
-Expect:      not bozo and feed['tagline'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline>Example <b>Atom</b></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_tagline_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_tagline_text_plain.xml
deleted file mode 100644
index 96d7d9cd20af8d4e692e22be51bef9bc5f6a90e6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_tagline_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline with explicit type='text/plain'
-Expect:      not bozo and feed['tagline'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="text/plain">Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title.xml b/lib/feedparser/tests/wellformed/atom/feed_title.xml
deleted file mode 100644
index b59200cb749d98a113ec0ed182951173d93b2ddd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_title_base64.xml
deleted file mode 100644
index f13b3c13cb4367c76c5d977f83429d8cefbacfab..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title base64-encoded
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom/feed_title_base64_2.xml
deleted file mode 100644
index a372b8396ee1a44b25114d42bc5414b9e4b992c3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title base64-encoded
-Expect:      not bozo and feed['title'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title mode="base64">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_base64.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_base64.xml
deleted file mode 100644
index ac9ff5942b5617e4f9ae1bae334fe20517d0f588..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title mode=base64
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title mode="base64">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_escaped.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_escaped.xml
deleted file mode 100644
index 3ff055a1d914ca8ef56ae88a58171d76a19e340c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_content_mode_escaped.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title mode=escaped
-Expect:      1
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_type.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_type.xml
deleted file mode 100644
index c207503179a03f6540485474cb1d0b9c9ac40869..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content type defaults to 'text/plain'
-Expect:      not bozo and feed['title_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_type_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_type_text_plain.xml
deleted file mode 100644
index 8bf0060bdf1b4b6575548a249814411b49a2d034..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_content_type_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title type='text/plain'
-Expect:      not bozo and feed['title_detail']['type'] == u'text/plain'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="text/plain">Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_content_value.xml b/lib/feedparser/tests/wellformed/atom/feed_title_content_value.xml
deleted file mode 100644
index ac5cbdbe87560fffdbaa8bf7da78d812ab3eca9a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content value
-Expect:      not bozo and feed['title_detail']['value'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_title_escaped_markup.xml
deleted file mode 100644
index b2daea2b05d0dd3fbe1acbe9a638ac0ce3d0432a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title escaped HTML
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="text/html" mode="escaped">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup.xml
deleted file mode 100644
index 0b675936b3ba5d42d00c6a98df8111225823a3bb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title inline XHTML
-Expect:      not bozo and feed['title'] == u'<div>Example <b>Atom</b></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup_2.xml
deleted file mode 100644
index e687f4029ab4fc0bb93c44ada4b6eb38c89624d6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title inline XHTML with escaped markup
-Expect:      not bozo and feed['title'] == u'<div>History of the &lt;blink&gt; tag</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_naked_markup.xml b/lib/feedparser/tests/wellformed/atom/feed_title_naked_markup.xml
deleted file mode 100644
index fa4c30561046c1b9bb191a6b2cc8c33682e9ad7c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_naked_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title with undeclared unqualified inline markup
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title>Example <b>Atom</b></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom/feed_title_text_plain.xml
deleted file mode 100644
index 3c94b7eefd9c0c835ab60cff627dec0ad570498b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_title_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title with explicit type='text/plain'
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="text/plain">Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/feed_updated_parsed.xml b/lib/feedparser/tests/wellformed/atom/feed_updated_parsed.xml
deleted file mode 100644
index a5ddfec1a5fdd31658a13ad97bfe9717eeb00d8f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/feed_updated_parsed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed updated parsed
-Expect:      not bozo and feed['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<updated>2003-12-31T10:14:55Z</updated>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/media_player1.xml b/lib/feedparser/tests/wellformed/atom/media_player1.xml
deleted file mode 100644
index c95a7b2c624dc1d6a5e4ebe906a15c19ed7b8b3b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/media_player1.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: media player content
-Expect:      not bozo and entries[0]['media_player']['url'] == u'http://www.example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <media:player xmlns:media="http://search.yahoo.com/mrss/" url="http://www.example.com/" />
-  <title>Example Atom</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/media_thumbnail.xml b/lib/feedparser/tests/wellformed/atom/media_thumbnail.xml
deleted file mode 100644
index 6288bfa57f696c03ae30729c8e88d2325a844c6d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/media_thumbnail.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: media_thumbnail
-Expect:      entries[0]['media_thumbnail'][0]['url'] == u'http://example.com/thumbnail.jpg'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <media:thumbnail xmlns:media="http://search.yahoo.com/mrss/"
-    url="http://example.com/thumbnail.jpg" height="72" width="72" />
-  <title>Example Atom</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom/relative_uri.xml b/lib/feedparser/tests/wellformed/atom/relative_uri.xml
deleted file mode 100644
index 0de466ddc07815f34ab15105ee965e402221fcbf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/relative_uri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base
-Expect:      not bozo and feed['title_detail']['value'] == u'<div>Example <a href="http://example.com/test/test.html">test</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit.xml b/lib/feedparser/tests/wellformed/atom/relative_uri_inherit.xml
deleted file mode 100644
index a2195de9ce78942777e6a2af2e2f8a674acd4ba7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base inherited from parent element
-Expect:      not bozo and feed['title_detail']['value'] == u'<div>Example <a href="http://example.com/test/test.html">test</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit_2.xml b/lib/feedparser/tests/wellformed/atom/relative_uri_inherit_2.xml
deleted file mode 100644
index 8ce7778a6f13d76c93351f47eb56e7c96a9ee8f5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom/relative_uri_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base overriding parent xml:base
-Expect:      not bozo and feed['title_detail']['value'] == u'<div>Example <a href="http://example.com/test/test.html">test</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/ampersand_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/ampersand_in_attr.xml
deleted file mode 100644
index 2dcec4289b1c019ac5d0c01b40f6884256a45be1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/ampersand_in_attr.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains URI with an ampersand
-Expect:      not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/?a=1&amp;b=2">test</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="http://example.com/?a=1&amp;b=2">test</a></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/atom10_namespace.xml b/lib/feedparser/tests/wellformed/atom10/atom10_namespace.xml
deleted file mode 100644
index c12785300d15a864c2f880edaa755409bffbaeea..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/atom10_namespace.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: Atom namespace (official)
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/atom10_version.xml b/lib/feedparser/tests/wellformed/atom10/atom10_version.xml
deleted file mode 100644
index e27c9111045ee0e0b8cff2e38d1734054a86eb3c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/atom10_version.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: Atom 1.0 version from namespace
-Expect:      not bozo and version == u'atom10'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_email.xml
deleted file mode 100644
index 45d71fbf1c36c4e8fad10e84fa6115ea28e71938..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_email.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author email
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_map_author.xml
deleted file mode 100644
index 84a0776a288377019c2dadff284ce0a39d8ca59e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author name + email maps to author
-Expect:      not bozo and entries[0]['author'] == u'Example author (me@example.com)'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_map_author_2.xml
deleted file mode 100644
index 687d3d036feb159b7765f4ea471d2e7478f69fc6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_map_author_2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry author name maps to author if no email present
-Expect:      not bozo and entries[0]['author'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_name.xml
deleted file mode 100644
index fb2157d62ae44df041b4954c10213eeabf0e0092..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_name.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author name
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_uri.xml
deleted file mode 100644
index 86e1e856805b9c08dcc8273f526f23e1a86171fb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_uri.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author uri
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_author_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_author_url.xml
deleted file mode 100644
index dae246ae4a1a159b1b7878f70c25d347c08b1dc4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_author_url.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry author url
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_email.xml
deleted file mode 100644
index d5a6369a763e7ffda031c623d4e868fe96dae3c4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_authors_email.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author emails
-Expect: not bozo and (entries[0]['authors'][0]['email'] == u'one@one.com') and (entries[0]['authors'][1]['email'] == u'two@two.com')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <author>
-      <email>one@one.com</email>
-    </author>
-    <author>
-      <email>two@two.com</email>
-    </author>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_name.xml
deleted file mode 100644
index a0e74ae4ddf2a20020613ad2b8778f015fc43211..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_authors_name.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author names
-Expect: not bozo and (entries[0]['authors'][0]['name'] == u'one') and (entries[0]['authors'][1]['name'] == u'two')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <author>
-      <name>one</name>
-    </author>
-    <author>
-      <name>two</name>
-    </author>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_uri.xml
deleted file mode 100644
index 68dbc03b33ba3af34488fb31242565e44f090709..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_authors_uri.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author uris
-Expect: not bozo and (entries[0]['authors'][0]['url'] == u'http://one.com/') and (entries[0]['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <author>
-      <uri>http://one.com/</uri>
-    </author>
-    <author>
-      <uri>http://two.com/</uri>
-    </author>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_authors_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_authors_url.xml
deleted file mode 100644
index 09a1f843f8799222c0e3d4b45734eef2dee020fe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_authors_url.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author urls
-Expect: not bozo and (entries[0]['authors'][0]['url'] == u'http://one.com/') and (entries[0]['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <author>
-      <url>http://one.com/</url>
-    </author>
-    <author>
-      <url>http://two.com/</url>
-    </author>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_label.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_label.xml
deleted file mode 100644
index 7691de3795ad360b453f02ea712f09af2830871e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_category_label.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry category label
-Expect:      not bozo and entries[0]['tags'][0]['label'] == u'Atom 1.0 tests'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_scheme.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_scheme.xml
deleted file mode 100644
index a88defc2193fcf4c7c0103ef39875ba07fecf128..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_category_scheme.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry category scheme
-Expect:      not bozo and entries[0]['tags'][0]['scheme'] == u'http://feedparser.org/tests/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_term.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_term.xml
deleted file mode 100644
index f0755b39f948b0464c4abc6b068dddeb241e4556..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_category_term.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry category term
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'atom10'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_category_term_non_ascii.xml b/lib/feedparser/tests/wellformed/atom10/entry_category_term_non_ascii.xml
deleted file mode 100644
index a2529b5f7df6be4fb7954ca95939311f392310a4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_category_term_non_ascii.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry category term
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'Freir\xe4ume'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <category term="Freiräume" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_application_xml.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_application_xml.xml
deleted file mode 100644
index 9506726e64bfb6168e9739937a8651b6e9927516..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_application_xml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content inline XML
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_base64.xml
deleted file mode 100644
index 09ff3b0ca764c8d445b2faa6cd393a100a58160f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry content base64-encoded
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_base64_2.xml
deleted file mode 100644
index 84de7fe1aa1691d3052e37e497a0daded1007b03..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_base64_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry content base64-encoded
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_div_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_div_escaped_markup.xml
deleted file mode 100644
index f1f0a974c25eacf3631651b713283bf74efc681a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_div_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: typepad style entry content escaped HTML with div
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="html"><div xmlns="http://www.w3.org/1999/xhtml">Example &lt;b&gt;Atom&lt;/b&gt;</div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_escaped_markup.xml
deleted file mode 100644
index 44a6e0a27dda97f91c0ebc246e3d2574cc0ac5b9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content escaped HTML
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="html">Example &lt;b&gt;Atom&lt;/b&gt;</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup.xml
deleted file mode 100644
index 1dc354e63e7d8c759c70377d64062513f1b3f4db..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content inline XHTML
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup_2.xml
deleted file mode 100644
index e47e68f84ce86202a10a1b4176a9140ec7d368e9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_src.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_src.xml
deleted file mode 100644
index 0b808a8de0c3fad3735130563f00abaa6d058025..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_src.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content src
-Expect:      not bozo and entries[0]['content'][0]['src'] == u'http://example.com/movie.mp4'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content src="http://example.com/movie.mp4"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain.xml
deleted file mode 100644
index 402d6dd931c60600ecbf668d21085c52ca9a6c0a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content with explicit type='text'
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="text">Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain_brackets.xml
deleted file mode 100644
index b6f7401cc5b60f3cdca4a0c11e5586c0400b7d28..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_text_plain_brackets.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content with explicit type='text' contains brackets that are not markup
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'History of the <blink> tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="text">History of the &lt;blink&gt; tag</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_type.xml
deleted file mode 100644
index c2d3adb842a103af9e7ad68eb5593594004925b9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content>Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_type_text.xml
deleted file mode 100644
index e6a5e98b9f4113e13e1e38a80ed8c04e83337cfe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_type_text.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content type='text'
-Expect:      not bozo and entries[0]['content'][0]['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content type="text">Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_content_value.xml
deleted file mode 100644
index 9fd290b40d935769ddb44007bf69dcc868facc8b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content content value
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <content>Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_email.xml
deleted file mode 100644
index ab60eeff2263f57e13b0f972c93ff764ed6df85d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_email.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor email
-Expect:      not bozo and entries[0]['contributors'][0]['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_multiple.xml
deleted file mode 100644
index f132f41b4d9039aeb6d561c50cd6b1b537f967d5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_multiple.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: multiple entry contributors
-Expect:      not bozo and entries[0]['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and entries[0]['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': 'http://two.example.com/'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <contributor>
-    <name>Contributor 1</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-  <contributor>
-    <name>Contributor 2</name>
-    <email>you@example.com</email>
-    <uri>http://two.example.com/</uri>
-  </contributor>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_name.xml
deleted file mode 100644
index 3ac96e82331446fb4de9b24516978f6e1fc036e1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_name.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor name
-Expect:      not bozo and entries[0]['contributors'][0]['name'] == u'Example contributor'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_uri.xml
deleted file mode 100644
index 4a176b6d5fd79ad12bf7a0a61169046229af6d5a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_uri.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor uri
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_contributor_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_contributor_url.xml
deleted file mode 100644
index dcc87f9be0177d878088812b684b72f6a898fcd0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_contributor_url.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry contributor url
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id.xml b/lib/feedparser/tests/wellformed/atom10/entry_id.xml
deleted file mode 100644
index b06db1b54e2257eb75070910f8d580f06a24641a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id
-Expect:      not bozo and entries[0]['id'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://example.com/</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_map_guid.xml
deleted file mode 100644
index aa4b2befe15a37bbc5d7e248b08fa55f75757f33..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_map_guid.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id maps to guid
-Expect:      not bozo and entries[0]['guid'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://example.com/</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_1.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_1.xml
deleted file mode 100644
index ea4f6e5c1ed84efbf03d84f236ee6d3236a75912..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_1.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.example.org/thing'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.example.org/thing</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_2.xml
deleted file mode 100644
index 8b4df51c11d00144fc9fbd3764fbf4d5dfa52189..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.example.org/Thing'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.example.org/Thing</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_3.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_3.xml
deleted file mode 100644
index e7f613eab273faba4a84be8634c28444cb2d93f2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_3.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.EXAMPLE.org/thing'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.EXAMPLE.org/thing</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_4.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_4.xml
deleted file mode 100644
index 3232936639d1df3eb78d88c97a2bb3504bc4fe1e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_4.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'HTTP://www.example.org/thing'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>HTTP://www.example.org/thing</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_5.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_5.xml
deleted file mode 100644
index 0c08db8d44594cc6244f35720bd9f4115d69ad6a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_5.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.example.com/~bob'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.example.com/~bob</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_6.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_6.xml
deleted file mode 100644
index 45db81fa4c16cff81ec8951e513247392822e87a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_6.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.example.com/%7ebob'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.example.com/%7ebob</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_7.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_7.xml
deleted file mode 100644
index 25b6f7c77557fb22a90879cd796543e519870866..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_no_normalization_7.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id not normalized (see Atom 1.0 section 4.2.6.1)
-Expect:      not bozo and entries[0]['id'] == u'http://www.example.com/%7Ebob'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>http://www.example.com/%7Ebob</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_id_with_attributes.xml b/lib/feedparser/tests/wellformed/atom10/entry_id_with_attributes.xml
deleted file mode 100644
index 0829da9111d581a3bfca5839cb74d3a01e154947..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_id_with_attributes.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id retrieved when element contains attributes
-Expect: not bozo and entries[0]['id'] == u'right'
--->
-<feed xmlns:bogus="http://dom.test/ns">
-    <entry>
-        <id bogus:attr="wrong">right</id>
-    </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link.xml
deleted file mode 100644
index a507ee3e6c7c4b975c9fd306601374668e49f370..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href maps to link if rel="alternate" and type="text/html"
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_2.xml
deleted file mode 100644
index f46e8b619ce0fa4fe96951622b8b66a9df2f536c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href maps to link if rel="alternate" and type="application/xhtml+xml"
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_3.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_3.xml
deleted file mode 100644
index ec49b56045656f14c9c0818706f4795b6f2674f4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_alternate_map_link_3.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry link href maps to link if rel="alternate", even if type is not present
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.com/alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-    <link rel="alternate" href="http://www.example.com/alternate"></link>
-    <link rel="related" type="text/html" href="http://www.example.com/related"></link>
-    <link rel="via" type="text/html" href="http://www.example.com/via"></link>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_href.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_href.xml
deleted file mode 100644
index f69da53bb1e03250f89f2f3006c4cd59d4693dc6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_href.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href
-Expect:      not bozo and entries[0]['links'][0]['href'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_hreflang.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_hreflang.xml
deleted file mode 100644
index 15b23a0e962eadd758a0314f36727fff9a663bc2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_hreflang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link hreflang
-Expect:      not bozo and entries[0]['links'][0]['hreflang'] == u'en'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/" hreflang="en"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_length.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_length.xml
deleted file mode 100644
index c41378ee0dedd1afaf6586e1042bc347fa2f8757..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_length.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link length
-Expect:      not bozo and entries[0]['links'][0]['length'] == u'42301'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_multiple.xml
deleted file mode 100644
index c50f93eeb8424cd8a1ef19b9ef7bbb23810fe3a8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_multiple.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry multiple links
-Expect:      not bozo and entries[0]['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and entries[0]['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': 'http://www.example.com/post'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-  <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_no_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_no_rel.xml
deleted file mode 100644
index d18a8115c578cb4aef674583921b4ccbe35b6cb7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_no_rel.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel defaults to 'alternate'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel.xml
deleted file mode 100644
index a056a8a7c07509b28a564ccda3b37d33393b99e1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure.xml
deleted file mode 100644
index 26f4d7f797ec7fe6196ac2f7ae4cb323e994110b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='enclosure'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'enclosure'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="enclosure" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_length.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_length.xml
deleted file mode 100644
index 8798fa0e9353e611160f920763925632fdc55c01..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_length.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='enclosure'
-Expect:      not bozo and entries[0]['enclosures'][0]['length'] == u'42301'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_type.xml
deleted file mode 100644
index 73e8e16e8c9802ca7afcf3d2e7e74696bdb71dcc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='enclosure'
-Expect:      not bozo and entries[0]['enclosures'][0]['type'] == u'video/mpeg4'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_url.xml
deleted file mode 100644
index 4c085d6ba346ef8f94418da54fceaedd572df665..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_enclosure_map_enclosure_url.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='enclosure'
-Expect:      not bozo and entries[0]['enclosures'][0]['href'] == u'http://www.example.com/movie.mp4'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_license.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_license.xml
deleted file mode 100644
index 2438a177c4440b0bb3f15a5dbcb3110dfd41e21f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_license.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='enclosure'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'license' and entries[0]['links'][0]['href'] == u'http://www.creativecommons.org/licenses/by-nc/1.0'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="license" href="http://www.creativecommons.org/licenses/by-nc/1.0"/>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_other.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_other.xml
deleted file mode 100644
index b4117738ff494af20df0b78c898dd782fa6fe1af..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_other.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel as URI
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'http://feedparser.org/rel/test'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="http://feedparser.org/rel/test" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_related.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_related.xml
deleted file mode 100644
index 5661405067ce253e0d5d201b133f80cf4f2f8293..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_related.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='related'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'related'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="related" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_self.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_self.xml
deleted file mode 100644
index cf0570cb0a8fb07620d25eb4dfa331743262ae49..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_self.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='self'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'self'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="self" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_via.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_rel_via.xml
deleted file mode 100644
index e60edd95400719eead486c7b288a4eeaa4638d33..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_rel_via.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link rel='via'
-Expect:      not bozo and entries[0]['links'][0]['rel'] == u'via'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="via" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_title.xml
deleted file mode 100644
index 590c9b3b9ead2a643194dbb14ba7c14720bdcbdc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link title
-Expect:      not bozo and entries[0]['links'][0]['title'] == u'Example title'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_link_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_link_type.xml
deleted file mode 100644
index 04ec5f7d2b9e0e2b06b640e778578f0b15b22c61..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_link_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link type
-Expect:      not bozo and entries[0]['links'][0]['type'] == u'text/html'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights.xml
deleted file mode 100644
index c86d9b9401c674b865f469fe7450cd45409c975d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights
-Expect:      not bozo and entries[0]['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights>Example Atom</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_content_value.xml
deleted file mode 100644
index 4f8276538e3595a53316671138e75958689af0e3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights content value
-Expect:      not bozo and entries[0]['rights_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights>Example Atom</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_escaped_markup.xml
deleted file mode 100644
index 94dabcb7d4278f850e99d7f90058771e1b4640d2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights escaped HTML
-Expect:      not bozo and entries[0]['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="html">Example &lt;b&gt;Atom&lt;/b&gt;</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup.xml
deleted file mode 100644
index 95d20ace91bacb2e4a152bd3dfe9327c40c610cc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights inline XHTML
-Expect:      not bozo and entries[0]['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></rights>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup_2.xml
deleted file mode 100644
index 276167311cba42da4d4a0f1f37ac2cd57773beea..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['rights'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></rights>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain.xml
deleted file mode 100644
index bc887b3053695710f830dcf6d36b78eff76ff4dd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights with explicit type='text'
-Expect:      not bozo and entries[0]['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="text">Example Atom</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain_brackets.xml
deleted file mode 100644
index 3516f961718d3900c77d8896c1318815c8118069..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_text_plain_brackets.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights with explicit type='text' contains brackets that are not markup
-Expect:      not bozo and entries[0]['rights'] == u'History of the <blink> tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="text">History of the &lt;blink&gt; tag</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_default.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_type_default.xml
deleted file mode 100644
index 31b400197bdf0b20e4b575c9fbec45262c9f4e23..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_default.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['rights_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights>Example Atom</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_rights_type_text.xml
deleted file mode 100644
index c1b82cef7b137d19e415b09fd6be052f0e5e18aa..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_rights_type_text.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry rights type='text'
-Expect:      not bozo and entries[0]['rights_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <rights type="text">Example Atom</rights>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_email.xml
deleted file mode 100644
index fffb319793eceb726357cd1ee42f7f7b44381436..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_email.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source author email
-Expect:      not bozo and entries[0]['source']['author_detail']['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author.xml
deleted file mode 100644
index 4db9605e9124d6b8c25a16e87f7099294dd8d2d4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source author name + email maps to author
-Expect:      not bozo and entries[0]['source']['author'] == u'Example author (me@example.com)'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author_2.xml
deleted file mode 100644
index 6d2c00df92dc5f2ade544c864ec2968ed5f354d6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_map_author_2.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-Description: entry source author name maps to author if no email present
-Expect:      not bozo and entries[0]['source']['author'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <author>
-    <name>Example author</name>
-    <uri>http://example.com/</uri>
-  </author>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_name.xml
deleted file mode 100644
index d4d5c74f9780d42e72624a4cab8f2995a9a14b19..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_name.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source author name
-Expect:      not bozo and entries[0]['source']['author_detail']['name'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_author_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_author_uri.xml
deleted file mode 100644
index df971db85faabc5c8b21f78780502d373bbfb45c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_author_uri.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source author uri
-Expect:      not bozo and entries[0]['source']['author_detail']['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_email.xml
deleted file mode 100644
index b8125eb1015203c530ef541d852c2373d682a1c3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_email.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author emails
-Expect: not bozo and (entries[0]['source']['authors'][0]['email'] == u'one@one.com') and (entries[0]['source']['authors'][1]['email'] == u'two@two.com')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <source>
-      <author>
-        <email>one@one.com</email>
-      </author>
-      <author>
-        <email>two@two.com</email>
-      </author>
-    </source>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_name.xml
deleted file mode 100644
index 1c846064ba25a80d014690e1f9ffa1e5d3af2d85..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_name.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author names
-Expect: not bozo and (entries[0]['source']['authors'][0]['name'] == u'one') and (entries[0]['source']['authors'][1]['name'] == u'two')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <source>
-      <author>
-        <name>one</name>
-      </author>
-      <author>
-        <name>two</name>
-      </author>
-    </source>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_uri.xml
deleted file mode 100644
index 9901ab75de96ee314398051a95f7581beff5ed87..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_uri.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author uris
-Expect: not bozo and (entries[0]['source']['authors'][0]['url'] == u'http://one.com/') and (entries[0]['source']['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <source>
-      <author>
-        <uri>http://one.com/</uri>
-      </author>
-      <author>
-        <uri>http://two.com/</uri>
-      </author>
-    </source>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_url.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_authors_url.xml
deleted file mode 100644
index c48af3437721105e83f4ee68962172b21bfca441..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_authors_url.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: entry contains multiple author urls
-Expect: not bozo and (entries[0]['source']['authors'][0]['url'] == u'http://one.com/') and (entries[0]['source']['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <source>
-      <author>
-        <url>http://one.com/</url>
-      </author>
-      <author>
-        <url>http://two.com/</url>
-      </author>
-    </source>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_label.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_label.xml
deleted file mode 100644
index 037b357afabefccb9104b6f171ff66a9bf03e2f7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_label.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source category label
-Expect:      not bozo and entries[0]['source']['tags'][0]['label'] == u'Atom 1.0 tests'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_scheme.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_scheme.xml
deleted file mode 100644
index a93edaaba3960393413c38d4552fe6357ca1d20f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_scheme.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source category scheme
-Expect:      not bozo and entries[0]['source']['tags'][0]['scheme'] == u'http://feedparser.org/tests/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_term.xml
deleted file mode 100644
index d75748d93fcefbed94f627dd9851d1f7462ccf9e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source category term
-Expect:      not bozo and entries[0]['source']['tags'][0]['term'] == u'atom10'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <category term="atom10" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term_non_ascii.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_category_term_non_ascii.xml
deleted file mode 100644
index 5b1bd14467a0c9aab5c3027b8ef34fde6e4cda5a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_category_term_non_ascii.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source category term
-Expect:      not bozo and entries[0]['source']['tags'][0]['term'] == u'Freir\xe4ume'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <category term="Freiräume" scheme="http://feedparser.org/tests/" label="Atom 1.0 tests"/>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_email.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_email.xml
deleted file mode 100644
index 8662a9ac577939acf203e9eb4bada9798c04abb5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_email.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source contributor email
-Expect:      not bozo and entries[0]['source']['contributors'][0]['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_multiple.xml
deleted file mode 100644
index 4dd68e37d370c91ff2fb56abc111ee4c0eeee99c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_multiple.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<!--
-Description: multiple entry source contributors
-Expect:      not bozo and entries[0]['source']['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and entries[0]['source']['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': 'http://two.example.com/'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <contributor>
-    <name>Contributor 1</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-  <contributor>
-    <name>Contributor 2</name>
-    <email>you@example.com</email>
-    <uri>http://two.example.com/</uri>
-  </contributor>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_name.xml
deleted file mode 100644
index 6455366e815889452df12976a451b6bc258ecf94..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_name.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source contributor name
-Expect:      not bozo and entries[0]['source']['contributors'][0]['name'] == u'Example contributor'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_uri.xml
deleted file mode 100644
index cedf60f8eb106f9dc8f753767a3db2731528e969..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_contributor_uri.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: entry source contributor uri
-Expect:      not bozo and entries[0]['source']['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator.xml
deleted file mode 100644
index 6c4605bf1b627edbb9354584bcadfdeb5af9e7c7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source generator
-Expect:      not bozo and entries[0]['source']['generator'] == u'Example generator'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_name.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator_name.xml
deleted file mode 100644
index be328aafb44cec613074f88cf737008e925d04ed..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source generator name
-Expect:      not bozo and entries[0]['source']['generator_detail']['name'] == u'Example generator'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_uri.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator_uri.xml
deleted file mode 100644
index ec5696a6dadd489ca27574d17de5a7e4978fec5d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_uri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source generator uri
-Expect:      not bozo and entries[0]['source']['generator_detail']['href'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_version.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_generator_version.xml
deleted file mode 100644
index cfbe01d0c83e49b9ee3c633955747a7130d4bdcb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_generator_version.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source generator version
-Expect:      not bozo and entries[0]['source']['generator_detail']['version'] == u'2.65'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_icon.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_icon.xml
deleted file mode 100644
index 1b40b28f3c2baaca09ac46524b8dbb66b0df7c12..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_icon.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source icon
-Expect:      not bozo and entries[0]['source']['icon'] == u'http://example.com/favicon.ico'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <icon>http://example.com/favicon.ico</icon>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_id.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_id.xml
deleted file mode 100644
index 56fa819179d6bfd5433a639634c1ed12cf6b33af..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_id.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source id
-Expect:      not bozo and entries[0]['source']['id'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <id>http://example.com/</id>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link.xml
deleted file mode 100644
index 9982b6b5e09c567067a564a661fab2bec46a9df1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link href maps to link if rel="alternate" and type="text/html"
-Expect:      not bozo and entries[0]['source']['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link_2.xml
deleted file mode 100644
index 140e749cd7c288f21bf1152ad17f1a95e0c8a29b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_alternate_map_link_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link href maps to link if rel="alternate" and type="application/xhtml+xml"
-Expect:      not bozo and entries[0]['source']['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_href.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_href.xml
deleted file mode 100644
index 5e2bccf41a25c5d764ebcfa7dc7fe585a7109647..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_href.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link href
-Expect:      not bozo and entries[0]['source']['links'][0]['href'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_hreflang.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_hreflang.xml
deleted file mode 100644
index 973a28df12cd74a733ccdf9f0dd47382df3ef1b2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_hreflang.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link hreflang
-Expect:      not bozo and entries[0]['source']['links'][0]['hreflang'] == u'en'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/" hreflang="en"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_length.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_length.xml
deleted file mode 100644
index 5fd2f859676b87c837975797493b01221c884a15..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_length.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link length
-Expect:      not bozo and entries[0]['source']['links'][0]['length'] == u'42301'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_multiple.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_multiple.xml
deleted file mode 100644
index a96562426eb1e16c46ba6dbf63e0be5b2777cce4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_multiple.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry source multiple links
-Expect:      not bozo and entries[0]['source']['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and entries[0]['source']['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': 'http://www.example.com/post'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-  <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_no_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_no_rel.xml
deleted file mode 100644
index ee9a6ea7756f641dda901e63bf15ebad1f6105eb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_no_rel.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link rel defaults to 'alternate'
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel.xml
deleted file mode 100644
index 5b1a8cdd2f4faaab540da0ab0f8e50d9acceb306..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link rel
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_other.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_other.xml
deleted file mode 100644
index e24399f30e75513a8f42a97a4c27e411f0829a38..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_other.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link rel as URI
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'http://feedparser.org/rel/test'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="http://feedparser.org/rel/test" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_related.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_related.xml
deleted file mode 100644
index 5eb719768be191b0fc3ae2d898d1f9ae1d9c59a6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_related.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entries sourcelink rel='related'
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'related'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="related" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_self.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_self.xml
deleted file mode 100644
index ee04ef85a54a9621607329fc179847b264357668..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_self.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link rel='self'
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'self'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="self" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_via.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_via.xml
deleted file mode 100644
index 15b9bbfb7c553a3a5d8b43ccbee5c1b624a48530..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_rel_via.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link rel='via'
-Expect:      not bozo and entries[0]['source']['links'][0]['rel'] == u'via'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="via" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_title.xml
deleted file mode 100644
index 1c8ff561d7031af8bcc391564a5032f325d66ce4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_title.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link title
-Expect:      not bozo and entries[0]['source']['links'][0]['title'] == u'Example title'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_link_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_link_type.xml
deleted file mode 100644
index d77060bb36d6d9d308f209ec3c331b2d4f5ef0fa..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_link_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source link type
-Expect:      not bozo and entries[0]['source']['links'][0]['type'] == u'text/html'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_logo.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_logo.xml
deleted file mode 100644
index 2b43b39c3b31b29f1e1f25cb5fbf806536afd712..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_logo.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source logo
-Expect:      not bozo and entries[0]['source']['logo'] == u'http://example.com/logo.jpg'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <logo>http://example.com/logo.jpg</logo>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights.xml
deleted file mode 100644
index d8d6ede84cad650dc37c557fc406d299c79dbf58..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights
-Expect:      not bozo and entries[0]['source']['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights>Example Atom</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64.xml
deleted file mode 100644
index a101d3f1acff7f123736456ea383efe2a9259560..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source rights base64-encoded
-Expect:      not bozo and entries[0]['source']['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64_2.xml
deleted file mode 100644
index f0a5c1de99f207ada615f7c74c491e93352d5339..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_base64_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source rights base64-encoded
-Expect:      not bozo and entries[0]['source']['rights'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-<rights type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type.xml
deleted file mode 100644
index acf70585faef9adbedbca329bbdfaba0feb31373..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['source']['rights_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights>Example Atom</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type_text.xml
deleted file mode 100644
index 5bd7d1316359ae0dd75e40903db6e9290312433a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_type_text.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights type='text'
-Expect:      not bozo and entries[0]['source']['rights_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="text">Example Atom</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_value.xml
deleted file mode 100644
index 7a47e880d9a3d0b102f79dedbda8413777d73222..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_content_value.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights content value
-Expect:      not bozo and entries[0]['source']['rights_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights>Example Atom</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_escaped_markup.xml
deleted file mode 100644
index 4501ae5920c5825d0264ab204fb8cc8d614d2703..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_escaped_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights escaped HTML
-Expect:      not bozo and entries[0]['source']['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="html">Example &lt;b&gt;Atom&lt;/b&gt;</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup.xml
deleted file mode 100644
index 1c264fb551b5b61945e4da9034f7b434bc527cb7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights inline XHTML
-Expect:      not bozo and entries[0]['source']['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></rights>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup_2.xml
deleted file mode 100644
index 9467b79b8e3266587b5230616e1840561e0f2633..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_inline_markup_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['source']['rights'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></rights>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_rights_text_plain.xml
deleted file mode 100644
index f5bc9d36b14cfd1eb13a5a59cf8e19ba62badcba..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_rights_text_plain.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source rights with explicit type='text'
-Expect:      not bozo and entries[0]['source']['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <rights type="text">Example Atom</rights>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subittle_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subittle_content_type_text.xml
deleted file mode 100644
index c4dda8320110965bd315113cb348c1a29ea74fed..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subittle_content_type_text.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle type='text'
-Expect:      not bozo and entries[0]['source']['subtitle_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="text">Example Atom</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle.xml
deleted file mode 100644
index 828129b03122f90082001dbe888110547a3433d4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle>Example Atom</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64.xml
deleted file mode 100644
index 5821b8cd682fe09f66d42bfa578668ac4ebda64d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source subtitle base64-encoded
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64_2.xml
deleted file mode 100644
index 10fea62ba0bda42e07621eca1433d01a792b7653..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_base64_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source subtitle base64-encoded
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-<subtitle type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_type.xml
deleted file mode 100644
index b92408ede7a98911c389f68c69d5b16477dbdc93..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['source']['subtitle_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle>Example Atom</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_value.xml
deleted file mode 100644
index 5a8d120eb21b06bf5ee924d7a9121a416f945963..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_content_value.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle content value
-Expect:      not bozo and entries[0]['source']['subtitle_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle>Example Atom</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_escaped_markup.xml
deleted file mode 100644
index 4b7cf90c24abfc2644c07e2893df2b38db982f67..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_escaped_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle escaped HTML
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="html">Example &lt;b&gt;Atom&lt;/b&gt;</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup.xml
deleted file mode 100644
index a82035be001d9caf3ada54407b9227796ea48f87..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle inline XHTML
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></subtitle>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup_2.xml
deleted file mode 100644
index 10df20c064b2a24ef374b79258e7f8d1f55e41f7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_inline_markup_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></subtitle>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_text_plain.xml
deleted file mode 100644
index e59944801411d5a005c981e68bddf93067dd7620..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_subtitle_text_plain.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source subtitle with explicit type='text'
-Expect:      not bozo and entries[0]['source']['subtitle'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <subtitle type="text">Example Atom</subtitle>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title.xml
deleted file mode 100644
index f76409796e8712810210415d3e54085f7e52153b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title
-Expect:      not bozo and entries[0]['source']['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title>Example Atom</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64.xml
deleted file mode 100644
index 32727421c73c16c4202c5ca427ded994b5ef998a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source title base64-encoded
-Expect:      not bozo and entries[0]['source']['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64_2.xml
deleted file mode 100644
index 1687b7cb8d8530b6dd864947f4945736d1aa81bb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_base64_2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: entry source title base64-encoded
-Expect:      not bozo and entries[0]['source']['title'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-<title type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type.xml
deleted file mode 100644
index de8c0d330c30d437b681e4c0fbd8f1bbb976904b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['source']['title_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title>Example Atom</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type_text.xml
deleted file mode 100644
index d14b9aff3ed06c4c546efe568da9853d6d4c75cb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_type_text.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title type='text'
-Expect:      not bozo and entries[0]['source']['title_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="text">Example Atom</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_value.xml
deleted file mode 100644
index 149e9a5c425d2a04af10ee6d245c2e9d326c216b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_content_value.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title content value
-Expect:      not bozo and entries[0]['source']['title_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title>Example Atom</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_escaped_markup.xml
deleted file mode 100644
index 1d6068686aadd86ff5250cc1460644aec3d6f449..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_escaped_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title escaped HTML
-Expect:      not bozo and entries[0]['source']['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="html">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup.xml
deleted file mode 100644
index e2060b56eee0e4d101b670085a657ada93429970..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title inline XHTML
-Expect:      not bozo and entries[0]['source']['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup_2.xml
deleted file mode 100644
index bc1867188fecf429137832b1ef194dd0714279cc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_inline_markup_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['source']['title'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></title>
-</source>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_source_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_source_title_text_plain.xml
deleted file mode 100644
index 34f190b917026029a95fa926c2e7f0da3eb0800f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_source_title_text_plain.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry source title with explicit type='text'
-Expect:      not bozo and entries[0]['source']['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<source>
-  <title type="text">Example Atom</title>
-</source>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary.xml
deleted file mode 100644
index 65ed3d6d8f07032a274fb3333e320651c20579c1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary
-Expect:      not bozo and entries[0]['summary'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_base64.xml
deleted file mode 100644
index 8c34a40d14ee41b2548198918dfa8b4b53216c98..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary base64-encoded
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_base64_2.xml
deleted file mode 100644
index 7cd162589c3ad50b458de0943dd92a62baf0a326..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_base64_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary base64-encoded
-Expect:      not bozo and entries[0]['summary'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<summary type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_content_value.xml
deleted file mode 100644
index ecf48929e0e164ce51f35aa67653eccf1f60fd12..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content value
-Expect:      not bozo and entries[0]['summary_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_escaped_markup.xml
deleted file mode 100644
index c6236c1da26c2b303f1e024909d128e069db6d66..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary escaped HTML
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="html">Example &lt;b&gt;Atom&lt;/b&gt;</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup.xml
deleted file mode 100644
index b174bf8ff0f7b5fc73ffe17658f41db7f8515122..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary inline XHTML
-Expect:      not bozo and entries[0]['summary'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></summary>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup_2.xml
deleted file mode 100644
index 45ecf452807b1a3b08953424d4ba9be937d1a932..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['summary'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></summary>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_text_plain.xml
deleted file mode 100644
index 2a1731f99d3e6a314ba2cbf6f988a1417b952fb2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary with explicit type='text'
-Expect:      not bozo and entries[0]['summary'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="text">Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_default.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_type_default.xml
deleted file mode 100644
index ac7d18ef57960896576e6030068d51ed0b5bda22..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_default.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['summary_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary>Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_summary_type_text.xml
deleted file mode 100644
index 70a0e23c0b4f0e829ab6fa7b9910aa8e95de070c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_summary_type_text.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary type='text'
-Expect:      not bozo and entries[0]['summary_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <summary type="text">Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title.xml b/lib/feedparser/tests/wellformed/atom10/entry_title.xml
deleted file mode 100644
index b3ed03f841f014b21e6faadcbf72be897a90bf72..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title
-Expect:      not bozo and entries[0]['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_base64.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_base64.xml
deleted file mode 100644
index 856b9b2c7fbd7515ceb93d68ce9ad338d1221732..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_base64.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title base64-encoded
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_base64_2.xml
deleted file mode 100644
index 30e2bd8e05859e0aef669121a52f8ba3d2676cbc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_base64_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title base64-encoded
-Expect:      not bozo and entries[0]['title'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<title type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_content_value.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_content_value.xml
deleted file mode 100644
index b33242057eea28218eac80317fefff5dca0c002c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_content_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content value
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_escaped_markup.xml
deleted file mode 100644
index 71e6e6d5bd8c2b3cea38d8b4c954fee58744f05a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title escaped HTML
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="html">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup.xml
deleted file mode 100644
index 650468b48081bfd4f2ed2072a8fc5f4b3c6f0ebb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title inline XHTML
-Expect:      not bozo and entries[0]['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup_2.xml
deleted file mode 100644
index 6998214dbcfd964ee91f2c529662e3824d55b49a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_inline_markup_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title inline XHTML with escaped markup
-Expect:      not bozo and entries[0]['title'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain.xml
deleted file mode 100644
index 7692469e2e0528be9486e3a717d983d609151fdd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title with explicit type='text'
-Expect:      not bozo and entries[0]['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="text">Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain_brackets.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain_brackets.xml
deleted file mode 100644
index 5a6e72e0786db06cf3a4cfbc9b44e2786e650ecf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_text_plain_brackets.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title with explicit type='text' contains brackets that are not markup
-Expect:      not bozo and entries[0]['title'] == u'History of the <blink> tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="text">History of the &lt;blink&gt; tag</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_type_default.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_type_default.xml
deleted file mode 100644
index 07fd597ffd77b60b45ce283bd32bd340973ccddc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_type_default.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content type defaults to 'text/plain'
-Expect:      not bozo and entries[0]['title_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title>Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/entry_title_type_text.xml b/lib/feedparser/tests/wellformed/atom10/entry_title_type_text.xml
deleted file mode 100644
index d7621b06d9434f234d0a95b07da96c85bea5f612..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/entry_title_type_text.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title type='text'
-Expect:      not bozo and entries[0]['title_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title type="text">Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_email.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_email.xml
deleted file mode 100644
index 78e898d2de2dd4c25521a269e799c7b74c9d7665..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author email
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_map_author.xml
deleted file mode 100644
index a85c04367c8d3aa6b10120b8e4f61c34bebab8ea..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author name + email maps to author
-Expect:      not bozo and feed['author'] == u'Example author (me@example.com)'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_map_author_2.xml
deleted file mode 100644
index af8eb617cd69dd35f4d71a93fbd247fc5ff6a133..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_map_author_2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: feed author name maps to author if no email present
-Expect:      not bozo and feed['author'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_name.xml
deleted file mode 100644
index d0aa2f71be71b3d314928f20a3291e8b0c20c87f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author name
-Expect:      not bozo and feed['author_detail']['name'] == u'Example author'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_uri.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_uri.xml
deleted file mode 100644
index b5e56f5d19d867faf9136cfa2f8197aa6dded472..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_uri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author uri
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_author_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_author_url.xml
deleted file mode 100644
index 0b6e40f2724ca6cbe8d22133b58fac26932c83d0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_author_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed author url
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>Example author</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_email.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_email.xml
deleted file mode 100644
index 83591e131f2100df9eddf04eb738b5019e21752d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_authors_email.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: feed contains multiple author emails
-Expect: not bozo and (feed['authors'][0]['email'] == u'one@one.com') and (feed['authors'][1]['email'] == u'two@two.com')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <email>one@one.com</email>
-  </author>
-  <author>
-    <email>two@two.com</email>
-  </author>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_name.xml
deleted file mode 100644
index 7b02089cbeb0b98a68a9afbb2224ac2aac84f5c2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_authors_name.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: feed contains multiple author names
-Expect: not bozo and (feed['authors'][0]['name'] == u'one') and (feed['authors'][1]['name'] == u'two')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <name>one</name>
-  </author>
-  <author>
-    <name>two</name>
-  </author>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_uri.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_uri.xml
deleted file mode 100644
index 794299677d98196048a81e3092c4c7e115351f48..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_authors_uri.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: feed contains multiple author uris
-Expect: not bozo and (feed['authors'][0]['url'] == u'http://one.com/') and (feed['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <uri>http://one.com/</uri>
-  </author>
-  <author>
-    <uri>http://two.com/</uri>
-  </author>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_authors_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_authors_url.xml
deleted file mode 100644
index d7fcde820b8f6aabc7e5ef0a04ce258bf1088c34..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_authors_url.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description: feed contains multiple author urls
-Expect: not bozo and (feed['authors'][0]['url'] == u'http://one.com/') and (feed['authors'][1]['url'] == u'http://two.com/')
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <author>
-    <url>http://one.com/</url>
-  </author>
-  <author>
-    <url>http://two.com/</url>
-  </author>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_email.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_email.xml
deleted file mode 100644
index f93819174fb9586ebbb7c5542420c47ed140ab90..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor email
-Expect:      not bozo and feed['contributors'][0]['email'] == u'me@example.com'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_multiple.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_multiple.xml
deleted file mode 100644
index 8095a7411665baf53830e2b8c0bbc6de36adc230..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_multiple.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: multiple feed contributors
-Expect:      not bozo and feed['contributors'][0] == {'name': u'Contributor 1', 'email': u'me@example.com', 'href': u'http://example.com/'} and feed['contributors'][1] == {'name': u'Contributor 2', 'email': u'you@example.com', 'href': 'http://two.example.com/'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <contributor>
-    <name>Contributor 1</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-  <contributor>
-    <name>Contributor 2</name>
-    <email>you@example.com</email>
-    <uri>http://two.example.com/</uri>
-  </contributor>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_name.xml
deleted file mode 100644
index 4d7d163bc098bd37e4abaacbd18888563050a25b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor name
-Expect:      not bozo and feed['contributors'][0]['name'] == u'Example contributor'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_uri.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_uri.xml
deleted file mode 100644
index a8fc8626e970f7ae5363518e50d5a0677a3fbacb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_uri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor uri
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <uri>http://example.com/</uri>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_contributor_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_contributor_url.xml
deleted file mode 100644
index b6cc8da9092fbca961e875a70fddecac0296c35b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_contributor_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: feed contributor url
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <contributor>
-    <name>Example contributor</name>
-    <email>me@example.com</email>
-    <url>http://example.com/</url>
-  </contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator.xml
deleted file mode 100644
index 88c3abfb0743482742ea76762471716c5af0f911..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_generator.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator
-Expect:      not bozo and feed['generator'] == u'Example generator'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator_name.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator_name.xml
deleted file mode 100644
index fd89ce59d4e6dc101339819fe9954d286ad233b1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_generator_name.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator name
-Expect:      not bozo and feed['generator_detail']['name'] == u'Example generator'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator_url.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator_url.xml
deleted file mode 100644
index a321577ecf7444c095b517c698811bc6bd2d3284..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_generator_url.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator uri
-Expect:      not bozo and feed['generator_detail']['href'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_generator_version.xml b/lib/feedparser/tests/wellformed/atom10/feed_generator_version.xml
deleted file mode 100644
index 0660672ce6db09ff365ef62bf88a6f758658e91a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_generator_version.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator version
-Expect:      not bozo and feed['generator_detail']['version'] == u'2.65'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <generator uri="http://example.com/" version="2.65">Example generator</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_icon.xml b/lib/feedparser/tests/wellformed/atom10/feed_icon.xml
deleted file mode 100644
index 498b4d07ce645e27f5e5133f2f92cdf30ce55bc2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_icon.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed icon
-Expect:      not bozo and feed['icon'] == u'http://example.com/favicon.ico'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <icon>http://example.com/favicon.ico</icon>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_id.xml b/lib/feedparser/tests/wellformed/atom10/feed_id.xml
deleted file mode 100644
index dae9b121bbcbf3be5ce8dbaea93c88fed66c81fc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_id.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed id
-Expect:      not bozo and feed['id'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <id>http://example.com/</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_id_map_guid.xml b/lib/feedparser/tests/wellformed/atom10/feed_id_map_guid.xml
deleted file mode 100644
index 94fe01c81722f8ed74b317fb1bfa0eb70081a820..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_id_map_guid.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed id
-Expect:      not bozo and feed['guid'] == u'http://example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <id>http://example.com/</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link.xml
deleted file mode 100644
index e25189f0f5e4f9b9a03d81872ad4a4ee2dc7ba3d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href maps to link if rel="alternate" and type="text/html"
-Expect:      not bozo and feed['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link_2.xml
deleted file mode 100644
index 26f09699d3bf2a4f1396f9dc66ce4e4f5dec8df7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_alternate_map_link_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href maps to link if rel="alternate" and type="application/xhtml+xml"
-Expect:      not bozo and feed['link'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_href.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_href.xml
deleted file mode 100644
index 6d8919fcedda3bc4cdcea84e0f649626fb67e0bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_href.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href
-Expect:      not bozo and feed['links'][0]['href'] == u'http://www.example.com/'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_hreflang.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_hreflang.xml
deleted file mode 100644
index ea03612953be60619adbcfbf946939fb81fc9ff4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_hreflang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link hreflang
-Expect:      not bozo and feed['links'][0]['hreflang'] == u'en'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/" hreflang="en"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_length.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_length.xml
deleted file mode 100644
index b9e04e95d8642b999ec975dbc31173545097b623..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_length.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link length
-Expect:      not bozo and feed['links'][0]['length'] == u'42301'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="enclosure" type="video/mpeg4" href="http://www.example.com/movie.mp4" length="42301"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_multiple.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_multiple.xml
deleted file mode 100644
index 8745e6ef45d8e4e3bf5bee7cb0c407a139977324..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_multiple.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed multiple links
-Expect:      not bozo and feed['links'][0] == {'rel': u'alternate', 'type': u'application/xhtml+xml', 'href': u'http://www.example.com/'} and feed['links'][1] == {'rel': u'service.post', 'type': u'application/atom+xml', 'href': 'http://www.example.com/post'}
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="application/xhtml+xml" href="http://www.example.com/"/>
-  <link rel="service.post" type="application/atom+xml" href="http://www.example.com/post"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_no_rel.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_no_rel.xml
deleted file mode 100644
index 69af2b88695ae97f31093da7ca4ed2285f6d935a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_no_rel.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel defaults to 'alternate'
-Expect:      not bozo and feed['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel.xml
deleted file mode 100644
index eb935d8d5eff4cf4a989bc947a54592ad560782a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel
-Expect:      not bozo and feed['links'][0]['rel'] == u'alternate'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_other.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_other.xml
deleted file mode 100644
index c721a447bd224f0f5dd97f2158cb91774e41f081..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_other.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel as URI
-Expect:      not bozo and feed['links'][0]['rel'] == u'http://feedparser.org/rel/test'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="http://feedparser.org/rel/test" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_related.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_related.xml
deleted file mode 100644
index b19d09bb67214c975f02e3a21728820dbe8047c6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_related.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel='related'
-Expect:      not bozo and feed['links'][0]['rel'] == u'related'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="related" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self.xml
deleted file mode 100644
index 601402acc1eef6825473f394ecb868f514bad1e4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel='self'
-Expect:      not bozo and feed['links'][0]['rel'] == u'self'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="self" type="application/atom+xml" href="http://www.example.com/"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self_default_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self_default_type.xml
deleted file mode 100644
index 11a542e3f74c14b9d3165d0b4f4e95914b34cdaf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_self_default_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel='self' default mimetype
-Expect:      not bozo and feed['links'][0]['type'] == u'application/atom+xml'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="self" href="http://www.example.com/"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_via.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_rel_via.xml
deleted file mode 100644
index 12993fde2f6ae6f545eb216b7d356ea112955add..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_rel_via.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link rel='via'
-Expect:      not bozo and feed['links'][0]['rel'] == u'via'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="via" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_title.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_title.xml
deleted file mode 100644
index 72cc9e92297b5281b6458b5912c0649f174746b1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_title.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link title
-Expect:      not bozo and feed['links'][0]['title'] == u'Example title'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" title="Example title" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_link_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_link_type.xml
deleted file mode 100644
index 8bf83efbe60d9df3155ce779e946cdba1ffcd17b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_link_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link type
-Expect:      not bozo and feed['links'][0]['type'] == u'text/html'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <link rel="alternate" type="text/html" href="http://www.example.com/"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_logo.xml b/lib/feedparser/tests/wellformed/atom10/feed_logo.xml
deleted file mode 100644
index 1dbf1a1d271254652a822ce1b0361fb8c7117243..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_logo.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed logo
-Expect:      not bozo and feed['logo'] == u'http://example.com/logo.jpg'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <logo>http://example.com/logo.jpg</logo>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights.xml
deleted file mode 100644
index a44db6faf6493b12e398f8037499f1f1b4081a8d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights
-Expect:      not bozo and feed['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights>Example Atom</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_base64.xml
deleted file mode 100644
index 956daca3e9bf6567fe67a54560d7a4aa2ac852e0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed rights base64-encoded
-Expect:      not bozo and feed['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_base64_2.xml
deleted file mode 100644
index 76b1b2b7c3ee35a6d9e5083b53e251cfb28c9038..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed rights base64-encoded
-Expect:      not bozo and feed['rights'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<rights type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type.xml
deleted file mode 100644
index ee44d5adf037a9bf422c40364f36a492febad562..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights content type defaults to 'text/plain'
-Expect:      not bozo and feed['rights_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights>Example Atom</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type_text.xml
deleted file mode 100644
index 6aa0412aa6ca12136bb29435fdf3c00da366353a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_type_text.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights type='text'
-Expect:      not bozo and feed['rights_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="text">Example Atom</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_value.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_content_value.xml
deleted file mode 100644
index fb0780031e30af9e8f028d3af81942fea86cf888..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights content value
-Expect:      not bozo and feed['rights_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights>Example Atom</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_escaped_markup.xml
deleted file mode 100644
index 8384d2998261641a97df67eae194b6015fd2fc27..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights escaped HTML
-Expect:      not bozo and feed['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="html">Example &lt;b&gt;Atom&lt;/b&gt;</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup.xml
deleted file mode 100644
index 080f880e366e1d33b12eb73ad740e8548f1658ae..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights inline XHTML
-Expect:      not bozo and feed['rights'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></rights>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup_2.xml
deleted file mode 100644
index d8b953fd27f97949be628ddd939dc8250e2a2f5e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights inline XHTML with escaped markup
-Expect:      not bozo and feed['rights'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></rights>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_rights_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/feed_rights_text_plain.xml
deleted file mode 100644
index 54e7e612df7ff8911b9f31eaa13bbf31b7c9f86f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_rights_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed rights with explicit type='text'
-Expect:      not bozo and feed['rights'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <rights type="text">Example Atom</rights>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle.xml
deleted file mode 100644
index 8a07142c424d282315b659fa0cc41b0db5e5602b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle
-Expect:      not bozo and feed['subtitle'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle>Example Atom</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64.xml
deleted file mode 100644
index 8dd6a864fe2079e637701f58e3d9d85b7ed5a1c5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed subtitle base64-encoded
-Expect:      not bozo and feed['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64_2.xml
deleted file mode 100644
index d2ef0d6e7a1ffbaf5319a4a4e0a5372fa08bc24b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed subtitle base64-encoded
-Expect:      not bozo and feed['subtitle'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<subtitle type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type.xml
deleted file mode 100644
index 2e3395140328d99427f3bee26b0612fbc052bc6e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle content type defaults to 'text/plain'
-Expect:      not bozo and feed['subtitle_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle>Example Atom</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type_text.xml
deleted file mode 100644
index ce20736660a27fa093d659a4dfa56c43ac55db06..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_type_text.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle type='text'
-Expect:      not bozo and feed['subtitle_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="text">Example Atom</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_value.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_value.xml
deleted file mode 100644
index 309deafbe2f0c7c82a67c9b18dccfcf8f6c7fb22..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle content value
-Expect:      not bozo and feed['subtitle_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle>Example Atom</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_escaped_markup.xml
deleted file mode 100644
index fc7a85b87766caf1f7a42c6d75a412f5ce383e62..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle escaped HTML
-Expect:      not bozo and feed['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="html">Example &lt;b&gt;Atom&lt;/b&gt;</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup.xml
deleted file mode 100644
index 2742f68e5cb427e1bde5183dd90ac669b5953c29..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle inline XHTML
-Expect:      not bozo and feed['subtitle'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></subtitle>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup_2.xml
deleted file mode 100644
index 4b36e24abb8190f39ea4667afb0be3ca8de58441..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle inline XHTML with escaped markup
-Expect:      not bozo and feed['subtitle'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></subtitle>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/feed_subtitle_text_plain.xml
deleted file mode 100644
index bf97397aba01f0cfa9f40620fe13d94a2b2ff2c9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_subtitle_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle with explicit type='text'
-Expect:      not bozo and feed['subtitle'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <subtitle type="text">Example Atom</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title.xml b/lib/feedparser/tests/wellformed/atom10/feed_title.xml
deleted file mode 100644
index 37a26ea51da7d7c9535f1912666355307160eb53..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_base64.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_base64.xml
deleted file mode 100644
index 5c07e7295ba5ef3b2322e5307f69b080ea030d88..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_base64.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title base64-encoded
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="application/octet-stream">
-    RXhhbXBsZSA8Yj5BdG9tPC9iPg==
-  </title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_base64_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_base64_2.xml
deleted file mode 100644
index 409c1f328ff528df92081f0aaa329cc15c9470e0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_base64_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title base64-encoded
-Expect:      not bozo and feed['title'] == u'<p>History of the &lt;blink&gt; tag</p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<title type="application/octet-stream">
-PHA+SGlzdG9yeSBvZiB0aGUgJmx0O2JsaW5rJmd0OyB0YWc8L3A+
-</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_content_type.xml
deleted file mode 100644
index 52d45675718614b4541070d13f2534d42d92e9fc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content type defaults to 'text/plain'
-Expect:      not bozo and feed['title_detail']['type'] == u'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type_text.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_content_type_text.xml
deleted file mode 100644
index d1649921c9f61df7eb228135cc7c24d73a05db97..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_content_type_text.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title type='text'
-Expect:      not bozo and feed['title_detail']['type'] == 'text/plain'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="text">Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_content_value.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_content_value.xml
deleted file mode 100644
index 7d31b22e4744c6e2bec9d6ed5df68864343a1e02..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_content_value.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content value
-Expect:      not bozo and feed['title_detail']['value'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title>Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_escaped_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_escaped_markup.xml
deleted file mode 100644
index ba23dc0bf65f4de7999737c4cf40c7fea4b68486..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_escaped_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title escaped HTML
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html">Example &lt;b&gt;Atom&lt;/b&gt;</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup.xml
deleted file mode 100644
index fea23a77cbd782fdc32d53334b1b9e5b7c3c8aff..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title inline XHTML
-Expect:      not bozo and feed['title'] == u'Example <b>Atom</b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <b>Atom</b></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup_2.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup_2.xml
deleted file mode 100644
index ec2da6b045820c8a00f517bfd386223873b9e56c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_inline_markup_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title inline XHTML with escaped markup
-Expect:      not bozo and feed['title'] == u'History of the &lt;blink&gt; tag'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">History of the &lt;blink&gt; tag</div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/feed_title_text_plain.xml b/lib/feedparser/tests/wellformed/atom10/feed_title_text_plain.xml
deleted file mode 100644
index 0f7ff95927f072410b32ca00258029b48f44e5bd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/feed_title_text_plain.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title with explicit type='text'
-Expect:      not bozo and feed['title'] == u'Example Atom'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="text">Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_label.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_label.xml
deleted file mode 100644
index c66c46d1cac888676624af641826a100cfe90c51..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_category_label.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: multiple media:category tags - label
-Expect: not bozo and entries[0].tags[0].label == u'lab1'
--->
-<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
-   <channel>
-        <item>
-            <media:category label="lab1">cat1</media:category>
-        </item>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_multiple.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_multiple.xml
deleted file mode 100644
index 95b2f48c6d9e778ebaa83a27c23f0eec748cd662..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_category_multiple.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: multiple media:category tags - multiple categories
-Expect: not bozo and len(entries[0].tags) == 2 and entries[0].tags[1].term == u'cat2'
--->
-<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
-   <channel>
-        <item>
-            <media:category>cat1</media:category>
-            <media:category>cat2</media:category>
-        </item>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme1.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme1.xml
deleted file mode 100644
index d1de91e2b4adceb020061264405fad1cfe045c72..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme1.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: multiple media:category tags - default scheme
-Expect: not bozo and entries[0].tags[0].scheme == u'http://search.yahoo.com/mrss/category_schema'
--->
-<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
-   <channel>
-        <item>
-            <media:category>cat1</media:category>
-        </item>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme2.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme2.xml
deleted file mode 100644
index 62f5c3657be2c3f6e2bf6eb1137bc5eb0b4e676d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_category_scheme2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: multiple media:category tags - custom scheme
-Expect: not bozo and entries[0].tags[0].scheme == u'http://example.INVALID/'
--->
-<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
-   <channel>
-        <item>
-            <media:category scheme="http://example.INVALID/">cat1</media:category>
-        </item>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_category_term.xml b/lib/feedparser/tests/wellformed/atom10/item_media_category_term.xml
deleted file mode 100644
index d01d81fb037e47ec627501103b5f2a8a28ecc180..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_category_term.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: multiple media:category tags - term
-Expect: not bozo and entries[0].tags[0].term == u'cat1'
--->
-<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss">
-   <channel>
-        <item>
-            <media:category>cat1</media:category>
-        </item>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/item_media_title_type_plain.xml b/lib/feedparser/tests/wellformed/atom10/item_media_title_type_plain.xml
deleted file mode 100644
index 4262d196240ed60dacc62aa28c0ba53dd849d2bb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/item_media_title_type_plain.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: media:title @type="plain"
-Expect:      not bozo and entries[0]['title_detail']['type'] == u'text/plain'
--->
-<rss xmlns:media="http://search.yahoo.com/mrss/">
-  <channel>
-    <item>
-      <media:title type="plain">plain means text/plain</media:title>
-    </item>
-  </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/atom10/missing_quote_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/missing_quote_in_attr.xml
deleted file mode 100644
index a62a0d9ecf0d4dc0793f3d7a96661ad1f7dd82ea..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/missing_quote_in_attr.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: href is missing a quote
-Expect:      not bozo and feed['title_detail']['value'] == u'<a href="http://example.com/&quot;">example</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html"><![CDATA[<a href=http://example.com/">example</a>]]></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/qna.xml b/lib/feedparser/tests/wellformed/atom10/qna.xml
deleted file mode 100644
index 6198ec1e3588d73bfa1fbf873fab01f4580f0013..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/qna.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: Q&A
-Expect:      not bozo and entries[0]['title_detail']['value'] == u'Q&amp;A session'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-	  <title type="html">Q&amp;A session</title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/quote_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/quote_in_attr.xml
deleted file mode 100644
index 88c133c76b3f9281c859fdf598dcd12355e0e7ce..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/quote_in_attr.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains URI with an amperand
-Expect:      not bozo and feed['title_detail']['value'] == u'<a title="&quot;test&quot;">test</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a title='"test"'>test</a></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/relative_uri.xml b/lib/feedparser/tests/wellformed/atom10/relative_uri.xml
deleted file mode 100644
index 8c5509bd47728b1d05a5f3fe10a555f00c680dab..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/relative_uri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base
-Expect:      not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/test/test.html">test</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="xhtml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit.xml b/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit.xml
deleted file mode 100644
index 5462c18f42a3ce264b45f14ccf734026f2aeacdd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base inherited from parent element
-Expect:      not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/test/test.html">test</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://example.com/test/">
-  <title type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit_2.xml b/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit_2.xml
deleted file mode 100644
index e018e2df2e2658c232655efb1de8ff598470b763..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/relative_uri_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains relative URI resolved relative to xml:base overriding parent xml:base
-Expect:      not bozo and feed['title_detail']['value'] == u'Example <a href="http://example.com/test/test.html">test</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://example.com/parent/">
-  <title type="xhtml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/atom10/tag_in_attr.xml b/lib/feedparser/tests/wellformed/atom10/tag_in_attr.xml
deleted file mode 100644
index 9e4d3bebbd8141c59cabd963e29d58a71883fa8c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/atom10/tag_in_attr.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: image attribute contains angle brackets
-Expect:      not bozo and feed['title_detail']['value'] == u'<img alt="cat&lt;br /&gt;dog" src="http://example.com/cat-dog.jpg" />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html"><![CDATA[<img src="http://example.com/cat-dog.jpg" alt="cat<br />dog">]]></title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/base/cdf_item_abstract_xml_base.xml b/lib/feedparser/tests/wellformed/base/cdf_item_abstract_xml_base.xml
deleted file mode 100644
index f90968e407602b4dd4042139fbc1579c5a1da719..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/cdf_item_abstract_xml_base.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: CDF item abstract xml:base
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://base.example.org/'
--->
-<CHANNEL
-  BASE="http://base.example.org/"
-  HREF="http://www.example.org/"
-  LASTMOD="2004-04-06T23:05:43-05:00"
-  PRECACHE="No">
-  <TITLE>channel title</TITLE>
-  <ABSTRACT>channel abstract</ABSTRACT>
-  <ITEM HREF="/item/1"
-    PRECACHE="No"
-    LASTMOD="2004-04-06T23:05:43-05:00">
-    <TITLE>item title</TITLE>
-    <ABSTRACT>item abstract</ABSTRACT>
-  </ITEM>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base.xml
deleted file mode 100644
index d64344ec9cb57f881c7ab22fa39f4d0f1e56418d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content xml:base
-Expect:      not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit.xml
deleted file mode 100644
index cd09929e7d848272875998e789284ea14dfaed53..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content xml:base inherited from parent element
-Expect:      not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-<entry>
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_2.xml
deleted file mode 100644
index 58c699d4c547c1e199af963f885296a4b5676491..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content xml:base overrides parent element
-Expect:      not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <content type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_3.xml
deleted file mode 100644
index 49c3ceabe1a92a9a17208ad37573817e0b2fff69..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry content xml:base resets properly on new element
-Expect:      not bozo and entries[0]['content'][0]['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <content type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_4.xml
deleted file mode 100644
index 64053cf42cfc146ed47504c8ebcf7a44ab191706..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_content_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry content xml:base inherits properly on new element
-Expect:      not bozo and entries[0]['content'][0]['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base.xml
deleted file mode 100644
index ae49ecf397c144fa5bb34ab5fed86cf76a98cd62..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content xml:base
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit.xml
deleted file mode 100644
index 3fe2334802bbc1cb959bbce56dc757a108ad5814..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content xml:base inherited from parent element
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-<entry>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_2.xml
deleted file mode 100644
index cf0c95fd8f0ee5af454197d3c071c718d1d5767a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content xml:base overrides parent element
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_3.xml
deleted file mode 100644
index 75f442b6c03428cfe08cc59ee0c0d382699dcc47..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry summary content xml:base resets properly on new element
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/summary/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/summary/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_4.xml
deleted file mode 100644
index d36029944a100965485b62241cc81c7ea623367f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_summary_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry summary content xml:base inherits properly on new element
-Expect:      not bozo and entries[0]['summary_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base.xml
deleted file mode 100644
index 10a13fe86d1aa14befa61b1174b5e6137f9218dd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content xml:base
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit.xml
deleted file mode 100644
index b838c9ec313df3376e6fceebcd1e31b5c4448ae3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content xml:base inherited from parent element
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-<entry>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_2.xml
deleted file mode 100644
index 7bef55e6682b1afda2f045d97daf44c96f5aa1ce..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title content xml:base overrides parent element
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_3.xml
deleted file mode 100644
index 28518d98f90aeb78dc4c1f63d41296cd91c1605b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry title content xml:base resets properly on new element
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_4.xml
deleted file mode 100644
index 7104e0981ce1c918036ccd418f5a4818bb014bcb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/entry_title_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry title content xml:base inherits properly on new element
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-<entry>
-  <summary type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base.xml
deleted file mode 100644
index 22a3de836f29ac88fe7a20ca24fb03c610bb7989..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content xml:base
-Expect:      not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit.xml
deleted file mode 100644
index fd19cc4b88ee8bbf1221b7bc1d74d8a9dcb7430b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content xml:base inherited from parent element
-Expect:      not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_2.xml
deleted file mode 100644
index 5d2b7a66c7bb45178a3963add53555e15c1eca42..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content xml:base overrides parent element
-Expect:      not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <copyright type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_3.xml
deleted file mode 100644
index eddb60afadd5efcfd78999230c29eb2af3619928..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed copyright content xml:base resets properly on new element
-Expect:      not bozo and feed['copyright_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <copyright type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_4.xml
deleted file mode 100644
index 14afc9d789654508a957455ff5027d21bda91d98..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_copyright_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed copyright content xml:base inherits properly on new element
-Expect:      not bozo and feed['copyright_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base.xml
deleted file mode 100644
index 2f830c6ad3e751c482ec2076cfe895c83ee0aa99..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content xml:base
-Expect:      not bozo and feed['info_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit.xml
deleted file mode 100644
index 50cf9cd4750fec290c1640e1b15eda0051aff756..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content xml:base inherited from parent element
-Expect:      not bozo and feed['info_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_2.xml
deleted file mode 100644
index 3a095a58e0e3820ed0c1b4d8a05d9be4cee39d2e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content xml:base overrides parent element
-Expect:      not bozo and feed['info_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_3.xml
deleted file mode 100644
index 92f6d36f654c98b761a777a9380115510f4683d2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed info content xml:base resets properly on new element
-Expect:      not bozo and feed['info_detail']['base'] == u'http://example.com/info/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_4.xml
deleted file mode 100644
index 09dcc337da5727c4f8eb4a24619cdf2f612dc06a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_info_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed info content xml:base inherits properly on new element
-Expect:      not bozo and feed['info_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_link_xml_base_iri.xml b/lib/feedparser/tests/wellformed/base/feed_link_xml_base_iri.xml
deleted file mode 100644
index 4777baa2e427c711805ad8e2f67fb6db9be7b9cc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_link_xml_base_iri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: xml:base is an IRI
-Expect:      not bozo and feed['links'][0]['href'] == u'http://www.\u8a79\u59c6\u65af.com/feed'
--->
-<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://www.詹姆斯.com/feed">
-  <link rel="self" type="application/atom+xml" href=""/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base.xml
deleted file mode 100644
index 953f2b8088daabcfe005cf19053ccf1f4d9d1cd4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content xml:base
-Expect:      not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit.xml
deleted file mode 100644
index c6339d7f0ba2a8964fc2f8cdddb3a458610e4c7c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content xml:base inherited from parent element
-Expect:      not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_2.xml
deleted file mode 100644
index 5ce1d77f2701d31b0143f9027cc60b994c555af2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content xml:base overrides parent element
-Expect:      not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <tagline type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_3.xml
deleted file mode 100644
index 0e8403636a6e61148f711b83aaf7d9d2a0aeac82..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed tagline content xml:base resets properly on new element
-Expect:      not bozo and feed['tagline_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <tagline type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_4.xml
deleted file mode 100644
index 6248bbd6a73145f5221c5d737cbaf1c315346e97..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_tagline_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed tagline content xml:base inherits properly on new element
-Expect:      not bozo and feed['tagline_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base.xml
deleted file mode 100644
index 3613c680b656c29f1dc20dabfcb45481c5c95a76..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content xml:base
-Expect:      not bozo and feed['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit.xml
deleted file mode 100644
index 8c06788b80c9805dccdc0be493ba5f8dd96ca3a6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content xml:base inherited from parent element
-Expect:      not bozo and feed['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/test/">
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_2.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_2.xml
deleted file mode 100644
index 8137b7f541a7cd7547c99123f3ee915f54269776..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content xml:base overrides parent element
-Expect:      not bozo and feed['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_3.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_3.xml
deleted file mode 100644
index 5123fb5db8f4551fffb2267f57c7aa9c9f491840..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed title content xml:base resets properly on new element
-Expect:      not bozo and feed['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <title type="application/xhtml+xml" xml:base="http://example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_4.xml b/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_4.xml
deleted file mode 100644
index 5675be27c3d3df5402824599ea4581de6fa18622..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/feed_title_xml_base_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed title content xml:base inherits properly on new element
-Expect:      not bozo and feed['title_detail']['base'] == u'http://example.com/parent/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/parent/">
-  <info type="application/xhtml+xml" xml:base="http://example.com/info/"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_channel_docs_base_content_location.xml
deleted file mode 100644
index 26f7ccd166077db986a234309ea2488919ab3f9d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: channel docs relative to Content-Location header
-Expect:      not bozo and feed['docs'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<docs>/relative/uri</docs>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_channel_docs_base_docuri.xml
deleted file mode 100644
index 933567e05e2727249b8b464d452a48fb958ae169..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_channel_docs_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel docs relative to document URI
-Expect:      not bozo and feed['docs'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<docs>/relative/uri</docs>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_channel_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_channel_link_base_content_location.xml
deleted file mode 100644
index 400976b314ca3767e485afa2a6b96972a9dacc82..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_channel_link_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: channel link relative to Content-Location header
-Expect:      not bozo and feed['link'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<link>/relative/uri</link>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_channel_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_channel_link_base_docuri.xml
deleted file mode 100644
index 4611b5918a3ddef428f39cf8544eae295bb491eb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_channel_link_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel link relative to document URI
-Expect:      not bozo and feed['link'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<link>/relative/uri</link>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_content_location.xml
deleted file mode 100644
index ad89d1d453331c5c03af53feabaa3c2bd32f5fa9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry author url relative to Content-Location header
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<author>
-  <url>/relative/link</url>
-</author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_docuri.xml
deleted file mode 100644
index 90de1ea27d3f380752c20cd0b121069297cdc557..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_author_url_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry author url relative to document URI
-Expect:      not bozo and entries[0]['author_detail']['url'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<author>
-  <url>/relative/link</url>
-</author>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_content_location.xml
deleted file mode 100644
index 5bdf866d6fff7b4aab206bfa5a30032ce9b94b76..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry content relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_docuri.xml
deleted file mode 100644
index c2672064cac049e0709ed0e0bc88c84ccbfe1c8e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_base64_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry content relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base_content_location.xml
deleted file mode 100644
index 650fbd93a26637e8891ea86a7f9402e3f97b5cb5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry content relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_base_docuri.xml
deleted file mode 100644
index 97c0e437a726af2f8daa070c8852dc01491a136b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_content_location.xml
deleted file mode 100644
index 71855723618d5bf165d4cf0cafedc39033d2638f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry content relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_docuri.xml
deleted file mode 100644
index cbd82ca0da067dbbfe290ea4e8c3e8b69569b5ed..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_content_inline_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_content_location.xml
deleted file mode 100644
index 84f38b96fe305768aa1429d6661eaf35be134366..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry contributor url relative to Content-Location header
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<item>
-<contributor>
-  <url>/relative/link</url>
-</contributor>
-</item>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_docuri.xml
deleted file mode 100644
index 7bf7738b52095a2e458e7977da4860fb31e97a19..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_contributor_url_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry contributor url relative to document URI
-Expect:      not bozo and entries[0]['contributors'][0]['url'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<item>
-<contributor>
-  <url>/relative/link</url>
-</contributor>
-</item>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_id_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_id_base_content_location.xml
deleted file mode 100644
index 2a3cf901b15355d0d4df995c10c2c4e013be9c9d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_id_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry id relative to Content-Location header
-Expect:      not bozo and entries[0]['id'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <id>/relative/link</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_id_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_id_base_docuri.xml
deleted file mode 100644
index a9e146d0d5d36db55c6044b23b28544521c3140e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_id_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry id relative to document URI
-Expect:      not bozo and entries[0]['id'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <id>/relative/link</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_link_base_content_location.xml
deleted file mode 100644
index b09bde6934e54cf1d81388b9a639e7a45eee6e62..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_link_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry link href relative to Content-Location header
-Expect:      not bozo and entries[0]['links'][0]['href'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="/relative/link"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_link_base_docuri.xml
deleted file mode 100644
index ec49b0825ec6a3803366a25a142a841b5b987d0b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_link_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry link href relative to document URI
-Expect:      not bozo and entries[0]['links'][0]['href'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <link rel="alternate" type="text/html" href="/relative/link"/>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_content_location.xml
deleted file mode 100644
index 0833f8112b94ea278f38db8114f86690b0665e8d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry summary relative to Content-Location header
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_docuri.xml
deleted file mode 100644
index 4ae879cf74a78addc285a352e4cd072a2192cded..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base64_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry summary relative to document URI
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base_content_location.xml
deleted file mode 100644
index 031cbdcce613a2538a601691ce19955ac16c517c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry summary relative to Content-Location header
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_base_docuri.xml
deleted file mode 100644
index 27279f602e617c09c515fa2668d7567f1d48614c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary relative to document URI
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_content_location.xml
deleted file mode 100644
index 32c365e5cb57cd518e713e06f4cdd020eb967553..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry summary relative to Content-Location header
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_docuri.xml
deleted file mode 100644
index ea7820db25acc8f9f890bf918a04b1b81a79d105..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_summary_inline_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary relative to document URI
-Expect:      not bozo and entries[0]['summary'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_content_location.xml
deleted file mode 100644
index e23bdbb5a78b537e24b4ecc959040d4cca4b8757..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry title relative to Content-Location header
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_docuri.xml
deleted file mode 100644
index b9a673f0a664a0f7bb098c83f7faca0f72092a81..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_base64_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: entry title relative to document URI
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base_content_location.xml
deleted file mode 100644
index 9a0bc2b44dd84674f3e7ece9c5dbea8d7d2c38ae..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry title relative to Content-Location header
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_base_docuri.xml
deleted file mode 100644
index 776fbcde60bb0f878c19a2a94512a571a3d30b91..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title relative to document URI
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_content_location.xml
deleted file mode 100644
index 95f6bc07a36dbe64fdd372b63438d43e1ba82b41..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: entry title relative to Content-Location header
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_docuri.xml
deleted file mode 100644
index cb76689364dcf044feae6f3ba18f70504935fade..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_entry_title_inline_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title relative to document URI
-Expect:      not bozo and entries[0]['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_content_location.xml
deleted file mode 100644
index f9c757fc841750a90da8ad092b4cedabd226977b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed author url relative to Content-Location header
-Expect:      not bozo and feed['author_detail']['url'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<author>
-  <url>/relative/link</url>
-</author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_docuri.xml
deleted file mode 100644
index f4c5ab2bee486228558c60e816854358a017fa5c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_author_url_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed author url relative to document URI
-Expect:      not bozo and feed['author_detail']['url'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<author>
-  <url>/relative/link</url>
-</author>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_content_location.xml
deleted file mode 100644
index 07c762e625fd697dbbd26b72f42b4a63e2c4d2bb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed contributor url relative to Content-Location header
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<contributor>
-  <url>/relative/link</url>
-</contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_docuri.xml
deleted file mode 100644
index 962836c82f800f1541a0b974c5b131b115f4f2a0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_contributor_url_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed contributor url relative to document URI
-Expect:      not bozo and feed['contributors'][0]['url'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<contributor>
-  <url>/relative/link</url>
-</contributor>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_content_location.xml
deleted file mode 100644
index 045f730ec2552cf5e1690b67362a94defa0c16f1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed copyright relative to Content-Location header
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_docuri.xml
deleted file mode 100644
index 717641426dc59eb03845d50f012f95a9f8dd7d8a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base64_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed copyright relative to document URI
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_content_location.xml
deleted file mode 100644
index a15fe2a016f422a63ad3d39d43e3b0a481b777d9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed copyright relative to Content-Location header
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_docuri.xml
deleted file mode 100644
index ff363af77b775357c1e4e6d3c81cf86e623356e6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright relative to document URI
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_content_location.xml
deleted file mode 100644
index f9e8555f34126c85be125752a0ae4c6c1ac63fc7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed copyright relative to Content-Location header
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_docuri.xml
deleted file mode 100644
index b076c7a1b152b0cfb059050b07c3dbb1e6927291..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_copyright_inline_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright relative to document URI
-Expect:      not bozo and feed['copyright'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_content_location.xml
deleted file mode 100644
index 3b418bc0d2651bde90ba1462cddba15684a23255..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed generator url relative to Content-Location header
-Expect:      not bozo and feed['generator_detail']['url'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<generator url="/relative/link" version="2.66">Movable Type</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_docuri.xml
deleted file mode 100644
index b9d9e66e04fb02973b15237fb9b603b223e62e83..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_generator_url_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed generator url relative to document URI
-Expect:      not bozo and feed['generator_detail']['url'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<generator url="/relative/link" version="2.66">Movable Type</generator>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_id_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_id_base_content_location.xml
deleted file mode 100644
index 3f8b6ae62d82e924ce5c1426056e316548d397a4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_id_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed id relative to Content-Location header
-Expect:      not bozo and feed['id'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <id>/relative/link</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_id_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_id_base_docuri.xml
deleted file mode 100644
index a4c67022466c7a7bdd14755c019163c3d3547b8e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_id_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed id relative to document URI
-Expect:      not bozo and feed['id'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <id>/relative/link</id>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_content_location.xml
deleted file mode 100644
index 6bb78e83ca5c4e71dc14de614c5997720710cd31..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed info relative to Content-Location header
-Expect:      not bozo and feed['info'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_docuri.xml
deleted file mode 100644
index 66ba7854fe2ec5a9c5a28ea583d1b5a66546a297..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_base64_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed info relative to document URI
-Expect:      not bozo and feed['info'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base_content_location.xml
deleted file mode 100644
index 78a09e5af21d13bb4cb2e9058e6821eaeecbb119..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed info relative to Content-Location header
-Expect:      not bozo and feed['info'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_base_docuri.xml
deleted file mode 100644
index a19e737e8167d2d004eea22a2fd9203146633f38..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info relative to document URI
-Expect:      not bozo and feed['info'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_content_location.xml
deleted file mode 100644
index 8e60e15723ce6f8a5acafb47be7bb0aa82f55771..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed info relative to Content-Location header
-Expect:      not bozo and feed['info'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_docuri.xml
deleted file mode 100644
index 41bd64a1ad817cfe8fd6dfdae913f28010d0debd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_info_inline_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info relative to document URI
-Expect:      not bozo and feed['info'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_link_base_content_location.xml
deleted file mode 100644
index 3c416b1f4cd78d563355eb87fb55883c261fe5d2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_link_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed link href relative to Content-Location header
-Expect:      not bozo and feed['links'][0]['href'] == u'http://example.com/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="/relative/link"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_link_base_docuri.xml
deleted file mode 100644
index ab7fe93d721012f288d8edf8c8f210fef3e159a6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_link_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed link href relative to document URI
-Expect:      not bozo and feed['links'][0]['href'] == u'http://127.0.0.1:8097/relative/link'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <link rel="alternate" type="text/html" href="/relative/link"/>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_content_location.xml
deleted file mode 100644
index cfa216da7ec28c48ce68a8894e8d4b8f47878ede..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed tagline relative to Content-Location header
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_docuri.xml
deleted file mode 100644
index 2bd63232734b83740d519837ada835013f27800d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base64_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed tagline relative to document URI
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_content_location.xml
deleted file mode 100644
index 29e93e545b5baae3fee780e7c8cde382c9c0ac9b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed tagline relative to Content-Location header
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_docuri.xml
deleted file mode 100644
index 2fe14caa368ea7441d5751e84124d70f849d91c1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline relative to document URI
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_content_location.xml
deleted file mode 100644
index 619b3a6acff679159cb8235e2d1d6724fbc82487..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed tagline relative to Content-Location header
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_docuri.xml
deleted file mode 100644
index e5a05f409f0643396fc3a2c89a656a306f4b866a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_tagline_inline_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline relative to document URI
-Expect:      not bozo and feed['tagline'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_content_location.xml
deleted file mode 100644
index 38975b42edcfdc4969d25ae8038461c679f1d506..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_content_location.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed title relative to Content-Location header
-Expect:      not bozo and feed['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_docuri.xml
deleted file mode 100644
index 88ee5ab398e75589a50acf9d06d325df0390fc90..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_base64_base_docuri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed title relative to document URI
-Expect:      not bozo and feed['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="base64">
-PGRpdj48YSBocmVmPSIvcmVsYXRpdmUvdXJpIj5jbGljayBoZXJlPC9hPjwvZGl2Pg==
-</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base_content_location.xml
deleted file mode 100644
index a0d29406808bbe8b6ea0d2baafc49163b52b1696..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed title relative to Content-Location header
-Expect:      not bozo and feed['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_base_docuri.xml
deleted file mode 100644
index 0a9a941445bfbe9bc03a4f6902326b4635a9b659..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title relative to document URI
-Expect:      not bozo and feed['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;div>&lt;a href="/relative/uri">click here&lt;/a>&lt;/div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_content_location.xml
deleted file mode 100644
index 2287791d6476e9d28a5fc0b4c0899a36d613b61c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_content_location.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: feed title relative to Content-Location header
-Expect:      not bozo and feed['title'] == u'<div><a href="http://example.com/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_docuri.xml
deleted file mode 100644
index 2eb83ad463deb78c2f71a091e9939b8bf79f2fe1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_feed_title_inline_base_docuri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title relative to document URI
-Expect:      not bozo and feed['title'] == u'<div><a href="http://127.0.0.1:8097/relative/uri">click here</a></div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_body_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_body_base_content_location.xml
deleted file mode 100644
index 036295ac884faad873c29211e766eacccdfc2a90..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_body_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item body relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><a href="/relative/uri">click here</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_body_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_body_base_docuri.xml
deleted file mode 100644
index 1abea1066dd10cd2dd1128a7265a03bdafbfe812..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_body_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item body relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><a href="/relative/uri">click here</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_comments_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_comments_base_content_location.xml
deleted file mode 100644
index 128cdddd28bd8d6c414414a8546faf81c5508c80..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_comments_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item comments relative to Content-Location header
-Expect:      not bozo and entries[0]['comments'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<item>
-<comments>/relative/uri</comments>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_comments_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_comments_base_docuri.xml
deleted file mode 100644
index a42a28481099899a8a02627676ccd4deb9c8b734..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_comments_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item comments relative to document URI
-Expect:      not bozo and entries[0]['comments'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<item>
-<comments>/relative/uri</comments>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_content_location.xml
deleted file mode 100644
index 03526eba2546ca0f457cd08a791ae853dd473e8b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item content:encoded relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;a href="/relative/uri">click here&lt;/a></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_docuri.xml
deleted file mode 100644
index d7e7430b1da84f8ec0debcca8379285d0f616721..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_content_encoded_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;a href="/relative/uri">click here&lt;/a></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_description_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_description_base_content_location.xml
deleted file mode 100644
index f935976f03e0d99144495e268b5cd62c294cb58f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_description_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item description relative to Content-Location header
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://example.com/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;a href="/relative/uri">click here&lt;/a></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_description_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_description_base_docuri.xml
deleted file mode 100644
index 0e56e0a8983ed71ad1eb20ce1e086ee4390c0e8a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_description_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description relative to document URI
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;a href="/relative/uri">click here&lt;/a></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_description_spaces.xml b/lib/feedparser/tests/wellformed/base/http_item_description_spaces.xml
deleted file mode 100644
index 1efc8b7c334fd4b26dd743d541e4e52d0f139f12..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_description_spaces.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description relative to document URI
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;a href=" /relative/uri ">click here&lt;/a></description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_content_location.xml
deleted file mode 100644
index a10d10545fa91ab3be407091704bb2b3adab03ee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item fullitem relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;a href="/relative/uri">click here&lt;/a></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_docuri.xml
deleted file mode 100644
index 145fb7c1022b2f201325583c0a48a8ca4538cd44..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_fullitem_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;a href="/relative/uri">click here&lt;/a></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_link_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_link_base_content_location.xml
deleted file mode 100644
index ad5fec181c514ba047298435b50aea3de49cb7e6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_link_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item link relative to Content-Location header
-Expect:      not bozo and entries[0]['link'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>/relative/uri</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_link_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_link_base_docuri.xml
deleted file mode 100644
index c3dabac3a0893e0602441f2c1af5bb5cea4431fb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_link_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item link relative to document URI
-Expect:      not bozo and entries[0]['link'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>/relative/uri</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_content_location.xml
deleted file mode 100644
index fe5c1a7211149a107647dc929ed1b3b18d512a4c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item wfw:commentRSS relative to Content-Location header
-Expect:      not bozo and entries[0]['wfw_commentrss'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
-<channel>
-<item>
-<wfw:commentRSS>/relative/uri</wfw:commentRSS>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_docuri.xml
deleted file mode 100644
index 0704efdbd3b34735df734206b13d94746793df7a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_wfw_commentRSS_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item wfw:commentRSS relative to document URI
-Expect:      not bozo and entries[0]['wfw_commentrss'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
-<channel>
-<item>
-<wfw:commentRSS>/relative/uri</wfw:commentRSS>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_content_location.xml
deleted file mode 100644
index f15c73a17a646c6d5ffc279aa255c7ec6c786392..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item wfw:comment relative to Content-Location header
-Expect:      not bozo and entries[0]['wfw_comment'] == u'http://example.com/relative/uri'
--->
-<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
-<channel>
-<item>
-<wfw:comment>/relative/uri</wfw:comment>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_docuri.xml
deleted file mode 100644
index f01880b127ee137e8b10481c9f373e2f93e54313..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_wfw_comment_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item wfw:comment relative to document URI
-Expect:      not bozo and entries[0]['wfw_comment'] == u'http://127.0.0.1:8097/relative/uri'
--->
-<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
-<channel>
-<item>
-<wfw:comment>/relative/uri</wfw:comment>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_content_location.xml b/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_content_location.xml
deleted file mode 100644
index a30fdcea785c21f4217c34d4c7d842ceae0f5cff..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_content_location.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: item body relative to Content-Location header
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://example.com/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_docuri.xml b/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_docuri.xml
deleted file mode 100644
index c7a441ea34e01e17b33968f07e2908848029ab26..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_item_xhtml_body_base_docuri.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item body relative to document URI
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://127.0.0.1:8097/relative/uri">click here</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><a href="/relative/uri">click here</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_relative_xml_base.xml b/lib/feedparser/tests/wellformed/base/http_relative_xml_base.xml
deleted file mode 100644
index 46aa556e1d23085d847fab492107e54dbb1ef3ef..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_relative_xml_base.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: xml:base relative to parent (and Content-Location)
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/feed/entry/title/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="feed/">
-<entry xml:base="entry/">
-  <title type="application/xhtml+xml" xml:base="title/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/http_relative_xml_base_2.xml b/lib/feedparser/tests/wellformed/base/http_relative_xml_base_2.xml
deleted file mode 100644
index 362d948e6b701ee49228f11a16364d3eb6054dc6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/http_relative_xml_base_2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Location: http://example.com/
-Description: xml:base relative to parent (and Content-Location)
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/entry/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="feed/base/">
-<entry xml:base="/entry/base/">
-  <title type="application/xhtml+xml" xml:base="../"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/item_media_title1.xml b/lib/feedparser/tests/wellformed/base/item_media_title1.xml
deleted file mode 100644
index d3c272e38054c8ac0b66a3aaf95b6c9cd2bf7f2e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/item_media_title1.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: media title as a fallback
-Expect:      not bozo and entries[0]['title'] == u'bar'
--->
-<rss xmlns:media="http://search.yahoo.com/mrss/">
-  <channel>
-    <item>
-      <media:title>bar</media:title>
-    </item>
-  </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/base/item_media_title2.xml b/lib/feedparser/tests/wellformed/base/item_media_title2.xml
deleted file mode 100644
index 57c7aef9f1f3cdfa55f5c28d2f41dd3aaee456b4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/item_media_title2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: media title as a fallback
-Expect:      not bozo and entries[0]['title'] == u'foo'
--->
-<rss xmlns:media="http://search.yahoo.com/mrss/">
-  <channel>
-    <item>
-      <media:title>bar</media:title>
-      <title>foo</title>
-    </item>
-  </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/base/item_media_title3.xml b/lib/feedparser/tests/wellformed/base/item_media_title3.xml
deleted file mode 100644
index a9fbd31c55789f37209c1d4f987f661ae14864ca..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/item_media_title3.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: media title as a fallback
-Expect:      not bozo and entries[0]['title'] == u'foo'
--->
-<rss xmlns:media="http://search.yahoo.com/mrss/">
-  <channel>
-    <item>
-      <title>foo</title>
-      <media:title>bar</media:title>
-    </item>
-  </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/base/malformed_base.xml b/lib/feedparser/tests/wellformed/base/malformed_base.xml
deleted file mode 100644
index 3bed7b02fb593bfd082dac8c7053168b74aeff36..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/malformed_base.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: xml:base is malformed (too many slashes after scheme)
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry xml:base="http://example.com/">
-  <title type="application/xhtml+xml" xml:base="http:///example.com/test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/rel_uri_with_unicode_character.xml b/lib/feedparser/tests/wellformed/base/rel_uri_with_unicode_character.xml
deleted file mode 100644
index 2f8d9330afe9bc96230a84e1da78a6238850d90a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/rel_uri_with_unicode_character.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: relative uri resolution with non-ascii characters
-Expect: not bozo and entries[0]['content'][0]['value'] == u'<a href="http://any.test/\u00c0">uri</a>'
--->
-<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xml:base="http://any.test/">
-<channel>
-<item>
-    <content:encoded>&lt;a href=&quot;&#192;&quot;&gt;uri&lt;/a&gt;</content:encoded>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/base/relative_xml_base.xml b/lib/feedparser/tests/wellformed/base/relative_xml_base.xml
deleted file mode 100644
index 1c686c63f98bac6390c64fdd57f116f1c27f01ca..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/relative_xml_base.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: xml:base relative to parent
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry xml:base="http://example.com/">
-  <title type="application/xhtml+xml" xml:base="test/"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/relative_xml_base_2.xml b/lib/feedparser/tests/wellformed/base/relative_xml_base_2.xml
deleted file mode 100644
index 4d2115e4b9eb6c593f4f21c6d9302f78f01e6be6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/relative_xml_base_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: xml:base relative to parent (recursive)
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/test/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:base="http://example.com/">
-<entry xml:base="test/entry/">
-  <title type="application/xhtml+xml" xml:base="../"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/base/unsafe_base.xml b/lib/feedparser/tests/wellformed/base/unsafe_base.xml
deleted file mode 100644
index 50b8c30fd079b567c81c393969d4c659c6e2ad05..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/base/unsafe_base.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-SkipUnless:  feedparser.ACCEPTABLE_URI_SCHEMES
-Description: xml:base is unsafe (uses unacceptable URI protocol)
-Expect:      not bozo and entries[0]['title_detail']['base'] == u'http://example.com/'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry xml:base="http://example.com/">
-  <title type="application/xhtml+xml" xml:base="javascript:alert('unsafe')"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_description.xml b/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_description.xml
deleted file mode 100644
index 8bce8d9ee64c7d4d4a23852c32d7975703d1909d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_description.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: CDF channel abstract maps to description
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<CHANNEL>
-  <ABSTRACT>Example description</ABSTRACT>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_tagline.xml b/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_tagline.xml
deleted file mode 100644
index 04feca0c1e384f47dff2b54c60128332f1d450fb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_abstract_map_tagline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: CDF channel abstract maps to tagline
-Expect:      not bozo and feed['tagline_detail']['value'] == u'Example description'
--->
-<CHANNEL>
-  <ABSTRACT>Example description</ABSTRACT>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_href_map_link.xml b/lib/feedparser/tests/wellformed/cdf/channel_href_map_link.xml
deleted file mode 100644
index 133f14194cb7af629494dc78f773927ec7ff538b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_href_map_link.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: CDF channel href maps to link
-Expect:      not bozo and feed['link'] == u'http://www.example.org/'
--->
-<CHANNEL HREF="http://www.example.org/">
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_href_map_links.xml b/lib/feedparser/tests/wellformed/cdf/channel_href_map_links.xml
deleted file mode 100644
index 0c65bc27a883c68bcb48dcbe3363b4b177acc50e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_href_map_links.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: CDF channel href maps to links
-Expect:      not bozo and feed['links'][0]['href'] == u'http://www.example.org/'
--->
-<CHANNEL HREF="http://www.example.org/">
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_lastmod.xml b/lib/feedparser/tests/wellformed/cdf/channel_lastmod.xml
deleted file mode 100644
index 7b91da4df60612c151ec45e13312118e80887a2f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_lastmod.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: CDF channel lastmod
-Expect:      not bozo and feed['updated'] == u'2004-04-06T23:05:43-05:00'
--->
-<CHANNEL LASTMOD="2004-04-06T23:05:43-05:00">
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_lastmod_parsed.xml b/lib/feedparser/tests/wellformed/cdf/channel_lastmod_parsed.xml
deleted file mode 100644
index 65faa72c148ad19bc33ed380b6dff39b7ca0f935..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_lastmod_parsed.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: CDF channel lastmod parsed
-Expect:      not bozo and feed['updated_parsed'] == (2004, 4, 7, 4, 5, 43, 2, 98, 0)
--->
-<CHANNEL LASTMOD="2004-04-06T23:05:43-05:00">
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/cdf/channel_title.xml b/lib/feedparser/tests/wellformed/cdf/channel_title.xml
deleted file mode 100644
index 080c725fa7b556c47dc19730edf4ac07a43634da..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/channel_title.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: CDF channel title
-Expect:      not bozo and feed['title'] == u'Example feed'
--->
-<CHANNEL>
-  <TITLE>Example feed</TITLE>
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_description.xml b/lib/feedparser/tests/wellformed/cdf/item_abstract_map_description.xml
deleted file mode 100644
index 64821d07df37f2b52ec028e345714efaf8dfcea7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_description.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: CDF item abstract maps to description
-Expect:      not bozo and entries[0]['description'] == u'Example description'
--->
-<CHANNEL>
-<ITEM>
-  <ABSTRACT>Example description</ABSTRACT>
-</ITEM>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_summary.xml b/lib/feedparser/tests/wellformed/cdf/item_abstract_map_summary.xml
deleted file mode 100644
index 14946c9d781e11f344964903d210a7105dc0e85d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_abstract_map_summary.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: CDF item abstract maps to summary
-Expect:      not bozo and entries[0]['summary_detail']['value'] == u'Example description'
--->
-<CHANNEL>
-<ITEM>
-  <ABSTRACT>Example description</ABSTRACT>
-</ITEM>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/item_href_map_link.xml b/lib/feedparser/tests/wellformed/cdf/item_href_map_link.xml
deleted file mode 100644
index 973609ebaf518b4055967c67cfef3a438cd445b5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_href_map_link.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: CDF item href maps to link
-Expect:      not bozo and entries[0]['link'] == u'http://www.example.org/'
--->
-<CHANNEL>
-<ITEM HREF="http://www.example.org/">
-</ITEM>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/item_href_map_links.xml b/lib/feedparser/tests/wellformed/cdf/item_href_map_links.xml
deleted file mode 100644
index a55082e919c0e1b56c3f301307c28bc2923742e3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_href_map_links.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: CDF item href maps to links
-Expect:      not bozo and entries[0]['links'][0]['href'] == u'http://www.example.org/'
--->
-<CHANNEL>
-<ITEM HREF="http://www.example.org/">
-</ITEM>
-</CHANNEL>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/cdf/item_lastmod.xml b/lib/feedparser/tests/wellformed/cdf/item_lastmod.xml
deleted file mode 100644
index 50db8a1374d41032d15c96883506c2be1eb2c4ac..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_lastmod.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: CDF item lastmod
-Expect:      not bozo and entries[0]['updated'] == u'2004-04-06T23:05:43-05:00'
--->
-<CHANNEL>
-<ITEM LASTMOD="2004-04-06T23:05:43-05:00">
-</ITEM>
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/cdf/item_lastmod_parsed.xml b/lib/feedparser/tests/wellformed/cdf/item_lastmod_parsed.xml
deleted file mode 100644
index 1767352f181a159a51fe9082487219288857141d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_lastmod_parsed.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: CDF item lastmod parsed
-Expect:      not bozo and entries[0]['updated_parsed'] == (2004, 4, 7, 4, 5, 43, 2, 98, 0)
--->
-<CHANNEL>
-<ITEM LASTMOD="2004-04-06T23:05:43-05:00">
-</ITEM>
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/cdf/item_title.xml b/lib/feedparser/tests/wellformed/cdf/item_title.xml
deleted file mode 100644
index 50fb359d5c8b69f53c25809ca6ab76943eed8967..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/cdf/item_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: CDF item title
-Expect:      not bozo and entries[0]['title'] == u'Example item'
--->
-<CHANNEL>
-<ITEM>
-  <TITLE>Example item</TITLE>
-</ITEM>
-</CHANNEL>
diff --git a/lib/feedparser/tests/wellformed/feedburner/feedburner_browserfriendly.xml b/lib/feedparser/tests/wellformed/feedburner/feedburner_browserfriendly.xml
deleted file mode 100644
index 4d341cf017fc3b671cb227c956a177a959af077d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/feedburner/feedburner_browserfriendly.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: FeedBurner browserFriendly maps to info
-Expect:      not bozo and feed['info'] == u'This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.'
--->
-<rss version="2.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
-<channel>
-  <feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/http/headers_content_location-relative.xml b/lib/feedparser/tests/wellformed/http/headers_content_location-relative.xml
deleted file mode 100644
index 4c0254fe70e3d86a685f38bc2539986d3820d9f7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/http/headers_content_location-relative.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Header:      Content-Location: /feed/pg.cgi
-Description: Content-Location header relative URI
-Expect:      not bozo and feed.link == u'http://127.0.0.1:8097/feed/absolute'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <link rel="alternate" href="absolute"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/http/headers_content_location-unsafe.xml b/lib/feedparser/tests/wellformed/http/headers_content_location-unsafe.xml
deleted file mode 100644
index e22c2625775f98b079720242fdf5d2a59e4e7229..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/http/headers_content_location-unsafe.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-SkipUnless:  feedparser.ACCEPTABLE_URI_SCHEMES
-Header:      Content-Location: javascript:alert('unsafe');
-Description: Content-Location header unsafe URI
-Expect:      not bozo and feed.link == u'http://127.0.0.1:8097/abs'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <link rel="alternate" href="/abs"/>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/http/headers_etag.xml b/lib/feedparser/tests/wellformed/http/headers_etag.xml
deleted file mode 100644
index af4f905c621a0205015f433adf99402f2fe07d6c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/http/headers_etag.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      ETag: foo
-Description: etag should only exist in results if present in HTTP headers
-Expect:      not bozo and etag
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/http/headers_foo.xml b/lib/feedparser/tests/wellformed/http/headers_foo.xml
deleted file mode 100644
index e32833fb090e65a082acb8945c24af9156d8a3c7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/http/headers_foo.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      X-Foo: bar
-Description: capture arbitrary HTTP header
-Expect:      not bozo and headers.get('x-foo', headers.get('X-Foo')) == 'bar'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
diff --git a/lib/feedparser/tests/wellformed/http/headers_no_etag.xml b/lib/feedparser/tests/wellformed/http/headers_no_etag.xml
deleted file mode 100644
index 051c2a154cd637e135b7a6500836fe1bfe2173bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/http/headers_no_etag.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      X-Foo: bar
-Description: etag should not exist in results if not present in HTTP headers
-Expect:      not bozo and not 'etag' in locals()
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-</feed>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block.xml
deleted file mode 100644
index 1d7b87ed0d4e0e0daa0a75b9cbe025214099f9ee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block
-Expect:      not bozo and feed['itunes_block'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>yes</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_false.xml
deleted file mode 100644
index a935e1ce7518ae9a310d05647cdde77a2ecb6c8f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_false.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block="false"
-Expect:      not bozo and feed['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>false</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_no.xml
deleted file mode 100644
index 1aa627589f02a07ff795ef4ed3bf8546ebb71c39..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_no.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block='no'
-Expect:      not bozo and feed['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>no</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_true.xml
deleted file mode 100644
index 93655ae57cb66bce1e51160b607cf60cdfc9e5b4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_true.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block="true"
-Expect:      not bozo and feed['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>true</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_uppercase.xml
deleted file mode 100644
index c031ef2c4f0ced380014d2cfe4786884014d71cb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_uppercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block="YES"
-Expect:      not bozo and feed['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>YES</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_whitespace.xml
deleted file mode 100644
index 864f5e3d84c633598c01b487cb8497ec4259f19f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_block_whitespace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes block with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en
-Expect:      not bozo and feed['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block> yes </itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_category.xml
deleted file mode 100644
index 7a670a2729c1884e6a0794eb392c485e4e28df1f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel category
-Expect:      not bozo and feed['tags'][0]['term'] == u'Technology'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:category text="Technology"></itunes:category>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_nested.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_nested.xml
deleted file mode 100644
index 7ec9d5881c94690b6a09298a4fe7b3efb6cda5f9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_nested.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes channel nested category
-Expect:      not bozo and feed['tags'][1]['term'] == u'Gadgets'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:category text="Technology">
-  <itunes:category text="Gadgets"></itunes:category>
-</itunes:category>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_scheme.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_scheme.xml
deleted file mode 100644
index 00fde6bc825153fa8cf2d999b19d9b084ffab5fe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_category_scheme.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel category scheme
-Expect:      not bozo and feed['tags'][0]['scheme'] == u'http://www.itunes.com/'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:category text="Technology"></itunes:category>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit.xml
deleted file mode 100644
index 584f1fd628cdf047a677c4d1b4a30e19ca5cb64c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel explicit
-Expect:      not bozo and feed['itunes_explicit'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>yes</itunes:explicit>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_clean.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_clean.xml
deleted file mode 100644
index caec32fd2e3145d421d85b46cc524dd8db22dae5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_clean.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit='clean'
-Expect:      not bozo and feed['itunes_explicit'] is False
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>clean</itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_false.xml
deleted file mode 100644
index 71b2e0086c3f66572fb6f3e2708d0de4eeea1af3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_false.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit="false"
-Expect:      not bozo and feed['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>false</itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_no.xml
deleted file mode 100644
index 369021b68e3f1b68ae44602581030d4e8f2adfa0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_no.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit='no'
-Expect:      not bozo and feed['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>no</itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_true.xml
deleted file mode 100644
index ddb7a8bd649d2058fc73d379d71e7c635dcbe045..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_true.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit="true"
-Expect:      not bozo and feed['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>true</itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_uppercase.xml
deleted file mode 100644
index a9fc6fa8cbd5ca6a26a84995040b3bf84fde5e7f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_uppercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit="YES"
-Expect:      not bozo and feed['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit>YES</itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_whitespace.xml
deleted file mode 100644
index 381053161f4ef84a10b334dd7b4276e1e510de4d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_explicit_whitespace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes explicit with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en , I'm assuming the same rules apply for explicit
-Expect:      not bozo and feed['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:explicit> yes </itunes:explicit>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_image.xml
deleted file mode 100644
index 883352ef4fcb814220d9a58ed5208fbc68ed8277..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel image
-Expect:      not bozo and feed['image']['href'] == u'http://example.com/logo.jpg'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:image href="http://example.com/logo.jpg"></itunes:image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_no_href.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_no_href.xml
deleted file mode 100644
index a0d455a853e857856b191482304827600295b066..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_no_href.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: missing itunes:image@href doesn't overwrite existing image information
-Expect: not bozo and feed['image']['href'] == u'http://i.INVALID/i.gif'
--->
-<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> 
-<channel> 
-<image>
-  <url>http://i.INVALID/i.gif</url> 
-</image>
-<itunes:image></itunes:image>
-</channel> 
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_url.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_url.xml
deleted file mode 100644
index 4778c7157219fc8d9a5490403100d44d57fa4db6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_image_url.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel image (incorrectly using url attribute)
-Expect:      not bozo and feed['image']['href'] == u'http://a.b/i.png'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:image url="http://a.b/i.png"></itunes:image>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords.xml
deleted file mode 100644
index 299fb7b3eed56d7b66b880ab4bdb2c3b482588d3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel keywords
-Expect:      not bozo and feed['tags'][0]['term'] == u'Technology'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:keywords>Technology</itunes:keywords>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate.xml
deleted file mode 100644
index 5ca4085dd79147a2043d82f4a6940e84495590f8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel duplicate keywords
-Expect:      not bozo and len(feed['tags']) == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:keywords>Technology,Technology</itunes:keywords>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate_2.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate_2.xml
deleted file mode 100644
index 4fcfa5b95772fbc572963e520b28350b14315eb9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_duplicate_2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: iTunes channel keyword duplicated as category
-Expect:      not bozo and len(feed['tags']) == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:category text="Technology"></itunes:category>
-<itunes:keywords>Technology</itunes:keywords>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_multiple.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_multiple.xml
deleted file mode 100644
index 9629e014fd0c955699ea711c19f7a14416bd8161..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_keywords_multiple.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel multiple keywords
-Expect:      not bozo and feed['tags'][1]['term'] == u'Gadgets'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:keywords>Technology, Gadgets</itunes:keywords>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_link_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_link_image.xml
deleted file mode 100644
index c89dc9f1ee0dbee285f2b831c15958b0b36e2dca..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_link_image.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel image as old-style link rel=image
-Expect:      not bozo and feed['image']['href'] == u'http://example.com/logo.jpg'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:link rel="image" href="http://example.com/logo.jpg"></itunes:link>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_email.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_email.xml
deleted file mode 100644
index 92c433b466b60dddb3c3bdc1e5154a810297cb88..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_email.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: iTunes channel owner name
-Expect:      not bozo and feed['publisher_detail']['email'] == u'mark@example.com'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:owner>
-<itunes:name>Mark Pilgrim</itunes:name>
-<itunes:email>mark@example.com</itunes:email>
-</itunes:owner>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_name.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_name.xml
deleted file mode 100644
index 6d3d54fe32cc0790638792481c320a26c4b4dd1f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_owner_name.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: iTunes channel owner name
-Expect:      not bozo and feed['publisher_detail']['name'] == u'Mark Pilgrim'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<itunes:owner>
-<itunes:name>Mark Pilgrim</itunes:name>
-<itunes:email>mark@example.com</itunes:email>
-</itunes:owner>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_subtitle.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_subtitle.xml
deleted file mode 100644
index c638bf5b4978ab88f08064e58502d0f8f9a39c30..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_subtitle.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel subtitle
-Expect:      not bozo and feed['subtitle'] == u'Example subtitle'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:subtitle>Example subtitle</itunes:subtitle>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_channel_summary.xml b/lib/feedparser/tests/wellformed/itunes/itunes_channel_summary.xml
deleted file mode 100644
index f23b3284497e751b663bd7e37e652cdca12e97b9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_channel_summary.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes channel summary
-Expect:      not bozo and feed['description'] == u'Example summary'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:summary>Example summary</itunes:summary>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_core_element_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_core_element_uppercase.xml
deleted file mode 100644
index 9b3e91f2837dc98f1add7156dd6e68cb95866748..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_core_element_uppercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes treats non-iTunes element names as case-insensitive
-Expect:      not bozo and feed['title'] == u'Example title'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<TiTlE>Example title</TiTlE>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_author_map_author.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_author_map_author.xml
deleted file mode 100644
index e6764845082b89ca3c05cab6a5752c7ca16e2766..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_author_map_author.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item author maps to author
-Expect:      not bozo and entries[0]['author'] == u'Mark Pilgrim'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:author>Mark Pilgrim</itunes:author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block.xml
deleted file mode 100644
index e7d05ccd056eb057bfc5b3baf0b46a243c3f7b63..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block
-Expect:      not bozo and entries[0]['itunes_block'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block>yes</itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_false.xml
deleted file mode 100644
index 7f9d4da7c12f6d9fccf49ae9fed8bd008d83f499..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_false.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block="false"
-Expect:      not bozo and entries[0]['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block>false</itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_no.xml
deleted file mode 100644
index f09435bbfd6a6effba3f4e95793709e3afefe5eb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_no.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block='no'
-Expect:      not bozo and entries[0]['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block>no</itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_true.xml
deleted file mode 100644
index e30de679d4bc1916e913448ec3cff833ef784992..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_true.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block="true"
-Expect:      not bozo and entries[0]['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block>true</itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_uppercase.xml
deleted file mode 100644
index 8ebabeab5de9cf2784911703afd2193788b399d0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_uppercase.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block="YES"
-Expect:      not bozo and entries[0]['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block>YES</itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_block_whitespace.xml
deleted file mode 100644
index ca71b54e196b4df1b1081ba46b323864fe4654f2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_block_whitespace.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes block with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en
-Expect:      not bozo and entries[0]['itunes_block'] == 0
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:block> yes </itunes:block>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_category.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_category.xml
deleted file mode 100644
index 54e312ca21bd145bf1928c167810aa4a02712b7d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_category.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item category
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'Technology'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-<itunes:category text="Technology"></itunes:category>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_nested.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_category_nested.xml
deleted file mode 100644
index 4939da1bf6ca09d08e4318d5744d0e5ffdd30b04..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_nested.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: iTunes item nested category
-Expect:      not bozo and entries[0]['tags'][1]['term'] == u'Gadgets'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-<itunes:category text="Technology">
-  <itunes:category text="Gadgets"></itunes:category>
-</itunes:category>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_scheme.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_category_scheme.xml
deleted file mode 100644
index ab66dcc47074fb68c06737c23f87841771fe7243..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_category_scheme.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes channel category scheme
-Expect:      not bozo and entries[0]['tags'][0]['scheme'] == u'http://www.itunes.com/'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-<itunes:category text="Technology"></itunes:category>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_duration.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_duration.xml
deleted file mode 100644
index 20a83efbdef1590a5998920d6ea9b202fb7916e8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_duration.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes duration
-Expect:      not bozo and entries[0]['itunes_duration'] == u'3:00'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:duration>3:00</itunes:duration>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit.xml
deleted file mode 100644
index e5d9d39ce2375df95ec5a7e7b1e95a3ca7ed3b4d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit
-Expect:      not bozo and entries[0]['itunes_explicit'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>yes</itunes:explicit>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_clean.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_clean.xml
deleted file mode 100644
index eb4e89e898704ae5ac59a2ee8d7dfe2eb994e941..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_clean.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit='clean'
-Expect:      not bozo and entries[0]['itunes_explicit'] is False
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>clean</itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_false.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_false.xml
deleted file mode 100644
index f3c0610d006c582e29179262c95a8d9926de5858..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_false.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit="false"
-Expect:      not bozo and entries[0]['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>false</itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_no.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_no.xml
deleted file mode 100644
index b2a0b3cd279fb42bb083977cf08069264cd71c74..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_no.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit='no'
-Expect:      not bozo and entries[0]['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>no</itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_true.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_true.xml
deleted file mode 100644
index c42c3c58c1b676663d19b15e54d514127900fa61..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_true.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit="true"
-Expect:      not bozo and entries[0]['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>true</itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_uppercase.xml
deleted file mode 100644
index 017c24d58b5a006052f0d736627b49cf72ce248d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_uppercase.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit="YES"
-Expect:      not bozo and entries[0]['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit>YES</itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_whitespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_whitespace.xml
deleted file mode 100644
index 8bf2f5392cf7e8c0ebfcff36401050068d798087..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_explicit_whitespace.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes explicit with spurious whitespace, see http://lists.apple.com/faq/pub/syndication-dev/index.php?sid=359&aktion=artikel&rubrik=001&id=3&lang=en
-Expect:      not bozo and entries[0]['itunes_explicit'] is None
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:explicit> yes </itunes:explicit>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_image.xml
deleted file mode 100644
index 2c0f9c76f3206dde175cd8f3fd8addf82f5c05b9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_image.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item image
-Expect:      not bozo and entries[0]['image']['href'] == u'http://example.com/logo.jpg'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:image href="http://example.com/logo.jpg"></itunes:image>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_image_url.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_image_url.xml
deleted file mode 100644
index 3a23c495e681d8ad3bb5c0849a77b9787a925140..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_image_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item image (incorrectly using url attribute)
-Expect:      not bozo and entries[0]['image']['href'] == u'http://a.b/i.png'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:image url="http://a.b/i.png"></itunes:image>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_link_image.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_link_image.xml
deleted file mode 100644
index befa0ac97f43feec9bbe376e2ad62685251587d9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_link_image.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item image as old-style link rel=image
-Expect:      not bozo and entries[0]['image']['href'] == u'http://example.com/logo.jpg'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:link rel="image" href="http://example.com/logo.jpg"></itunes:link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_subtitle.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_subtitle.xml
deleted file mode 100644
index 7a485236b7387b2f6200e1281939024919ba61e5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_subtitle.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item subtitle
-Expect:      not bozo and entries[0]['subtitle'] == u'Example subtitle'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:subtitle>Example subtitle</itunes:subtitle>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_item_summary.xml b/lib/feedparser/tests/wellformed/itunes/itunes_item_summary.xml
deleted file mode 100644
index 159918a1d8ade62040649f8cbe4476bc5aa8729e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_item_summary.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: iTunes item summary
-Expect:      not bozo and entries[0]['summary'] == u'Example summary'
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-<item>
-  <itunes:summary>Example summary</itunes:summary>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace.xml
deleted file mode 100644
index 8a1fc43bc70299a2e073d835eb6ff37e45e74378..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes namespace (2005-07-07 spec)
-Expect:      not bozo and feed['itunes_block'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>yes</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_example.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace_example.xml
deleted file mode 100644
index 24221d80df1ed1059e7c4a2d3f55c6eb821298b1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_example.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes namespace (example in 2005-07-07 spec)
-Expect:      not bozo and feed['itunes_block'] == 1
--->
-<rss xmlns:itunes="http://example.com/DTDs/Podcast-1.0.dtd">
-<channel>
-  <itunes:block>yes</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_lowercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace_lowercase.xml
deleted file mode 100644
index fdceb9e2269ef56ce0cd158049315c1790591507..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_lowercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes namespace (lowercase)
-Expect:      not bozo and feed['itunes_block'] == 1
--->
-<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd">
-<channel>
-  <itunes:block>yes</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_uppercase.xml b/lib/feedparser/tests/wellformed/itunes/itunes_namespace_uppercase.xml
deleted file mode 100644
index 9d78ea5e19b57ae279d3cff1e19ef5ce0e6af2a8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/itunes/itunes_namespace_uppercase.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: iTunes namespace (uppercase)
-Expect:      not bozo and feed['itunes_block'] == 1
--->
-<rss xmlns:itunes="HTTP://WWW.ITUNES.COM/DTDS/PODCAST-1.0.DTD">
-<channel>
-  <itunes:block>yes</itunes:block>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/channel_dc_language.xml b/lib/feedparser/tests/wellformed/lang/channel_dc_language.xml
deleted file mode 100644
index 8ca66fbea037ebf89fbeacf8cde1905bfed565e5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/channel_dc_language.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:language
-Expect:      not bozo and feed['language'] == u'en'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:language>en</dc:language>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/channel_language.xml b/lib/feedparser/tests/wellformed/lang/channel_language.xml
deleted file mode 100644
index 85009399a296037b92208879a0544dcaedb5bc4d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/channel_language.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: normal language
-Expect:      not bozo and feed['language'] == u'en-us'
--->
-<rss version="2.0">
-<channel>
-<language>en-us</language>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang.xml
deleted file mode 100644
index 96bf686bf476d4d3e6e8de48de6ae46a9a45cecf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content language from xml:lang
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content xml:lang="en">Example Atom</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank.xml
deleted file mode 100644
index 25bf9c34c6698b19db2febfb3aab8506fd0b6805..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content defines blank xml:lang
-Expect:      not bozo and entries[0]['content'][0]['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <content type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_2.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_2.xml
deleted file mode 100644
index 6c50849800defe9be49d8b8d329d516f41d6c847..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry defines blank xml:lang which children inherit
-Expect:      not bozo and entries[0]['content'][0]['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry xml:lang="">
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_3.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_3.xml
deleted file mode 100644
index ea34db9da66fe7d8b286dfe2cb6631aa28b0b400..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_blank_3.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry defines blank xml:lang which siblings do not inherit
-Expect:      not bozo and entries[1]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry xml:lang="">
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-<entry>
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit.xml
deleted file mode 100644
index 80445b1788f75c1ef6b66581126fef661caabd6b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content xml:lang inherited from parent element
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_2.xml
deleted file mode 100644
index fe1d3b073264492c622b4799c54beb244d51e302..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content xml:lang overrides parent element
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-<entry>
-  <content type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_3.xml
deleted file mode 100644
index c80c753ddd868b8ef16d6880ae29144494469ed3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry content xml:lang resets properly on new element
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <content type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_4.xml
deleted file mode 100644
index 8399d1f1779bc5b724a3721c44681f4f844ecf12..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry content xml:lang inherits properly on new element
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <content type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_underscore.xml b/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_underscore.xml
deleted file mode 100644
index 9de86a43fadb070e40949829dc885b68fbe9ef80..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_content_xml_lang_underscore.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content language from xml:lang
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en-US'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <content xml:lang="en_US">Example Atom</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang.xml
deleted file mode 100644
index 63d8966c09940bf29fcea2da043c5f4618581dc5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary content language from xml:lang
-Expect:      not bozo and entries[0]['summary_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <summary xml:lang="en">Example Atom</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_blank.xml
deleted file mode 100644
index 39383476ea3b850e9d14683b0ef80b0d8dc1657e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_blank.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary defines blank xml:lang
-Expect:      not bozo and entries[0]['summary_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit.xml
deleted file mode 100644
index 4d1b16591db663205c2a594fd1a8f53e54a54af3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary xml:lang inherited from parent element
-Expect:      not bozo and entries[0]['summary_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_2.xml
deleted file mode 100644
index 3d8940612b08871028ab928fd0792266b7c15c78..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary xml:lang overrides parent element
-Expect:      not bozo and entries[0]['summary_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_3.xml
deleted file mode 100644
index 37ada76cea5f9b2e47f08ef24256a794bf2b1ccc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry summary xml:lang resets properly on new element
-Expect:      not bozo and entries[0]['summary_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="de">
-<entry>
-  <title type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <summary type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_4.xml
deleted file mode 100644
index 4a5909e2be8c739d6f76498733e43fc4e4f4517a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_summary_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry summary xml:lang inherits properly on new element
-Expect:      not bozo and entries[0]['summary_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <title type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <summary type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang.xml
deleted file mode 100644
index e10a4fd69887369004f52a8538fee6bd5f5a28cf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title language from xml:lang
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-  <title xml:lang="en">Example Atom</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_blank.xml
deleted file mode 100644
index 0152a4aa67d7dc1b038ff74a751d6f986d43cf5c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_blank.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title defines blank xml:lang
-Expect:      not bozo and entries[0]['title_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <title type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit.xml
deleted file mode 100644
index 752bf686b26c660e3bcc7da5d15f7a234648fe5c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title xml:lang inherited from parent element
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_2.xml
deleted file mode 100644
index 2fa32a825c9f4c31b879eb47aabc6927efeae19f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title xml:lang overrides parent element
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-<entry>
-  <title type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_3.xml
deleted file mode 100644
index 93efc4d211667d737fa87a969cd136bdb806510b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry title xml:lang resets properly on new element
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <title type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_4.xml
deleted file mode 100644
index 28c8a0df22eeaddb5ef70cf362f361fc14059084..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/entry_title_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: entry title xml:lang inherits properly on new element
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<entry>
-  <summary type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></summary>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang.xml
deleted file mode 100644
index 2ec0dffc59fc9a73f9dc0c6a8aa4470d48ba1c80..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright content language from xml:lang
-Expect:      not bozo and feed['copyright_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <copyright xml:lang="en">Example Atom</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_blank.xml
deleted file mode 100644
index 1dc0b95d1bb7b8978c3030dc8fa5847c9b570998..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_blank.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright defines blank xml:lang
-Expect:      not bozo and feed['copyright_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <copyright type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit.xml
deleted file mode 100644
index 0edff944e1351919af5ac00d16ca3b1d9691a422..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright xml:lang inherited from parent element
-Expect:      not bozo and feed['copyright_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_2.xml
deleted file mode 100644
index 900a3242b36a8dc84534809cb9751993d775f7b7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright xml:lang overrides parent element
-Expect:      not bozo and feed['copyright_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-  <copyright type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_3.xml
deleted file mode 100644
index 3957f45475a8a99c9be536ffdf9f5dfdbb77e1a2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed copyright xml:lang resets properly on new element
-Expect:      not bozo and feed['copyright_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="de">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <copyright type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_4.xml
deleted file mode 100644
index 0752e96621058d23b59d8c6deac6d1baf965726e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_copyright_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed copyright xml:lang inherits properly on new element
-Expect:      not bozo and feed['copyright_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <copyright type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang.xml
deleted file mode 100644
index e863e8de99b75f17e924c34159bbfbabc83bca15..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info content language from xml:lang
-Expect:      not bozo and feed['info_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <info xml:lang="en">Example Atom</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_blank.xml
deleted file mode 100644
index cb8f7f5aa0c0706a864b9f7ebd43daae9b7d6fc2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_blank.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info defines blank xml:lang
-Expect:      not bozo and feed['info_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit.xml
deleted file mode 100644
index b36cfa8d523055b8e6330f23247fc5893315e663..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info xml:lang inherited from parent element
-Expect:      not bozo and feed['info_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_2.xml
deleted file mode 100644
index 8e66540609e41e5d0405d9f2f8bb59fa8c34fac5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info xml:lang overrides parent element
-Expect:      not bozo and feed['info_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-  <info type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_3.xml
deleted file mode 100644
index 5aaf56a25b1d937ba6665457f4b213ccf13e6471..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed info xml:lang resets properly on new element
-Expect:      not bozo and feed['info_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-  <title type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <info type="application/xhtml+xml" xml:lang="en"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_4.xml
deleted file mode 100644
index 4764fb03bd868ad029f39fe36c21fc4cedc1f835..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_info_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed info xml:lang inherits properly on new element
-Expect:      not bozo and feed['info_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <title type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-  <info type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_language.xml b/lib/feedparser/tests/wellformed/lang/feed_language.xml
deleted file mode 100644
index 4301594c88b3a713857abfc1bb8be1b2fc4c430e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_language.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed language from language
-Expect:      not bozo and feed['language'] == u'en'
--->
-<rss>
-<channel>
-<language>en</language>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_language_override.xml b/lib/feedparser/tests/wellformed/lang/feed_language_override.xml
deleted file mode 100644
index 4301594c88b3a713857abfc1bb8be1b2fc4c430e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_language_override.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: feed language from language
-Expect:      not bozo and feed['language'] == u'en'
--->
-<rss>
-<channel>
-<language>en</language>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang.xml
deleted file mode 100644
index 6e89e9c932fe08a27491ee1403ddff99fcd5211a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed language from xml:lang
-Expect:      not bozo and feed['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-<title xml:lang="fr">foo</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang_2.xml b/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang_2.xml
deleted file mode 100644
index 5ea58f5e7196b6ae4dfa5ca38ee534f3e03b9da3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_not_xml_lang_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed language from language
-Expect:      not bozo and not feed.has_key('language')
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title xml:lang="en">foo</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang.xml
deleted file mode 100644
index c7a3088e452323ac350a8d80e4430162119d1fda..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline content language from xml:lang
-Expect:      not bozo and feed['tagline_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <tagline xml:lang="en">Example Atom</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_blank.xml
deleted file mode 100644
index ece120842e4c536d667e4b74a963f44536488028..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_blank.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline defines blank xml:lang
-Expect:      not bozo and feed['tagline_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <tagline type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit.xml
deleted file mode 100644
index 97d7889637e76516366f1b128268825ffd44fc83..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline xml:lang inherited from parent element
-Expect:      not bozo and feed['tagline_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_2.xml
deleted file mode 100644
index 72fea3c621f7087e7ec368926c986428177ac0e2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline xml:lang overrides parent element
-Expect:      not bozo and feed['tagline_detail']['language'] == u'fr'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <tagline type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_3.xml
deleted file mode 100644
index bda6b065fb238d6ee6a415713114eacb03dd75ea..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed tagline xml:lang resets properly on new element
-Expect:      not bozo and feed['tagline_detail']['language'] == u'de'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <tagline type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_4.xml
deleted file mode 100644
index 8d9b83dd8e59d1573ae235a494f710103ee9c0d5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_tagline_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed tagline xml:lang inherits properly on new element
-Expect:      not bozo and feed['tagline_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <tagline type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang.xml
deleted file mode 100644
index 3ce6b48d35efb7daf59fe5dad29fca5ba523b92c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title content language from xml:lang
-Expect:      not bozo and feed['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-  <title xml:lang="en">Example Atom</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_blank.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_blank.xml
deleted file mode 100644
index 12a5d46566002146edaca0116efeed35dbd4b89e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_blank.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title defines blank xml:lang
-Expect:      not bozo and feed['title_detail']['language'] == None
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <title type="application/xhtml+xml" xml:lang=""><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit.xml
deleted file mode 100644
index 0a2e6b205333ca9875e5e8aa51a1f84bb8f6621d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title xml:lang inherited from parent element
-Expect:      not bozo and feed['title_detail']['language'] == u'de'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="de">
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_2.xml
deleted file mode 100644
index 1d9a636d5f21180998079c47c875e1412988b351..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_2.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title xml:lang overrides parent element
-Expect:      not bozo and feed['title_detail']['language'] == u'de'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <title type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_3.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_3.xml
deleted file mode 100644
index 535e34e83f438ea5d3e05530a585e49da503aeeb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_3.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed title xml:lang resets properly on new element
-Expect:      not bozo and feed['title_detail']['language'] == u'de'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <title type="application/xhtml+xml" xml:lang="de"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_4.xml b/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_4.xml
deleted file mode 100644
index de9bff9efde8c70e70bf36c690cc84adf2e9ecec..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_title_xml_lang_inherit_4.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: feed title xml:lang inherits properly on new element
-Expect:      not bozo and feed['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-  <info type="application/xhtml+xml" xml:lang="fr"><div xmlns="http://www.w3.org/1999/xhtml">blah blah blah</div></info>
-  <title type="application/xhtml+xml"><div xmlns="http://www.w3.org/1999/xhtml">Example <a href="test.html">test</a></div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/feed_xml_lang.xml
deleted file mode 100644
index e60bc55931b00f991150248c80a3b023ebdf1639..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_xml_lang.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: feed language from xml:lang
-Expect:      not bozo and feed['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en">
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/feed_xml_lang_underscore.xml b/lib/feedparser/tests/wellformed/lang/feed_xml_lang_underscore.xml
deleted file mode 100644
index d29a49e78541c759cfb2a743fa39f0a41ac2f04a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/feed_xml_lang_underscore.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: feed language from xml:lang
-Expect:      not bozo and feed['language'] == u'en-US'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en_US">
-</feed>
diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language.xml b/lib/feedparser/tests/wellformed/lang/http_content_language.xml
deleted file mode 100644
index cc245abb878473fa5a626ca2c7f5511dd7f913e8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/http_content_language.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Content-Language: en
-Description: feed language from content-language
-Expect:      not bozo and feed['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit.xml
deleted file mode 100644
index 97c4b199bc6e36aa2f073aabfd607496959edb26..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Language: en
-Description: entry title language from content-language
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title>foo</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit_2.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit_2.xml
deleted file mode 100644
index cc573e9a4d04fcaaaeaf550446ae8850e376b5a4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/http_content_language_entry_title_inherit_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Header:      Content-Language: en
-Description: entry title language from content-language (this one is harder than the others)
-Expect:      not bozo and entries[0]['title_detail']['language'] == u'en'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<id xml:lang="fr">1</id>
-<title>foo</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_language.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_feed_language.xml
deleted file mode 100644
index 4421746b9c1171018c7aa58bfcce769874da92f2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_language.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Header:      Content-Language: en
-Description: feed language overrides content-language
-Expect:      not bozo and feed['language'] == u'fr'
--->
-<rss>
-<channel>
-<language>fr</language>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/http_content_language_feed_xml_lang.xml
deleted file mode 100644
index 0ab11869e6b9d078158a90380412260b33e317a6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/http_content_language_feed_xml_lang.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Header:      Content-Language: en
-Description: feed xml:lang overrides content-language
-Expect:      not bozo and feed['language'] == u'fr'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="fr">
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang.xml
deleted file mode 100644
index 0a61f55b2a2242fbcca48aa2ad5b100eae4968fe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: content:encoded
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded xml:lang="en">&lt;p&gt;Example content&lt;/p&gt;</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang_inherit.xml
deleted file mode 100644
index 69397d46c1e31715c0566f90c241344eecf844e4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/item_content_encoded_xml_lang_inherit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: content:encoded
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xml:lang="en">
-<channel>
-<item>
-<content:encoded>&lt;p&gt;Example content&lt;/p&gt;</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_dc_language.xml b/lib/feedparser/tests/wellformed/lang/item_dc_language.xml
deleted file mode 100644
index 045a4715a29b2063d35935f628a7702d03e96a14..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/item_dc_language.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:language
-Expect:      not bozo and entries[0]['language'] == u'en'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:language>en</dc:language>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang.xml
deleted file mode 100644
index 0a4da4ad0558eae696f615d5b6d1564c9f8aab7d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: fullitem language
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem xml:lang="en">&lt;p&gt;Example content&lt;/p&gt;</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang_inherit.xml
deleted file mode 100644
index 7fe98d1ceb3d80a978adc7ae551a44cb6bdeb997..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/item_fullitem_xml_lang_inherit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: fullitem xml:lang inherited from parent element
-Expect:      not bozo and entries[0]['content'][0]['language'] == u'en'
--->
-<rss version="2.0" xml:lang="en">
-<channel>
-<item>
-<fullitem>&lt;p&gt;Example content&lt;/p&gt;</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang.xml b/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang.xml
deleted file mode 100644
index 4f48387768708a8ae92c7330c0c3bdd2edad4da4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: xhtml:body xml:lang
-Expect:      not bozo and entries[0]['content'][0]['language'] == 'en'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
-<p>Example content</p>
-</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang_inherit.xml b/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang_inherit.xml
deleted file mode 100644
index a9eb6347a306880d3d5bb0fb3b547ddb11c55a74..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/lang/item_xhtml_body_xml_lang_inherit.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: xhtml:body xml:lang
-Expect:      not bozo and entries[0]['content'][0]['language'] == 'en'
--->
-<rss version="2.0" xml:lang="en">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p>Example content</p>
-</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/mf_hcard/3-5-5-org-unicode.xml b/lib/feedparser/tests/wellformed/mf_hcard/3-5-5-org-unicode.xml
deleted file mode 100644
index 3cb6c96f8584de1af0cbfce96ac10323f26fc17b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/mf_hcard/3-5-5-org-unicode.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-SkipUnless: feedparser.BeautifulSoup
-Description: hcard contains non-ascii character
-Expect: not bozo and entries[0]['vcard'] == u"BEGIN:vCard\nVERSION:3.0\nORG:\u00b4\nEND:vCard"
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <content type="html">
-&lt;div class=&quot;vcard&quot;&gt;
-&lt;span class='org'&gt;&#180;&lt;/span&gt;
-&lt;/div&gt;
-    </content>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/mf_rel_tag/rel_tag_term_no_term.xml b/lib/feedparser/tests/wellformed/mf_rel_tag/rel_tag_term_no_term.xml
deleted file mode 100644
index 75db178e8660dacf0df7a7c6e65e25812d33e09f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/mf_rel_tag/rel_tag_term_no_term.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-SkipUnless:  feedparser.BeautifulSoup
-Description: rel='tag' link contains no actual term
-Expect:      not bozo and 'tags' not in entries[0]
--->
-<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
-<channel>
-<item>
-<content:encoded>&lt;a href='http://empty-path.test' rel='tag'&gt;anything&lt;/a&gt;</content:encoded>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/namespace/atommathml.xml b/lib/feedparser/tests/wellformed/namespace/atommathml.xml
deleted file mode 100644
index 1795a2e0332253fd258272d7956946840feb09c1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/atommathml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  MathML w/XLink
-Expect:       not bozo and entries[0]['description'] == '<math xmlns="http://www.w3.org/1998/Math/MathML"><mrow xlink:href="http://golem.ph.utexas.edu" xlink:show="replace" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink"><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mrow></math>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry xmlns:xlink="http://www.w3.org/1999/xlink">
-<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow xlink:type="simple" xlink:show="replace" xlink:href="http://golem.ph.utexas.edu"><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mrow></math></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvg.xml b/lib/feedparser/tests/wellformed/namespace/atomsvg.xml
deleted file mode 100644
index ecee5ed7f04967e88f03b22b6d360f8e446f9073..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomsvg.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></svg>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg">
-<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg:svg version="1.1" baseProfile="full" width="300px" height="200px"><svg:circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg:svg></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvgdctitle.xml b/lib/feedparser/tests/wellformed/namespace/atomsvgdctitle.xml
deleted file mode 100644
index d28c9e336e5c9636409f9d0d670f4be44a0ca6e5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomsvgdctitle.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
-Description:  SVG
-Expect:       1
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <entry>
-    <content type="xhtml">
-      <div xmlns="http://www.w3.org/1999/xhtml">
-        <p>Before</p>
-        <svg xmlns="http://www.w3.org/2000/svg">
-          <metadata>
-            <rdf:RDF xmlns:cc="http://web.resource.org/cc/"
-              xmlns:dc="http://purl.org/dc/elements/1.1/"
-              xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-              <cc:Work rdf:about="">
-                <dc:title>Christmas Tree</dc:title>
-                <dc:description></dc:description>
-                <dc:creator>
-                  <cc:Agent>
-                    <dc:title>Aaron Spike</dc:title>
-                  </cc:Agent>
-                </dc:creator>
-              </cc:Work>
-              <cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
-                <cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
-                <cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
-                <cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
-              </cc:License>
-            </rdf:RDF>
-          </metadata>
-        </svg>
-        <p>After</p>
-      </div>
-    </content>
-  </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvgdesc.xml b/lib/feedparser/tests/wellformed/namespace/atomsvgdesc.xml
deleted file mode 100644
index 5f9311cd997ffb74fde87b7df57e4b251a6d8536..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomsvgdesc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><desc><abbr>foo</abbr></desc><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></svg>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"><desc><abbr>foo</abbr></desc><circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomsvgtitle.xml b/lib/feedparser/tests/wellformed/namespace/atomsvgtitle.xml
deleted file mode 100644
index 7848e992f14fe1c0dc19bdd7cefb1d8d047d74a3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomsvgtitle.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><title>foo</title><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></svg>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"><title>foo</title><circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomthreading.xml b/lib/feedparser/tests/wellformed/namespace/atomthreading.xml
deleted file mode 100644
index b5d6ea66dcf996995db754f73962141afcc3f915..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomthreading.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<!--
-Description:  Atom threading extension
-Expect:       not bozo and feed['thr_in-reply-to']['href'] == u'http://salmon-test.blogspot.com/2009/10/test-post.html' and feed['thr_in-reply-to']['ref'] == u'tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' and feed['thr_in-reply-to']['source'] == u'http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' and feed['thr_in-reply-to']['type'] == u'text/html'
--->
-<feed xmlns="http://www.w3.org/2005/Atom"><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://salmon-test.blogspot.com/2009/10/test-post.html' ref='tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' source='http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' type='text/html'/></feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomthreadingwithentry.xml b/lib/feedparser/tests/wellformed/namespace/atomthreadingwithentry.xml
deleted file mode 100644
index 79c7e4d0b413a8b05486ca2e21de9cb3baa6493e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomthreadingwithentry.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!--
-Description:  Atom threading extension
-Expect:       not bozo and entries[0]['thr_in-reply-to']['href'] == u'http://salmon-test.blogspot.com/2009/10/test-post.html' and entries[0]['thr_in-reply-to']['ref'] == u'tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' and entries[0]['thr_in-reply-to']['source'] == u'http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' and entries[0]['thr_in-reply-to']['type'] == u'text/html'
--->
-<?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-893591374313312737.post3861663258538857954..comments</id><updated>2009-12-08T16:59:02.563-08:00</updated><title type='text'>Comments on salmon-test: Test post</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://salmon-test.blogspot.com/feeds/3861663258538857954/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default'/><link rel='alternate' type='text/html' href='http://salmon-test.blogspot.com/2009/10/test-post.html'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default?start-index=26&amp;max-results=25'/><author><name>John</name><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-893591374313312737.post-4788628857625737701</id><published>2009-12-08T16:59:02.544-08:00</published><updated>2009-12-08T16:59:02.544-08:00</updated><title type='text'>bloffo bliff by te...</title><content type='html'>bloffo bliff by &lt;a href="http://example.org/profile/te..." rel="nofollow"&gt;te...&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default/4788628857625737701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/893591374313312737/3861663258538857954/comments/default/4788628857625737701'/><link rel='alternate' type='text/html' href='http://salmon-test.blogspot.com/2009/10/test-post.html?showComment=1260320342544#c4788628857625737701' title=''/><author><name>John</name><uri>http://www.blogger.com/profile/12344017489797258795</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07886630143387711930'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://salmon-test.blogspot.com/2009/10/test-post.html' ref='tag:blogger.com,1999:blog-893591374313312737.post-3861663258538857954' source='http://www.blogger.com/feeds/893591374313312737/posts/default/3861663258538857954' type='text/html'/></entry></feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/atomxlink.xml b/lib/feedparser/tests/wellformed/namespace/atomxlink.xml
deleted file mode 100644
index ed7105ece180ac1971bf9ae31b23b1ad080af9a2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/atomxlink.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><a xlink:href="http://example.com/" xmlns:xlink="http://www.w3.org/1999/xlink"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></circle></a></svg>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg">
-<content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><svg:svg version="1.1" baseProfile="full" width="300px" height="200px"><svg:a xlink:href="http://example.com/"><svg:circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/></svg:a></svg:svg></div></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/namespace/rss1.0withModules.xml b/lib/feedparser/tests/wellformed/namespace/rss1.0withModules.xml
deleted file mode 100644
index 469b7630e89ae06689dced752ede18a5097697f4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss1.0withModules.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss1.0withModules.xml - included here with permission
-Description: RSS 1.0 with modules
-Expect:      not bozo and entries[0]['title'] == u'Test Item - RSS 1.0'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns="http://purl.org/rss/1.0/"
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<channel rdf:about="http://www.pocketsoap.com/rssTests/">
-		<title>RSS Tests - RSS 1.0</title>
-		<link>http://www.pocketsoap.com/rssTests/rss1.0withModules.xml</link>
-		<description>A set of test RSS files for examining the state of extension support in RSS aggregators</description>
-		<dc:language>en-gb</dc:language>
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-
-		<dc:date>2002-09-28T20:01:19Z</dc:date>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		<image rdf:resource="http://www.w3.org/RDF/icons/rdf_powered_button.32" />
-		<items>
-			<rdf:Seq>
-			<rdf:li rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1" />
-			</rdf:Seq>
-		</items>
-
-	</channel>
-	<item rdf:about="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1">
-		<title>Test Item - RSS 1.0</title>
-		<link>http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1</link>
-		<l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink"  l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModules.xml#1" />
-		<description>This is a fairly standard RSS 1.0 feed with a few modules, with no localname clashes, any aggregator that supports RSS 1.0 should handle this fine (RSS 1.0)</description>
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-
-		<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-	</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNS.xml b/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNS.xml
deleted file mode 100644
index d0442be1ff3a7dbed419534211833e392489c2bd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNS.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNS.xml - included here with permission
-Description: RSS 1.0, no default namespace
-Expect:      not bozo and entries[0]['title'] == u'Test Item - RSS 1.0 no Default NS'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns:rss="http://purl.org/rss/1.0/"
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<rss:channel rdf:about="http://www.pocketsoap.com/rssTests/">
-		<rss:title>RSS Tests - RSS 1.0 no Default NS</rss:title>
-		<rss:link>http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNS.xml</rss:link>
-		<rss:description>A set of test RSS files for examining the state of extension support in RSS aggregators</rss:description>
-		<dc:language>en-gb</dc:language>
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-
-		<dc:date>2002-09-28T20:01:19Z</dc:date>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		<rss:image rdf:resource="http://www.w3.org/RDF/icons/rdf_powered_button.32" />
-		<rss:items>
-			<rdf:Seq>
-			<rdf:li rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1" />
-			</rdf:Seq>
-		</rss:items>
-
-	</rss:channel>
-	<rss:item rdf:about="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1">
-		<rss:title>Test Item - RSS 1.0 no Default NS</rss:title>
-		<rss:link>http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1</rss:link>
-		<l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink"  l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNS.xml#1" />
-		<rss:description>This is a fairly standard RSS 1.0 feed with a few modules, with no localname clashes, any aggregator that supports RSS 1.0 should handle this fine. This doesn't use
-		any default namespace declarations, all namespaces are mapped to prefixes. As far the namespace spec is concerned this is identical to the rss1.0withModules.xml version (RSS 1.0 no Default NS)</rss:description>
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-
-		<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-	</rss:item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNSLocalNameClash.xml b/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNSLocalNameClash.xml
deleted file mode 100644
index f09c9f5fd45a8714e7a36ca2ac6304a716dc71b7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss1.0withModulesNoDefNSLocalNameClash.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<!--
-Credits:     Simon Fell - adapted from http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml - included here with permission
-Description: RSS 1.0, no default namespace, local namespace clash
-Expect:      not bozo and entries[0]['description'] == u'correct description'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns:rss="http://purl.org/rss/1.0/"
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:szf="http://schemas.pocketsoap.com/rss/myDescModule/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<rss:channel rdf:about="http://www.pocketsoap.com/rssTests/">
-		<rss:title>RSS Tests - RSS 1.0 no Default NS, localName clashes</rss:title>
-		<rss:link>http://www.pocketsoap.com/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml</rss:link>
-		<rss:description>A set of test RSS files for examining the state of extension support in RSS aggregators</rss:description>
-		<dc:language>en-gb</dc:language>
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-
-		<dc:date>2002-09-28T20:01:19Z</dc:date>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		<rss:image rdf:resource="http://www.w3.org/RDF/icons/rdf_powered_button.32" />
-		<rss:items>
-			<rdf:Seq>
-			<rdf:li rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1" />
-			</rdf:Seq>
-		</rss:items>
-
-	</rss:channel>
-	<rss:item rdf:about="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1">
-		<rss:title>Test Item - RSS 1.0 no Default NS, localName clashes</rss:title>
-		<rss:link>http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1</rss:link>
-		<l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink"  l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss1.0withModulesNoDefNSLocalNameClash.xml#1" />
-		<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-		This shouldn't appear in your aggregator, but probably does. (pre rss:description RSS 1.0 no Default NS, localName clashes)
-		</szf:description>
-		<rss:description>correct description</rss:description>
-		<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-		This shouldn't appear in your aggregator, but probably does. (post rss:description RSS 1.0 no Default NS, localName clashes)
-		</szf:description>
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-	</rss:item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModules.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModules.xml
deleted file mode 100644
index 99f40d7709b3b9a679ab5016dfe0b87fa5154f87..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModules.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0NSwithModules.xml - included here with permission
-Description: RSS 2.0 in Username namespace
-Expect:      not bozo and entries[0]['title'] == u'Test Item - RSS2.0 w/ NS'
--->
-<rss 		 version="2.0"
-		 xmlns="http://backend.userland.com/rss2"
-		 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<channel>
-		<title>RSS Tests - RSS2.0 w/ NS</title>
-		<link>http://www.pocketsoap.com/rssTests/rss2.0NSwithModules.xml</link>
-		<description>A set of test RSS files for examining the state of extension support in RSS aggregators</description>
-		<language>en-gb</language>
-		<copyright>Copyright 2002 Simon Fell</copyright>
-
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-		<dc:date>2002-09-28T21:00:02Z</dc:date>
-		<lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</lastBuildDate>
-		<pubDate>Sat, 28 Sep 2002 21:00:02 GMT</pubDate>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<managingEditor>sf@zaks.demon.co.uk</managingEditor>
-
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<generator>ultraedit-32</generator>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<webMaster>sf@zaks.demon.co.uk (Simon Fell)</webMaster>
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		
-		<item>
-			<title>Test Item - RSS2.0 w/ NS</title>
-			<link>http://www.pocketsoap.com/weblog/rssTests/rss2.0NSwithModules.xml#1</link>
-			<description>This is a fairly standard RSS 2.0 feed, it uses a few modules, the RSS 2.0 elements are in the http://backend.userland.com/rss2 namespace, all module elements are in their required namespaces.
-			there are no localname clashes. This is very similar to a RSS1.0 feed. (RSS2.0 w/ NS)
-			</description>
-
-			<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-			<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-		</item>
-	</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNS.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNS.xml
deleted file mode 100644
index 7f374dd2046f353c1b2f370d96201c8f97cf8943..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNS.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNS.xml - included here with permission
-Description: RSS 2.0 in Username namespace, no default namespace
-Expect:      not bozo and entries[0]['title'] == u'Test Item - - RSS2.0 w/ NS no default NS'
--->
-<r:rss 		 version="2.0"
-		 xmlns:r="http://backend.userland.com/rss2"
-		 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<r:channel>
-		<r:title>RSS Tests - RSS2.0 w/ NS no default NS</r:title>
-		<r:link>http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNS.xml</r:link>
-		<r:description>A set of test RSS files for examining the state of extension support in RSS aggregators</r:description>
-		<r:language>en-gb</r:language>
-		<r:copyright>Copyright 2002 Simon Fell</r:copyright>
-
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-		<dc:date>2002-09-28T21:00:02Z</dc:date>
-		<r:lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</r:lastBuildDate>
-		<r:pubDate>Sat, 28 Sep 2002 21:00:02 GMT</r:pubDate>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<r:managingEditor>sf@zaks.demon.co.uk</r:managingEditor>
-
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<r:generator>ultraedit-32</r:generator>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<r:webMaster>sf@zaks.demon.co.uk (Simon Fell)</r:webMaster>
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		
-		<r:item>
-			<r:title>Test Item - - RSS2.0 w/ NS no default NS</r:title>
-			<r:link>http://www.pocketsoap.com/weblog/rssTests/rss2.0withModulesNoDefNS.xml#1</r:link>
-			<r:description>This is a fairly standard RSS 2.0 feed, it uses a few modules, the RSS 2.0 elements are in the http://backend.userland.com/rss2 namespace, all module elements are in their required namespaces.
-			there are no localname clashes, all elements uses namespace prefixes, there is no default namespace declared. This is very similar to a RSS1.0 feed. (RSS2.0 w/ NS no default NS)
-			</r:description>
-
-			<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-			<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-		</r:item>
-	</r:channel>
-</r:rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNSLocalNameClash.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNSLocalNameClash.xml
deleted file mode 100644
index be99b57c4caf5cb5b87f9bea25822bc9bde5784e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0NSwithModulesNoDefNSLocalNameClash.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNSLocalNameClash.xml - included here with permission
-Description: RSS 2.0 in Username namespace, no default namespace, local namespace clash
-Expect:      not bozo and entries[0]['description'] == u'correct description'
--->
-<r:rss 		version="2.0" 
-		xmlns:r="http://backend.userland.com/rss2"
-		xmlns:admin="http://webns.net/mvcb/"
-		xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		xmlns:dc="http://purl.org/dc/elements/1.1/"
-		xmlns:dcterms="http://purl.org/dc/terms/"
-		xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		xmlns:szf="http://schemas.pocketsoap.com/rss/myDescModule/"
-		xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<r:channel>
-		<r:title>RSS Tests - RSS2.0 w/ NS, no default NS, localName clash</r:title>
-		<r:link>http://www.pocketsoap.com/rssTests/rss2.0NSwithModulesNoDefNSLocalNameClash.xml</r:link>
-		<r:description>A set of test RSS files for examining the state of extension support in RSS aggregators</r:description>
-		<r:language>en-gb</r:language>
-		<dc:language>en-gb</dc:language>
-
-		<r:copyright>Copyright 2002 Simon Fell</r:copyright>
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-		<dc:date>2002-09-28T21:00:02Z</dc:date>
-		<r:lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</r:lastBuildDate>
-		<r:pubDate>Sat, 28 Sep 2002 21:00:02 GMT</r:pubDate>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-
-		<r:managingEditor>sf@zaks.demon.co.uk</r:managingEditor>
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<r:generator>ultraedit-32</r:generator>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<r:webMaster>sf@zaks.demon.co.uk (Simon Fell)</r:webMaster>
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		
-		<r:item>
-			<r:title>Test Item - RSS2.0 w/ NS, no default NS, localName clash</r:title>
-			<r:link>http://www.pocketsoap.com/weblog/rssTests/rss2.0NSwithModulesNoDefNSLocalNameClash.xml#1</r:link>
-
-			<l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink"  l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss2.0NSwithModulesLocalNameClash.xml#1" />
-			<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-			This shouldn't appear in your aggregator, but probably does. (pre rss:description - RSS2.0 w/ NS, no default NS, localName clash)
-			</szf:description>
-			<r:description>correct description</r:description>
-			<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-			This shouldn't appear in your aggregator, but probably does. (post rss:description - RSS2.0 w/ NS, no default NS, localName clash)
-			</szf:description>
-			<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-			<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-
-		</r:item>
-	</r:channel>
-</r:rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0mathml.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0mathml.xml
deleted file mode 100644
index 0a1bbca74bdcdf0434cbdefc26a85473bd6a6ea8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0mathml.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  MathML w/XLink
-Expect:       not bozo and entries[0]['description'] == '<math xmlns="http://www.w3.org/1998/Math/MathML"><mrow xlink:href="http://golem.ph.utexas.edu" xlink:show="replace" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink"><mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow></mrow></math>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;math xmlns='http://www.w3.org/1998/Math/MathML'&gt;&lt;mrow xlink:type="simple" xlink:show="replace" xlink:href="http://golem.ph.utexas.edu"&gt;&lt;mrow&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;/math&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModules.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModules.xml
deleted file mode 100644
index 3869d9641bf64068a8ee317bd5d8133983b27799..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModules.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0noNSwithModules.xml - included here with permission
-Description: RSS 2.0 with modules
-Expect:      not bozo and entries[0]['title'] == u'Test Item - RSS 2.0 no NS'
--->
-<rss 		 version="2.0"
-		 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		 xmlns:admin="http://webns.net/mvcb/"
-		 xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		 xmlns:dc="http://purl.org/dc/elements/1.1/"
-		 xmlns:dcterms="http://purl.org/dc/terms/"
-		 xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<channel>
-		<title>RSS Tests - RSS2.0 no NS</title>
-		<link>http://www.pocketsoap.com/rssTests/rss2.0noNSwithModules.xml</link>
-		<description>A set of test RSS files for examining the state of extension support in RSS aggregators</description>
-		<language>en-gb</language>
-		<copyright>Copyright 2002 Simon Fell</copyright>
-
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-		<dc:date>2002-09-28T21:00:02Z</dc:date>
-		<lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</lastBuildDate>
-		<pubDate>Sat, 28 Sep 2002 21:00:02 GMT</pubDate>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-		<managingEditor>sf@zaks.demon.co.uk</managingEditor>
-
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<generator>ultraedit-32</generator>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<webMaster>sf@zaks.demon.co.uk (Simon Fell)</webMaster>
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		
-		<item>
-			<title>Test Item - RSS 2.0 no NS</title>
-			<link>http://www.pocketsoap.com/weblog/rssTests/rss2.0noNSwithModules.xml</link>
-			<description>This is a fairly standard RSS 2.0 feed, it uses a few modules, the RSS 2.0 elements aren't in any namespace, all module elements are in their required namespaces.
-			there are no localname clashes. This is largely backwardly compatible with 0.9x. (RSS 2.0 no NS)
-			</description>
-
-			<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-			<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-		</item>
-	</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModulesLocalNameClash.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModulesLocalNameClash.xml
deleted file mode 100644
index 174de089d77eca97148f7c252c3252fc54b63d1b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0noNSwithModulesLocalNameClash.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<!--
-Credits:     Simon Fell - http://www.pocketsoap.com/rssTests/rss2.0noNSwithModulesLocalNameClash.xml - included here with permission
-Description: RSS 2.0 with modules, local namespace clash
-Expect:      not bozo and entries[0]['description'] == u'correct description'
--->
-<rss 		version="2.0" 
-		xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-		xmlns:admin="http://webns.net/mvcb/"
-		xmlns:ag="http://purl.org/rss/modules/aggregation/"
-		xmlns:dc="http://purl.org/dc/elements/1.1/"
-		xmlns:dcterms="http://purl.org/dc/terms/"
-		xmlns:l="http://purl.org/rss/1.0/modules/link/"
-		xmlns:szf="http://schemas.pocketsoap.com/rss/myDescModule/"
-		xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
-	<channel>
-		<title>RSS Tests - RSS2.0 no NS localName clash</title>
-		<link>http://www.pocketsoap.com/rssTests/rss2.0noNSwithModulesLocalNameClash.xml</link>
-		<description>A set of test RSS files for examining the state of extension support in RSS aggregators</description>
-		<language>en-gb</language>
-		<dc:language>en-gb</dc:language>
-
-		<copyright>Copyright 2002 Simon Fell</copyright>
-		<dc:rights>Copyright 2002 Simon Fell</dc:rights>
-		<dc:date>2002-09-28T21:00:02Z</dc:date>
-		<lastBuildDate>Sat, 28 Sep 2002 21:00:02 GMT</lastBuildDate>
-		<pubDate>Sat, 28 Sep 2002 21:00:02 GMT</pubDate>
-		<dc:creator>sf@zaks.demon.co.uk</dc:creator>
-
-		<managingEditor>sf@zaks.demon.co.uk</managingEditor>
-		<dc:publisher>sf@zaks.demon.co.uk</dc:publisher>
-		<generator>ultraedit-32</generator>
-		<admin:errorReportsTo rdf:resource="mailto:sf@zaks.demon.co.uk" />
-		<webMaster>sf@zaks.demon.co.uk (Simon Fell)</webMaster>
-		<dcterms:issued>2002-09-28T20:01:19Z</dcterms:issued>
-
-		<dcterms:created>2002-01-12T02:15:32Z</dcterms:created>
-		<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-		<dcterms:dateCopyrighted>2002</dcterms:dateCopyrighted>
-		
-		<item>
-			<title>Test Item - RSS2.0 no NS localName clash</title>
-			<link>http://www.pocketsoap.com/weblog/rssTests/rss2.0noNSwithModulesLocalNameClash.xml#1</link>
-
-			<l:link l:rel="http://purl.org/rss/1.0/modules/proposed/link/#permalink"  l:type="text/html" rdf:resource="http://www.pocketsoap.com/weblog/rssTests/rss2.0noNSwithModulesLocalNameClash.xml#1" />
-			<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-			This shouldn't appear in your aggregator, but probably does. (pre rss:description - RSS2.0 no NS localName clash)
-			</szf:description>
-			<description>correct description</description>
-			<szf:description>This is a extension module that is in a different namespace, but uses a localname from the RSS core spec. 
-			This shouldn't appear in your aggregator, but probably does. (post rss:description - RSS2.0 no NS localName clash)
-			</szf:description>
-			<dcterms:modified>2002-09-28T20:01:19Z</dcterms:modified>
-			<dcterms:created>2002-09-28T20:01:19Z</dcterms:created>
-
-		</item>
-	</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0svg.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0svg.xml
deleted file mode 100644
index 1a7a55465bd6fd96b1aa60fb0c0132fddc613e86..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0svg.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></svg>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"&gt;&lt;circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px" /&gt;&lt;/svg&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0svg5.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0svg5.xml
deleted file mode 100644
index 8119615b28ac5108677343d73520dc3652ec8196..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0svg5.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></svg>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;svg version="1.1" baseProfile="full" width="300px" height="200px"&gt;&lt;circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px" /&gt;&lt;/svg&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0svgtitle.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0svgtitle.xml
deleted file mode 100644
index e06a69ca40e5a30ab838bddf2622678a3d9b5932..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0svgtitle.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><title>foo</title><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></svg>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"&gt;&lt;title&gt;foo&lt;/title&gt;&lt;circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px"/&gt;&lt;/svg&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0withAtomNS.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0withAtomNS.xml
deleted file mode 100644
index 6f4bbe0b2d914699d854387ac1e50595af3625bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0withAtomNS.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--
-Description:  rss feed with Atom namespace
-Expect:       not bozo and version == 'rss20'
--->
-<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://web.resource.org/cc/">
-  <channel>
-    <title>Delicious/wearehugh</title>
-    <link>http://delicious.com/wearehugh</link>
-    <description>bookmarks posted by wearehugh</description>
-    <atom:link rel="self" type="application/rss+xml" href="http://feeds.delicious.com/v2/rss/wearehugh"/>
-    <item>
-      <title>rsync and vfat | Geek at Play</title>
-      <pubDate>Fri, 25 Dec 2009 03:30:22 +0000</pubDate>
-      <guid isPermaLink="false">http://delicious.com/url/174603f9d836a1aafac49e28ace1c19e#wearehugh</guid>
-      <link>http://www.kylev.com/2005/03/29/rsync-and-vfat/</link>
-      <dc:creator><![CDATA[wearehugh]]></dc:creator>
-      <comments>http://delicious.com/url/174603f9d836a1aafac49e28ace1c19e</comments>
-      <wfw:commentRss>http://feeds.delicious.com/v2/rss/url/174603f9d836a1aafac49e28ace1c19e</wfw:commentRss>
-      <source url="http://feeds.delicious.com/v2/rss/wearehugh">wearehugh's bookmarks</source>
-      <category domain="http://delicious.com/wearehugh/">rsync</category>
-      <category domain="http://delicious.com/wearehugh/">vfat</category>
-      <category domain="http://delicious.com/wearehugh/">windows</category>
-      <category domain="http://delicious.com/wearehugh/">linux</category>
-      <category domain="http://delicious.com/wearehugh/">mount</category>
-    </item>
-  </channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/namespace/rss2.0xlink.xml b/lib/feedparser/tests/wellformed/namespace/rss2.0xlink.xml
deleted file mode 100644
index 047c0bce39ac8a804467e32b271aba785a02b8cb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/namespace/rss2.0xlink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  SVG
-Expect:       not bozo and entries[0]['description'] == '<svg baseProfile="full" height="200px" version="1.1" width="300px" xmlns="http://www.w3.org/2000/svg"><a xlink:href="http://example.com/" xmlns:xlink="http://www.w3.org/1999/xlink"><circle cx="150px" cy="100px" fill="#ff0000" r="50px" stroke="#000000" stroke-width="5px"></a></svg>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;svg version="1.1" baseProfile="full" width="300px" height="200px" xmlns="http://www.w3.org/2000/svg"&gt;&lt;a xlink:href="http://example.com/"&gt;&lt;circle cx="150px" cy="100px" r="50px" fill="#ff0000" stroke="#000000" stroke-width="5px" /&gt;&lt;/a&gt;&lt;/svg&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/node_precedence/atom10_arbitrary_element.xml b/lib/feedparser/tests/wellformed/node_precedence/atom10_arbitrary_element.xml
deleted file mode 100644
index 4421f817d219d61bf74c1d4e0b33f1ba13b593ea..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/node_precedence/atom10_arbitrary_element.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: The arbitrarily named node of the least depth should be preferred to those with the same name of greater depth.
-Expect:      not bozo and entries[0]['abcdefg'] == entries[1]['abcdefg'] == u'Correct Value'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <abcdefg>Correct Value</abcdefg>
-  <image>
-	<abcdefg>Incorrect Value</abcdefg>
-  </image>
-</entry>
-<entry>
-  <image>
-	<abcdefg>Incorrect Value</abcdefg>
-  </image>
-  <abcdefg>Correct Value</abcdefg>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/node_precedence/atom10_id.xml b/lib/feedparser/tests/wellformed/node_precedence/atom10_id.xml
deleted file mode 100644
index e6741531dfb529eeb254dfc9ef342eef011043d1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/node_precedence/atom10_id.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: The id node which is a child of entry should be used regardless of source order.
-Expect:      not bozo and entries[0]['id'] == entries[1]['id'] == u'Correct Value'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <id>Correct Value</id>
-  <image>
-	<id>Incorrect Value</id>
-  </image>
-</entry>
-<entry>
-  <image>
-	<id>Incorrect Value</id>
-  </image>
-  <id>Correct Value</id>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/node_precedence/atom10_title.xml b/lib/feedparser/tests/wellformed/node_precedence/atom10_title.xml
deleted file mode 100644
index bf3a201bad9686a222222e377eaf9ac95698b176..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/node_precedence/atom10_title.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
-Description: The title node which is a child of entry should be used regardless of source order.
-Expect:      not bozo and entries[0]['title'] == entries[1]['title'] == u'Correct Value'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-  <title>Correct Value</title>
-  <image>
-	<title>Incorrect Value</title>
-  </image>
-</entry>
-<entry>
-  <image>
-	<title>Incorrect Value</title>
-  </image>
-  <title>Correct Value</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/doctype_contains_entity_decl.xml b/lib/feedparser/tests/wellformed/rdf/doctype_contains_entity_decl.xml
deleted file mode 100644
index e235aa05d4ec07c46992ad34cb8407fb73e6132f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/doctype_contains_entity_decl.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0"?>
-<!--
-Description: not stripping doctype properly if doctype contains entity declaration
-Expect:      not bozo
--->
-<!DOCTYPE rdf:RDF [
-<!ENTITY % HTMLlat1 PUBLIC
- "-//W3C//ENTITIES Latin 1 for XHTML//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
-%HTMLlat1;
-]>
-
-<rdf:RDF 
-  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-  xmlns="http://purl.org/rss/1.0/"
-> 
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_channel_description.xml b/lib/feedparser/tests/wellformed/rdf/rdf_channel_description.xml
deleted file mode 100644
index 26be54e788cd3b80e64d594325bb90c9a286b186..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_channel_description.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel description
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <description>Example description</description>
-</channel>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_channel_link.xml b/lib/feedparser/tests/wellformed/rdf/rdf_channel_link.xml
deleted file mode 100644
index 9c50f64a33fe5e438562d997e829469e08c8203c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_channel_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel link
-Expect:      not bozo and feed['link'] == u'http://example.com/'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <link>http://example.com/</link>
-</channel>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_channel_title.xml b/lib/feedparser/tests/wellformed/rdf/rdf_channel_title.xml
deleted file mode 100644
index edca2428e0321d88b09b34097f405409ee8e0ab1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_channel_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel title
-Expect:      not bozo and feed['title'] == u'Example feed'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <title>Example feed</title>
-</channel>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_description.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_description.xml
deleted file mode 100644
index a40ea0807cdd310ad8d81868573cd26ac795a1ec..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_item_description.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: item description
-Expect:      not bozo and entries[0]['description'] == u'Example description'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <items>
-    <rdf:Seq>
-      <rdf:li resource="http://example.com/1"/>
-    </rdf:Seq>
-  </items>
-</channel>
-<item rdf:about="http://example.com/1">
-  <description>Example description</description>
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_link.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_link.xml
deleted file mode 100644
index 8f0a07c7df858f8d5f74aaf7e864bc491de9f4f1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_item_link.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: item link
-Expect:      not bozo and entries[0]['link'] == u'http://example.com/1'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <items>
-    <rdf:Seq>
-      <rdf:li resource="http://example.com/1"/>
-    </rdf:Seq>
-  </items>
-</channel>
-<item rdf:about="http://example.com/1">
-  <link>http://example.com/1</link>
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_rdf_about.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_rdf_about.xml
deleted file mode 100644
index 1362e1b103e9abcbde2ba5b316d566ed8e258e3b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_item_rdf_about.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-Description: item rdf:about
-Expect:      not bozo and entries[0]['id'] == u'http://example.org/1'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <items>
-    <rdf:Seq>
-      <rdf:li resource="http://example.org/1"/>
-    </rdf:Seq>
-  </items>
-</channel>
-<item rdf:about="http://example.org/1">
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rdf_item_title.xml b/lib/feedparser/tests/wellformed/rdf/rdf_item_title.xml
deleted file mode 100644
index 04ec848db3999069fd0e178ee938577c9671c119..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/rdf_item_title.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: item title
-Expect:      not bozo and entries[0]['title'] == u'Example title'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-<channel rdf:about="http://example.com/index.rdf">
-  <items>
-    <rdf:Seq>
-      <rdf:li resource="http://example.com/1"/>
-    </rdf:Seq>
-  </items>
-</channel>
-<item rdf:about="http://example.com/1">
-  <title>Example title</title>
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rss090_channel_title.xml b/lib/feedparser/tests/wellformed/rdf/rss090_channel_title.xml
deleted file mode 100644
index 0169e311e1742c01ff9da350b257e5a87d23cf25..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/rss090_channel_title.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: RSS version 0.90 channel title
-Expect:      not bozo and feed['title'] == u'Example title'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">
-<channel>
-<title>Example title</title>
-</channel>
-<item>
-<title>Item title</title>
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rss090_item_title.xml b/lib/feedparser/tests/wellformed/rdf/rss090_item_title.xml
deleted file mode 100644
index 41d88e31dd9c315ea269684dc8d6a025315ed54e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/rss090_item_title.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: RSS version 0.90 item title
-Expect:      not bozo and entries[0]['title'] == u'Item title'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">
-<channel>
-<title>Example title</title>
-</channel>
-<item>
-<title>Item title</title>
-</item>
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rss_version_10.xml b/lib/feedparser/tests/wellformed/rdf/rss_version_10.xml
deleted file mode 100644
index b51a1130ed71ad38c6a3072de9ec3a2f4bd66b9a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/rss_version_10.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 1.0
-Expect:      not bozo and version == u'rss10'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rdf/rss_version_10_not_default_ns.xml b/lib/feedparser/tests/wellformed/rdf/rss_version_10_not_default_ns.xml
deleted file mode 100644
index e033013ef2e6e7cffb7ee56a824c1eda57794d8b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rdf/rss_version_10_not_default_ns.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<!--
-Description: RSS version 1.0
-Expect:      not bozo and version == 'rss10'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rss="http://purl.org/rss/1.0/">
-<rss:channel rdf:about="http://www.osswatch.ac.uk/rss/summary.rss">
-</rss:channel>
-</rdf:RDF>
diff --git a/lib/feedparser/tests/wellformed/rss/aaa_wellformed.xml b/lib/feedparser/tests/wellformed/rss/aaa_wellformed.xml
deleted file mode 100644
index c9c70bededa6585f833cf88a3ee9416c21c53a44..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/aaa_wellformed.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: wellformed XML
-Expect:      not bozo
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author.xml b/lib/feedparser/tests/wellformed/rss/channel_author.xml
deleted file mode 100644
index 74aecd762f30af4904d72477d442d4b282e479e5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author
-Expect:      not bozo and feed['author'] == u'Example editor (me@example.com)'
--->
-<rss version="2.0">
-<channel>
-<author>Example editor (me@example.com)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email.xml
deleted file mode 100644
index c0919c2b33d494018f510278347088843133e99f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author maps to author_detail email if both name and email are given
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<author>Example editor (me@example.com)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_2.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_2.xml
deleted file mode 100644
index da0b9c19e3c32b45fb0fb2c03b62531e5d009249..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author maps to author_detail email if both name and email are given (email contains +)
-Expect:      not bozo and feed['author_detail']['email'] == u'me+spam@example.com'
--->
-<rss version="2.0">
-<channel>
-<author>Example editor (me+spam@example.com)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_3.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_3.xml
deleted file mode 100644
index 8deba3e75023e17bc3909c0323bb22b8812ead10..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_email_3.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author maps to author_detail email if both name and email are given (name in parens)
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<author>me@example.com (Example editor)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name.xml
deleted file mode 100644
index 3e5f87056a18e095a2211de4170115c926401d42..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author maps to author_detail name if both name and email are given
-Expect:      not bozo and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<author>Example editor (me@example.com)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name_2.xml b/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name_2.xml
deleted file mode 100644
index ec133699347db2260fe350be726069f678978886..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_author_map_author_detail_name_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel author maps to author_detail name if both name and email are given (name in parens)
-Expect:      not bozo and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<author>me@example.com (Example editor)</author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_category.xml b/lib/feedparser/tests/wellformed/rss/channel_category.xml
deleted file mode 100644
index 37ddf22dff03cbf39e3f1b1facc59227c2273abd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_category.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel single category
-Expect:      not bozo and feed['category'] == u'Example category'
--->
-<rss version="2.0">
-<channel>
-<category>Example category</category>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_category_domain.xml b/lib/feedparser/tests/wellformed/rss/channel_category_domain.xml
deleted file mode 100644
index 6c07ccc594baa49c0e35bc9fc3ed6d129f2198ae..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_category_domain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel single category with domain
-Expect:      not bozo and feed['tags'][0]['scheme'] == u'http://www.example.com/'
--->
-<rss version="2.0">
-<channel>
-<category domain="http://www.example.com/">Example category</category>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_category_multiple.xml b/lib/feedparser/tests/wellformed/rss/channel_category_multiple.xml
deleted file mode 100644
index 9effbfddb26910354d5f00564c9d37bd13fea0fb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_category_multiple.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: channel multiple categories
-Expect:      not bozo and feed['tags'][1]['scheme'] == u'http://www.example.com/2'
--->
-<rss version="2.0">
-<channel>
-<category domain="http://www.example.com/1">Example category 1</category>
-<category domain="http://www.example.com/2">Example category 2</category>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_category_multiple_2.xml b/lib/feedparser/tests/wellformed/rss/channel_category_multiple_2.xml
deleted file mode 100644
index 00daebe24c5f649d485a62cfb6be82a31d5df708..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_category_multiple_2.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: channel multiple categories
-Expect:      not bozo and feed['tags'][1]['term'] == u'Example category 2'
--->
-<rss version="2.0">
-<channel>
-<category>Example category 1</category>
-<category>Example category 2</category>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_domain.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_domain.xml
deleted file mode 100644
index ef926b6c1c268c57a39b1093f01ff65ef53dc583..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_cloud_domain.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cloud domain
-Expect:      not bozo and feed['cloud']['domain'] == u'rpc.sys.com'
--->
-<rss version="2.0">
-<channel>
-<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_path.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_path.xml
deleted file mode 100644
index eccf1b9d997969584ba6c013dfb9dadfabcb682c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_cloud_path.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cloud path
-Expect:      not bozo and feed['cloud']['path'] == u'/RPC2'
--->
-<rss version="2.0">
-<channel>
-<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_port.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_port.xml
deleted file mode 100644
index 0cd2bc655e11f362c94d67284876aafdd7ef9bb8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_cloud_port.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cloud port
-Expect:      not bozo and feed['cloud']['port'] == u'80'
--->
-<rss version="2.0">
-<channel>
-<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_protocol.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_protocol.xml
deleted file mode 100644
index 73e3392c265f8c3e5d6e21c3ecf6aa23fb16ac54..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_cloud_protocol.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cloud protocol
-Expect:      not bozo and feed['cloud']['protocol'] == u'xml-rpc'
--->
-<rss version="2.0">
-<channel>
-<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_cloud_registerProcedure.xml b/lib/feedparser/tests/wellformed/rss/channel_cloud_registerProcedure.xml
deleted file mode 100644
index 703f53658d822a3845e084f74bb3679a291ceae1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_cloud_registerProcedure.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: cloud registerProcedure
-Expect:      not bozo and feed['cloud']['registerprocedure'] == u'myCloud.rssPleaseNotify'
--->
-<rss version="2.0">
-<channel>
-<cloud domain="rpc.sys.com" port="80" path="/RPC2" registerProcedure="myCloud.rssPleaseNotify" protocol="xml-rpc" />
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_copyright.xml b/lib/feedparser/tests/wellformed/rss/channel_copyright.xml
deleted file mode 100644
index c1dec40c22aeee655ec6661f1a815be16b4c6c2b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_copyright.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: normal copyright
-Expect:      not bozo and feed['copyright'] == u'Example copyright'
--->
-<rss version="2.0">
-<channel>
-<copyright>Example copyright</copyright>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_author.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_author.xml
deleted file mode 100644
index 6bae15e1587c212c8d01a42f726573d68a93b830..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_author.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:author
-Expect:      not bozo and feed['author'] == u'Example editor' and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:author>Example editor</dc:author>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_email.xml
deleted file mode 100644
index b5d73d55c130bd68ed676a49ce2ebe6ed62fccb8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:author maps to author_detail email if both name and email are given
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:author>Example editor (me@example.com)</dc:author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_name.xml
deleted file mode 100644
index f689445696b176452e16b3e9a40b1310762e447f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_author_map_author_detail_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:author maps to author_detail name if both name and email are given
-Expect:      not bozo and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:author>Example editor (me@example.com)</dc:author>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_contributor.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_contributor.xml
deleted file mode 100644
index 76450c2f14808a691a5a15cb7757f0d0fa8ed471..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_contributor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:contributor
-Expect:      not bozo and feed['contributors'][0]['name'] == u'Example contributor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:contributor>Example contributor</dc:contributor>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_creator.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_creator.xml
deleted file mode 100644
index 111ae8ba47ab6d3acf96883a5d921a13a0516833..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_creator.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:creator maps to author
-Expect:      not bozo and feed['author'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:creator>Example editor</dc:creator>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_email.xml
deleted file mode 100644
index 05cb34ac513d37ebadcf2d2fa1322a60133c8c25..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:creator maps to author_detail email if both name and email are given
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:creator>Example editor (me@example.com)</dc:creator>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_name.xml
deleted file mode 100644
index 451dd86e2aba6f59032ad5872f00a7b7d4af9913..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_creator_map_author_detail_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:creator maps to author_detail name if both name and email are given
-Expect:      not bozo and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:creator>Example editor (me@example.com)</dc:creator>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_date.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_date.xml
deleted file mode 100644
index cbf3fa79acbbd11e2f0f7ba75fc9ae9f3b949e88..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_date.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:date
-Expect:      not bozo and feed['updated'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:date>2003-12-31T10:14:55Z</dc:date>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_date_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_date_parsed.xml
deleted file mode 100644
index 795114883e177942126b2bcfe36daa0ced27c039..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_date_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:date parsed
-Expect:      not bozo and feed['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:date>2003-12-31T10:14:55Z</dc:date>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_publisher.xml
deleted file mode 100644
index b21d4ad804c021eb2bc86098bcd27d894f4a2c37..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:publisher
-Expect:      not bozo and feed['publisher'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:publisher>Example editor</dc:publisher>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_email.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_email.xml
deleted file mode 100644
index 1c5d8cd1bf42341661cdb349c5464b2eb91e5534..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:publisher
-Expect:      not bozo and feed['publisher_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:publisher>Example editor (me@example.com)</dc:publisher>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_name.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_name.xml
deleted file mode 100644
index e581af65d4abec30912fcfa2ce0f06ad3e59c171..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_publisher_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:publisher
-Expect:      not bozo and feed['publisher_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:publisher>Example editor (me@example.com)</dc:publisher>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_rights.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_rights.xml
deleted file mode 100644
index 9d33d75ca5bdd5582a1028d326e60befec4717c5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_rights.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:rights
-Expect:      not bozo and feed['copyright'] == u'Example copyright'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:rights>Example copyright</dc:rights>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_subject.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_subject.xml
deleted file mode 100644
index c8ab301024966a3c1c11140bce65ef08b796d870..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_subject.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:subject
-Expect:      not bozo and feed['category'] == u'Example category'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:subject>Example category</dc:subject>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_2.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_subject_2.xml
deleted file mode 100644
index 953d4d3fc21f523d600056841773478ee4058819..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:subject maps to categories
-Expect:      not bozo and feed['tags'][0]['term'] == u'Example category'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:subject>Example category</dc:subject>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_multiple.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_subject_multiple.xml
deleted file mode 100644
index 3ff2558c4c91814b3a996eb3d732af92d7e86db4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_subject_multiple.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: multiple dc:subject
-Expect:      not bozo and feed['tags'][1]['term'] == u'Example category 2'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:subject>Example category 1</dc:subject>
-<dc:subject>Example category 2</dc:subject>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dc_title.xml b/lib/feedparser/tests/wellformed/rss/channel_dc_title.xml
deleted file mode 100644
index 299ae2339fb3233c2907b0edbadc70885c18ba9f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dc_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dc:title
-Expect:      not bozo and feed['title'] == u'Example title'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<dc:title>Example title</dc:title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_created.xml
deleted file mode 100644
index aa36aadb1e196457c780bb93c8e84d5877de780b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:created
-Expect:      not bozo and feed['created'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:created>2003-12-31T10:14:55Z</dcterms:created>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_created_parsed.xml
deleted file mode 100644
index 211178596618bd5b20a2b2d2a2324030972bf39f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_created_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:created parsed
-Expect:      not bozo and feed['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:created>2003-12-31T10:14:55Z</dcterms:created>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued.xml
deleted file mode 100644
index a17cee672aefe32d3a40d4a734cf7eb8ae2ab59f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:issued
-Expect:      not bozo and feed['published'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued_parsed.xml
deleted file mode 100644
index dda97dca5c905e9810029446a81adb95b75da199..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_issued_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:issued parsed
-Expect:      not bozo and feed['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified.xml
deleted file mode 100644
index 5a436d2cb8c0e98922f35cbb5db366a416fcec2a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:modified
-Expect:      not bozo and feed['updated'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified_parsed.xml
deleted file mode 100644
index 53ed3b264fd92d82c544272eda6317e02a6cb7fd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_dcterms_modified_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel dcterms:modified parsed
-Expect:      not bozo and feed['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_description.xml b/lib/feedparser/tests/wellformed/rss/channel_description.xml
deleted file mode 100644
index d2621011335f22b9927bc1e212bb4e591883c5c7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_description.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: normal description
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rss version="2.0">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_escaped_markup.xml b/lib/feedparser/tests/wellformed/rss/channel_description_escaped_markup.xml
deleted file mode 100644
index fa86a59cee1563d0c5a951d92cce47b535bf812e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_description_escaped_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: escaped markup in description
-Expect:      not bozo and feed['description'] == u'<p>Example description</p>'
--->
-<rss version="2.0">
-<channel>
-<description>&lt;p&gt;Example description&lt;/p&gt;</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_map_tagline.xml b/lib/feedparser/tests/wellformed/rss/channel_description_map_tagline.xml
deleted file mode 100644
index f83cc50dd7c7c85aaca75ef7b076f18c716695b7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_description_map_tagline.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel description is mapped to tagline
-Expect:      not bozo and feed['tagline'] == u'Example description'
--->
-<rss version="2.0">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_naked_markup.xml b/lib/feedparser/tests/wellformed/rss/channel_description_naked_markup.xml
deleted file mode 100644
index 671452fbdba59dc0338bfc73cf9ad13949309a74..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_description_naked_markup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: naked markup in description
-Expect:      not bozo and feed['description'] == u'<p>Example description</p>'
--->
-<rss version="2.0">
-<channel>
-<description><p>Example description</p></description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_description_shorttag.xml b/lib/feedparser/tests/wellformed/rss/channel_description_shorttag.xml
deleted file mode 100644
index d0d4928575d872237047e50e33b9d2a79b369987..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_description_shorttag.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: description shorttag and link following
-Expect:      not bozo and feed['description'] == u'' and feed['link'] == u'http://example.com/'
--->
-<rss version="2.0">
-<channel>
-<description/>
-<link>http://example.com/</link>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_docs.xml b/lib/feedparser/tests/wellformed/rss/channel_docs.xml
deleted file mode 100644
index f2e312a947874d8defc556e4d0b57a2945867361..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_docs.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: docs
-Expect:      not bozo and feed['docs'] == u'http://www.example.com/'
--->
-<rss version="2.0">
-<channel>
-<docs>http://www.example.com/</docs>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_generator.xml b/lib/feedparser/tests/wellformed/rss/channel_generator.xml
deleted file mode 100644
index 5c046e353939f977bb80cd1d888215968012580d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_generator.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: generator
-Expect:      not bozo and feed['generator'] == u'Example generator'
--->
-<rss version="2.0">
-<channel>
-<generator>Example generator</generator>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_description.xml b/lib/feedparser/tests/wellformed/rss/channel_image_description.xml
deleted file mode 100644
index e498675e708bab67b99c9851b02e9e0930f774c0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_description.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image description
-Expect:      not bozo and feed['image']['description'] == u'Available in Netscape RSS 0.91'
--->
-<rss version="0.91">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_height.xml b/lib/feedparser/tests/wellformed/rss/channel_image_height.xml
deleted file mode 100644
index 97c68b3400f024c7b2b2a2b5bfd72fb8db02b80b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_height.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image height
-Expect:      not bozo and feed['image']['height'] == 15
--->
-<rss version="2.0">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_link.xml b/lib/feedparser/tests/wellformed/rss/channel_image_link.xml
deleted file mode 100644
index 3e1ad8c4de14ff9cfff1a743bf901addb897c533..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_link.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image link
-Expect:      not bozo and feed['image']['link'] == u'http://example.org/link'
--->
-<rss version="2.0">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_link_bleed.xml b/lib/feedparser/tests/wellformed/rss/channel_image_link_bleed.xml
deleted file mode 100644
index d6b1c026bc16f5e8e1f92616f3177d4679e270ca..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_link_bleed.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: image link does not bleed into channel link array
-Expect:      not bozo and len(feed['links']) == 1
--->
-<rss version="2.0">
-<channel>
-<link>http://channel.example.com/</link>
-<image>
-<link>http://image.example.com/</link>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_link_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_image_link_conflict.xml
deleted file mode 100644
index 6187df74315729381ccacbb1947ac1e39d8fbd86..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_link_conflict.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: image link does not conflict with channel link
-Expect:      not bozo and feed['link'] == u'http://channel.example.com/'
--->
-<rss version="2.0">
-<channel>
-<link>http://channel.example.com/</link>
-<image>
-<link>http://image.example.com/</link>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_title.xml b/lib/feedparser/tests/wellformed/rss/channel_image_title.xml
deleted file mode 100644
index 66d8fe830dfd2ce03c11b5e4c34db44662178030..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_title.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image title
-Expect:      not bozo and feed['image']['title'] == u'Sample image'
--->
-<rss version="2.0">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_title_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_image_title_conflict.xml
deleted file mode 100644
index aac174d6439f0da413428b15ee5cad8f847915eb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_title_conflict.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: image title does not conflict with channel title
-Expect:      not bozo and feed['title'] == u'Real title'
--->
-<rss version="2.0">
-<channel>
-<title>Real title</title>
-<image>
-<title>textInput title</title>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_url.xml b/lib/feedparser/tests/wellformed/rss/channel_image_url.xml
deleted file mode 100644
index cd3c05290e7f1cddca1079a70c4816297e505736..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_url.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image url
-Expect:      not bozo and feed['image']['url'] == u'http://example.org/url'
--->
-<rss version="2.0">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_image_width.xml b/lib/feedparser/tests/wellformed/rss/channel_image_width.xml
deleted file mode 100644
index 96470d64a508f5a270e835ee93b98e75bf0fd2f3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_image_width.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: image width
-Expect:      not bozo and feed['image']['width'] == 80
--->
-<rss version="2.0">
-<channel>
-<image>
-<title>Sample image</title>
-<url>http://example.org/url</url>
-<link>http://example.org/link</link>
-<width>80</width>
-<height>15</height>
-<description>Available in Netscape RSS 0.91</description>
-</image>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate.xml b/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate.xml
deleted file mode 100644
index 88b1398a6537f8182fcbefe8cc3985ab350cb341..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel lastBuildDate
-Expect: not bozo and feed['updated'] == u'Sat, 07 Sep 2002 00:00:01 GMT'
--->
-<rss version="2.0">
-<channel>
-  <lastBuildDate>Sat, 07 Sep 2002 00:00:01 GMT</lastBuildDate>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate_parsed.xml
deleted file mode 100644
index aa0ff822aac75829a238fa99f1c1484fdf8ad455..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_lastBuildDate_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel lastBuildDate parsed
-Expect: not bozo and feed['updated_parsed'] == (2002, 9, 7, 0, 0, 1, 5, 250, 0)
--->
-<rss version="2.0">
-<channel>
-  <lastBuildDate>Sat, 07 Sep 2002 00:00:01 GMT</lastBuildDate>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_link.xml b/lib/feedparser/tests/wellformed/rss/channel_link.xml
deleted file mode 100644
index 51b616fa39d2b353d91f0c5fbdb542bfa29def7a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: normal link
-Expect:      not bozo and feed['link'] == u'http://example.com/'
--->
-<rss version="2.0">
-<channel>
-<link>http://example.com/</link>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_managingEditor.xml b/lib/feedparser/tests/wellformed/rss/channel_managingEditor.xml
deleted file mode 100644
index 56cfa70fd4b468a3f84fb30d2618001e7034cdeb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_managingEditor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel managingEditor maps to author
-Expect:      not bozo and feed['author'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<managingEditor>Example editor</managingEditor>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_email.xml
deleted file mode 100644
index bfe888576f5272096ddb89c207713bc19d563098..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: managingEditor maps to author_detail email if both name and email are given
-Expect:      not bozo and feed['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<managingEditor>Example editor (me@example.com)</managingEditor>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_name.xml
deleted file mode 100644
index 58294445e7cfc7a0d48ec799a33d71c7dab812ea..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_managingEditor_map_author_detail_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: managingEditor maps to author_detail name if both name and email are given
-Expect:      not bozo and feed['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<managingEditor>Example editor (me@example.com)</managingEditor>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_pubDate.xml b/lib/feedparser/tests/wellformed/rss/channel_pubDate.xml
deleted file mode 100644
index b60f8474b1fd636fa38098c5e2508982573bca8a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_pubDate.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel pubDate
-Expect:      not bozo and feed['published'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<rss version="2.0">
-<channel>
-<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_pubDate_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/rss/channel_pubDate_map_updated_parsed.xml
deleted file mode 100644
index 271338d8d24eccac2131e0eb828f0de21b2bfe55..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_pubDate_map_updated_parsed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel pubDate parsed and mapped to published_parsed
-Expect:      not bozo and feed['published_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<rss version="2.0">
-<channel>
-<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_description.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_description.xml
deleted file mode 100644
index 91ca14baf37f0fa1b96852245a18999b23478750..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_description.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-Description: textInput description
-Expect:      not bozo and feed['textinput']['description'] == u'textInput description'
--->
-<rss version="2.0">
-<channel>
-<title>Real title</title>
-<description>Real description</description>
-<textInput>
-<title>textInput title</title>
-<description>textInput description</description>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_description_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_description_conflict.xml
deleted file mode 100644
index 3eb6e7bcdec4fe671e354da693e11a9b9dc504ee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_description_conflict.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput description does not conflict with channel description
-Expect:      not bozo and feed['description'] == u'Real description'
--->
-<rss version="2.0">
-<channel>
-<description>Real description</description>
-<textInput>
-<description>textInput description</description>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_link.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_link.xml
deleted file mode 100644
index ce5073bdcfef26df30c9848aca65d6281375207f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_link.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput link
-Expect:      not bozo and feed['textinput']['link'] == u'http://textinput.example.com/'
--->
-<rss version="2.0">
-<channel>
-<link>http://channel.example.com/</link>
-<textInput>
-<link>http://textinput.example.com/</link>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_bleed.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_link_bleed.xml
deleted file mode 100644
index 77d1aca60db27c82b1e4e2610d5fa717549860f3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_bleed.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput link does not bleed into channel link array
-Expect:      not bozo and len(feed['links']) == 1
--->
-<rss version="2.0">
-<channel>
-<link>http://channel.example.com/</link>
-<textInput>
-<link>http://textinput.example.com/</link>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_link_conflict.xml
deleted file mode 100644
index 9d1ffb67dc937811209783ddf1346f911da24f9c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_link_conflict.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput link does not conflict with channel link
-Expect:      not bozo and feed['link'] == u'http://channel.example.com/'
--->
-<rss version="2.0">
-<channel>
-<link>http://channel.example.com/</link>
-<textInput>
-<link>http://textinput.example.com/</link>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_name.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_name.xml
deleted file mode 100644
index cf2316ca472b006b141686f8b688210adfcd13b5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: textInput name
-Expect:      not bozo and feed['textinput']['name'] == u'textinput name'
--->
-<rss version="2.0">
-<channel>
-<textInput>
-<name>textinput name</name>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_title.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_title.xml
deleted file mode 100644
index 7d2f4b70426849df9e066dc297a626e85eaf1fbb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_title.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput title
-Expect:      not bozo and feed['textinput']['title'] == u'textInput title'
--->
-<rss version="2.0">
-<channel>
-<title>Real title</title>
-<textInput>
-<title>textInput title</title>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_textInput_title_conflict.xml b/lib/feedparser/tests/wellformed/rss/channel_textInput_title_conflict.xml
deleted file mode 100644
index f6a9d37459edfc9f797fbe5dff9f218c876b8542..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_textInput_title_conflict.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: textInput title does not conflict with channel title
-Expect:      not bozo and feed['title'] == u'Real title'
--->
-<rss version="2.0">
-<channel>
-<title>Real title</title>
-<textInput>
-<title>textInput title</title>
-</textInput>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_title.xml b/lib/feedparser/tests/wellformed/rss/channel_title.xml
deleted file mode 100644
index c4ea8c076b2ef26dc66b6ef8c5129b090f640326..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: normal title
-Expect:      not bozo and feed['title'] == u'Example feed'
--->
-<rss version="2.0">
-<channel>
-<title>Example feed</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_title_apos.xml b/lib/feedparser/tests/wellformed/rss/channel_title_apos.xml
deleted file mode 100644
index 35b36f3f271b336ec6fa145475588bcb125cae30..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_title_apos.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel title contains apos entity
-Expect:      not bozo and feed['title'] == u"Mark's title"
--->
-<rss version="0.91">
-<channel>
-<title>Mark&apos;s title</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_title_gt.xml b/lib/feedparser/tests/wellformed/rss/channel_title_gt.xml
deleted file mode 100644
index dec60c1a6a774ea2527a315b9df5b4b2c83ffc92..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_title_gt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel title contains gt entity
-Expect:      not bozo and feed['title'] == u'2 > 1'
--->
-<rss version="0.91">
-<channel>
-<title>2 &gt; 1</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_title_lt.xml b/lib/feedparser/tests/wellformed/rss/channel_title_lt.xml
deleted file mode 100644
index c1cf9ec5a3c42fb1be4118f400eb029eca2872db..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_title_lt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel title contains lt entity
-Expect:      not bozo and feed['title'] == u'1 < 2'
--->
-<rss version="0.91">
-<channel>
-<title>1 &lt; 2</title>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_ttl.xml b/lib/feedparser/tests/wellformed/rss/channel_ttl.xml
deleted file mode 100644
index 781d05857562e49fbae78badcdbe22c4a0d49c48..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_ttl.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ttl
-Expect:      not bozo and feed['ttl'] == u'60'
--->
-<rss version="2.0">
-<channel>
-<ttl>60</ttl>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_webMaster.xml b/lib/feedparser/tests/wellformed/rss/channel_webMaster.xml
deleted file mode 100644
index 2f0ff5f148337e470f82575ab909edd362e833c9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_webMaster.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel webMaster maps to publisher
-Expect:      not bozo and feed['publisher'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<webMaster>Example editor</webMaster>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_webMaster_email.xml b/lib/feedparser/tests/wellformed/rss/channel_webMaster_email.xml
deleted file mode 100644
index ff0410db96eadce927aa4d7dc0007d4f48aee828..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_webMaster_email.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel webMaster maps to publisher
-Expect:      not bozo and feed['publisher_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<webMaster>Example editor (me@example.com)</webMaster>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/channel_webMaster_name.xml b/lib/feedparser/tests/wellformed/rss/channel_webMaster_name.xml
deleted file mode 100644
index 1fad57321b6596209d3134a61892fc7ed3e5282d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/channel_webMaster_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: channel webMaster maps to publisher
-Expect:      not bozo and feed['publisher_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<webMaster>Example editor (me@example.com)</webMaster>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/entity_in_doctype.xml b/lib/feedparser/tests/wellformed/rss/entity_in_doctype.xml
deleted file mode 100644
index b88907638bccc06b88c7801d41415ae16dec971f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/entity_in_doctype.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<!--
-Description: AT&T
-Expect:      not bozo and entries[0]['guid'] == 'tag:example.com,2006-05-04:/blog/'
--->
-
-<!DOCTYPE rss [
-  <!ENTITY id "tag:example.com,">
-]>
-
-<rss version="2.0">
-<channel>
-<item>
-<guid isPermaLink='false'>&id;2006-05-04:/blog/</guid>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_author.xml b/lib/feedparser/tests/wellformed/rss/item_author.xml
deleted file mode 100644
index 176ce1c9e95447e5410aa4b65900c9953b67bfc3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author
-Expect:      not bozo and entries[0]['author'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>Example editor</author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email.xml
deleted file mode 100644
index e990c9f5ab089cf9c0ee3d6ebcaae8277abdf8c9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail email if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>Example editor (me@example.com)</author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email2.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email2.xml
deleted file mode 100644
index 4cbf2da9b1580342af17d41b1eaf2819cd8bc3f2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail email if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>Example editor &lt;me@example.com&gt;</author>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email3.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email3.xml
deleted file mode 100644
index 42aafb03cd392003a2a755ded55a673f2dd7deee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_email3.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail email if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>me@example.com (Example editor)</author>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name.xml
deleted file mode 100644
index 8083ff44dbf0421d8881cb8f062d5bc987efb70c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail_name if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>Example editor (me@example.com)</author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name2.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name2.xml
deleted file mode 100644
index bcc451355f793933089120ce4c8553225b9a3793..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail_name if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>Example editor &lt;me@example.com&gt;</author>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name3.xml b/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name3.xml
deleted file mode 100644
index c0f64169bd2581de2c03a6a1b166a6a847771fad..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_author_map_author_detail_name3.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item author maps to author_detail_name if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0">
-<channel>
-<item>
-<author>me@example.com (Example editor)</author>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_category.xml b/lib/feedparser/tests/wellformed/rss/item_category.xml
deleted file mode 100644
index 2b50558cd83c5fe5671ba3e02c30cc778a8d7bd2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_category.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item single category
-Expect:      not bozo and entries[0]['category'] == u'Example category'
--->
-<rss version="2.0">
-<channel>
-<item>
-<category>Example category</category>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_category_domain.xml b/lib/feedparser/tests/wellformed/rss/item_category_domain.xml
deleted file mode 100644
index 8cbe25fd98085132079e75314a9901409ce424ea..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_category_domain.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item category with domain
-Expect:      not bozo and entries[0]['tags'][0]['scheme'] == u'http://www.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<category domain="http://www.example.com/">Example category</category>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_category_image.xml b/lib/feedparser/tests/wellformed/rss/item_category_image.xml
deleted file mode 100644
index 6c1c5e8512ac1cae381ae6f9d082e7529b3a7f7f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_category_image.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
-Description: item with an image inside a category should not cause error
-Expect:      not bozo and entries[0]['category'] != None
--->
-<rss version="2.0">
-<channel>
-<item>
-<category>Example category
-      <image>        
-	<url>http://www.thestranger.com/imager/b/story/4281993/a0a6/SavageLove-400.jpg</url>
-        <title><![CDATA[Savage Love]]></title>
-        <link><![CDATA[http://www.thestranger.com/seattle/SavageLove?oid=4281993]]></link>
-      </image>
-</category>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_category_multiple.xml b/lib/feedparser/tests/wellformed/rss/item_category_multiple.xml
deleted file mode 100644
index c2f121d3498f1c6322bf5301bba3a4c0dacd8d96..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_category_multiple.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item multiple categories
-Expect:      not bozo and entries[0]['tags'][1]['scheme'] == u'http://www.example.com/2'
--->
-<rss version="2.0">
-<channel>
-<item>
-<category domain="http://www.example.com/1">Example category 1</category>
-<category domain="http://www.example.com/2">Example category 2</category>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_category_multiple_2.xml b/lib/feedparser/tests/wellformed/rss/item_category_multiple_2.xml
deleted file mode 100644
index 861dd92e5df10dd6655e884a3701a5cbce795812..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_category_multiple_2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item multiple categories
-Expect:      not bozo and entries[0]['tags'][1]['term'] == u'Example category 2'
--->
-<rss version="2.0">
-<channel>
-<item>
-<category>Example category 1</category>
-<category>Example category 2</category>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_cc_license.xml b/lib/feedparser/tests/wellformed/rss/item_cc_license.xml
deleted file mode 100644
index 6b023b9a829ce62d641f99e3e7ac4febffe493bd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_cc_license.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: creative commons license
-Expect:      not bozo and entries[0]['license'] == u'http://www.creativecommons.org/licenses/by-nc/1.0'
--->
-<rss version="2.0" xmlns:cc="http://web.resource.org/cc/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-<channel>
-<item>
-<cc:license rdf:resource="http://www.creativecommons.org/licenses/by-nc/1.0"/>
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_comments.xml b/lib/feedparser/tests/wellformed/rss/item_comments.xml
deleted file mode 100644
index 9751403cd314d5ac52a0e91b0d234f12139511d3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_comments.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item comments
-Expect:      not bozo and entries[0]['comments'] == u'http://example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<comments>http://example.com/</comments>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_content_encoded.xml b/lib/feedparser/tests/wellformed/rss/item_content_encoded.xml
deleted file mode 100644
index e826c39b03f4b6ce56ed28cc74b41d5289d5bd9e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_content_encoded.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: content:encoded
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<p>Example content</p>'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;p&gt;Example content&lt;/p&gt;</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_content_encoded_mode.xml b/lib/feedparser/tests/wellformed/rss/item_content_encoded_mode.xml
deleted file mode 100644
index 6cbd874b019219aca9fe29a696d4b54564720cfc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_content_encoded_mode.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: content:encoded mode
-Expect:      1
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;p&gt;Example content&lt;/p&gt;</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_content_encoded_type.xml b/lib/feedparser/tests/wellformed/rss/item_content_encoded_type.xml
deleted file mode 100644
index 3640386bb0f81f0d8c6aefff0d723db7dcccb9fd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_content_encoded_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: content:encoded type
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'text/html'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;p&gt;Example content&lt;/p&gt;</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_creativeCommons_license.xml b/lib/feedparser/tests/wellformed/rss/item_creativeCommons_license.xml
deleted file mode 100644
index 65353d91df53a598ba70044b186997b68e55d857..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_creativeCommons_license.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: creative commons license
-Expect:      not bozo and entries[0]['license'] == u'http://www.creativecommons.org/licenses/by-nc/1.0'
--->
-<rss version="2.0" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
-<channel>
-<item>
-<creativeCommons:license>http://www.creativecommons.org/licenses/by-nc/1.0</creativeCommons:license>
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_author.xml b/lib/feedparser/tests/wellformed/rss/item_dc_author.xml
deleted file mode 100644
index 22e71c64b21955f77a1a36a30f588859843c624a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_author.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:author
-Expect:      not bozo and entries[0]['author'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:author>Example editor</dc:author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_email.xml
deleted file mode 100644
index eb81dc96594e667ada676a99649503025ac43495..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:author maps to author_detail email if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:author>Example editor (me@example.com)</dc:author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_name.xml
deleted file mode 100644
index 5139a243540d2f89b8453e8c5f3f8a7991b73bda..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_author_map_author_detail_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:author maps to author_detail name if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:author>Example editor (me@example.com)</dc:author>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_contributor.xml b/lib/feedparser/tests/wellformed/rss/item_dc_contributor.xml
deleted file mode 100644
index 79d16d030da629574b66b18a1bc94cbb98655209..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_contributor.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:contributor
-Expect:      not bozo and entries[0]['contributors'][0]['name'] == u'Example contributor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:contributor>Example contributor</dc:contributor>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_creator.xml b/lib/feedparser/tests/wellformed/rss/item_dc_creator.xml
deleted file mode 100644
index c214414b044b8fb4858e903bf5e78706ead331fe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_creator.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:creator maps to author
-Expect:      not bozo and entries[0]['author'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:creator>Example editor</dc:creator>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_email.xml b/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_email.xml
deleted file mode 100644
index 899464eca341ba2fb1b7213170a07668c55b4e89..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:creator maps to author_detail email if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:creator>Example editor (me@example.com)</dc:creator>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_name.xml b/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_name.xml
deleted file mode 100644
index ca20ab083c9517023cb3ca028f1032d84dd57557..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_creator_map_author_detail_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:creator maps to author_detail name if both name and email are given
-Expect:      not bozo and entries[0]['author_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:creator>Example editor (me@example.com)</dc:creator>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_date.xml b/lib/feedparser/tests/wellformed/rss/item_dc_date.xml
deleted file mode 100644
index 0f0f11797e503d2aaeec0325d398f66cde9ad05b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_date.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:date
-Expect:      not bozo and entries[0]['updated'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:date>2003-12-31T10:14:55Z</dc:date>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_date_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dc_date_parsed.xml
deleted file mode 100644
index 1d39df93813ceaa3506bbee12d881036be06cf77..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_date_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:date parsed
-Expect:      not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:date>2003-12-31T10:14:55Z</dc:date>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_description.xml b/lib/feedparser/tests/wellformed/rss/item_dc_description.xml
deleted file mode 100644
index 973d736c0c3b113c7075d7e3cca40a34c7024282..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_description.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:description
-Expect:      not bozo and entries[0]['description'] == u'Example description'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:description>Example description</dc:description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_publisher.xml b/lib/feedparser/tests/wellformed/rss/item_dc_publisher.xml
deleted file mode 100644
index 7b4e82b53aa92d03cb971ad7801ba07f393a6ee8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_publisher.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:publisher
-Expect:      not bozo and entries[0]['publisher'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:publisher>Example editor</dc:publisher>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_email.xml b/lib/feedparser/tests/wellformed/rss/item_dc_publisher_email.xml
deleted file mode 100644
index d321bed4d50f29b97b55ee7b1f06f0b413de20cc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_email.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:publisher
-Expect:      not bozo and entries[0]['publisher_detail']['email'] == u'me@example.com'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:publisher>Example editor (me@example.com)</dc:publisher>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_name.xml b/lib/feedparser/tests/wellformed/rss/item_dc_publisher_name.xml
deleted file mode 100644
index 636c739e55b0cb29be11b4e54fe7cf2256db00c5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_publisher_name.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:publisher
-Expect:      not bozo and entries[0]['publisher_detail']['name'] == u'Example editor'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:publisher>Example editor (me@example.com)</dc:publisher>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_rights.xml b/lib/feedparser/tests/wellformed/rss/item_dc_rights.xml
deleted file mode 100644
index 2d734a98f8638d8150e0605ef47828f44404681a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_rights.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:rights
-Expect:      not bozo and entries[0]['copyright'] == u'Example copyright'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:rights>Example copyright</dc:rights>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_subject.xml b/lib/feedparser/tests/wellformed/rss/item_dc_subject.xml
deleted file mode 100644
index 745a7864576976e4ebed1fc7dbfb97657eaea04d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_subject.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:subject
-Expect:      not bozo and entries[0]['category'] == u'Example category'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:subject>Example category</dc:subject>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_subject_2.xml b/lib/feedparser/tests/wellformed/rss/item_dc_subject_2.xml
deleted file mode 100644
index b7de4cc0185b061f931b22ba8371925a1bc5694d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_subject_2.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:subject maps to categories
-Expect:      not bozo and entries[0]['tags'][0]['term'] == u'Example category'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:subject>Example category</dc:subject>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_subject_multiple.xml b/lib/feedparser/tests/wellformed/rss/item_dc_subject_multiple.xml
deleted file mode 100644
index aa7722d6bddea7689ca171735ed0efc83df13354..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_subject_multiple.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: multiple item dc:subject
-Expect:      not bozo and entries[0]['tags'][1]['term'] == u'Example category 2'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:subject>Example category 1</dc:subject>
-<dc:subject>Example category 2</dc:subject>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dc_title.xml b/lib/feedparser/tests/wellformed/rss/item_dc_title.xml
deleted file mode 100644
index dbe113439609d9f28ed35634e7a79e19f866b364..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dc_title.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dc:title
-Expect:      not bozo and entries[0]['title'] == u'Example title'
--->
-<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
-<channel>
-<item>
-<dc:title>Example title</dc:title>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_created.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_created.xml
deleted file mode 100644
index f70882b12903f171e20d02afac49eb33c6d6478f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_created.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:created
-Expect:      not bozo and entries[0]['created'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:created>2003-12-31T10:14:55Z</dcterms:created>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_created_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_created_parsed.xml
deleted file mode 100644
index 5d235c1471d318c479103b0b691ca0c4a066ecf0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_created_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:created parsed
-Expect:      not bozo and entries[0]['created_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:created>2003-12-31T10:14:55Z</dcterms:created>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_issued.xml
deleted file mode 100644
index 789d514ceff7631165b51618a40a479d1faecff7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:issued
-Expect:      not bozo and entries[0]['published'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_issued_parsed.xml
deleted file mode 100644
index 4a3db36e1262b1f0f149e07e6942e3adce4ccb45..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_issued_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:issued parsed
-Expect:      not bozo and entries[0]['published_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:issued>2003-12-31T10:14:55Z</dcterms:issued>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_modified.xml
deleted file mode 100644
index 00409dd570fdbeb23527f2322218c1759de67fdd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:modified
-Expect:      not bozo and entries[0]['updated'] == u'2003-12-31T10:14:55Z'
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_dcterms_modified_parsed.xml
deleted file mode 100644
index 388e3e70288007e3723a1424011a76e6e9e96bfc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_dcterms_modified_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item dcterms:modified parsed
-Expect:      not bozo and entries[0]['updated_parsed'] == (2003, 12, 31, 10, 14, 55, 2, 365, 0)
--->
-<rss version="2.0" xmlns:dcterms="http://purl.org/dc/terms/">
-<channel>
-<item>
-<dcterms:modified>2003-12-31T10:14:55Z</dcterms:modified>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_description.xml b/lib/feedparser/tests/wellformed/rss/item_description.xml
deleted file mode 100644
index f5a49448ef98dfe67e77f9ce3d5fd806e8d30641..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description
-Expect:      not bozo and entries[0]['description'] == u'Example description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>Example description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_and_summary.xml b/lib/feedparser/tests/wellformed/rss/item_description_and_summary.xml
deleted file mode 100644
index 355f1c47a7dd7bf5843e94d8445fc4807c47c4aa..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_and_summary.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item contains both description and summary elements
-Expect:      not bozo and entries[0]['description'] == u'Example description' and entries[0]['content'][0]['value'] == u'Example summary'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>Example description</description>
-<summary>Example summary</summary>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_br.xml b/lib/feedparser/tests/wellformed/rss/item_description_br.xml
deleted file mode 100644
index 19a5a121c84c2e817c639f8d820101bb009324de..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_br.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains both <br/> and <br />
-Expect:      not bozo and entries[0]['description'] == u'article title<br /><br /> article byline<br /><br />text of article'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description><![CDATA[article title<br /><br /> article byline<br/><br/>text of article]]></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_br_shorttag.xml b/lib/feedparser/tests/wellformed/rss/item_description_br_shorttag.xml
deleted file mode 100644
index aa11391fc1c854c6ff90fdec9059f148b9df0839..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_br_shorttag.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item description ends with <br />
-Expect:      not bozo and entries[0]['description'] == u'<b>x</b><br />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://www.example.com/</link>
-<description>&lt;b&gt;x&lt;/b&gt;&lt;br/&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_code_br.xml b/lib/feedparser/tests/wellformed/rss/item_description_code_br.xml
deleted file mode 100644
index d5b98d625b937ed4b8b8b59c841dd57cf7af8c4d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_code_br.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item description contains <code> with <br />
-Expect:      not bozo and entries[0]['description'] == u'<code>&lt;br /></code>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://www.example.com/</link>
-<description><![CDATA[<code>&lt;br /></code>]]></description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_escaped_markup.xml b/lib/feedparser/tests/wellformed/rss/item_description_escaped_markup.xml
deleted file mode 100644
index 4f461a30cca0a986917e1a1337b05c9086bb5243..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_escaped_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: escaped markup in item description
-Expect:      not bozo and entries[0]['description'] == u'<p>Example description</p>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;p&gt;Example description&lt;/p&gt;</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_map_summary.xml b/lib/feedparser/tests/wellformed/rss/item_description_map_summary.xml
deleted file mode 100644
index a43ece73f02ebd3f7107dd60ec8140824303d280..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_map_summary.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description is mapped to summary
-Expect:      not bozo and entries[0]['summary'] == u'Example description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>Example description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_naked_markup.xml b/lib/feedparser/tests/wellformed/rss/item_description_naked_markup.xml
deleted file mode 100644
index 95d54460846fde6e898495c0c351be028f776caf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_naked_markup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: naked markup in item description
-Expect:      not bozo and entries[0]['description'] == u'<p>Example description</p>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description><p>Example description</p></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype.xml b/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype.xml
deleted file mode 100644
index 1930555ca2e95755f9983ef87e2f7404ee59a278..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: item description is not a DOCTYPE (but HTML parser thinks it is)
-Expect:      not bozo and entries[0]['description'] == """&lt;!' <a href="foo">"""
--->
-<rss>
-<item>
-<description>&lt;!' &lt;a href="foo"&gt;</description>
-</item>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype2.xml b/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype2.xml
deleted file mode 100644
index a32d25edccb79625bfd92cff144abbd64a7048f5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_description_not_a_doctype2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: item description is not a DOCTYPE (but HTML parser thinks it is)
-Expect:      not bozo and entries[0]['description'] == "<!DOCTYPE"
--->
-<rss>
-<item>
-<description><![CDATA[ <!DOCTYPE ]]></description>
-</item>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_length.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_length.xml
deleted file mode 100644
index 5f0f72fecdca1191842885a4d8e5dd6f48a8d9d6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_enclosure_length.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item enclosure length
-Expect:      not bozo and entries[0]['enclosures'][0]['length'] == u'100000'
--->
-<rss version="2.0">
-<channel>
-<item>
-<enclosure url="http://example.com/" length="100000" type="image/jpeg" />
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_multiple.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_multiple.xml
deleted file mode 100644
index 0e40abd03cbb71e5098c1f6ecb0fcae0a344f8bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_enclosure_multiple.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: multiple enclosures
-Expect:      not bozo and entries[0]['enclosures'][1] == {'href': u'http://example.com/2', 'length': u'200000', 'type': u'image/gif'}
--->
-<rss version="2.0">
-<channel>
-<item>
-<enclosure url="http://example.com/1" length="100000" type="image/jpeg" />
-<enclosure url="http://example.com/2" length="200000" type="image/gif" />
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_type.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_type.xml
deleted file mode 100644
index 3b191c6db4d7927c242057c6d40c88e831b2ca0c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_enclosure_type.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item enclosure type
-Expect:      not bozo and entries[0]['enclosures'][0]['type'] == u'image/jpeg'
--->
-<rss version="2.0">
-<channel>
-<item>
-<enclosure url="http://example.com/" length="100000" type="image/jpeg" />
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_enclosure_url.xml b/lib/feedparser/tests/wellformed/rss/item_enclosure_url.xml
deleted file mode 100644
index b5da8cd5a05f4745985538147461a5db4a1b4da3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_enclosure_url.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item enclosure url
-Expect:      not bozo and entries[0]['enclosures'][0]['url'] == u'http://example.com/' and entries[0]['links'][0]['rel'] == 'enclosure'
--->
-<rss version="2.0">
-<channel>
-<item>
-<enclosure url="http://example.com/" length="100000" type="image/jpeg" />
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_expirationDate.xml b/lib/feedparser/tests/wellformed/rss/item_expirationDate.xml
deleted file mode 100644
index c4738acdc4afa09385b52547f365aed80ef10c32..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_expirationDate.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item expirationDate
-Expect:      not bozo and entries[0]['expired'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<rss version="0.93">
-<channel>
-<item>
-<expirationDate>Thu, 01 Jan 2004 19:48:21 GMT</expirationDate>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_expirationDate_multiple_values.xml b/lib/feedparser/tests/wellformed/rss/item_expirationDate_multiple_values.xml
deleted file mode 100644
index 59a099f633df5dbac35c2ff465efebd4783aafd2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_expirationDate_multiple_values.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item expirationDate with multiple values
-Expect:      not bozo and entries[0]['expired_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<rss version="0.93">
-<channel>
-<item>
-<expirationDate>Wed, 01 Dec 2010 19:48:21 GMT</expirationDate>
-<expirationDate>Thu, 01 Jan 2004 19:48:21 GMT</expirationDate>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_expirationDate_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_expirationDate_parsed.xml
deleted file mode 100644
index 39ec50d679031f2f1280a71020486f3c36c2a853..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_expirationDate_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item expirationDate parsed
-Expect:      not bozo and entries[0]['expired_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<rss version="0.93">
-<channel>
-<item>
-<expirationDate>Thu, 01 Jan 2004 19:48:21 GMT</expirationDate>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_fullitem.xml b/lib/feedparser/tests/wellformed/rss/item_fullitem.xml
deleted file mode 100644
index afe454b9e8e17b96fad1bcf0f5a310c5e79498ab..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_fullitem.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: fullitem
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<p>Example content</p>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;p&gt;Example content&lt;/p&gt;</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_fullitem_mode.xml b/lib/feedparser/tests/wellformed/rss/item_fullitem_mode.xml
deleted file mode 100644
index bc14adaa1f9ddbce8071c349329ab512e4eaa2cd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_fullitem_mode.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: fullitem mode
-Expect:      1
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;p&gt;Example content&lt;/p&gt;</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_fullitem_type.xml b/lib/feedparser/tests/wellformed/rss/item_fullitem_type.xml
deleted file mode 100644
index f667d695b100fe8dc984e6fd0f2c198e4607abd7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_fullitem_type.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: fullitem type
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'text/html'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;p&gt;Example content&lt;/p&gt;</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid.xml b/lib/feedparser/tests/wellformed/rss/item_guid.xml
deleted file mode 100644
index 52ed08439c6ba335e5922cab975e3bb98a341d47..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item guid
-Expect:      not bozo and entries[0]['guid'] == u'http://guid.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid>http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_conflict_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_conflict_link.xml
deleted file mode 100644
index b579c3cd4c1162c4401dd55aebd816c0610f67cc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_conflict_link.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item guid does not override link
-Expect:      not bozo and entries[0]['link'] == u'http://link.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://link.example.com/</link>
-<guid>http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_guidislink.xml
deleted file mode 100644
index 1f9705e87e3cdf59d0b1ac528f1ec5fa22807462..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_guidislink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: guidislink
-Expect:      not bozo and entries[0]['guidislink']
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid>http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link.xml
deleted file mode 100644
index 64bd5753f34a6630032515182cb8e955889506f1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item guid does not override link even if isPermaLink="true"
-Expect:      not bozo and entries[0]['link'] == u'http://link.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://link.example.com/</link>
-<guid isPermaLink="true">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link_not_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link_not_guidislink.xml
deleted file mode 100644
index d8505fb1e61630992aa72c6b956980077c7b8e4d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_conflict_link_not_guidislink.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: not guidislink when link present (even if isPermaLink="true")
-Expect:      not bozo and not entries[0]['guidislink']
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://link.example.com/</link>
-<guid isPermaLink="true">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_guidislink.xml
deleted file mode 100644
index bed21fec3ad7486d10a090146facbda54a42ed88..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_guidislink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: guidislink when isPermaLink="true"
-Expect:      not bozo and entries[0]['guidislink']
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid isPermaLink="true">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_map_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_map_link.xml
deleted file mode 100644
index ce2e90cb53b0eddbc2b6f9a194535ced418e7ab0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_isPermaLink_map_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item guid maps to link when isPermaLink="true"
-Expect:      not bozo and entries[0]['link'] == u'http://guid.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid isPermaLink="true">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_map_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_map_link.xml
deleted file mode 100644
index bb778e79aa4111cf43bbed18905566b8626957cb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_map_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item guid maps to link
-Expect:      not bozo and entries[0]['link'] == u'http://guid.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid>http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink.xml
deleted file mode 100644
index 79f20e247f7581d9bc9969d2cffff243950c1933..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item guid not permalink is not duplicated into link
-Expect:      not bozo and not entries[0].has_key('link')
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid isPermaLink="false">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_conflict_link.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_conflict_link.xml
deleted file mode 100644
index 5f16a2923e92ccfe9e4894de916b3c0cbbc272da..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_conflict_link.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item guid (not permalink) is not duplicated into link
-Expect:      not bozo and entries[0]['link'] == u'http://link.example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://link.example.com/</link>
-<guid isPermaLink="false">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink.xml
deleted file mode 100644
index c25de446d2f5349a5cc8816ee2eb3b01db6b5042..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: not guidislink since item guid is not permalink
-Expect:      not bozo and not entries[0]['guidislink']
--->
-<rss version="2.0">
-<channel>
-<item>
-<guid isPermaLink="false">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink_2.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink_2.xml
deleted file mode 100644
index 7052b455ab2c964b83bc044e8ba781f3e38a6ffc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_guidislink_2.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: not guidislink because guid is not permalink
-Expect:      not bozo and not entries[0]['guidislink']
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://link.example.com/</link>
-<guid isPermaLink="false">http://guid.example.com/</guid>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_url.xml b/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_url.xml
deleted file mode 100644
index cb9e82d3584c43141b0a7423708b8c3c39395f44..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_guid_not_permalink_not_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item guid not permalink is not resolved as a URL
-Expect:      not bozo and entries[0]['id'] == u'abc'
--->
-<rss version="2.0" xml:base="http://dom.test/">
-<channel>
-<item>
-<guid isPermaLink="false">abc</guid>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_image_link_bleed.xml b/lib/feedparser/tests/wellformed/rss/item_image_link_bleed.xml
deleted file mode 100644
index ae5b9864f5a1cee0563480bdff15e1436851f650..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_image_link_bleed.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-Description: image link does not bleed into item link array
-Expect: not bozo and len(entries[0]['links']) == 1
--->
-<rss version="2.0">
-<channel>
-    <item>
-        <link>http://item.TEST/</link>
-        <image>
-            <link>http://item.TEST/imagelink</link>
-        </image>
-    </item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_image_link_conflict.xml b/lib/feedparser/tests/wellformed/rss/item_image_link_conflict.xml
deleted file mode 100644
index 3fa86ae7ddfec1ccb3b4dcca8c61477bc281d13b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_image_link_conflict.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-Description: image link does not conflict with item link
-Expect: not bozo and entries[0]['link'] == u'http://item.TEST/'
--->
-<rss version="2.0">
-<channel>
-    <item>
-        <link>http://item.TEST/</link>
-        <image>
-            <link>http://item.TEST/imagelink</link>
-        </image>
-    </item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_link.xml b/lib/feedparser/tests/wellformed/rss/item_link.xml
deleted file mode 100644
index f56a3d4c7ff0e32a2dd787c5a02d1907e78ef457..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item link
-Expect:      not bozo and entries[0]['link'] == u'http://example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<link>http://example.com/</link>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_pubDate.xml b/lib/feedparser/tests/wellformed/rss/item_pubDate.xml
deleted file mode 100644
index 23c3c89662e5461e49a89b170f448a8ba93d16bd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_pubDate.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item pubDate
-Expect:      not bozo and entries[0]['published'] == u'Thu, 01 Jan 2004 19:48:21 GMT'
--->
-<rss version="2.0">
-<channel>
-<item>
-<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_pubDate_map_updated_parsed.xml b/lib/feedparser/tests/wellformed/rss/item_pubDate_map_updated_parsed.xml
deleted file mode 100644
index 32db8be4baa44e09a3b175e90dcc51f8bb76be97..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_pubDate_map_updated_parsed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item pubDate parsed and mapped to published_parsed
-Expect:      not bozo and entries[0]['published_parsed'] == (2004, 1, 1, 19, 48, 21, 3, 1, 0)
--->
-<rss version="2.0">
-<channel>
-<item>
-<pubDate>Thu, 01 Jan 2004 19:48:21 GMT</pubDate>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_source.xml b/lib/feedparser/tests/wellformed/rss/item_source.xml
deleted file mode 100644
index 12b7745e1af284543c83497f6c4831eb7c698c98..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_source.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item source
-Expect:      not bozo and entries[0]['source']['title'] == 'Example source'
--->
-<rss version="2.0">
-<channel>
-<item>
-<source url="http://example.com/">Example source</source>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_source_url.xml b/lib/feedparser/tests/wellformed/rss/item_source_url.xml
deleted file mode 100644
index c5f235a4f13528e99bff33b75805e975f89508db..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_source_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item source url
-Expect:      not bozo and entries[0].source.href == u'http://example.com/'
--->
-<rss version="2.0">
-<channel>
-<item>
-<source url="http://example.com/">Example source</source>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/item_summary_and_description.xml b/lib/feedparser/tests/wellformed/rss/item_summary_and_description.xml
deleted file mode 100644
index 9fd152f0b680034a96dd6d083ae7e54db8584122..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_summary_and_description.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: item contains both summary and description elements
-Expect:      not bozo and entries[0]['summary'] == u'Example summary' and entries[0]['content'][0]['value'] == u'Example description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<summary>Example summary</summary>
-<description>Example description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_title.xml b/lib/feedparser/tests/wellformed/rss/item_title.xml
deleted file mode 100644
index b0d62660df28a7955fbd7fd1420c9cb402092da2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_title.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item title
-Expect:      not bozo and entries[0]['title'] == u'Item 1 title'
--->
-<rss version="2.0">
-<channel>
-<item>
-<title>Item 1 title</title>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_xhtml_body.xml b/lib/feedparser/tests/wellformed/rss/item_xhtml_body.xml
deleted file mode 100644
index cf41c29a69f97f9f51827610f359aecd129c9b10..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_xhtml_body.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: xhtml:body
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<p>Example content</p>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p>Example content</p>
-</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_mode.xml b/lib/feedparser/tests/wellformed/rss/item_xhtml_body_mode.xml
deleted file mode 100644
index 5d30b0f2e78cd899e10229d9eb268ea30e6902c7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_mode.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: xhtml:body mode
-Expect:      1
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p>Example content</p>
-</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_type.xml b/lib/feedparser/tests/wellformed/rss/item_xhtml_body_type.xml
deleted file mode 100644
index ded661a08f042711f0f58fa47a1d3782a7fa6d66..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/item_xhtml_body_type.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!--
-Description: xhtml:body type
-Expect:      not bozo and entries[0]['content'][0]['type'] == u'application/xhtml+xml'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">
-<p>Example content</p>
-</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/newlocation.xml b/lib/feedparser/tests/wellformed/rss/newlocation.xml
deleted file mode 100644
index b6b9923940615ff7c165721dbe48df8b72c8e497..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/newlocation.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: rss newLocation
-Expect: not bozo and feed.newlocation == u'http://example/new'
--->
-<rss version="2.0">
-<redirect>
-   <newLocation>http://example/new</newLocation>
-</redirect>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_1.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_1.xml
deleted file mode 100644
index 9f583c69167680174cb54dfc771caa551c8063a3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_namespace_1.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: RSS Userland namespace #1
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rss xmlns="http://backend.userland.com/rss">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_2.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_2.xml
deleted file mode 100644
index 38af22008a308162b4a459a5ec7b8b1dbf650793..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_namespace_2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: RSS Userland namespace #2
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rss xmlns="http://backend.userland.com/rss2">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_3.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_3.xml
deleted file mode 100644
index 8bd75469b5138549c504ca97a8c0381aec016bd2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_namespace_3.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: RSS Userland namespace #3
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rss xmlns="http://backend.userland.com/rss2.1">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_namespace_4.xml b/lib/feedparser/tests/wellformed/rss/rss_namespace_4.xml
deleted file mode 100644
index 52dc603eba4e35db8f03416d64d5f98d95a06a93..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_namespace_4.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: RSS Userland namespace #4
-Expect:      not bozo and feed['description'] == u'Example description'
--->
-<rss xmlns="http://blogs.law.harvard.edu/tech/rss">
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_090.xml b/lib/feedparser/tests/wellformed/rss/rss_version_090.xml
deleted file mode 100644
index a73e246b2003e198b3c8142bf61219e9c72a9b67..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_090.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 0.90
-Expect:      not bozo and version == u'rss090'
--->
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://my.netscape.com/rdf/simple/0.9/">
-</rdf:RDF>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_091_netscape.xml b/lib/feedparser/tests/wellformed/rss/rss_version_091_netscape.xml
deleted file mode 100644
index fbcc15cec610bded502cf5c2d91871fbd457a10f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_091_netscape.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: RSS version 0.91 (Netscape)
-Expect:      not bozo and version == u'rss091n'
--->
-<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">
-<rss version="0.91">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_091_userland.xml b/lib/feedparser/tests/wellformed/rss/rss_version_091_userland.xml
deleted file mode 100644
index ee9f1cc353ec03dc5d49275158bfa69f6b4a2295..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_091_userland.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 0.91 (Userland)
-Expect:      not bozo and version == u'rss091u'
--->
-<rss version="0.91">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_092.xml b/lib/feedparser/tests/wellformed/rss/rss_version_092.xml
deleted file mode 100644
index 3f3b82ad4e1ba1f16671d448e4722be3833fdddb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_092.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 0.92
-Expect:      not bozo and version == u'rss092'
--->
-<rss version="0.92">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_093.xml b/lib/feedparser/tests/wellformed/rss/rss_version_093.xml
deleted file mode 100644
index 5855af68cc4cf505fddebf329f0b62ce830fc3df..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_093.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 0.93
-Expect:      not bozo and version == u'rss093'
--->
-<rss version="0.93">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_094.xml b/lib/feedparser/tests/wellformed/rss/rss_version_094.xml
deleted file mode 100644
index 8b03e17d92b7c29964bbb79ef1f54090b661c9bc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_094.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 0.94
-Expect:      not bozo and version == u'rss094'
--->
-<rss version="0.94">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_20.xml b/lib/feedparser/tests/wellformed/rss/rss_version_20.xml
deleted file mode 100644
index 56ffbdde0184dc7fd9e939e1e9846988daaa61ac..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_20.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 2.0
-Expect:      not bozo and version == u'rss20'
--->
-<rss version="2.0">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_201.xml b/lib/feedparser/tests/wellformed/rss/rss_version_201.xml
deleted file mode 100644
index 749659793ffefd4306626810c2cc9b273b852856..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_201.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 2.01
-Expect:      not bozo and version == u'rss20'
--->
-<rss version="2.01">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_21.xml b/lib/feedparser/tests/wellformed/rss/rss_version_21.xml
deleted file mode 100644
index b7d45ef75810308a34ed1671bb7c43523fb8909a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_21.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
-Description: RSS version 2.1
-Expect:      not bozo and version == u'rss20'
--->
-<rss version="2.1">
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/rss/rss_version_missing.xml b/lib/feedparser/tests/wellformed/rss/rss_version_missing.xml
deleted file mode 100644
index e6440d8810a6a2456029677961707e1cd2ebce29..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/rss/rss_version_missing.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: missing RSS version number
-Expect:      not bozo and version == u'rss'
--->
-<rss>
-<channel>
-<description>Example description</description>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_abbr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_abbr.xml
deleted file mode 100644
index 71c1aa744efe3faa0f9606f28f475c7b4f5ef8af..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_abbr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain abbr attribute
-Expect:       not bozo and entries[0]['description'] == '<span abbr=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span abbr=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept-charset.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept-charset.xml
deleted file mode 100644
index 28c8497760695ee4f508ea14332c4a5a6b87f9f6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept-charset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain accept-charset attribute
-Expect:       not bozo and entries[0]['description'] == '<span accept-charset=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span accept-charset=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept.xml
deleted file mode 100644
index 9eaee23358d4b739d82a849c453e807bdd33ee50..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accept.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain accept attribute
-Expect:       not bozo and entries[0]['description'] == '<span accept=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span accept=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accesskey.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accesskey.xml
deleted file mode 100644
index dd41be8684831d21bd66706c83ccf5bc0fb8620e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_accesskey.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain accesskey attribute
-Expect:       not bozo and entries[0]['description'] == '<span accesskey=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span accesskey=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_action.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_action.xml
deleted file mode 100644
index fa15e1e951da852fbce5cae84cdf8333a24551f4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_action.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain action attribute
-Expect:       not bozo and entries[0]['description'] == '<span action=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span action=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_align.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_align.xml
deleted file mode 100644
index 9d1c53b74b5f60251425a7b346e607d9d9253d34..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_align.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain align attribute
-Expect:       not bozo and entries[0]['description'] == '<span align=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span align=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_alt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_alt.xml
deleted file mode 100644
index 88c0b19434d46a49490e27434736374e7fc3a36b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_alt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain alt attribute
-Expect:       not bozo and entries[0]['description'] == '<span alt=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span alt=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autocomplete.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autocomplete.xml
deleted file mode 100644
index 71399464bcd9642a96aefbe6b2e168af3c74d02f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autocomplete.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain autocomplete attribute
-Expect:       not bozo and entries[0]['description'] == '<span autocomplete=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span autocomplete=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autofocus.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autofocus.xml
deleted file mode 100644
index 77cd3fa3462e722233707f50fc880d27e6dbc78e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autofocus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain autofocus attribute
-Expect:       not bozo and entries[0]['description'] == '<span autofocus=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span autofocus=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autoplay.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autoplay.xml
deleted file mode 100644
index 0d872934386c01909203f83c65cd7f84cd23a5c9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_autoplay.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain autoplay attribute
-Expect:       not bozo and entries[0]['description'] == '<span></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span autoplay=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_axis.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_axis.xml
deleted file mode 100644
index 2d3232f1fc652a798a2b8ee2ac9652d506df3609..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_axis.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain axis attribute
-Expect:       not bozo and entries[0]['description'] == '<span axis=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span axis=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_background.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_background.xml
deleted file mode 100644
index bc0fb9b94850ed0b22bb8bc33b47c99c53fb6504..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_background.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain background attribute
-Expect:       not bozo and entries[0]['description'] == '<span background=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span background=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_balance.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_balance.xml
deleted file mode 100644
index 9a9dfc74128888df54fd3c46738714dc19ed4eeb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_balance.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain balance attribute
-Expect:       not bozo and entries[0]['description'] == '<span balance=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span balance=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgcolor.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgcolor.xml
deleted file mode 100644
index efc9f5c3599f6eac6f4213f32b0809b5c2a6a8bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgcolor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bgcolor attribute
-Expect:       not bozo and entries[0]['description'] == '<span bgcolor=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bgcolor=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgproperties.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgproperties.xml
deleted file mode 100644
index 8f964272e93362c0f303f64f968a89b76cd011df..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bgproperties.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bgproperties attribute
-Expect:       not bozo and entries[0]['description'] == '<span bgproperties=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bgproperties=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_border.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_border.xml
deleted file mode 100644
index 80b118dd9d6f6bcf085295cc8b024a513a55a35b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_border.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain border attribute
-Expect:       not bozo and entries[0]['description'] == '<span border=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span border=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolor.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolor.xml
deleted file mode 100644
index 5b314be88a4f7e04d7ac80ee10b132195ff67eb2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolor.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bordercolor attribute
-Expect:       not bozo and entries[0]['description'] == '<span bordercolor=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bordercolor=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolordark.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolordark.xml
deleted file mode 100644
index 5913ffabb71daa6733af1cbe6421c043f4843498..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolordark.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bordercolordark attribute
-Expect:       not bozo and entries[0]['description'] == '<span bordercolordark=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bordercolordark=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolorlight.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolorlight.xml
deleted file mode 100644
index 4883e64a6571b01561822b34226990d43a058365..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bordercolorlight.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bordercolorlight attribute
-Expect:       not bozo and entries[0]['description'] == '<span bordercolorlight=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bordercolorlight=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bottompadding.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bottompadding.xml
deleted file mode 100644
index beaad75f1a0ba39d34c5c81aea8c8e3d49163142..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_bottompadding.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain bottompadding attribute
-Expect:       not bozo and entries[0]['description'] == '<span bottompadding=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span bottompadding=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellpadding.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellpadding.xml
deleted file mode 100644
index 27c4df18b5d239274e1e0b233beedfa3e2fd7302..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellpadding.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain cellpadding attribute
-Expect:       not bozo and entries[0]['description'] == '<span cellpadding=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span cellpadding=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellspacing.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellspacing.xml
deleted file mode 100644
index 4043ac5cf496cf57ec70679fdd11bba4d4ed96e0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cellspacing.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain cellspacing attribute
-Expect:       not bozo and entries[0]['description'] == '<span cellspacing=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span cellspacing=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ch.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ch.xml
deleted file mode 100644
index e1dcbcec6c30894dc60abad8103170ab2cd84774..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ch.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain ch attribute
-Expect:       not bozo and entries[0]['description'] == '<span ch=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span ch=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_challenge.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_challenge.xml
deleted file mode 100644
index 2eb2869ca7de7fdb302c9f622f47452d4f8987f6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_challenge.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain challenge attribute
-Expect:       not bozo and entries[0]['description'] == '<span challenge=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span challenge=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_char.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_char.xml
deleted file mode 100644
index 31d30b4ea66e5663c7293d87096e59322aec32ea..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_char.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain char attribute
-Expect:       not bozo and entries[0]['description'] == '<span char=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span char=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charoff.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charoff.xml
deleted file mode 100644
index 4f866340410f3a23ea636cda330b8ef28c4a040d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charoff.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain charoff attribute
-Expect:       not bozo and entries[0]['description'] == '<span charoff=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span charoff=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charset.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charset.xml
deleted file mode 100644
index 85d2a1fb1c9993606e23e469fcf2beb67ac81d7b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_charset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain charset attribute
-Expect:       not bozo and entries[0]['description'] == '<span charset=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span charset=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_checked.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_checked.xml
deleted file mode 100644
index 259e17c75bd37b5a03f8fcc09c19842947a44e11..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_checked.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain checked attribute
-Expect:       not bozo and entries[0]['description'] == '<span checked=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span checked=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_choff.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_choff.xml
deleted file mode 100644
index 2e3e79bfe7afcdcad297c85a4684e19c47e653ee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_choff.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain choff attribute
-Expect:       not bozo and entries[0]['description'] == '<span choff=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span choff=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cite.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cite.xml
deleted file mode 100644
index 5eb0011fa660f733219b57e4b75ccb99bc4d0967..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cite.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain cite attribute
-Expect:       not bozo and entries[0]['description'] == '<span cite=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span cite=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_class.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_class.xml
deleted file mode 100644
index bd2577dbe362abe58a7b72339943640d4b51f642..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_class.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain class attribute
-Expect:       not bozo and entries[0]['description'] == '<span class=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span class=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_clear.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_clear.xml
deleted file mode 100644
index a1a572dc53d9424fc32d6e391a15d4d290874790..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_clear.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain clear attribute
-Expect:       not bozo and entries[0]['description'] == '<span clear=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span clear=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_color.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_color.xml
deleted file mode 100644
index 980ccfc14fc40b764e70f2248a0240682d68759c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_color.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain color attribute
-Expect:       not bozo and entries[0]['description'] == '<span color=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span color=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cols.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cols.xml
deleted file mode 100644
index ceeef598cb783acec5efb36c8c290c8a4065e994..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_cols.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain cols attribute
-Expect:       not bozo and entries[0]['description'] == '<span cols=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span cols=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_colspan.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_colspan.xml
deleted file mode 100644
index eef6cb6c61b2c61bf8c8a933c745872ecc83cbef..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_colspan.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain colspan attribute
-Expect:       not bozo and entries[0]['description'] == '<span colspan=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span colspan=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_compact.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_compact.xml
deleted file mode 100644
index 61a0bbe68101093ec0bbf8f5d5b06c25f47742c9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_compact.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain compact attribute
-Expect:       not bozo and entries[0]['description'] == '<span compact=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span compact=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_contenteditable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_contenteditable.xml
deleted file mode 100644
index 328c6249b3af554ef074504c4fc6e91ba62334d2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_contenteditable.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain contenteditable attribute
-Expect:       not bozo and entries[0]['description'] == '<span contenteditable=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span contenteditable=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_coords.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_coords.xml
deleted file mode 100644
index 9d389fb687e4146fbb407f450210c9593fd12574..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_coords.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain coords attribute
-Expect:       not bozo and entries[0]['description'] == '<span coords=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span coords=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_data.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_data.xml
deleted file mode 100644
index 537d331eae30cfa53f9cd32876f907151f22f8d5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_data.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain data attribute
-Expect:       not bozo and entries[0]['description'] == '<span data=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span data=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datafld.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datafld.xml
deleted file mode 100644
index 44837182d12505283f49609366c25b11d2820e04..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datafld.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain datafld attribute
-Expect:       not bozo and entries[0]['description'] == '<span datafld=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span datafld=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datapagesize.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datapagesize.xml
deleted file mode 100644
index 4093280af61b0f2e060703b3745a4a3826f433db..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datapagesize.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain datapagesize attribute
-Expect:       not bozo and entries[0]['description'] == '<span datapagesize=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span datapagesize=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datasrc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datasrc.xml
deleted file mode 100644
index 3d86946b95664b1dc62b962d5618f852f90e2ad8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datasrc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain datasrc attribute
-Expect:       not bozo and entries[0]['description'] == '<span datasrc=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span datasrc=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datetime.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datetime.xml
deleted file mode 100644
index 6554045bd4f31ea7d059108b98386c20a4c615a9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_datetime.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain datetime attribute
-Expect:       not bozo and entries[0]['description'] == '<span datetime=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span datetime=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_default.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_default.xml
deleted file mode 100644
index 17829c043b2cae35b0a1adb1d1acae3bce535d58..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_default.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain default attribute
-Expect:       not bozo and entries[0]['description'] == '<span default=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span default=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_delay.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_delay.xml
deleted file mode 100644
index ee7777d7260fb0b49269c13f5b880f3a209b2e59..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_delay.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain delay attribute
-Expect:       not bozo and entries[0]['description'] == '<span delay=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span delay=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dir.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dir.xml
deleted file mode 100644
index c0618cc1e044685b28f8308f1b16d6012fe12993..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dir.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain dir attribute
-Expect:       not bozo and entries[0]['description'] == '<span dir=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span dir=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_disabled.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_disabled.xml
deleted file mode 100644
index aa9194a9e554d51b00d8a9aeb69783b42f487a98..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_disabled.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain disabled attribute
-Expect:       not bozo and entries[0]['description'] == '<span disabled=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span disabled=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_draggable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_draggable.xml
deleted file mode 100644
index 88720d3d997ef5074bdde8570ac81d31009036e1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_draggable.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain draggable attribute
-Expect:       not bozo and entries[0]['description'] == '<span draggable=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span draggable=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dynsrc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dynsrc.xml
deleted file mode 100644
index c57ccb7649b6957ce7b17848d8a0fc3cfbb10bbe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_dynsrc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain dynsrc attribute
-Expect:       not bozo and entries[0]['description'] == '<span dynsrc=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span dynsrc=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_enctype.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_enctype.xml
deleted file mode 100644
index ab50610ae5915a212db2978b824e961939cb0906..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_enctype.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain enctype attribute
-Expect:       not bozo and entries[0]['description'] == '<span enctype=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span enctype=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_end.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_end.xml
deleted file mode 100644
index 22cc29e443f5e40c2613a8a7ec400debd0c0f7d3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_end.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain end attribute
-Expect:       not bozo and entries[0]['description'] == '<span end=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span end=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_face.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_face.xml
deleted file mode 100644
index 6c595b0357d7895c737650d8b3eacaf4a395c821..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_face.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain face attribute
-Expect:       not bozo and entries[0]['description'] == '<span face=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span face=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_for.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_for.xml
deleted file mode 100644
index 2b08493f5347163f029bc9f5b457d506b51aed4d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_for.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain for attribute
-Expect:       not bozo and entries[0]['description'] == '<span for=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span for=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_form.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_form.xml
deleted file mode 100644
index 4b37f62c9d5961651b90bf10b65f7aa87efe349c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_form.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain form attribute
-Expect:       not bozo and entries[0]['description'] == '<span form=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span form=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_frame.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_frame.xml
deleted file mode 100644
index ed8d85a2253670b12645e7b3701684d945e62e16..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_frame.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain frame attribute
-Expect:       not bozo and entries[0]['description'] == '<span frame=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span frame=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_galleryimg.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_galleryimg.xml
deleted file mode 100644
index f46682585bca4f5ccbedea0a59a3658d1f7b0778..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_galleryimg.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain galleryimg attribute
-Expect:       not bozo and entries[0]['description'] == '<span galleryimg=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span galleryimg=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_gutter.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_gutter.xml
deleted file mode 100644
index ed5a8f5a697cab96c3894ed53a1795c570a46add..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_gutter.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain gutter attribute
-Expect:       not bozo and entries[0]['description'] == '<span gutter=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span gutter=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_headers.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_headers.xml
deleted file mode 100644
index 6e805fcce946536e604b61b329f2ede94d33e1f6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_headers.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain headers attribute
-Expect:       not bozo and entries[0]['description'] == '<span headers=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span headers=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_height.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_height.xml
deleted file mode 100644
index 881636bc43c48376ad92ba4e4b4e3235a488c6fe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_height.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain height attribute
-Expect:       not bozo and entries[0]['description'] == '<span height=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span height=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidden.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidden.xml
deleted file mode 100644
index 7e45d5b42335590e154f17e4c73d076968147c53..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidden.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain hidden attribute
-Expect:       not bozo and entries[0]['description'] == '<span hidden=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span hidden=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidefocus.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidefocus.xml
deleted file mode 100644
index b1ae3e0832348faa81aa6a3c60e147c9d88dfb8c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hidefocus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain hidefocus attribute
-Expect:       not bozo and entries[0]['description'] == '<span hidefocus=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span hidefocus=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_high.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_high.xml
deleted file mode 100644
index b89160b75777d34fe6df985fe53d9f6aa06cc840..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_high.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain high attribute
-Expect:       not bozo and entries[0]['description'] == '<span high=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span high=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_href.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_href.xml
deleted file mode 100644
index 4382e9fca3127f302b83e3dd3779d267f5569d61..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_href.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain href attribute
-Expect:       not bozo and entries[0]['description'] == '<span href=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span href=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hreflang.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hreflang.xml
deleted file mode 100644
index a48b42f33fb7161383a953c75582d53156c29288..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hreflang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain hreflang attribute
-Expect:       not bozo and entries[0]['description'] == '<span hreflang=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span hreflang=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hspace.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hspace.xml
deleted file mode 100644
index c08a60273c23f1492ac228e3e299ce1eb860d9cf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_hspace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain hspace attribute
-Expect:       not bozo and entries[0]['description'] == '<span hspace=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span hspace=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_icon.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_icon.xml
deleted file mode 100644
index 444a6b8f1179081c75e2718b131598b359eec5be..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_icon.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain icon attribute
-Expect:       not bozo and entries[0]['description'] == '<span icon=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span icon=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_id.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_id.xml
deleted file mode 100644
index d9f93a8428cc655cad7348724b1875a84736e76d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_id.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain id attribute
-Expect:       not bozo and entries[0]['description'] == '<span id=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span id=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_inputmode.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_inputmode.xml
deleted file mode 100644
index b09563904a2a7b61ce9242243d2c31d916989e9a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_inputmode.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain inputmode attribute
-Expect:       not bozo and entries[0]['description'] == '<span inputmode=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span inputmode=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ismap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ismap.xml
deleted file mode 100644
index eda48b6ef801c06ddae4a0224317b80a7999e3ee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ismap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain ismap attribute
-Expect:       not bozo and entries[0]['description'] == '<span ismap=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span ismap=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_keytype.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_keytype.xml
deleted file mode 100644
index 074727b9d0ca315c6aa25b7badda1d48f79f195e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_keytype.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain keytype attribute
-Expect:       not bozo and entries[0]['description'] == '<span keytype=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span keytype=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_label.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_label.xml
deleted file mode 100644
index 340a4c389803b06cff47f45215ab8ef3b636f3af..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_label.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain label attribute
-Expect:       not bozo and entries[0]['description'] == '<span label=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span label=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lang.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lang.xml
deleted file mode 100644
index 2d7e5261e5e23ec61788fea90feea4d1a530d899..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lang.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain lang attribute
-Expect:       not bozo and entries[0]['description'] == '<span lang=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span lang=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_leftspacing.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_leftspacing.xml
deleted file mode 100644
index a6432e0cd5a98c7c4071c75b60d51c177ddcbf0b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_leftspacing.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain leftspacing attribute
-Expect:       not bozo and entries[0]['description'] == '<span leftspacing=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span leftspacing=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_list.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_list.xml
deleted file mode 100644
index 360b27f81822f29d000c8f6a7e4175014b7b387b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_list.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain list attribute
-Expect:       not bozo and entries[0]['description'] == '<span list=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span list=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_longdesc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_longdesc.xml
deleted file mode 100644
index 97b7d94122a3d94a41b1eea5a94dca02fe5ce807..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_longdesc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain longdesc attribute
-Expect:       not bozo and entries[0]['description'] == '<span longdesc=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span longdesc=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loop.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loop.xml
deleted file mode 100644
index 8201f52dc9da874e0c720a03ecd5cebef42509a2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loop.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain loop attribute
-Expect:       not bozo and entries[0]['description'] == '<span loop=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span loop=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopcount.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopcount.xml
deleted file mode 100644
index 8bde8e88866ba305fe4c0b164837aa535f0a2bca..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopcount.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain loopcount attribute
-Expect:       not bozo and entries[0]['description'] == '<span loopcount=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span loopcount=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopend.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopend.xml
deleted file mode 100644
index fa608d175727210dc0e31922b962beb219c6f519..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopend.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain loopend attribute
-Expect:       not bozo and entries[0]['description'] == '<span loopend=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span loopend=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopstart.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopstart.xml
deleted file mode 100644
index f11901278dfd5f6347daf77e66cab637abb67256..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_loopstart.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain loopstart attribute
-Expect:       not bozo and entries[0]['description'] == '<span loopstart=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span loopstart=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_low.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_low.xml
deleted file mode 100644
index 8ec062fe61fbf47aa335115664a5358345230410..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_low.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain low attribute
-Expect:       not bozo and entries[0]['description'] == '<span low=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span low=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lowsrc.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lowsrc.xml
deleted file mode 100644
index a4258e36e2e894b72b3b863d3a0dc9202d14a261..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_lowsrc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain lowsrc attribute
-Expect:       not bozo and entries[0]['description'] == '<span lowsrc=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span lowsrc=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_max.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_max.xml
deleted file mode 100644
index 80cbaebad58cebb89cb3240c72c44d75c320e491..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_max.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain max attribute
-Expect:       not bozo and entries[0]['description'] == '<span max=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span max=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_maxlength.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_maxlength.xml
deleted file mode 100644
index ad16126e3d32daa3b84154880f817c6f6f485405..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_maxlength.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain maxlength attribute
-Expect:       not bozo and entries[0]['description'] == '<span maxlength=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span maxlength=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_media.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_media.xml
deleted file mode 100644
index daeea441760e8fb6125a608c8c19fe7a413d4104..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_media.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain media attribute
-Expect:       not bozo and entries[0]['description'] == '<span media=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span media=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_method.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_method.xml
deleted file mode 100644
index c3a81ce5537f2dadba96b5b8af5b109c22ebf608..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_method.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain method attribute
-Expect:       not bozo and entries[0]['description'] == '<span method=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span method=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_min.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_min.xml
deleted file mode 100644
index ad28c081f582418a0db7716775b70f89c4189e88..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_min.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain min attribute
-Expect:       not bozo and entries[0]['description'] == '<span min=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span min=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_multiple.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_multiple.xml
deleted file mode 100644
index ef1e17ac005504a746af948eb9bf1ba29f11b7c6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_multiple.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain multiple attribute
-Expect:       not bozo and entries[0]['description'] == '<span multiple=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span multiple=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_name.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_name.xml
deleted file mode 100644
index 0f98d769691a741eb66f2458f4d1fd8bcd3e3278..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_name.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain name attribute
-Expect:       not bozo and entries[0]['description'] == '<span name=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span name=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nohref.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nohref.xml
deleted file mode 100644
index 1b7fb0d966cadc86e483bc2fde4f7f2675264608..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nohref.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain nohref attribute
-Expect:       not bozo and entries[0]['description'] == '<span nohref=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span nohref=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_noshade.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_noshade.xml
deleted file mode 100644
index b1371da35c1a969ab24909259a313d166729d19f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_noshade.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain noshade attribute
-Expect:       not bozo and entries[0]['description'] == '<span noshade=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span noshade=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nowrap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nowrap.xml
deleted file mode 100644
index b312dea07e4d2553ec40ef7bbec5c6f103ccfcb4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_nowrap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain nowrap attribute
-Expect:       not bozo and entries[0]['description'] == '<span nowrap=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span nowrap=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_open.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_open.xml
deleted file mode 100644
index 2f4fc43caae6c065d85fce62a898cd8d80e59b52..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_open.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain open attribute
-Expect:       not bozo and entries[0]['description'] == '<span open=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span open=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_optimum.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_optimum.xml
deleted file mode 100644
index a1220763487dee747e0503b8ff2503757df941d4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_optimum.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain optimum attribute
-Expect:       not bozo and entries[0]['description'] == '<span optimum=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span optimum=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pattern.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pattern.xml
deleted file mode 100644
index c4e10322cf77ea0b7779425ca8cbe7e98e085056..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pattern.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain pattern attribute
-Expect:       not bozo and entries[0]['description'] == '<span pattern=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span pattern=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ping.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ping.xml
deleted file mode 100644
index 03b4f233aff23b27905d1f8ca90e9dc389308a64..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_ping.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain ping attribute
-Expect:       not bozo and entries[0]['description'] == '<span ping=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span ping=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_point-size.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_point-size.xml
deleted file mode 100644
index f6a6713f2f72a82a754259f23c485b84f3851fe0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_point-size.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain point-size attribute
-Expect:       not bozo and entries[0]['description'] == '<span point-size=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span point-size=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_poster.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_poster.xml
deleted file mode 100644
index 4148f5e7078785eb5455898b5f64f3fe917186ce..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_poster.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain poster attribute
-Expect:       not bozo and entries[0]['description'] == '<video poster="http://d.test/p.jpeg"></video>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom" xml:base="http://d.test/">
-<entry>
-<content type="html">&lt;video poster="p.jpeg"&gt;&lt;/video&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pqg.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pqg.xml
deleted file mode 100644
index c2afa36a0f2752548507f3b5f6703a5d2ecc8d5d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_pqg.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain pqg attribute
-Expect:       not bozo and entries[0]['description'] == '<span pqg=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span pqg=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_preload.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_preload.xml
deleted file mode 100644
index 0e26d0914deee5dd4e0bedce927993e453735d28..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_preload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain preload attribute
-Expect:       not bozo and entries[0]['description'] == '<video preload="auto"></video>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;video preload="auto"&gt;&lt;/video&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_prompt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_prompt.xml
deleted file mode 100644
index 86f0d0b6de391d398b68010e3967fbc0a1a16917..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_prompt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain prompt attribute
-Expect:       not bozo and entries[0]['description'] == '<span prompt=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span prompt=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_radiogroup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_radiogroup.xml
deleted file mode 100644
index d575eace63a015de5e8c793eb7dda944c8cc84ca..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_radiogroup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain radiogroup attribute
-Expect:       not bozo and entries[0]['description'] == '<span radiogroup=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span radiogroup=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_readonly.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_readonly.xml
deleted file mode 100644
index f123f839e311aee63696b086ba094eebc21a0993..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_readonly.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain readonly attribute
-Expect:       not bozo and entries[0]['description'] == '<span readonly=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span readonly=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rel.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rel.xml
deleted file mode 100644
index cd09d3085bb3b97ba6a5e392f0973dab3a8859f1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rel.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rel attribute
-Expect:       not bozo and entries[0]['description'] == '<span rel=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rel=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-max.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-max.xml
deleted file mode 100644
index 15b86874252698b93ed9733fe80158cdb495000f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-max.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain repeat-max attribute
-Expect:       not bozo and entries[0]['description'] == '<span repeat-max=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span repeat-max=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-min.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-min.xml
deleted file mode 100644
index 9549f0e42849f64081c5d78116a59bc47c1721a2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_repeat-min.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain repeat-min attribute
-Expect:       not bozo and entries[0]['description'] == '<span repeat-min=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span repeat-min=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_replace.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_replace.xml
deleted file mode 100644
index 2fb1e8c45d2bf438d45347d20b0972e1ff2abb11..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_replace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain replace attribute
-Expect:       not bozo and entries[0]['description'] == '<span replace=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span replace=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_required.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_required.xml
deleted file mode 100644
index 3252c8a492abd44ce1e8ff411c18b86b3870376f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_required.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain required attribute
-Expect:       not bozo and entries[0]['description'] == '<span required=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span required=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rev.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rev.xml
deleted file mode 100644
index 8f56b0267680e656e86966104096ec175587e5b1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rev.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rev attribute
-Expect:       not bozo and entries[0]['description'] == '<span rev=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rev=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rightspacing.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rightspacing.xml
deleted file mode 100644
index 9a90e34acf3110588977fb4c04c83f0b7a677e1d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rightspacing.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rightspacing attribute
-Expect:       not bozo and entries[0]['description'] == '<span rightspacing=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rightspacing=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rows.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rows.xml
deleted file mode 100644
index 6817c543507bf4e7154db1ea3205eaa35d002231..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rows.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rows attribute
-Expect:       not bozo and entries[0]['description'] == '<span rows=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rows=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rowspan.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rowspan.xml
deleted file mode 100644
index daca0671c037831c88b53a289413b7c25e9cd365..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rowspan.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rowspan attribute
-Expect:       not bozo and entries[0]['description'] == '<span rowspan=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rowspan=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rules.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rules.xml
deleted file mode 100644
index 62a718cc8238e1ef00685bfe04009dcac8e4de7a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_rules.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain rules attribute
-Expect:       not bozo and entries[0]['description'] == '<span rules=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span rules=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_scope.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_scope.xml
deleted file mode 100644
index 7ae2c075aab0b7580e956e9e6c8381fec2543b28..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_scope.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain scope attribute
-Expect:       not bozo and entries[0]['description'] == '<span scope=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span scope=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_selected.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_selected.xml
deleted file mode 100644
index e1ff4b1f705e42167239b1860642c504292bf310..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_selected.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain selected attribute
-Expect:       not bozo and entries[0]['description'] == '<span selected=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span selected=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_shape.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_shape.xml
deleted file mode 100644
index 9bcb6923141f4b713597b9141bee84c4b7c42bf6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_shape.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain shape attribute
-Expect:       not bozo and entries[0]['description'] == '<span shape=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span shape=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_size.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_size.xml
deleted file mode 100644
index 5a7d7a98a46e5f4beb2e477935f9965326de1598..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_size.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain size attribute
-Expect:       not bozo and entries[0]['description'] == '<span size=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span size=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_span.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_span.xml
deleted file mode 100644
index e6da56c4c0b45098364625c9333cda4c50de55fa..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_span.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain span attribute
-Expect:       not bozo and entries[0]['description'] == '<span span=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span span=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_src.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_src.xml
deleted file mode 100644
index fd6636bacda3257c060ca8d132cb59ffbe674d15..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_src.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain src attribute
-Expect:       not bozo and entries[0]['description'] == '<span src=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span src=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_start.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_start.xml
deleted file mode 100644
index 81374748722ec027e973003942a8714e2bcf644f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_start.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain start attribute
-Expect:       not bozo and entries[0]['description'] == '<span start=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span start=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_step.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_step.xml
deleted file mode 100644
index 3935b810584429275941ebb12f2856c0ac7e77cb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_step.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain step attribute
-Expect:       not bozo and entries[0]['description'] == '<span step=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span step=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_summary.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_summary.xml
deleted file mode 100644
index 903ccf68e14e7050b1ac03133710a2de5e74b80b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_summary.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain summary attribute
-Expect:       not bozo and entries[0]['description'] == '<span summary=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span summary=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_suppress.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_suppress.xml
deleted file mode 100644
index 9779ee12ebc3b68debadedcdd82cac71a0906d7c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_suppress.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain suppress attribute
-Expect:       not bozo and entries[0]['description'] == '<span suppress=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span suppress=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_tabindex.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_tabindex.xml
deleted file mode 100644
index a6c0ec6e2ddfe9bc85fec5508b548be8e9418935..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_tabindex.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain tabindex attribute
-Expect:       not bozo and entries[0]['description'] == '<span tabindex=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span tabindex=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_target.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_target.xml
deleted file mode 100644
index 3716ecd3f5d94893f52e10bf9e7c53d4e18dcde2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_target.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain target attribute
-Expect:       not bozo and entries[0]['description'] == '<span target=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span target=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_template.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_template.xml
deleted file mode 100644
index b624ee091570966e64cea59755f3664a8ad0af94..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_template.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain template attribute
-Expect:       not bozo and entries[0]['description'] == '<span template=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span template=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_title.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_title.xml
deleted file mode 100644
index 0e8d520703856b370579a3e3059b77ea97cd8368..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_title.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain title attribute
-Expect:       not bozo and entries[0]['description'] == '<span title=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span title=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_toppadding.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_toppadding.xml
deleted file mode 100644
index 248bfbfb3de9cfc80e20b5fd770a61fa40a5422a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_toppadding.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain toppadding attribute
-Expect:       not bozo and entries[0]['description'] == '<span toppadding=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span toppadding=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_type.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_type.xml
deleted file mode 100644
index 7f9479f400df4576545506cf959c75c95c9c7f86..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_type.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain type attribute
-Expect:       not bozo and entries[0]['description'] == '<span type=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span type=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_unselectable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_unselectable.xml
deleted file mode 100644
index 4ef7f63adcbdcc7846e8d4daf4a83afe79960e36..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_unselectable.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain unselectable attribute
-Expect:       not bozo and entries[0]['description'] == '<span unselectable=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span unselectable=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_urn.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_urn.xml
deleted file mode 100644
index ebbcfc5b04071a6884094ebb45229f1cc644b23a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_urn.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain urn attribute
-Expect:       not bozo and entries[0]['description'] == '<span urn=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span urn=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_usemap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_usemap.xml
deleted file mode 100644
index d0a76387d5be8c1119e2c520852e3297238b6ace..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_usemap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain usemap attribute
-Expect:       not bozo and entries[0]['description'] == '<span usemap=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span usemap=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_valign.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_valign.xml
deleted file mode 100644
index 21efa6bf8c11b9ea9e84d37fbe104828cb4e87d0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_valign.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain valign attribute
-Expect:       not bozo and entries[0]['description'] == '<span valign=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span valign=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_value.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_value.xml
deleted file mode 100644
index 56ce060c1832d2073137a3fcad97e345f3aa8078..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_value.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain value attribute
-Expect:       not bozo and entries[0]['description'] == '<span value=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span value=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_variable.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_variable.xml
deleted file mode 100644
index ada4076f1aa3ddf4bc5f601b3be4aefe1ee0439a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_variable.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain variable attribute
-Expect:       not bozo and entries[0]['description'] == '<span variable=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span variable=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_volume.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_volume.xml
deleted file mode 100644
index 058520922edcd7a6e11cbf1818e38cdf522d09a4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_volume.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain volume attribute
-Expect:       not bozo and entries[0]['description'] == '<span volume=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span volume=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vrml.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vrml.xml
deleted file mode 100644
index 50b7a3f4e555f9a4fb23670230e902a5ca126f08..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vrml.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain vrml attribute
-Expect:       not bozo and entries[0]['description'] == '<span vrml=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span vrml=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vspace.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vspace.xml
deleted file mode 100644
index 7eca04f8b86c7b1429317ad8de56728232fdd671..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_vspace.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain vspace attribute
-Expect:       not bozo and entries[0]['description'] == '<span vspace=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span vspace=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_width.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_width.xml
deleted file mode 100644
index c2b4cebe0a4ee9ab6d75903bf4c995db6b0bfedc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_width.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain width attribute
-Expect:       not bozo and entries[0]['description'] == '<span width=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span width=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_wrap.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_wrap.xml
deleted file mode 100644
index 1b23e49fb5fabfe766f619586ad63537c924b7ba..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_attribute_wrap.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain wrap attribute
-Expect:       not bozo and entries[0]['description'] == '<span wrap=""></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span wrap=""&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_a.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_a.xml
deleted file mode 100644
index 3c50289128917d691b447e5b516f5eeb01926ea6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_a.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <a></a>
-Expect:       not bozo and entries[0]['description'] == '<a></a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;a&gt;&lt;/a&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_abbr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_abbr.xml
deleted file mode 100644
index 4aafa029ec78a850cfb35a54fccf2c0e13c51906..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_abbr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <abbr></abbr>
-Expect:       not bozo and entries[0]['description'] == '<abbr></abbr>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;abbr&gt;&lt;/abbr&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_acronym.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_acronym.xml
deleted file mode 100644
index 5762c39800c2642974623ee978af8122457d62fc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_acronym.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <acronym></acronym>
-Expect:       not bozo and entries[0]['description'] == '<acronym></acronym>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;acronym&gt;&lt;/acronym&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_address.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_address.xml
deleted file mode 100644
index e11de2fb2f40df9b1eb031ce854184ba880be2d2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_address.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <address></address>
-Expect:       not bozo and entries[0]['description'] == '<address></address>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;address&gt;&lt;/address&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_area.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_area.xml
deleted file mode 100644
index ce4a14fe698fb292f84c0efb13a201b405d2945c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_area.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <area></area>
-Expect:       not bozo and entries[0]['description'] == '<area />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;area&gt;&lt;/area&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_article.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_article.xml
deleted file mode 100644
index 3c1c3285e91f3818a1653a9731c6ba3c763f7b82..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_article.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <article></article>
-Expect:       not bozo and entries[0]['description'] == '<article></article>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;article&gt;&lt;/article&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_aside.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_aside.xml
deleted file mode 100644
index 035ab288b79845a991f47ca022ffbdaa232d6887..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_aside.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <aside></aside>
-Expect:       not bozo and entries[0]['description'] == '<aside></aside>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;aside&gt;&lt;/aside&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_audio.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_audio.xml
deleted file mode 100644
index 3923dfab10157ecd859e1365d4e1a39491628840..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_audio.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <audio></audio>
-Expect:       not bozo and entries[0]['description'] == '<audio></audio>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;audio&gt;&lt;/audio&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_b.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_b.xml
deleted file mode 100644
index 76cdf89c679767b64eaf1293f70dd8f2311b6def..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_b.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <b></b>
-Expect:       not bozo and entries[0]['description'] == '<b></b>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;b&gt;&lt;/b&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_big.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_big.xml
deleted file mode 100644
index 8671e0962c88144421e5129b63cd62eec080f242..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_big.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <big></big>
-Expect:       not bozo and entries[0]['description'] == '<big></big>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;big&gt;&lt;/big&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_blockquote.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_blockquote.xml
deleted file mode 100644
index 5eae04510ee1cb02d741c9e370d0e4bc7a4432c8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_blockquote.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <blockquote></blockquote>
-Expect:       not bozo and entries[0]['description'] == '<blockquote></blockquote>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;blockquote&gt;&lt;/blockquote&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_br.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_br.xml
deleted file mode 100644
index 192a27ced5488dc8044b47fd1999d2bb466fffa5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_br.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <br></br>
-Expect:       not bozo and entries[0]['description'] == '<br />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;br&gt;&lt;/br&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_button.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_button.xml
deleted file mode 100644
index 9a07d9f0578cf0b2a94a34dc4ac515190f07341d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_button.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <button></button>
-Expect:       not bozo and entries[0]['description'] == '<button></button>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;button&gt;&lt;/button&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_canvas.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_canvas.xml
deleted file mode 100644
index 99b97bd091297781b6356b612d3ec3cee430eaba..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_canvas.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <canvas></canvas>
-Expect:       not bozo and entries[0]['description'] == '<canvas></canvas>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;canvas&gt;&lt;/canvas&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_caption.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_caption.xml
deleted file mode 100644
index fc4c55af86bdd7ba7818a7463f8edb560b55317e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_caption.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <caption></caption>
-Expect:       not bozo and entries[0]['description'] == '<caption></caption>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;caption&gt;&lt;/caption&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_center.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_center.xml
deleted file mode 100644
index 8aecf8f35b564625874b25e6ed9e6ca0b296e5a3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_center.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <center></center>
-Expect:       not bozo and entries[0]['description'] == '<center></center>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;center&gt;&lt;/center&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_cite.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_cite.xml
deleted file mode 100644
index 0af1302ebb81790a7386db6905fee4a4a4c9657e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_cite.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <cite></cite>
-Expect:       not bozo and entries[0]['description'] == '<cite></cite>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;cite&gt;&lt;/cite&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_code.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_code.xml
deleted file mode 100644
index c43bfe02656cec472d13808451ce4a7968174afd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_code.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <code></code>
-Expect:       not bozo and entries[0]['description'] == '<code></code>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;code&gt;&lt;/code&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_col.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_col.xml
deleted file mode 100644
index 14b064fe892fdb4c96e455c031bbb50c6d220415..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_col.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <col></col>
-Expect:       not bozo and entries[0]['description'] == '<col />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;col&gt;&lt;/col&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_colgroup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_colgroup.xml
deleted file mode 100644
index 0b628463fb3132bb8bb7aeb02b3b41874c08dd1b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_colgroup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <colgroup></colgroup>
-Expect:       not bozo and entries[0]['description'] == '<colgroup></colgroup>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;colgroup&gt;&lt;/colgroup&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_command.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_command.xml
deleted file mode 100644
index c09276c8822e3c96a9db49d9707cd9dd8af1adc9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_command.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <command />
-Expect:       not bozo and entries[0]['description'] == '<command />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;command&gt;&lt;/command&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datagrid.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datagrid.xml
deleted file mode 100644
index a9b1a681c4c346d74de0538d486cdddfbc31b2bd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datagrid.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <datagrid></datagrid>
-Expect:       not bozo and entries[0]['description'] == '<datagrid></datagrid>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;datagrid&gt;&lt;/datagrid&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datalist.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datalist.xml
deleted file mode 100644
index d4ab94bbcbf4afc4c33e79e44a558edbcabe7365..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_datalist.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <datalist></datalist>
-Expect:       not bozo and entries[0]['description'] == '<datalist></datalist>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;datalist&gt;&lt;/datalist&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dd.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dd.xml
deleted file mode 100644
index 99b110ae19b05399e8136131f318a1cdfade8997..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dd.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dd></dd>
-Expect:       not bozo and entries[0]['description'] == '<dd></dd>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dd&gt;&lt;/dd&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_del.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_del.xml
deleted file mode 100644
index 36444a5ec2e7200040b10703afb6d6140dbdcc14..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_del.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <del></del>
-Expect:       not bozo and entries[0]['description'] == '<del></del>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;del&gt;&lt;/del&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_details.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_details.xml
deleted file mode 100644
index c66b6b07d38472e82f8388a8b02024eb3b661204..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_details.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <details></details>
-Expect:       not bozo and entries[0]['description'] == '<details></details>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;details&gt;&lt;/details&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dfn.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dfn.xml
deleted file mode 100644
index d6d09546da5f3ff482894cfc1d77b0463b4d87e7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dfn.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dfn></dfn>
-Expect:       not bozo and entries[0]['description'] == '<dfn></dfn>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dfn&gt;&lt;/dfn&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dialog.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dialog.xml
deleted file mode 100644
index c0f9122099546499e42933b72ef7c02e936cf40a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dialog.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dialog></dialog>
-Expect:       not bozo and entries[0]['description'] == '<dialog></dialog>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dialog&gt;&lt;/dialog&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dir.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dir.xml
deleted file mode 100644
index 55e74651c53f62c85ec12183ba8691c4bab6b192..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dir.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dir></dir>
-Expect:       not bozo and entries[0]['description'] == '<dir></dir>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dir&gt;&lt;/dir&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_div.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_div.xml
deleted file mode 100644
index aecbff335ec9986d845ae5446a00838f51107483..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_div.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <div></div>
-Expect:       not bozo and entries[0]['description'] == '<div></div>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;div&gt;&lt;/div&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dl.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dl.xml
deleted file mode 100644
index bd14c61c8e18b46ef6cb233da64f4a36e2689403..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dl.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dl></dl>
-Expect:       not bozo and entries[0]['description'] == '<dl></dl>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dl&gt;&lt;/dl&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dt.xml
deleted file mode 100644
index 9cb828c665adb5775d209d161d67ae769b4d5a00..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_dt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <dt></dt>
-Expect:       not bozo and entries[0]['description'] == '<dt></dt>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;dt&gt;&lt;/dt&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_em.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_em.xml
deleted file mode 100644
index 1fad48eda3f91029791232101e43c2ec805d6fd2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_em.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <em></em>
-Expect:       not bozo and entries[0]['description'] == '<em></em>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;em&gt;&lt;/em&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_event-source.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_event-source.xml
deleted file mode 100644
index 693381fc963d507b00a6d6575ec3db224a4f7b68..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_event-source.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <event-source></event-source>
-Expect:       not bozo and entries[0]['description'] == '<event-source></event-source>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;event-source&gt;&lt;/event-source&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_fieldset.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_fieldset.xml
deleted file mode 100644
index 489fc29dbb9fb84936d06057647d2d669c2797d3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_fieldset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <fieldset></fieldset>
-Expect:       not bozo and entries[0]['description'] == '<fieldset></fieldset>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;fieldset&gt;&lt;/fieldset&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_figure.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_figure.xml
deleted file mode 100644
index 0314699c16c7351eb7d3587e0a487bd2fbb23b0c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_figure.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <figure></figure>
-Expect:       not bozo and entries[0]['description'] == '<figure></figure>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;figure&gt;&lt;/figure&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_font.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_font.xml
deleted file mode 100644
index 4356a897cbf7ea4f671d1f7d9b87581c7e5eb4fb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_font.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <font></font>
-Expect:       not bozo and entries[0]['description'] == '<font></font>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;font&gt;&lt;/font&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_footer.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_footer.xml
deleted file mode 100644
index 05fddcfaf2a06a0dd5082ed17d55cc3974d27aee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_footer.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <footer></footer>
-Expect:       not bozo and entries[0]['description'] == '<footer></footer>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;footer&gt;&lt;/footer&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_form.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_form.xml
deleted file mode 100644
index b2795de9db3e9db0d70053d96a4e1be115594a54..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_form.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <form></form>
-Expect:       not bozo and entries[0]['description'] == '<form></form>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;form&gt;&lt;/form&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h1.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h1.xml
deleted file mode 100644
index 792d84384814b1cf40082fe0e247f9308411c431..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h1.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h1></h1>
-Expect:       not bozo and entries[0]['description'] == '<h1></h1>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h1&gt;&lt;/h1&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h2.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h2.xml
deleted file mode 100644
index 1e559c17b0da66d4247e88fe2d37d107e1564da1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h2.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h2></h2>
-Expect:       not bozo and entries[0]['description'] == '<h2></h2>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h2&gt;&lt;/h2&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h3.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h3.xml
deleted file mode 100644
index d778b68ac2f1720adbfa0f2b3cae83acba2d7e3b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h3.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h3></h3>
-Expect:       not bozo and entries[0]['description'] == '<h3></h3>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h3&gt;&lt;/h3&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h4.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h4.xml
deleted file mode 100644
index 736e40d0c324ee956e098e4b8a4fccdb9791de8c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h4.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h4></h4>
-Expect:       not bozo and entries[0]['description'] == '<h4></h4>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h4&gt;&lt;/h4&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h5.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h5.xml
deleted file mode 100644
index 44d0cece3854af7bc74932c68dccf91cbe346848..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h5.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h5></h5>
-Expect:       not bozo and entries[0]['description'] == '<h5></h5>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h5&gt;&lt;/h5&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h6.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h6.xml
deleted file mode 100644
index e50a6a17bcca2afe44f5b7210c95bff7839e3c0d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_h6.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <h6></h6>
-Expect:       not bozo and entries[0]['description'] == '<h6></h6>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;h6&gt;&lt;/h6&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_header.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_header.xml
deleted file mode 100644
index c6e124dc6f516483200d51c4cba901404e8e3312..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_header.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <header></header>
-Expect:       not bozo and entries[0]['description'] == '<header></header>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;header&gt;&lt;/header&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_hr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_hr.xml
deleted file mode 100644
index 9d960505a988dc7f480b7f22ddb72d512fbc2c55..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_hr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <hr></hr>
-Expect:       not bozo and entries[0]['description'] == '<hr />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;hr&gt;&lt;/hr&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_i.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_i.xml
deleted file mode 100644
index 6d61b46132327646627c6199473f0ac41546ed84..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_i.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <i></i>
-Expect:       not bozo and entries[0]['description'] == '<i></i>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;i&gt;&lt;/i&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_img.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_img.xml
deleted file mode 100644
index 87c3e14e35db8b8632bb998eddf4bc3d028e19cd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_img.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <img></img>
-Expect:       not bozo and entries[0]['description'] == '<img />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;img&gt;&lt;/img&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_input.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_input.xml
deleted file mode 100644
index 955bcd8525973a801ade3cd36878f459f61a2f6f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_input.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <input></input>
-Expect:       not bozo and entries[0]['description'] == '<input />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;input&gt;&lt;/input&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ins.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ins.xml
deleted file mode 100644
index 75ebb8c7584b511c18b36820c77de4410dcad1f6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ins.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <ins></ins>
-Expect:       not bozo and entries[0]['description'] == '<ins></ins>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;ins&gt;&lt;/ins&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_kbd.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_kbd.xml
deleted file mode 100644
index a26b8771c305bb6d3980e1888c698b3ab51338ee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_kbd.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <kbd></kbd>
-Expect:       not bozo and entries[0]['description'] == '<kbd></kbd>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;kbd&gt;&lt;/kbd&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_keygen.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_keygen.xml
deleted file mode 100644
index e86b15f5e9abeea5d9476c358d9e5cdda014c2cc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_keygen.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <keygen />
-Expect:       not bozo and entries[0]['description'] == '<keygen />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;keygen&gt;&lt;/keygen&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_label.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_label.xml
deleted file mode 100644
index 64379d86ff4250d9726077574335bc1632f26249..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_label.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <label></label>
-Expect:       not bozo and entries[0]['description'] == '<label></label>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;label&gt;&lt;/label&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_legend.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_legend.xml
deleted file mode 100644
index c858b6fd2820681733cedd0758f6cc9c8a1161f0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_legend.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <legend></legend>
-Expect:       not bozo and entries[0]['description'] == '<legend></legend>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;legend&gt;&lt;/legend&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_li.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_li.xml
deleted file mode 100644
index 212ed94cd93e53229eb9d0410a70455532733d3a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_li.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <li></li>
-Expect:       not bozo and entries[0]['description'] == '<li></li>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;li&gt;&lt;/li&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_m.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_m.xml
deleted file mode 100644
index 0b14b58f8fb80608930f3fc3ca528f681b7719e7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_m.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <m></m>
-Expect:       not bozo and entries[0]['description'] == '<m></m>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;m&gt;&lt;/m&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_map.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_map.xml
deleted file mode 100644
index 3f8835a0f2a86114d62be2f2c9e725fcd4124563..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_map.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <map></map>
-Expect:       not bozo and entries[0]['description'] == '<map></map>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;map&gt;&lt;/map&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_menu.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_menu.xml
deleted file mode 100644
index 3ecc3a214824dfd6a97cb95a4712c411808e5f4c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_menu.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <menu></menu>
-Expect:       not bozo and entries[0]['description'] == '<menu></menu>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;menu&gt;&lt;/menu&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_meter.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_meter.xml
deleted file mode 100644
index d263e8aa0620d98451c825ae2ce2ddff60bf8099..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_meter.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <meter></meter>
-Expect:       not bozo and entries[0]['description'] == '<meter></meter>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;meter&gt;&lt;/meter&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_multicol.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_multicol.xml
deleted file mode 100644
index 96c65fbc8aa05d0f4c02f342b7c03eaf767f3469..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_multicol.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <multicol></multicol>
-Expect:       not bozo and entries[0]['description'] == '<multicol></multicol>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;multicol&gt;&lt;/multicol&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nav.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nav.xml
deleted file mode 100644
index 0a4be553bc7535b9f2d9eafd898707cd62cbf4c6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nav.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <nav></nav>
-Expect:       not bozo and entries[0]['description'] == '<nav></nav>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;nav&gt;&lt;/nav&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nextid.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nextid.xml
deleted file mode 100644
index 83ac0b543a9b3aac26bc37c1e6d7da69deb7a0bc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_nextid.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <nextid></nextid>
-Expect:       not bozo and entries[0]['description'] == '<nextid></nextid>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;nextid&gt;&lt;/nextid&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_noscript.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_noscript.xml
deleted file mode 100644
index 4d53a0804bf04fc06cddd46cf1848f45dc63e979..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_noscript.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <noscript></noscript>
-Expect:       not bozo and entries[0]['description'] == '<noscript></noscript>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;noscript&gt;&lt;/noscript&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ol.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ol.xml
deleted file mode 100644
index d41750ea7893ae57719f4b78fc2ffe7a2bb91bb4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ol.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <ol></ol>
-Expect:       not bozo and entries[0]['description'] == '<ol></ol>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;ol&gt;&lt;/ol&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_optgroup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_optgroup.xml
deleted file mode 100644
index 2ed4a5b341f72a08fe39fef5629107436b3fe968..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_optgroup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <optgroup></optgroup>
-Expect:       not bozo and entries[0]['description'] == '<optgroup></optgroup>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;optgroup&gt;&lt;/optgroup&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_option.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_option.xml
deleted file mode 100644
index 944a0897ca9e2326962dd6c9b4f9009921e132b2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_option.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <option></option>
-Expect:       not bozo and entries[0]['description'] == '<option></option>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;option&gt;&lt;/option&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_output.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_output.xml
deleted file mode 100644
index bd6d2399bc5b3acc91f951edc0c4873ca7642242..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_output.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <output></output>
-Expect:       not bozo and entries[0]['description'] == '<output></output>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;output&gt;&lt;/output&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_p.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_p.xml
deleted file mode 100644
index ad67e0c72278a0ac78df96caa6f3cd56c52d0649..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_p.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <p></p>
-Expect:       not bozo and entries[0]['description'] == '<p></p>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;p&gt;&lt;/p&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_pre.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_pre.xml
deleted file mode 100644
index c6da1b86a80c317901541a4cdfbc0db9fa805660..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_pre.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <pre></pre>
-Expect:       not bozo and entries[0]['description'] == '<pre></pre>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;pre&gt;&lt;/pre&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_progress.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_progress.xml
deleted file mode 100644
index 7b335e940173e2d4aa558ca87bab40493addb1bc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_progress.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <progress></progress>
-Expect:       not bozo and entries[0]['description'] == '<progress></progress>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;progress&gt;&lt;/progress&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_q.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_q.xml
deleted file mode 100644
index 95958d29df344accf72ab0a00430e16fa9afab92..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_q.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <q></q>
-Expect:       not bozo and entries[0]['description'] == '<q></q>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;q&gt;&lt;/q&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_s.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_s.xml
deleted file mode 100644
index 6a5e911816a0c21233d05c0606d1ac6ce8d3b1a4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_s.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <s></s>
-Expect:       not bozo and entries[0]['description'] == '<s></s>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;s&gt;&lt;/s&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_samp.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_samp.xml
deleted file mode 100644
index ededff49a122f62e2aef83b8275b19f9d015f3cd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_samp.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <samp></samp>
-Expect:       not bozo and entries[0]['description'] == '<samp></samp>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;samp&gt;&lt;/samp&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_section.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_section.xml
deleted file mode 100644
index 97044eb3287294aa74a4fb7b70935605697ad4b2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_section.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <section></section>
-Expect:       not bozo and entries[0]['description'] == '<section></section>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;section&gt;&lt;/section&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_select.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_select.xml
deleted file mode 100644
index 2f8091cb8196374a86cf02c258a2334cdc938409..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_select.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <select></select>
-Expect:       not bozo and entries[0]['description'] == '<select></select>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;select&gt;&lt;/select&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_small.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_small.xml
deleted file mode 100644
index 3ec2a3ac27274e0154f50e33f97591df2d498487..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_small.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <small></small>
-Expect:       not bozo and entries[0]['description'] == '<small></small>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;small&gt;&lt;/small&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sound.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sound.xml
deleted file mode 100644
index d65966fb6a2b2d32fa88cbb8a5df2d95e7062ece..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sound.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <sound></sound>
-Expect:       not bozo and entries[0]['description'] == '<sound></sound>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;sound&gt;&lt;/sound&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_source.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_source.xml
deleted file mode 100644
index 87e924859c29bbb6c26e543de5ad7b88132c8497..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_source.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <source />
-Expect:       not bozo and entries[0]['description'] == '<source />'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;source&gt;&lt;/source&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_spacer.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_spacer.xml
deleted file mode 100644
index 537b415fb770f068a621285d22738b2f68c06ba8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_spacer.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <spacer></spacer>
-Expect:       not bozo and entries[0]['description'] == '<spacer></spacer>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;spacer&gt;&lt;/spacer&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_span.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_span.xml
deleted file mode 100644
index d1f19a145e257265b097b7f94dacadbfadffea3f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_span.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <span></span>
-Expect:       not bozo and entries[0]['description'] == '<span></span>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;span&gt;&lt;/span&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strike.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strike.xml
deleted file mode 100644
index 0185a3d053d2d24f74afcb314e461ad43df1f07c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strike.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <strike></strike>
-Expect:       not bozo and entries[0]['description'] == '<strike></strike>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;strike&gt;&lt;/strike&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strong.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strong.xml
deleted file mode 100644
index b931d27023640777609246ba1cc86a8223c942bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_strong.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <strong></strong>
-Expect:       not bozo and entries[0]['description'] == '<strong></strong>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;strong&gt;&lt;/strong&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sub.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sub.xml
deleted file mode 100644
index 578c437b4f7e13252deffc1d0bd881428c969cbd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sub.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <sub></sub>
-Expect:       not bozo and entries[0]['description'] == '<sub></sub>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;sub&gt;&lt;/sub&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sup.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sup.xml
deleted file mode 100644
index 3e90091cfbe85727f28cdd70a75878d7e5f84f08..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_sup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <sup></sup>
-Expect:       not bozo and entries[0]['description'] == '<sup></sup>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;sup&gt;&lt;/sup&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_table.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_table.xml
deleted file mode 100644
index d23afb57f08a89144c1f73e7dea022c1129bedea..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_table.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <table></table>
-Expect:       not bozo and entries[0]['description'] == '<table></table>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;table&gt;&lt;/table&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tbody.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tbody.xml
deleted file mode 100644
index 09d43dae04863a03a270bbf899960fa1f62f7db4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tbody.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <tbody></tbody>
-Expect:       not bozo and entries[0]['description'] == '<tbody></tbody>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;tbody&gt;&lt;/tbody&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_td.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_td.xml
deleted file mode 100644
index 09d4ccdd416b82a30fc953d3899a9f0922da6138..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_td.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <td></td>
-Expect:       not bozo and entries[0]['description'] == '<td></td>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;td&gt;&lt;/td&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_textarea.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_textarea.xml
deleted file mode 100644
index b2a6758c2bc6b8a74c859ea8a2609951e3f21d0c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_textarea.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <textarea></textarea>
-Expect:       not bozo and entries[0]['description'] == '<textarea></textarea>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;textarea&gt;&lt;/textarea&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tfoot.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tfoot.xml
deleted file mode 100644
index 3ada9d6fbbe415f46f91f81de39247726beebbc3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tfoot.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <tfoot></tfoot>
-Expect:       not bozo and entries[0]['description'] == '<tfoot></tfoot>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;tfoot&gt;&lt;/tfoot&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_th.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_th.xml
deleted file mode 100644
index 5441dac4799364ba7a87b198395007366ca126e2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_th.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <th></th>
-Expect:       not bozo and entries[0]['description'] == '<th></th>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;th&gt;&lt;/th&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_thead.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_thead.xml
deleted file mode 100644
index 317100db1664f207097484fe2625de280b15fe1c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_thead.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <thead></thead>
-Expect:       not bozo and entries[0]['description'] == '<thead></thead>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;thead&gt;&lt;/thead&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_time.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_time.xml
deleted file mode 100644
index b692599250fcb48eab87f84d20a7c2f09461e51a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_time.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <time></time>
-Expect:       not bozo and entries[0]['description'] == '<time></time>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;time&gt;&lt;/time&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tr.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tr.xml
deleted file mode 100644
index 2b83aace1ff14b431b158a30ee2dd2bf18ab5e1d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <tr></tr>
-Expect:       not bozo and entries[0]['description'] == '<tr></tr>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;tr&gt;&lt;/tr&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tt.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tt.xml
deleted file mode 100644
index e23719e4e7bbf0d02989ce353d0e3582cf467145..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_tt.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <tt></tt>
-Expect:       not bozo and entries[0]['description'] == '<tt></tt>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;tt&gt;&lt;/tt&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_u.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_u.xml
deleted file mode 100644
index dd85877ca4a13b6811f60a1b903732c12661dff6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_u.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <u></u>
-Expect:       not bozo and entries[0]['description'] == '<u></u>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;u&gt;&lt;/u&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ul.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ul.xml
deleted file mode 100644
index a6e825e2eede74547c503b3bbee30fd91d9b6e53..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_ul.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <ul></ul>
-Expect:       not bozo and entries[0]['description'] == '<ul></ul>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;ul&gt;&lt;/ul&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_var.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_var.xml
deleted file mode 100644
index e39e712352e47fc79c90f23ce1545679035e2982..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_var.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <var></var>
-Expect:       not bozo and entries[0]['description'] == '<var></var>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;var&gt;&lt;/var&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_video.xml b/lib/feedparser/tests/wellformed/sanitize/acceptable_element_video.xml
deleted file mode 100644
index c88a91c81cd21c129f068abf77aa441e8a3501fa..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/acceptable_element_video.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description:  content may contain <video></video>
-Expect:       not bozo and entries[0]['description'] == '<video></video>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-<entry>
-<content type="html">&lt;video&gt;&lt;/video&gt;</content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/blogger_dollar_sign_in_attribute.xml b/lib/feedparser/tests/wellformed/sanitize/blogger_dollar_sign_in_attribute.xml
deleted file mode 100644
index c66295e4dfa2f663d844f4be7ed0c4e326cfb152..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/blogger_dollar_sign_in_attribute.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: Blogger's stupid invalid img attribute (circa August 2011)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img border="0" src="http://site.invalid/img.jpg" />'
--->
-<feed xmlns='http://www.w3.org/2005/Atom'>
-    <entry>
-        <content type='html'>
-            &lt;img border="0" i$="true" src="http://site.invalid/img.jpg" /&gt;
-        </content>
-    </entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_applet.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_applet.xml
deleted file mode 100644
index d2c314373d8074b2a3df4891999e528ea39ef8f9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_applet.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains applet
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_blink.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_blink.xml
deleted file mode 100644
index 64f9e574901d3a6edff7517e803c110e1509a0c0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_blink.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains embed
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_crazy.xml
deleted file mode 100644
index 9260c1ca4feb6bfb58c0cfa4ce87d185e0a60c5d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_crazy.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
-Description: entry content is crazy
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_embed.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_embed.xml
deleted file mode 100644
index d8ff3775fb8d28683b3f17b7f1e754d34621d91d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_embed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains embed
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_frame.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_frame.xml
deleted file mode 100644
index cfc75d170d0adef425b2022b4c11f66b653cf433..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_frame.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains frameset
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_iframe.xml
deleted file mode 100644
index fc2a07be8830f7dc9eb5cf9e367d328da5172bff..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_iframe.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains iframe
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/"> &lt;b>description&lt;/b>&lt;/iframe></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_link.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_link.xml
deleted file mode 100644
index 2672577f26a1663c60f6825d846c0340ee544cdb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains link
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_meta.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_meta.xml
deleted file mode 100644
index d22be265fb3eba70debb5d5bf7c178fd81cedc9e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_meta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains meta
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_object.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_object.xml
deleted file mode 100644
index 24542192b3cb127a52362efd0fa89cbe4e0b9732..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_object.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains object
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onabort.xml
deleted file mode 100644
index 55ddeb5f3c9cb1aede3ef2fb9fd1c7323dfdb015..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onabort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onabort
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onblur.xml
deleted file mode 100644
index a45a40c8b7daa63bbf3ce0141c08c2d7fa92a7e3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onblur.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onblur
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onchange.xml
deleted file mode 100644
index 3d4c3edea27f6c312e6b2e0bfa05bc72422fe628..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onchange.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onchange
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onclick.xml
deleted file mode 100644
index 10f544c385f4fd4b3d31e9eb128a91eea8bc1037..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onclick
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_ondblclick.xml
deleted file mode 100644
index 4817e3f9fbea8c5d71da4e01f5ecd3fff1d7cb74..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_ondblclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains ondblclick
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onerror.xml
deleted file mode 100644
index 1d0bd042896596e1c005336e9fd145e40b1f1057..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onerror.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onerror
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onfocus.xml
deleted file mode 100644
index b547ab437f295b13c7dc4a1f8ff723de652eae9e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onfocus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onfocus
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeydown.xml
deleted file mode 100644
index e3cc00642fafc9efa1a110024968ff82cc3aea08..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeydown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onkeydown
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeypress.xml
deleted file mode 100644
index 2e622b80b8adaecec1211cd62097b349f34d0f2b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeypress.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onkeypress
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeyup.xml
deleted file mode 100644
index 668b8fb990deaa3e9276e7e1025ae7435c807b21..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onkeyup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onkeyup
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onload.xml
deleted file mode 100644
index 11a25672e77821af8f7c75097e531fa9b21f233e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onload
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmousedown.xml
deleted file mode 100644
index 546ae7cc939721a71e728036761853e1c5ca3e5b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmousedown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onmousedown
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseout.xml
deleted file mode 100644
index 3c34adbb93dcae82c2e07a1b6b4fd2c59f14d823..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseout.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onmouseout
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseover.xml
deleted file mode 100644
index baccde4e9825e31bcc661fbd873381eab12920fb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseover.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onmouseover
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseup.xml
deleted file mode 100644
index 5c11c082a0743316430755ab38089d11647646b1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onmouseup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onmouseup
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onreset.xml
deleted file mode 100644
index 5a69ab580f2dbc8d572973a198a8e39381a61092..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onreset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onreset
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onresize.xml
deleted file mode 100644
index ffa3bff69be0abc41555db3d0eff5e9ec1c6ed04..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onresize.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onresize
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onsubmit.xml
deleted file mode 100644
index c394684968acac44ef73fa307e5a527cdf209a0a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onsubmit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onsubmit
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_onunload.xml
deleted file mode 100644
index 3f42aa36f10caff8121c3adb930b611245796891..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_onunload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains onunload
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script.xml
deleted file mode 100644
index e975dad563910b80399ad1b556ed30922f427a49..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains script
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_base64.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script_base64.xml
deleted file mode 100644
index 210eb6ca969940cec5c82ca60526eb9445ce0bfc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_base64.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry content contains script (base64)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="base64">
-c2FmZTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5sb2NhdGlvbi5ocmVmPSdodHRwOi8n
-KycvZXhhbXBsZS5jb20vJzs8L3NjcmlwdD4gZGVzY3JpcHRpb24=
-</content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script_cdata.xml
deleted file mode 100644
index 0bb07b9f591f8a49521a18c503f1dec0fd63e19a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_cdata.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains script (cdata)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_script_inline.xml
deleted file mode 100644
index 9c5c62394dcd4fe98550c9d8067f3e5e62d2cad1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_script_inline.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains script (inline)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_style.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_style.xml
deleted file mode 100644
index b243bf18fa9a822a40d15f949dca01c05e45df60..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_style.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains style
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></content>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_content_style_tag.xml b/lib/feedparser/tests/wellformed/sanitize/entry_content_style_tag.xml
deleted file mode 100644
index 6b38beb9d2736240ec8967c7a4fd3080754b71c4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_content_style_tag.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry content contains applet
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe <b>description</b>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<content type="text/html" mode="escaped">safe&lt;style>b {color:red}&lt;/style> &lt;b>description&lt;/b></content>
-</entry>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_applet.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_applet.xml
deleted file mode 100644
index 4404687f2f25f7db7d026d2f5f245835d3040a34..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_applet.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains applet
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_blink.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_blink.xml
deleted file mode 100644
index 64e95bc686acbed720e6c7007c196a286a8605c9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_blink.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains blink
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_crazy.xml
deleted file mode 100644
index cdc2ad176a822e3c19bc0c571ef7af3d2e673c87..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_crazy.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
-Description: entry summary is crazy
-Expect:      not bozo and entries[0]['summary'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_embed.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_embed.xml
deleted file mode 100644
index f7403ef9985d9d51e54de1a67dc786edea99f9e2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_embed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains embed
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_frame.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_frame.xml
deleted file mode 100644
index a59a2d04315ed1452ebd33a9026b809422f796b4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_frame.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains frame
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_iframe.xml
deleted file mode 100644
index a93899aad37b36252cea39ff0c4de735690183c8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_iframe.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains iframe
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/"> description&lt;/iframe></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_link.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_link.xml
deleted file mode 100644
index 4db83dbe336d23a9bde4cd023b9ebd8cbbafcb39..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains link
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_meta.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_meta.xml
deleted file mode 100644
index 42345e153d37d824b525e0246d3b11dc2a5bd3ef..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_meta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains meta
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_object.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_object.xml
deleted file mode 100644
index f38dcb5fd2e6163d3930570e034943abae08ffef..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_object.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains object
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onabort.xml
deleted file mode 100644
index 97c867638e123c8b6c1594f260576b24c32c7b3e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onabort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onabort
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onblur.xml
deleted file mode 100644
index 1bc3f830212f5db010a59881998a45bcc9bc9c50..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onblur.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onblur
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onchange.xml
deleted file mode 100644
index 553aa311031f5656b57ccae6832b17ad2f4d921f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onchange.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onchange
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onclick.xml
deleted file mode 100644
index b5d1d4e1b95be0b733c8e49db93c9f36cbb47735..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onclick
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_ondblclick.xml
deleted file mode 100644
index fc3a61a2f603a2c9d76d8b7f40c688e8ed9a184b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_ondblclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains ondblclick
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onerror.xml
deleted file mode 100644
index 60d46a18a25d65a670acd18425d35300c15bb516..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onerror.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onerror
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onfocus.xml
deleted file mode 100644
index 6f47ec69b3c9bd291d9af126465168ccd2ef0bdd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onfocus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onfocus
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeydown.xml
deleted file mode 100644
index 7eaa42c84c65770d777f9faf3268321f3354990d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeydown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onkeydown
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeypress.xml
deleted file mode 100644
index 8085f65d4123dc65552d83a9df54aecf00be09d7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeypress.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onkeypress
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeyup.xml
deleted file mode 100644
index 557422ee02a356ebb48fccd7f7133bb4c3348def..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onkeyup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onkeyup
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onload.xml
deleted file mode 100644
index 04323bcefe285f69d4acdaba09616dd79aa89215..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onload
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmousedown.xml
deleted file mode 100644
index bb74f81c168e42eb4a564daf76750198eca0f085..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmousedown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onmousedown
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseout.xml
deleted file mode 100644
index 3c60df9778f51fd59d114c888fc161efca254349..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseout.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onmouseout
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseover.xml
deleted file mode 100644
index f0732d052408729a5a80a31c7a91b455ed3d3bf2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseover.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onmouseover
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseup.xml
deleted file mode 100644
index 8b28f6dca6feaf84cb2cc430f3cbb6b08b70eff1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onmouseup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onmouseup
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onreset.xml
deleted file mode 100644
index 997cfc4b266f373853a7c5b645d0f51dfd870bdf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onreset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onreset
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onresize.xml
deleted file mode 100644
index 9a6a84e805aa0513582bcf5c7ed3d600796eb4fe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onresize.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onresize
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onsubmit.xml
deleted file mode 100644
index af6682fb17365de526ac1e9d87fb72e8c7d3c562..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onsubmit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onsubmit
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_onunload.xml
deleted file mode 100644
index 6b1539dcd6afb7d5885925b91841a68adf68946e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_onunload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains onunload
-Expect:      not bozo and entries[0]['summary'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script.xml
deleted file mode 100644
index 3787017e0fb91d0b91531f2f27a618618c600cf8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains script
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_base64.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_base64.xml
deleted file mode 100644
index 61c013cc2469459fe7e7cdbb70728eb2ee7482d6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_base64.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!--
-Description: entry summary contains script (base64)
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="base64">
-c2FmZTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5sb2NhdGlvbi5ocmVmPSdodHRwOi8n
-KycvZXhhbXBsZS5jb20vJzs8L3NjcmlwdD4gZGVzY3JpcHRpb24=
-</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_cdata.xml
deleted file mode 100644
index 055e366085784e892fdfe38c2bdc8c5e676cd01e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_cdata.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains script
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_inline.xml
deleted file mode 100644
index 06d8ff9cf341a3c9269bec1b27c86321faa4f011..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_inline.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains script
-Expect:      not bozo and entries[0]['summary'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_map_description.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_map_description.xml
deleted file mode 100644
index d3ffcc910a4689c60f8e2104024e3780566236fe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_script_map_description.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains script (maps to description)
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_summary_style.xml b/lib/feedparser/tests/wellformed/sanitize/entry_summary_style.xml
deleted file mode 100644
index 320de4e38c82ba14e79b0f9de6fce95889f71ae8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_summary_style.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry summary contains style
-Expect:      not bozo and entries[0]['summary'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<summary type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></summary>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_applet.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_applet.xml
deleted file mode 100644
index 4a84cf71e14755120390993530d4ddafec9615ec..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_applet.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains applet
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://www.example.com/">&lt;/applet> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_blink.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_blink.xml
deleted file mode 100644
index d7c7618afedb6541b3187a7c546101811a50ae80..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_blink.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains blink
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_crazy.xml
deleted file mode 100644
index 4d6929a04f1fdab4e26b5e34c2b9939e36ea412b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_crazy.xml
+++ /dev/null
@@ -1,75 +0,0 @@
-<!--
-Description: entry title is crazy
-Expect:      not bozo and entries[0]['title'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_embed.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_embed.xml
deleted file mode 100644
index cc56f982d6f2dd49eb580d933658bfc73d9f17c0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_embed.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains embed
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;embed src="http://www.example.com/"> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_frame.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_frame.xml
deleted file mode 100644
index eb5f80f9f9733eb6e05ad9247206db0257ce1a00..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_frame.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains frame
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_iframe.xml
deleted file mode 100644
index d3dd7b70c6950c7977f4426f0dab1cc82899a58a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_iframe.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains iframe
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;iframe src="http://www.example.com/">&lt;/iframe> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_link.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_link.xml
deleted file mode 100644
index 28fa2fa9532ca121d7bbc06df555069c5038966c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_link.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains link
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_meta.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_meta.xml
deleted file mode 100644
index c707fe2e4245b46859ccd701bfbe8fe38cf002fd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_meta.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains meta
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_object.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_object.xml
deleted file mode 100644
index 06ba3788ef7c749119bf03625144adb24819c8a3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_object.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains object
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onabort.xml
deleted file mode 100644
index 6669690ed6ffad36a70149ba2084bfc352c86a72..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onabort.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onabort
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onblur.xml
deleted file mode 100644
index a5a09c9b4adfe108200d24d1b75dbe2585718a10..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onblur.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onblur
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onchange.xml
deleted file mode 100644
index 9b5e22a4f2fe9805b0e7a54267ab2434775ceb5f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onchange.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onchange
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onclick.xml
deleted file mode 100644
index 1e7c20c214a80926eb7eb43e184c8d01e82dc11d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onclick
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_ondblclick.xml
deleted file mode 100644
index 800904bb76fcb73e0c2fdf79240c786c2da47df1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_ondblclick.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains ondblclick
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onerror.xml
deleted file mode 100644
index d60cc44b773894cc19406956a6e2a3ee2f60635e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onerror.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onerror
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onfocus.xml
deleted file mode 100644
index b1218955ceb2f44f0d4f2daf3579620c0bc8bb63..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onfocus.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onfocus
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeydown.xml
deleted file mode 100644
index dfd3c22793a1783def7a874004e301ee3f6f1003..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeydown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onkeydown
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeypress.xml
deleted file mode 100644
index 5343e94809b0f50fa6311d2dab97bc1643b65796..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeypress.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onkeypress
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeyup.xml
deleted file mode 100644
index 587d616dd82e1b3dd65b738d0c34443d6a8ed98a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onkeyup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onkeyup
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onload.xml
deleted file mode 100644
index 7b71552d4b9551ef8956849690bda14745782854..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onload
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmousedown.xml
deleted file mode 100644
index 69681fd9004481e4b9c44c56c4199882ca9c9636..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmousedown.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onmousedown
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseout.xml
deleted file mode 100644
index fc25b8a880d0fd0554ad37739b3134d9512f0928..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseout.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onmouseout
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseover.xml
deleted file mode 100644
index 4dde5f37ceb2213a5c72808a158eee690d61bb28..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseover.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onmouseover
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseup.xml
deleted file mode 100644
index 81cfdfce499f1b37487fc49f32a833dd1287f08a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onmouseup.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onmouseup
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onreset.xml
deleted file mode 100644
index e2bc481b8928f7c9511aec9b521103ece8327e72..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onreset.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onreset
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onresize.xml
deleted file mode 100644
index f96a76b287652fcbe374b6c180c90b32aa406d1b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onresize.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onresize
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onsubmit.xml
deleted file mode 100644
index b07628ac108d02de3d1a719c959993948aee34fc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onsubmit.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onsubmit
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_onunload.xml
deleted file mode 100644
index 0a6f998b69a78c079bface21ce53141891b36a7b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_onunload.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains onunload
-Expect:      not bozo and entries[0]['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_script.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_script.xml
deleted file mode 100644
index 8685588674b9a902010fe96321b03f9f4d988f45..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_script.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains script
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_script_cdata.xml
deleted file mode 100644
index e315d623bbe2b558dd61da1f39070db3b66c43e4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_cdata.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains script
-Expect:      not bozo and entries[0]['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_script_inline.xml
deleted file mode 100644
index 790cfd5cbe807f11c0dbc2e47a2a50687a361069..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_script_inline.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains script
-Expect:      not bozo and entries[0]['title'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/entry_title_style.xml b/lib/feedparser/tests/wellformed/sanitize/entry_title_style.xml
deleted file mode 100644
index f1fb8d660a89d0aa8b04ec0a0e218c7c1061f246..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/entry_title_style.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: entry title contains style
-Expect:      not bozo and entries[0]['title'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<entry>
-<title type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></title>
-</entry>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_applet.xml
deleted file mode 100644
index bc1aacb373e9851fac31b946ccdb47300a262836..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_applet.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains applet
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://www.example.com/">&lt;/applet> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_blink.xml
deleted file mode 100644
index 4018115f75094350cf02ebeb2a87debb69cb9c62..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_blink.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains blink
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_crazy.xml
deleted file mode 100644
index 70ef93fc48ff36926e5f78d1b670177eb67bfd86..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_crazy.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-Description: feed copyright is crazy
-Expect:      not bozo and feed['copyright'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_embed.xml
deleted file mode 100644
index 1e73ef5fb1fb89c06e6378742968836e56ff538a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_embed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains embed
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;embed src="http://www.example.com/"> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_frame.xml
deleted file mode 100644
index 4c6f8105eb782e07ca07b104da5d2c7978b94a9c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_frame.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains frame
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_iframe.xml
deleted file mode 100644
index 3cefdfc5f9ce392cf5a92b8343d0da4065553eb3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_iframe.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains iframe
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;iframe src="http://www.example.com/">&lt;/iframe> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_link.xml
deleted file mode 100644
index 3cdec2e500a0bcacc6d478e80d5d8fdd03300e97..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains link
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_meta.xml
deleted file mode 100644
index 6974afb3bb4d6af24342b324fc30ce98616efba8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_meta.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains meta
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_object.xml
deleted file mode 100644
index 9beabb6b5950b31dae25943da4d9f890c9656db7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_object.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains object
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onabort.xml
deleted file mode 100644
index 264e99a5c391f9444ebb497e586021541716bdc3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onabort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onabort
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onblur.xml
deleted file mode 100644
index 0f39eba049155c069195a22a7e587ab32728ce4c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onblur.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onblur
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onchange.xml
deleted file mode 100644
index 8e33cb906ab088964a8180efa66f1482eaf4330e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onchange.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onchange
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onclick.xml
deleted file mode 100644
index 37eeb8a108ff3dc7beb7d6aadfc7b6a695865119..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onclick
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_ondblclick.xml
deleted file mode 100644
index c2636fed0b7cdbbd76a583f342d47339a7d18736..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_ondblclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains ondblclick
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onerror.xml
deleted file mode 100644
index 7f79e671a549ec53e1f145356ced65ed135f3cce..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onerror.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onerror
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onfocus.xml
deleted file mode 100644
index 73c97e0eb9e7cc49974c135e15078b4f473d7ea3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onfocus.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onfocus
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeydown.xml
deleted file mode 100644
index f0a6fd24f6255e82f7053860e25b731de3949465..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeydown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onkeydown
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeypress.xml
deleted file mode 100644
index 762819cdb053cd10d29892cebdf6f620bba3aa12..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeypress.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onkeypress
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeyup.xml
deleted file mode 100644
index 3bb08dc0d31b159f64135783e3fc0ba543b4bb7a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onkeyup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onkeyup
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onload.xml
deleted file mode 100644
index 41078416ef4e9e9fbe3c78f8fce031246b8d947e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onload
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmousedown.xml
deleted file mode 100644
index 9d4f709ad363d1292cfaffce4fd22515f25f89b3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmousedown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onmousedown
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseout.xml
deleted file mode 100644
index 008e907469c9238a5ee6e3d34754087de4e3dcdf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseout.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onmouseout
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseover.xml
deleted file mode 100644
index b77c39124c302791ced6ab07b6714755960b8d33..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseover.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onmouseover
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseup.xml
deleted file mode 100644
index 5a5d42bf0fe2819ddf20aae85a2fc02b72dcf24d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onmouseup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onmouseup
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onreset.xml
deleted file mode 100644
index 99062f47737c969a3f116775701beb90a44c4af5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onreset.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onreset
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onresize.xml
deleted file mode 100644
index b7b5e1a8d580e53e4e4ea33e35fefeb51397fabc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onresize.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onresize
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onsubmit.xml
deleted file mode 100644
index b09b8e8b59e913978eca392b6a4e46a798ab3c5c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onsubmit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onsubmit
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onunload.xml
deleted file mode 100644
index 17aa1f344631e622c53c611ae3e317d61f497a7c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_onunload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains onunload
-Expect:      not bozo and feed['copyright'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script.xml
deleted file mode 100644
index 842e93f26c016c823accd69367e8ff7faafae6ed..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains script
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_cdata.xml
deleted file mode 100644
index 0113b7efad515676601665637dec96c967ca7566..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_cdata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains script
-Expect:      not bozo and feed['copyright'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_inline.xml
deleted file mode 100644
index fcae4f060af254bcae53cdba18407f62721467e9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_script_inline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains script
-Expect:      not bozo and feed['copyright'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_copyright_style.xml
deleted file mode 100644
index a9dc4e5b0e08a5ddc2ec849ad95a45d82e9ce810..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_copyright_style.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed copyright contains style
-Expect:      not bozo and feed['copyright'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<copyright type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></copyright>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_applet.xml
deleted file mode 100644
index ed783f53e8bbad9d122220f05cf9fbb668f564ab..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_applet.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains applet
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_blink.xml
deleted file mode 100644
index 0a94622bac6913aa960b6d39861c55172cac2e4b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_blink.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains blink
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_crazy.xml
deleted file mode 100644
index b8bc995d05f1937c8333cd9ddbee346398ab4309..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_crazy.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-Description: feed info is crazy
-Expect:      not bozo and feed['info'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_embed.xml
deleted file mode 100644
index 82b0e3d4491e658c70b22a46d7cc696bd615025e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_embed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains embed
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_frame.xml
deleted file mode 100644
index de61c2fce6132f6e343a5e3867835cd717e9bd73..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_frame.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains frame
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_iframe.xml
deleted file mode 100644
index 49f1edc68adb1096e6b810c44cc98cc084e591dc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_iframe.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains iframe
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/"> description&lt;/iframe></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_link.xml
deleted file mode 100644
index 4ef66897d739e48e7e9dc7f98f5214f93cb50aa4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains link
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_meta.xml
deleted file mode 100644
index 85ca47806daf7d0b03442991755904fff9846e12..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_meta.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains meta
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_object.xml
deleted file mode 100644
index a32f5124bc2aec3d005f787b56fdd380be10b857..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_object.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains object
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onabort.xml
deleted file mode 100644
index c6f2a96aa6ce734ee6bf8dc72d01de0146f21603..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onabort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onabort
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onblur.xml
deleted file mode 100644
index b10c4e8f0002418363337cfbecf61069332aa745..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onblur.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onblur
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onchange.xml
deleted file mode 100644
index 653af579de362ab1b16b47d5fa6758b5deb49f6b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onchange.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onchange
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onclick.xml
deleted file mode 100644
index 93644d6d7e5172eccc3dc7b81300a638dfa2854e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onclick
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_ondblclick.xml
deleted file mode 100644
index 1776c913dfec3615cb1560dc401284ee03652947..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_ondblclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains ondblclick
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onerror.xml
deleted file mode 100644
index 9b8dd9cf05ce38bcbde694e19079f55379488f43..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onerror.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onerror
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onfocus.xml
deleted file mode 100644
index 51a390bb5c863c176c38f774c185cd961abed54f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onfocus.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onfocus
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeydown.xml
deleted file mode 100644
index 4674d0e3c8b47fda0b31a3eba438f95c24fbec1c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeydown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onkeydown
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeypress.xml
deleted file mode 100644
index cc2af96a46a9a338bd0d118683fe0d4b8ba6df9d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeypress.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onkeypress
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeyup.xml
deleted file mode 100644
index cde7c4232388d2c18d4ab1bc98881a38a2454465..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onkeyup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onkeyup
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onload.xml
deleted file mode 100644
index 7763fbf3b0be43a2067a1c6534110567acad7223..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onload
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmousedown.xml
deleted file mode 100644
index 45651554dcec3d916def67b929ab666e364c45d1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmousedown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onmousedown
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseout.xml
deleted file mode 100644
index e2de0c6c5c9c588760b97e296699539dc80db164..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseout.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onmouseout
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseover.xml
deleted file mode 100644
index 9e5200795fee7dea2fdcd769566031e3c62177b7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseover.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onmouseover
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseup.xml
deleted file mode 100644
index 15b0aac6dc1adf3e50225f0f5c4916ad73c6c128..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onmouseup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onmouseup
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onreset.xml
deleted file mode 100644
index be8bdc4cb03280e3ebcfe16dc52acf1ddbbb55b6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onreset.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onreset
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onresize.xml
deleted file mode 100644
index f2429be6f9ac038edfe053e4984b2ed6212dbb5b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onresize.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onresize
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onsubmit.xml
deleted file mode 100644
index c230a400936d4ddbbafe751ea3d6e9ee8c62e519..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onsubmit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onsubmit
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_onunload.xml
deleted file mode 100644
index 9c66418c5f70564829e1bce2ab591fd28dda3b97..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_onunload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains onunload
-Expect:      not bozo and feed['info'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_script.xml
deleted file mode 100644
index 34d20bd598ed6b63718096a06a42ef18a1217a27..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_script.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains script
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_script_cdata.xml
deleted file mode 100644
index ae3fb8e5972f96f8df5858131dd943feb35df9a1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_cdata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains script
-Expect:      not bozo and feed['info'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_script_inline.xml
deleted file mode 100644
index dafc46a7ea9258d97bd5308a6ee7e18a2cc504bb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_script_inline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains script
-Expect:      not bozo and feed['info'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_info_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_info_style.xml
deleted file mode 100644
index d1aac49abc0cdec260032bf82cea6a61ef2b124c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_info_style.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed info contains style
-Expect:      not bozo and feed['info'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<info type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></info>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_applet.xml
deleted file mode 100644
index 30d75af167d2ecd84d3f61e355e161f068432635..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_applet.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains applet
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_blink.xml
deleted file mode 100644
index 89e14e3644cf087b2770c2e613ab1700b8620e46..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_blink.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains blink
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_crazy.xml
deleted file mode 100644
index 2c286dd8db07cde6d5b995bd35e1ba2ba11fdb64..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_crazy.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-Description: feed subtitle is crazy
-Expect:      not bozo and feed['tagline'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_embed.xml
deleted file mode 100644
index c83d6dabd25e9e735435a830ad9200f3e2bb5783..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_embed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains embed
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_frame.xml
deleted file mode 100644
index 0f165f0ec46d4e19b629f0980b9835aba1fc6837..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_frame.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains frame
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_iframe.xml
deleted file mode 100644
index f3c14bfc3e6537dbc51f1321cdfa4552d9be8d54..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_iframe.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains iframe
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/"> description&lt;/iframe></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_link.xml
deleted file mode 100644
index 2daccf307f6c0ea290faf30419b28f4975d0d509..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains link
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_meta.xml
deleted file mode 100644
index bb530e35a0b96dee4a7e7c446d9a5ba16db2d393..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_meta.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains meta
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_object.xml
deleted file mode 100644
index 4116bff8eb4ffa81e0bc79577622c9962a5f703e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_object.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains object
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onabort.xml
deleted file mode 100644
index 597c482e095942bd9adc68b290170c129a47f4be..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onabort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onabort
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onblur.xml
deleted file mode 100644
index 5a1301f8ecca3a17972b7a31bb2ba338c8c54650..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onblur.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onblur
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onchange.xml
deleted file mode 100644
index cec13dc744e3cf5baaf13020aafd1dff896affb2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onchange.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onchange
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onclick.xml
deleted file mode 100644
index 18bd7a76e58a415d37489a8b9fd303df0603196c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onclick
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_ondblclick.xml
deleted file mode 100644
index b3e0fea55702524803d3fdb73d7828c2bc904dc7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_ondblclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains ondblclick
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onerror.xml
deleted file mode 100644
index 9693ee51a3b0d65db550a5b5b5ba3a93ad79af09..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onerror.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onerror
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onfocus.xml
deleted file mode 100644
index 315c8649836ec2f3721ba0b6e2f53f123a443818..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onfocus.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onfocus
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeydown.xml
deleted file mode 100644
index 8290367fa04c3a9e8d1188aa580077241e84be43..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeydown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onkeydown
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeypress.xml
deleted file mode 100644
index 6def555e5f07cd06c1ff686954e25995b632c78a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeypress.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onkeypress
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeyup.xml
deleted file mode 100644
index 618a0c2ffa22370a65e51fe593120c57e94ef768..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onkeyup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onkeyup
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onload.xml
deleted file mode 100644
index 78a45b9e8958d368e1e9dbb47fc0af01da509fa5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onload
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmousedown.xml
deleted file mode 100644
index 77010aaea7834f5dc06801df6d5c5a9a5d0b2099..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmousedown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onmousedown
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseout.xml
deleted file mode 100644
index 5e353ee07cfd07fcca9b50351f376d3d796d081c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseout.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onmouseout
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseover.xml
deleted file mode 100644
index 8d20666c82004ff792ebf51ace83b9479f8e8e49..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseover.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onmouseover
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseup.xml
deleted file mode 100644
index 4c6893155211618fd3f1095b7217926a7d446b48..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onmouseup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onmouseup
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onreset.xml
deleted file mode 100644
index f7f2abaece1b47c962957dcefe52136af214c231..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onreset.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onreset
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onresize.xml
deleted file mode 100644
index eb7ebda05312d0bbb04dd0eb7f6310ca6b9145e2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onresize.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onresize
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onsubmit.xml
deleted file mode 100644
index 5bb7dd6bf20f7018d94943d3bb909ab16c06b4bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onsubmit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onsubmit
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onunload.xml
deleted file mode 100644
index 57824a3a8087bac3d90a50a76aba073e388ff073..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_onunload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains onunload
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script.xml
deleted file mode 100644
index 59e76db1882449a9022a071459ccdbeac01c6131..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains script
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_cdata.xml
deleted file mode 100644
index b7ee3f4f581fca3a8eeeb54326075705393d4698..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_cdata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains script
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_inline.xml
deleted file mode 100644
index 61c7c7b1afff2146adad2450f62fde354136ca02..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_script_inline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains script
-Expect:      not bozo and feed['tagline'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_style.xml
deleted file mode 100644
index 332a65b90ace9b3fbac95eb353d1da8bc6300854..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_subtitle_style.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed subtitle contains style
-Expect:      not bozo and feed['tagline'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<subtitle type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></subtitle>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_applet.xml
deleted file mode 100644
index 6bcca5d92988ecac72d7469c80502868fb709fae..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_applet.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains applet
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_blink.xml
deleted file mode 100644
index cd758dd61f3b6a88bd7b05b75d0d5910761ab1ab..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_blink.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains blink
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_crazy.xml
deleted file mode 100644
index 63617d33507c5f5ae8824cb3bb622cf8bcb41c77..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_crazy.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-Description: feed tagline is crazy
-Expect:      not bozo and feed['tagline'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_embed.xml
deleted file mode 100644
index 68fca0f01dcfa89499769db161812aa7e799f037..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_embed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains embed
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_frame.xml
deleted file mode 100644
index 9a3a14fb03831e166ac770bd1df4082cfecb8422..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_frame.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains frame
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_iframe.xml
deleted file mode 100644
index 6863469c647ae1c275c779933af3e9df54295666..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_iframe.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains iframe
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/">&lt;/iframe> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_link.xml
deleted file mode 100644
index f46ac8e7f01ac90d146d13777b7bf4644170207d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains link
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_meta.xml
deleted file mode 100644
index 21efed777b9aab035afa5bc94c25ee3db0d9b0bd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_meta.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains meta
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_object.xml
deleted file mode 100644
index 114c62560c39b7f95fff548390ea9a1cbabb5b4a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_object.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains object
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onabort.xml
deleted file mode 100644
index a4ce80010fbe4d43b00a6e36b637817d2457e61f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onabort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onabort
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onblur.xml
deleted file mode 100644
index 2f2958e90e3d8b3584891c0de22670978384e743..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onblur.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onblur
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onchange.xml
deleted file mode 100644
index 2afe2267e69c7c3e8466e6799ec9088b4b80a5d6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onchange.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onchange
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onclick.xml
deleted file mode 100644
index fa104ca6c4356e5e56d0167009c68ec24b0e87d2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onclick
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_ondblclick.xml
deleted file mode 100644
index 6b72d9fa258b059639f96e82aa7874d4c1a973eb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_ondblclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains ondblclick
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onerror.xml
deleted file mode 100644
index 3744e11d65a2ff6d04231eb547e73f5e274992ef..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onerror.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onerror
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onfocus.xml
deleted file mode 100644
index a11a3030e75292cc6b558082271a2ca784940cf3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onfocus.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onfocus
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeydown.xml
deleted file mode 100644
index 46ddf0cac8ce462b3798e6f4d816150bc50902d0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeydown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onkeydown
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeypress.xml
deleted file mode 100644
index 5703a1fc1bf9abcf61b9576ded060e1d35380de4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeypress.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onkeypress
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeyup.xml
deleted file mode 100644
index dc78e672589047517ba51e29613ca1d53a8ed080..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onkeyup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onkeyup
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onload.xml
deleted file mode 100644
index 972655376d1681f5864a80a34351842e9dfc98a5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onload
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmousedown.xml
deleted file mode 100644
index a25f3f21439205a202f7759e928c4952c40aad49..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmousedown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onmousedown
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseout.xml
deleted file mode 100644
index ef7c5063a5b0512c31764bf652aba22013b1f531..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseout.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onmouseout
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseover.xml
deleted file mode 100644
index aac3d54e8d95ee85e30ae3a13dc5c932e5daca98..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseover.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onmouseover
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseup.xml
deleted file mode 100644
index 41ab39e720e6c2efaf565ec0524b08aa600b1f24..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onmouseup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onmouseup
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onreset.xml
deleted file mode 100644
index 17932f368ff4022b0b1e2a5028cc90f86483a4a6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onreset.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onreset
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onresize.xml
deleted file mode 100644
index bf712f872f515df609521346d6c489ab7fd97de2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onresize.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onresize
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onsubmit.xml
deleted file mode 100644
index a33ebf45123ff52c587610bbfce6b7f27201ba00..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onsubmit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onsubmit
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onunload.xml
deleted file mode 100644
index 2d1550557e973e6c07e738e9bea86a49754999aa..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_onunload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains onunload
-Expect:      not bozo and feed['tagline'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script.xml
deleted file mode 100644
index b818be55f74703b63b3fa36051e86ddd7ffe5bf3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains script
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_cdata.xml
deleted file mode 100644
index 943c8d61697a0530b3b1e96827027e7471300917..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_cdata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains script
-Expect:      not bozo and feed['tagline'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_inline.xml
deleted file mode 100644
index 902946517e8e5373592d1d5a18b2bd218322345b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_inline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains script
-Expect:      not bozo and feed['tagline'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_map_description.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_map_description.xml
deleted file mode 100644
index fb9d0ef64f80fb4a77fbfabe1235d3514589e113..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_script_map_description.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains script (maps to description)
-Expect:      not bozo and feed['description'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_tagline_style.xml
deleted file mode 100644
index abc68f35a9555d4edf4ced9180ee26bfbabad14a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_tagline_style.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed tagline contains style
-Expect:      not bozo and feed['tagline'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<tagline type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></tagline>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_applet.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_applet.xml
deleted file mode 100644
index 7d6156bc1aa9771561ef58d658985bd288f9ee81..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_applet.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains applet
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_blink.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_blink.xml
deleted file mode 100644
index e9fb536c9954114cb64b4b108d54acd3b309bd8e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_blink.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains blink
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;blink>safe&lt;/blink> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_crazy.xml
deleted file mode 100644
index dfca8a2cf4e441812198553a17a3ac97970631a4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_crazy.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<!--
-Description: feed title is crazy
-Expect:      not bozo and feed['title'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_embed.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_embed.xml
deleted file mode 100644
index 0ae3167d81e2b7e6aa9e281b7037a90f6612609e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_embed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains embed
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;embed src="http://example.com/"> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_frame.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_frame.xml
deleted file mode 100644
index c6df6c008bdf840c3958290014c6fda75d2b3376..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_frame.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains frame
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_iframe.xml
deleted file mode 100644
index 9422d36845bcc1963f105d3ed4e0ec2262293f5a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_iframe.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains iframe
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;iframe src="http://example.com/">&lt;/iframe> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_link.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_link.xml
deleted file mode 100644
index d540cc411205610df74dbac406cedc77533aa7b8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_link.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains link
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_meta.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_meta.xml
deleted file mode 100644
index 801c4df35b72b09b7d6b4255794321e1b05a6ae6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_meta.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains meta
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_object.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_object.xml
deleted file mode 100644
index 312cc841b33db0f346b610d36229f70a95470aef..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_object.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains object
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onabort.xml
deleted file mode 100644
index 36f5e9134dd9dfa57a8f895239584fa70cf02639..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onabort.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onabort
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onblur.xml
deleted file mode 100644
index dbf5f3af8fcc8ebac37fd10eca703291c95790b3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onblur.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onblur
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onchange.xml
deleted file mode 100644
index 26ba2385cac2ee02932ce872cc0823a496d48cc3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onchange.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onchange
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onclick.xml
deleted file mode 100644
index 76be05c881dc12a1f0512997c345a874f8be07da..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onclick
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_ondblclick.xml
deleted file mode 100644
index 69df1cd2447070cedde0c9bc5f5b78d802410adb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_ondblclick.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains ondblclick
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onerror.xml
deleted file mode 100644
index 254a630a35f60a9369e8844ec2d195bd11282afc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onerror.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onerror
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onfocus.xml
deleted file mode 100644
index 0f2cfa7e16617bc8d0809a6b752441eb18dc56fc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onfocus.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onfocus
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeydown.xml
deleted file mode 100644
index 665771306fc573c44128bf01e16aa06dd215ea93..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeydown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onkeydown
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeypress.xml
deleted file mode 100644
index dc3e3bd44ac2d2e1f642602ab065b4f24722ed5c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeypress.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onkeypress
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeyup.xml
deleted file mode 100644
index 5f2e98a489fe596f703a89c4ede97dd6ac6ece38..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onkeyup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onkeyup
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onload.xml
deleted file mode 100644
index 066a375ec89ee6be7af082782e0a3d0bba131970..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onload
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmousedown.xml
deleted file mode 100644
index a4a9281d78f8273ca1c6168fad9cdbc1dde16474..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmousedown.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onmousedown
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseout.xml
deleted file mode 100644
index 6edc7e3eaf05796e64f1b65b41ffce61ec6f8127..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseout.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onmouseout
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseover.xml
deleted file mode 100644
index 6da205b8c67c9e63d230b559f9fbb65361f58185..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseover.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onmouseover
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseup.xml
deleted file mode 100644
index b7693102527e01fd9a0b7b71fe37cb0097d2b45c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onmouseup.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onmouseup
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onreset.xml
deleted file mode 100644
index cd3422e27d6af530a4e16d124f2a794e3022d4cb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onreset.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onreset
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onresize.xml
deleted file mode 100644
index 9d6bcee721993451b7a8017131ec2263f842fa9f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onresize.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onresize
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onsubmit.xml
deleted file mode 100644
index 153d6f2f3cc74d1c1c15b6a94dab84e526d29040..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onsubmit.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onsubmit
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_onunload.xml
deleted file mode 100644
index 77866f89a1cf315a559070fc1f254ef3f6dd0f24..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_onunload.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains onunload
-Expect:      not bozo and feed['title'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_script.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_script.xml
deleted file mode 100644
index 6328416338551782f3e80bc17b33173e3605d742..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_script.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains script
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_script_cdata.xml
deleted file mode 100644
index a37085f3bf19b215c24f10dff5dcef43e3ea1388..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_cdata.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains script
-Expect:      not bozo and feed['title'] == u'safe description'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped"><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_inline.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_script_inline.xml
deleted file mode 100644
index 889667e630c684a3f5460eb819efdd0d1ab2bf79..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_script_inline.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains script
-Expect:      not bozo and feed['title'] == u'<div>safe description</div>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="application/xhtml+xml" mode="xml"><div xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</div></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_style.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_style.xml
deleted file mode 100644
index c1aeaec829c89000c14b613c7360acf07f7ebcb9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_style.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: feed title contains style
-Expect:      not bozo and feed['title'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<feed version="0.3" xmlns="http://purl.org/atom/ns#">
-<title type="text/html" mode="escaped">&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></title>
-</feed>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/feed_title_unacceptable_uri.xml b/lib/feedparser/tests/wellformed/sanitize/feed_title_unacceptable_uri.xml
deleted file mode 100644
index 7d66c5a854cd2d713f09a6e8f0978638be0dcf07..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/feed_title_unacceptable_uri.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: anchor href contains unacceptable uri scheme
-Expect:      not bozo and feed['title'] == u'<a href="">safe</a>'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html">&lt;a href="javascript:alert(1)"&gt;safe&lt;/a&gt;</title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_applet.xml
deleted file mode 100644
index 10dea8b0d4d9311753d879e5ea9f7159d54d1a1e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_applet.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains applet
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<applet code="foo.class" codebase="http://example.com/"></applet> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_blink.xml
deleted file mode 100644
index b570ff208c378d87cf37acb1a9942189258fb157..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_blink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains blink
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><blink>safe</blink> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_embed.xml
deleted file mode 100644
index 2f2a2db17ee89d6238448d428968e965eecd3da7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_embed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains embed
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<embed src="http://example.com/" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_frame.xml
deleted file mode 100644
index 7228ecfb95b88ad78c9537b60f7e0245c0056a76..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_frame.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains frame
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<frameset rows="*"><frame src="http://example.com/" /></frameset> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_iframe.xml
deleted file mode 100644
index 561fe3129d8a1076abea92095fde5b26df7a614c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_iframe.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains iframe
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<iframe src="http://example.com/" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_link.xml
deleted file mode 100644
index aa88814703e786fd67eff3d6ec9932b8d2cfd218..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains link
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_meta.xml
deleted file mode 100644
index 7bfbddf1cb188e87ccff99426268f91aa4689902..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_meta.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains meta
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<meta http-equiv="Refresh" content="0; URL=http://example.com/" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_object.xml
deleted file mode 100644
index 11b8bbfb0d3b5af0636d181897d4e6e5f688b1b9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_object.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains object
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onabort.xml
deleted file mode 100644
index 4570265a214d50e3509aca44da01bf0bba9d1ebe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onabort.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onabort
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onblur.xml
deleted file mode 100644
index db9fdd63f434dd16f5df06741bad94ce19635ec7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onblur.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onblur
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onchange.xml
deleted file mode 100644
index 34283c222eef2191ea480e2097edf16ae8d37d59..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onchange.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onchange
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onclick.xml
deleted file mode 100644
index 0d5aa97cf55610fd63c91d57aa9f15722a12f572..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_ondblclick.xml
deleted file mode 100644
index da15eb7e604ffac541b59f065717e32a0ee835d4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_ondblclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains ondblclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onerror.xml
deleted file mode 100644
index fa03c8804bc958f04541647ebf44e236c677931c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onerror.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onerror
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onfocus.xml
deleted file mode 100644
index 527daffa7175d6fb511914e63634a5d93287d542..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onfocus.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onfocus
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onkeydown.xml
deleted file mode 100644
index 3dd446f6fccd0d6ae01bec68caad48931eb8e1fe..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeydown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeydown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onkeypress.xml
deleted file mode 100644
index b11ca52988d6d6dde12a9467f80ea1509eca9f61..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeypress.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeypress
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onkeyup.xml
deleted file mode 100644
index 2a023e8f552629265b3dc96aff1532f9332ae587..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onkeyup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeyup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onload.xml
deleted file mode 100644
index b50f61b6b643d5d4e5b47d43903aef4ab5bb3705..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmousedown.xml
deleted file mode 100644
index 29ed18866b5dab74bf681871bcb444412177423a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmousedown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmousedown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseout.xml
deleted file mode 100644
index 17c1e9da7ce5a106906ae96b33538d4e7fea4301..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseout.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseout
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseover.xml
deleted file mode 100644
index 6d0c28d51bf0b437ff56bbd2878ca991546b2bb4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseover.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseover
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseup.xml
deleted file mode 100644
index b0c71b5706e744515fbe248322667174026be5ed..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onmouseup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onreset.xml
deleted file mode 100644
index e38ed3a668c3d4a512e5757d5abd88b3dd5b7af3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onreset.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onreset
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onresize.xml
deleted file mode 100644
index f567550e0ec60586ddab895c2f30432d229aaa8b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onresize.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onresize
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onsubmit.xml
deleted file mode 100644
index d51966e5dc412376c6681b84958fc9e04b34c49f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onsubmit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onsubmit
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_onunload.xml
deleted file mode 100644
index 3f6ed3bf2818370624e38f577e3879af4cfe746c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_onunload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onunload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_script.xml
deleted file mode 100644
index c51e8882f87c82055d5f118eb5b3d0035a28db47..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_script.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_script_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_script_map_content.xml
deleted file mode 100644
index 699e24de2edaf00cb6132f1eb2a2ba6ce99f36fc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_script_map_content.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains script (maps to content)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body>safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_body_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_body_style.xml
deleted file mode 100644
index cf4a9bdf411b2154c0e63a4eda6ef4861488a6c4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_body_style.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains style
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_applet.xml
deleted file mode 100644
index 415e98757d88fa14486f23abbe332420cd9d7233..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_applet.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains applet
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;applet code="foo.class" codebase="http://example.com">&lt;/applet> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_blink.xml
deleted file mode 100644
index e9d6d4c5030a253bddb7a9974012cd891dd91856..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_blink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains blink
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;blink>safe&lt;/blink> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_crazy.xml
deleted file mode 100644
index 1f05f8a43f8b8314a8e51a9eb36b84482b972575..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_crazy.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--
-Description: item content:encoded is crazy
-Expect:      not bozo and entries[0]['description'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_embed.xml
deleted file mode 100644
index 1f93f0597d06ead7e9fa7317d9e05ed2e8681ee8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_embed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains embed
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;embed src="http://example.com"> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_frame.xml
deleted file mode 100644
index a4afb4045ec6b6ddaa43004dc0baddbbdbf8042c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_frame.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains frame
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_iframe.xml
deleted file mode 100644
index 38ce41e805876af1bd79caee5ea7127a413a541f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_iframe.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains iframe
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;iframe src="http://example.com" /> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_link.xml
deleted file mode 100644
index d1b71f8980b34a08f9073ecdc75e7ad6b7844979..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains link
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_map_content.xml
deleted file mode 100644
index eeedc6b624eb6db386e93b3503935484dda13aa5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_map_content.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains script
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_meta.xml
deleted file mode 100644
index c10b683f09144d864e6a1982134b48d027db46e6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_meta.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains meta
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_object.xml
deleted file mode 100644
index f78f9470d09781ac3af307d9c28b4892885bc593..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_object.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains object
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onabort.xml
deleted file mode 100644
index ef3aa24e4a65bdba230798dcf2c792b7d196a5e5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onabort.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onabort
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onblur.xml
deleted file mode 100644
index 2ce07872800e3c2da5206ff56cb4a5bba6911b4a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onblur.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onblur
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onchange.xml
deleted file mode 100644
index b486c17db445657ba9249aa39c6972f2c2f07a6b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onchange.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onchange
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onclick.xml
deleted file mode 100644
index d09e92c81491458631c26164aa8a0e087de7d203..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_ondblclick.xml
deleted file mode 100644
index 6471081a63c92a6c1aa873e2e95278a912cc61e1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_ondblclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains ondblclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onerror.xml
deleted file mode 100644
index 8d4b4ff3e4d30e88280841faf7e5017ccfeeb0c6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onerror.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onerror
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onfocus.xml
deleted file mode 100644
index f8265b65076317ef0dc4b2fc8bf109cb7ab8c09c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onfocus.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onfocus
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeydown.xml
deleted file mode 100644
index f7b12784e400da694b0ad20f0a46a3c306472ddd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeydown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onkeydown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeypress.xml
deleted file mode 100644
index ee3fa7fe9cc3f90e7af49db9dc3f8b72972da1f4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeypress.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onkeypress
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeyup.xml
deleted file mode 100644
index 1acea49f4ddee7feae2fdd28b8410dd3b9db33b9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onkeyup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onkeyup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onload.xml
deleted file mode 100644
index 49fed6def59282b67026d6dd52d29514d6e68421..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmousedown.xml
deleted file mode 100644
index 9628e7c7f47b97872329776d270e2c487f03ce87..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmousedown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onmousedown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseout.xml
deleted file mode 100644
index 4e5b3c1ad55b1076cc5df79e2f612ad3e69625b5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseout.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onmouseout
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseover.xml
deleted file mode 100644
index 3c1e02165175f9b403e20c265cb91bc1f8710ab4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseover.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onmouseover
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseup.xml
deleted file mode 100644
index d1df98f530707abafb7e78ff1599263eac429a92..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onmouseup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onmouseup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onreset.xml
deleted file mode 100644
index 469b429fec64cc905e9ddb902bd314a5d690b08d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onreset.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onreset
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onresize.xml
deleted file mode 100644
index 67bd116eca0f53733426e8b00d3de204deb035d9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onresize.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onresize
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onsubmit.xml
deleted file mode 100644
index 5acd05e84376454c019e0a860b648651c9cf8600..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onsubmit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onsubmit
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onunload.xml
deleted file mode 100644
index 458a056771a038019dfd43a444ee0a71ae27c479..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_onunload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains onunload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script.xml
deleted file mode 100644
index f7ed178dc646557bb83ebe64ec2e07d96ba1b087..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_cdata.xml
deleted file mode 100644
index 89adffb803f7954e5f85769c510d696700b7f08f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_cdata.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_map_content.xml
deleted file mode 100644
index ee8d3afa622b72dcb2414f936a1db7f33caca607..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_map_content.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains script (maps to content)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_nested_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_nested_cdata.xml
deleted file mode 100644
index 5663c57f9a556a8a0058c28957c8172b2356a2b7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_script_nested_cdata.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: ensure nested CDATA sections are sanitized properly
-Expect: not bozo and entries[0]['content'][0]['value'] == u'&lt;![CDATA[]]&gt;'
--->
-<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
-<channel>
-  <item>
-    <content:encoded><![CDATA[<![CDATA[<script></script>]]&gt;]]></content:encoded>
-  </item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_style.xml
deleted file mode 100644
index 1b9f957cba7aa4f5926b104b7909a0399d2d6fac..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_content_encoded_style.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item content:encoded contains style
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
-<channel>
-<item>
-<content:encoded>&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></content:encoded>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_applet.xml
deleted file mode 100644
index 8e694c9349298ec49500b1a7b8ef6a2e3f92bd62..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_applet.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains applet
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_blink.xml
deleted file mode 100644
index c84dedefbf11448f00784864508dfdd56abb44f2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_blink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains blink
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;blink>safe&lt;/blink> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_crazy.xml
deleted file mode 100644
index 13e161abb03734dc711d32e72e77e23ed540509c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_crazy.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<!--
-Description: item description is crazy
-Expect:      not bozo and entries[0]['description'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<rss version="2.0">
-<channel>
-<title>Crazy RSS</title>
-<description>Contains unsafe script</description>
-<link>http://crazy.example.com/</link>
-<language>en</language>
-<item>
-<description>
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_embed.xml
deleted file mode 100644
index 82524aad59cdf1aac8818fde79b39d81f5665b6f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_embed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains embed
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;embed src="http://example.com/"> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_frame.xml
deleted file mode 100644
index 3ca0fa55e5d8d48e4ea9cd372d2973536cbbabb3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_frame.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains frame
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_iframe.xml
deleted file mode 100644
index 93866748f058ededcae6114b2a134f9dc2b728c4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_iframe.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains iframe
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;iframe src="http://example.com/"/> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_link.xml
deleted file mode 100644
index 0d8956db499c7699cd5c3258143e616885b1b62e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains link
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_meta.xml
deleted file mode 100644
index d9bfb014d26a97334d6261fe5a7e40fd8d9a0748..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_meta.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains meta
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_object.xml
deleted file mode 100644
index 9b197da1cef0c652e82f03e1b82ab398f10b75f3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_object.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains object
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onabort.xml
deleted file mode 100644
index 418885b19bf30b62333b58cb6a63e4850cde1150..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onabort.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onabort
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onblur.xml
deleted file mode 100644
index 121c72346e310b24b4a6b0062559c8870d217888..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onblur.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onblur
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onchange.xml
deleted file mode 100644
index e37c8c8a86b08b9a3fb914c20c14399c1916d6cb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onchange.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onchange
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onclick.xml
deleted file mode 100644
index 58c2d565642edf396dbc2311f4b35bc229a275c2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_ondblclick.xml
deleted file mode 100644
index 9acaa1137a3d5048fc845c9d8d8fe53983de33de..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_ondblclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains ondblclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onerror.xml
deleted file mode 100644
index 32c0cfb2bd30fa387ec3d52af090d8eb4e3f15c5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onerror.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onerror
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onfocus.xml
deleted file mode 100644
index 7c07c7e69706fd232178b70f7d2917f598887ef7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onfocus.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onfocus
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onkeydown.xml
deleted file mode 100644
index 39f67db350c66482eb41f05c41f9d8c7136d12ae..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeydown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onkeydown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onkeypress.xml
deleted file mode 100644
index d1e4943baf38fba067cca96b5e4a124f0b737d58..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeypress.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onkeypress
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onkeyup.xml
deleted file mode 100644
index 31b5117cee6ca640211a39b60488f09db7e9c2c3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onkeyup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onkeyup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onload.xml
deleted file mode 100644
index ebd8bd371b3cec75254b2f079b70329c76e2c471..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmousedown.xml
deleted file mode 100644
index 7433d4e5193762dc47befbacf30f8027b0940992..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmousedown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onmousedown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseout.xml
deleted file mode 100644
index 6090a130dcdbf76595cbf46a8c0bcab939b216f2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseout.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onmouseout
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseover.xml
deleted file mode 100644
index 479c311bf212f11c6c54f7bc5dc3a5fa37696e04..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseover.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onmouseover
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseup.xml
deleted file mode 100644
index d8daa019909b15d295f773cd09f1d88c842f632a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onmouseup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onmouseup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onreset.xml
deleted file mode 100644
index b2f3f1831d13106dcb78f8f4f7033a0c53888120..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onreset.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onreset
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onresize.xml
deleted file mode 100644
index 4295a4ba0345dc2efc9d21cfa490191847bb88ba..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onresize.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onresize
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onsubmit.xml
deleted file mode 100644
index 125fe5c14350de9a46c9160c9b4f9e9fafd46c18..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onsubmit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onsubmit
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_onunload.xml
deleted file mode 100644
index b4dc59191bed810c42629b6444df9ab3d094fd3d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_onunload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains onunload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_script.xml
deleted file mode 100644
index b158ce7fa1bdf8e2b4d6a6e8d17d8e548750953d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_script.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_script_cdata.xml
deleted file mode 100644
index 1a40c2fc4a7e42efff5c72e09a18b6e98cf8e627..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_script_cdata.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_script_map_summary.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_script_map_summary.xml
deleted file mode 100644
index d90a7aede6255c9c1eddf5f2a05e85fdacb1f157..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_script_map_summary.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains script (maps to content)
-Expect:      not bozo and entries[0]['summary'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_description_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_description_style.xml
deleted file mode 100644
index 68a05eb49c7240489ded36b96b357bbb3b620685..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_description_style.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item description contains style
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></description>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_applet.xml
deleted file mode 100644
index 25a1c1ba17c4ad2b33ed2f4609b37d563d8234e1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_applet.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains applet
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;applet code="foo.class" codebase="http://example.com/">&lt;/applet> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_blink.xml
deleted file mode 100644
index edda4f489cda8b3a6e409d43de16a3e531a44f6a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_blink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains blink
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;blink>safe&lt;/blink> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_crazy.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_crazy.xml
deleted file mode 100644
index d92918385cc7caad8b71a05d166ccd0022a8407e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_crazy.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--
-Description: item fullitem is crazy
-Expect:      not bozo and entries[0]['description'] == u'Crazy HTML -' + u'- Can Your Regex Parse This?\n\n\n\n<!-' + u'- <script> -' + u'->\n\n<!-' + u'- \n\t<script> \n-' + u'->\n\n\n\nfunction executeMe()\n{\n\n\n\n\n/* \n<h1>Did The Javascript Execute?</h1>\n<div>\nI will execute here, too, if you mouse over me\n</div>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>
-&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-&lt;html xmlns="http://www.w3.org/1999/xhtml">
-&lt;head>
-&lt;title>Crazy HTML -- Can Your Regex Parse This?&lt;/title>
-
-&lt;/head>
-&lt;body    notRealAttribute="value"onload="executeMe();"foo="bar"
-
->
-&lt;!-- &lt;script> -->
-
-&lt;!-- 
-	&lt;script> 
--->
-
-&lt;/script>
-
-
-&lt;script
-
-
->
-
-function executeMe()
-{
-
-
-
-
-/* &lt;script> 
-function am_i_javascript()
-{
-	var str = "Some innocuously commented out stuff";
-}
-&lt; /script>
-*/
-
-	
-	
-	
-	
-	
-	
-	
-	
-	alert("Executed");
-}
-
-                                   &lt;/script
-
-
-
->
-&lt;h1>Did The Javascript Execute?&lt;/h1>
-&lt;div notRealAttribute="value
-"onmouseover="
-executeMe();
-"foo="bar">
-I will execute here, too, if you mouse over me
-&lt;/div>
-
-&lt;/body>
-
-&lt;/html>
-</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_embed.xml
deleted file mode 100644
index dfa85cb780d688dac12b366bdd17142ebc308bf3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_embed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains embed
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;embed src="http://example.com/"> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_frame.xml
deleted file mode 100644
index aa10c3aa32f3ab43a2774fc1bbc0ce0251d96218..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_frame.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains frame
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;frameset rows="*">&lt;frame src="http://example.com/">&lt;/frameset> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_iframe.xml
deleted file mode 100644
index 7b23d2693cb78c0fb1de763e2870309b8dda4cc2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_iframe.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains iframe
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;iframe src="http://example.com/"/> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_link.xml
deleted file mode 100644
index 9cd909bd3b61fabab16dc9caa4fc940d6141ff68..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains link
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;link rel="stylesheet" type="text/css" href="http://example.com/evil.css"> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_meta.xml
deleted file mode 100644
index 520185628e14ae1a0ecd50e085d5b534af55f9f7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_meta.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains meta
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;meta http-equiv="Refresh" content="0; URL=http://example.com/"> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_object.xml
deleted file mode 100644
index f5df5c1bcd601a7868c4265ec083d65668014d4e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_object.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains object
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC"> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onabort.xml
deleted file mode 100644
index 528aa42c56933782a254cc7a15da82e2ff2e97c2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onabort.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onabort
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onblur.xml
deleted file mode 100644
index c302e997ca106614c3c4534805bd942b91a2089d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onblur.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onblur
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onchange.xml
deleted file mode 100644
index 28282e2e263aae70cb3e36277a77a7958e3afd4e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onchange.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onchange
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onclick.xml
deleted file mode 100644
index 59a379b1126c3855422e56870b3b3cc231839ca5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_ondblclick.xml
deleted file mode 100644
index f493d93af28fee8f50f30a451eec4d0abf57c9e2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_ondblclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains ondblclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onerror.xml
deleted file mode 100644
index 5b5bcecbf0499fb34ce81dcf63b046370ba30373..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onerror.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onerror
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onfocus.xml
deleted file mode 100644
index bb221a5c5827c9bc07d58eee096fa915425f86cc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onfocus.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onfocus
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeydown.xml
deleted file mode 100644
index fae1baa94f70297ad61a84f76bb8e1841dac605e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeydown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onkeydown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeypress.xml
deleted file mode 100644
index 5165a6bc55f2df71f8cf182a7f22b79ae8c5b79b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeypress.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onkeypress
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeyup.xml
deleted file mode 100644
index 253849f6b21c75b9281dbf8468201fd0a850c886..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onkeyup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onkeyup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onload.xml
deleted file mode 100644
index 8d12e39f0af3863086286e364979b3dc6d7837df..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmousedown.xml
deleted file mode 100644
index 458060b59f7249dc0a39260e6efd8f2baa878cce..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmousedown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onmousedown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseout.xml
deleted file mode 100644
index 6c29bbd9ba2f0c172a4d7a06460f8d9c7c1f6711..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseout.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onmouseout
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseover.xml
deleted file mode 100644
index f6fb17b8846c1bd07a5ead46a43161301d20adf9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseover.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onmouseover
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseup.xml
deleted file mode 100644
index aa259b0a1cec73e57e7931ab4d65929c99c7a241..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onmouseup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onmouseup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onreset.xml
deleted file mode 100644
index 8fb27e17bcc7fc12574d469f9017d29d2544e895..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onreset.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onreset
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onresize.xml
deleted file mode 100644
index b50a302085033d44ed8ae3939cba6b96bb285a13..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onresize.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onresize
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onsubmit.xml
deleted file mode 100644
index d9e93efa04cd6224c353e799843f703abf160135..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onsubmit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onsubmit
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onunload.xml
deleted file mode 100644
index 8fc6faecaf821b163cda0c6e05a9dc9916223a57..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_onunload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains onunload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script.xml
deleted file mode 100644
index 79f8348321eb1f5d1bcebe14b518797fd0d3e35d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_cdata.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_cdata.xml
deleted file mode 100644
index 288abc29a7186f868f7cfe97d3273a351e529907..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_cdata.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem><![CDATA[safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description]]></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_map_summary.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_map_summary.xml
deleted file mode 100644
index 8009588a8bf41578032fe4420adbe44bba223b9b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_script_map_summary.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains script (maps to content)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>safe&lt;script type="text/javascript">location.href='http:/'+'/example.com/';&lt;/script> description</fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_fullitem_style.xml
deleted file mode 100644
index 7a1a9dcce87934695a429cdc95db59bbcac1585c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_fullitem_style.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item fullitem contains style
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<fullitem>&lt;a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus&lt;/a></fullitem>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_applet.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_applet.xml
deleted file mode 100644
index 851e8e7946266656f82b904a21337559f1a7f706..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_applet.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains applet
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<applet code="foo.class" codebase="http://example.com/" ></applet> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_blink.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_blink.xml
deleted file mode 100644
index c83b046c9e75f3c888f63efe5e4f656cde5be7a7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_blink.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains blink
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><blink>safe</blink> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_embed.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_embed.xml
deleted file mode 100644
index a87d908e4ece261b28a6d68c1737b8dc528a46fd..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_embed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains embed
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<embed src="http://example.com/" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_frame.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_frame.xml
deleted file mode 100644
index 2535b58e772f84ba5e85ddb1c14ebcf3fd775e62..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_frame.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains frame
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<frameset rows="*"><frame src="http://example.com/" /></frameset> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_iframe.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_iframe.xml
deleted file mode 100644
index 5929e87429195946a339cc2393210261c4cb40b1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_iframe.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains iframe
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<iframe src="http://example.com/"/> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_link.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_link.xml
deleted file mode 100644
index a9f10e6d4257eaaae6e0492c498fa76ad3ba161c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_link.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains link
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<link rel="stylesheet" type="text/css" href="http://example.com/evil.css" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_meta.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_meta.xml
deleted file mode 100644
index 60f379d3d7fa94fea962cd705efc49c58e1c93b8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_meta.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains meta
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<meta http-equiv="Refresh" content="0; URL=http://example.com/" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_object.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_object.xml
deleted file mode 100644
index d826490460bc8ecf92a843756b7afd5f7b76eba3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_object.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains object
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<object classid="clsid:C932BA85-4374-101B-A56C-00AA003668DC" /> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onabort.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onabort.xml
deleted file mode 100644
index bc20e518461617202b8449a447ce326fb7787d24..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onabort.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onabort
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onabort="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onblur.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onblur.xml
deleted file mode 100644
index c09939e8c925816e9b1bd81ed08a487408f75344..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onblur.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onblur
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onblur="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onchange.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onchange.xml
deleted file mode 100644
index 26538b7f20e835e7a4fab8f60350bee936ecb677..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onchange.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onchange
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onchange="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onclick.xml
deleted file mode 100644
index 3110dfe05b620e3e7c1c873b77f5af401b47d7ee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onclick="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_ondblclick.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_ondblclick.xml
deleted file mode 100644
index 73e93831e4f04e49c59ab619674aba0211d2b2a7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_ondblclick.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains ondblclick
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" ondblclick="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onerror.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onerror.xml
deleted file mode 100644
index 3d2f27fa03e826ccd23f4e1a68b4c7ab4cdb0461..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onerror.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onerror
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onerror="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onfocus.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onfocus.xml
deleted file mode 100644
index 712c2fef918a78f49a45443b34bc1ebcb530326f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onfocus.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onfocus
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onfocus="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeydown.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeydown.xml
deleted file mode 100644
index 51beae7f91240e64a8fff225779fd74900bb6175..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeydown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeydown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeydown="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeypress.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeypress.xml
deleted file mode 100644
index 4e0e4c765ccd35e2b435b473397b1485ed141c75..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeypress.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeypress
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeypress="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeyup.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeyup.xml
deleted file mode 100644
index 1fd9da2e680bbed2f17e7e8d3cc2a9e276afcfb1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onkeyup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onkeyup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onkeyup="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onload.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onload.xml
deleted file mode 100644
index 72d2b5b287f253eee1443f0b0ff28cce9e6c60fb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onload="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmousedown.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmousedown.xml
deleted file mode 100644
index e07c10acff49185fe0c77753c1a19462e3258e12..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmousedown.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmousedown
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmousedown="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseout.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseout.xml
deleted file mode 100644
index 00ba1c50519971f4655200cf5aef50428375883e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseout.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseout
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseout="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseover.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseover.xml
deleted file mode 100644
index a7101675490bdabaa6ba565f4911d54f3f8e0ac8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseover.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseover
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseover="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseup.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseup.xml
deleted file mode 100644
index 40a26c7ee08feb7936fa812de443b37b3e2125fc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onmouseup.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onmouseup
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onmouseup="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onreset.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onreset.xml
deleted file mode 100644
index edd1b8d0b54676f742c800d8089dbf41f3bf9088..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onreset.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onreset
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onreset="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onresize.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onresize.xml
deleted file mode 100644
index b6d2bb34b61ccd38b1e788ca6907be6a7e88b920..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onresize.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onresize
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onresize="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onsubmit.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onsubmit.xml
deleted file mode 100644
index 540c3e87ea639678d06c4d715db7ba9600c4fcd7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onsubmit.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onsubmit
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onsubmit="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onunload.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onunload.xml
deleted file mode 100644
index f3c7753f0284bbd337a5faf1aff4c6c080fce83b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_onunload.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains onunload
-Expect:      not bozo and entries[0]['description'] == u'<img src="http://www.ragingplatypus.com/i/cam-full.jpg" />'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><img src="http://www.ragingplatypus.com/i/cam-full.jpg" onunload="location.href='http://www.ragingplatypus.com/';" /></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script.xml
deleted file mode 100644
index 407c910e237b9abde47418835defcb5694006273..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains script
-Expect:      not bozo and entries[0]['description'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script_map_content.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script_map_content.xml
deleted file mode 100644
index 870d0374c8f8e3a2b04fa03f0d3ecc0a49618258..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_script_map_content.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains script (maps to content)
-Expect:      not bozo and entries[0]['content'][0]['value'] == u'safe description'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml">safe<script type="text/javascript">location.href='http:/'+'/example.com/';</script> description</body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_style.xml b/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_style.xml
deleted file mode 100644
index bcfc3038e80ebcddb4d49dd2fb0eab2fec7eb393..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/item_xhtml_body_style.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description: item xhtml:body contains style
-Expect:      not bozo and entries[0]['description'] == u'<a href="http://www.ragingplatypus.com/" style="display: block; width: 100%; height: 100%; background-color: black; background-x: center; background-y: center;">never trust your upstream platypus</a>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<body xmlns="http://www.w3.org/1999/xhtml"><a href="http://www.ragingplatypus.com/" style="display:block; position:absolute; left:0; top:0; width:100%; height:100%; z-index:1; background-color:black; background-image:url(http://www.ragingplatypus.com/i/cam-full.jpg); background-x:center; background-y:center; background-repeat:repeat;">never trust your upstream platypus</a></body>
-</item>
-</channel>
-</rss>
\ No newline at end of file
diff --git a/lib/feedparser/tests/wellformed/sanitize/large_atom_feed_that_needs_css_sanitisation.xml b/lib/feedparser/tests/wellformed/sanitize/large_atom_feed_that_needs_css_sanitisation.xml
deleted file mode 100644
index 1692e5d1a870cb1eb85ab556ce583c03b022053d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/large_atom_feed_that_needs_css_sanitisation.xml
+++ /dev/null
@@ -1,528 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-Description:  content can be sanitized without going into an infinite loop due to pathological regexp backtracking
-Expect:       not bozo
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-    <title>Все для Nokia 5800 XM  Nokia N97 Samsung i8910 Omnia HD : Программы, игры, темы, свежие новости и советы</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/" />
-    <link rel="self" type="application/atom+xml" href="http://touchnokia.ru/atom.xml" />
-    <id>tag:touchnokia.ru,2008-12-14://1</id>
-    <updated>2009-04-08T14:25:12Z</updated>
-    <subtitle>Все для Nokia 5800 XM  Nokia N97 Samsung i8910 Omnia HD : Программы, игры, темы, свежие новости и советы</subtitle>
-    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.25-ru</generator>
-
-<entry>
-    <title>Невидимая броня для Вашего Nokia 5800</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/09/nevidimaja-bronja-dlja-vashego-nokia-5800.html" />
-    <id>tag:touchnokia.ru,2009://1.666</id>
-
-    <published>2009-09-09T14:19:45Z</published>
-    <updated>2009-04-08T14:25:12Z</updated>
-
-    <summary></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Новости" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="броня" label="броня" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Вашего" label="Вашего" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Невидимая" label="Невидимая" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<div style="text-align: center;"><a href="http://savecase.ru/TN" target="_blank"><img alt="SaveCase - невидимая броня для вашего девайса." src="http://savecase.ru/downloads/468-60.gif" width="468" height="60" /></a><br /><br /></div>]]>
-        <![CDATA[					<h2>Невидимая броня для Вашего девайса.</h2>
-<p><img alt="SaveCase" src="http://savecase.ru/downloads/news/savecase-logo.gif" width="139" height="150" /></p>
-<p>Вы из тех, кто хотел бы защитить корпус и дисплей своего девайса от царапин и грязи, но при этом не хотели бы нарушать эстетику дизайна девайса, например, чехлом? Великолепная новость для вас - в России появился способ надежной защиты девайсов от царапин и грязи - защитный комплект SaveCase. Пленка, вошедшая в основу данного защитного комплекта, совместно с лабораторией SavePatterns, изначально нашла свое применение в автомобильной промышленности для защиты дорогостоящего лакокрасочного покрытия автомобилей. Теперь это технологическое новшество применяют и для защиты девайсов.</p>
-<p><img alt="SaveCase" src="http://savecase.ru/downloads/news/protected.gif" width="450" height="188" /> </p>
-<p>Описание с официального сайта <a href="http://savecase.ru/TN">www.savecase.ru</a>:</p>
-<p><em>Установив защитный комплект SaveCase на свой телефон, плеер, ноутбук или игровую консоль, Вы получаете 100% невидимую защиту от износа, царапин и трещин на протяжении всего срока использования. SaveCase защищает ваше устройство со всех сторон, делая его практически неуязвимым. Не удивляйтесь, если ваше устройство с SaveCase, даже спустя месяцы использования остается таким же как и в первый день, ведь для этого применяется необычайно прочный материал, в народе получивший название - "легкая броня"! Мы настолько уверены в качестве защитного комплекта SaveCase, что даем на него пожизненную гарантию.</em></p>
-<p><object width="470" height="353"><param name="movie" value="http://video.rutube.ru/00b4ba3668ba366844180570ae87fc7a" /><param name="wmode" value="window" /><param name="allowFullScreen" value="true" /><embed src="http://video.rutube.ru/00b4ba3668ba366844180570ae87fc7a" type="application/x-shockwave-flash" wmode="window" allowfullscreen="true" width="470" height="353"></object></p>
-
-
-					]]>
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: ZXLightControl v.1.0.0</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-zxlightcontrol-v100.html" />
-    <id>tag:touchnokia.ru,2009://1.814</id>
-
-    <published>2009-05-31T10:22:58Z</published>
-    <updated>2009-05-31T10:23:41Z</updated>
-
-    <summary><![CDATA[ZXLightControl v.1.0.0&nbsp;Уменьшено до 50%360 x 640 (38,06 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (37,13 килобайт)&nbsp;Разработчик:&nbsp;ZXStylesЯзык:&nbsp;EnglishСостояние:&nbsp;FreeОписание:&nbsp;Программа для управления подсветкой экрана и клавиш на смартфонах Symbian 9.2, 9.3, 9.4Программа является выделенным в отдельное приложение блоком управления расширенной подсветкой из программы ZXReader.Возможности:* настройка яркости...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Утилиты" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="zxlightcontrol" label="ZXLightControl" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v100" label="v.1.0.0" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>ZXLightControl v.1.0.0</b></span><br /><br /><table id="ipb-attach-table-1634-0-00930600-1243765331" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1634-0-00930600-1243765331" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1634-0-00930600-1243765331" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1634-0-00930600-1243765331" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1634" title="Scr000404.jpg - Размер: 38,06 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243765219_thumb.jpg" id="ipb-attach-img-1634-0-00930600-1243765331" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1634-0-00930600-1243765331" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (38,06 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1633-0-00946000-1243765331" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1633-0-00946000-1243765331" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1633-0-00946000-1243765331" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1633-0-00946000-1243765331" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1633" title="Scr000403.jpg - Размер: 37,13 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243765213_thumb.jpg" id="ipb-attach-img-1633-0-00946000-1243765331" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1633-0-00946000-1243765331" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (37,13 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><b>Разработчик:</b>&nbsp;ZXStyles<br /><b>Язык:</b>&nbsp;English<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Программа для управления подсветкой экрана и клавиш на смартфонах Symbian 9.2, 9.3, 9.4<br />Программа является выделенным в отдельное приложение блоком управления расширенной подсветкой из программы ZXReader.<br /><b>Возможности:</b><br />* настройка яркости подсветки экрана<br />* Отключение подсветки клавиш<br />* Удерживание подсветки экрана включенной бесконечно&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1635" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1635" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">ZXLightControl_v1.0.0_S60_5th_signed.zip</a>&nbsp;( 12,71 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение&nbsp;ведем&nbsp;<a href="http://touchnokia.ru/forums/index.php?showtopic=958">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Voice Inbox v.1.09.112</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-voice-inbox-v109112.html" />
-    <id>tag:touchnokia.ru,2009://1.813</id>
-
-    <published>2009-05-31T09:57:06Z</published>
-    <updated>2009-05-31T09:59:46Z</updated>
-
-    <summary><![CDATA[Voice Inbox v.1.09.112&nbsp;Уменьшено до 50%360 x 640 (53,6 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (50,23 килобайт)&nbsp;Разработчик:&nbsp;WebGateЯзык:&nbsp;Русский ( В архиве лежит русификатор)&nbsp;Состояние:&nbsp;FreeОписание:&nbsp;Программа автоответчик[*]&nbsp;Если у вас&nbsp;разблокирован смартфон&nbsp;то качаем и ставим, если нет то файл необходимо&nbsp;подписать&nbsp;&nbsp;Voice_Inbox_v.1.09.112.zip&nbsp;( 152,48 килобайт )Обсуждение&nbsp;ведем здесь...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Разное" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="inbox" label="Inbox" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v109112" label="v.1.09.112" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="voice" label="Voice" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<font class="Apple-style-span" color="#26394D" face="Verdana" size="6"><span class="Apple-style-span" style="font-size: 19px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; "><span style="font-size: 14pt; line-height: 19px; "><b>Voice Inbox v.1.09.112</b></span><br /><br /><table id="ipb-attach-table-1339-0-82301900-1243763904" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1339-0-82301900-1243763904" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1339-0-82301900-1243763904" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1339-0-82301900-1243763904" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1339" title="Scr000276.jpg - Размер: 53,6 килобайт, Скачано: 9" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242031946_thumb.jpg" id="ipb-attach-img-1339-0-82301900-1243763904" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1339-0-82301900-1243763904" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (53,6 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1340-0-82335200-1243763904" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1340-0-82335200-1243763904" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1340-0-82335200-1243763904" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1340-0-82335200-1243763904" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1340" title="Scr000277.jpg - Размер: 50,23 килобайт, Скачано: 10" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242031954_thumb.jpg" id="ipb-attach-img-1340-0-82335200-1243763904" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1340-0-82335200-1243763904" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (50,23 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><b>Разработчик:</b>&nbsp;WebGate<br /><b>Язык:</b>&nbsp;Русский ( В архиве лежит русификатор)&nbsp;<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Программа автоответчик<br /><b><span style="color: rgb(255, 0, 0); ">[*]</span>&nbsp;</b>Если у вас&nbsp;<a href="http://touchnokia.ru/forums/index.php?showtopic=252" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(255, 0, 0); ">разблокирован смартфон</span></a>&nbsp;то качаем и ставим, если нет то файл необходимо&nbsp;<a href="http://touchnokia.ru/forums/index.php?showtopic=8" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(0, 128, 0); ">подписать</span></a><br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1632" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1632" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Voice_Inbox_v.1.09.112.zip</a>&nbsp;( 152,48 килобайт )<br /></span></b></span></font><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">Обсуждение&nbsp;ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=770">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Smart Movie v.4.15</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-smart-movie-v415.html" />
-    <id>tag:touchnokia.ru,2009://1.812</id>
-
-    <published>2009-05-31T09:24:12Z</published>
-    <updated>2009-05-31T09:26:29Z</updated>
-
-    <summary><![CDATA[Smart Movie v.4.15&nbsp;Уменьшено до 50%360 x 640 (61,1 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (63,72 килобайт)&nbsp;Разработчик:&nbsp;Lonely Cat GamesЯзык:&nbsp;EnglishСостояние:&nbsp;TrialОписание:&nbsp;Наонецто взломаная версияВозможности SmartMovie:- Стандартный формат AVI- Использует подгружаемые кодеки- Портретный и пейзажный режимы просмотра видео- Первый мобильный плеер с поддержкой субтитров, можно смотреть...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="movie" label="Movie" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="smart" label="Smart" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v415" label="v.4.15" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Smart Movie v.4.15</b></span><br /><br /><table id="ipb-attach-table-1090-0-82600900-1243761824" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1090-0-82600900-1243761824" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1090-0-82600900-1243761824" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1090-0-82600900-1243761824" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1090" title="Scr000194.jpg - Размер: 61,1 килобайт, Скачано: 37" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_04_2009/post-1-1240072182_thumb.jpg" id="ipb-attach-img-1090-0-82600900-1243761824" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1090-0-82600900-1243761824" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (61,1 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1091-0-82636200-1243761824" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1091-0-82636200-1243761824" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1091-0-82636200-1243761824" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1091-0-82636200-1243761824" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1091" title="Scr000195.jpg - Размер: 63,72 килобайт, Скачано: 46" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_04_2009/post-1-1240072186_thumb.jpg" id="ipb-attach-img-1091-0-82636200-1243761824" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1091-0-82636200-1243761824" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (63,72 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><br /><b>Разработчик:</b>&nbsp;Lonely Cat Games<br /><b>Язык:</b>&nbsp;English<br /><b>Состояние:</b>&nbsp;Trial<br /><b>Описание:</b>&nbsp;Наонецто взломаная версия<br />Возможности SmartMovie:<br />- Стандартный формат AVI<br />- Использует подгружаемые кодеки<br />- Портретный и пейзажный режимы просмотра видео<br />- Первый мобильный плеер с поддержкой субтитров, можно смотреть видео на многих языках<br />- Поддержка кодеков DirectShow<br />- Очень быстрое конвертирование<br />- Бикубическая интерполяция - максимальное качество ужатого видео<br />- Настраиваемые параметры качества/объема в Smart Movie<br />- Богатые настройки плеера&nbsp;<br /><br /><b>Новое в SmartMovie v.4.15:</b><br />- Возможность выбора папки воспроизведения<br />- Японская и китайская кодировки для субтитров</span><div><span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1631" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">SmartMovie_4.15_not_cracked.zip</a>&nbsp;( 605,24 килобайт )</span> </div><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=626">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: PowerMP3 v.1.15 Beta</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-powermp3-v115-beta.html" />
-    <id>tag:touchnokia.ru,2009://1.811</id>
-
-    <published>2009-05-31T09:13:04Z</published>
-    <updated>2009-05-31T09:21:41Z</updated>
-
-    <summary><![CDATA[PowerMP3 v.1.15 Beta&nbsp;Уменьшено до 50%360 x 640 (52,76 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (48,81 килобайт)&nbsp;Разработчик:&nbsp;MobiFactorЯзык:&nbsp;РусскийСостояние:&nbsp;FreeОписание:&nbsp;Музыкальный плеер. Теперь со специальными скинами полноценно работает и на 5800.Особенности:- поддержка большинства популярных аудио форматов (MP3/OGG/AAC/MP4)- отображение обложки альбома с поиском в интернете- эффекты визуализации-...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="beta" label="Beta" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="powermp3" label="PowerMP3" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v115" label="v.1.15" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>PowerMP3 v.1.15 Beta</b></span></span><div><span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="line-height: 19px; "></span><font class="Apple-style-span" size="6"><span class="Apple-style-span" style="font-size: 19px;"><b><br /></b></span></font><table id="ipb-attach-table-1479-0-50851300-1243761298" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1479-0-50851300-1243761298" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1479-0-50851300-1243761298" style="font-size: 9px; ">&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1479-0-50851300-1243761298" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1479" title="Scr000326.jpg - Размер: 52,76 килобайт, Скачано: 34" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242843276_thumb.jpg" id="ipb-attach-img-1479-0-50851300-1243761298" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1479-0-50851300-1243761298" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (52,76 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1480-0-50890900-1243761298" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1480-0-50890900-1243761298" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1480-0-50890900-1243761298" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1480-0-50890900-1243761298" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1480" title="Scr000327.jpg - Размер: 48,81 килобайт, Скачано: 22" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1242843286_thumb.jpg" id="ipb-attach-img-1480-0-50890900-1243761298" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1480-0-50890900-1243761298" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (48,81 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><b>Разработчик:</b>&nbsp;MobiFactor<br /><b>Язык:</b>&nbsp;Русский<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Музыкальный плеер. Теперь со специальными скинами полноценно работает и на 5800.<br /><b>Особенности:</b><br />- поддержка большинства популярных аудио форматов (MP3/OGG/AAC/MP4)<br />- отображение обложки альбома с поиском в интернете<br />- эффекты визуализации<br />- поддержка скинов<br />- поддержка пультов AD-4х<br />- слип-таймер<br />- воспроизведение по выбранным папкам<br />- создание плей-листов<br />- эквалайзер<br />- расширенное стерео<br /><b>Новое в PowerMP3 v1.15:</b><br />-Исправлена ошибка с переключением дорожек минигарнитурой<br />-Исправлена куча небольших ошибок<br />-Сделали собственный эквалайзер для всех телефонов<br />-Добавлена поддержка папок. Теперь, когда вы удаляете композиции из списка воспроизведения, появится диалоговое окно, где вы можете выбрать для удаления песни с диска<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1630" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1630" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">PowerMP3_v.1.15b.zip</a>&nbsp;( 1,04 мегабайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=862">здесь</a></span></font></div></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: XpressCut v.0.1</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-xpresscut-v01.html" />
-    <id>tag:touchnokia.ru,2009://1.810</id>
-
-    <published>2009-05-31T08:57:55Z</published>
-    <updated>2009-05-31T09:00:27Z</updated>
-
-    <summary><![CDATA[XpressCut v.0.1Разработчик:&nbsp;kAISTЯзык: РусскийСостояние: FreeОписание: программа для Nokia 5800 и N97, предназначенная для простой и быстрой нарезки mp3 файлов на звонок.&nbsp;Теперь нарезать любимую мелодию себе или друзьям можно "на ходу" без помощи компьютера, всего за несколько секунд.&nbsp;Достаточно открыть mp3 файл, установить...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v01" label="v.0.1" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="xpresscut" label="XpressCut" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><font class="Apple-style-span" size="6"><span class="Apple-style-span" style="font-size: 24px; line-height: 24px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; line-height: 19px; "><span style="font-size: 18pt; line-height: 24px; "><b>XpressCut v.0.1</b></span><br /><br /><b>Разработчик</b>:&nbsp;<a href="http://soft.mobile-master.org/" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">kAIST</a><br /><b>Язык</b>: Русский<br /><b>Состояние</b>: Free<br /><b>Описание</b>: программа для Nokia 5800 и N97, предназначенная для простой и быстрой нарезки mp3 файлов на звонок.&nbsp;<br />Теперь нарезать любимую мелодию себе или друзьям можно "на ходу" без помощи компьютера, всего за несколько секунд.&nbsp;<br />Достаточно открыть mp3 файл, установить точку начала, точку окончания, нажать "save" и рингтон готов!&nbsp;<br /><b>Инструкция по применению</b>: сверху "трека" распологается полоса покрутки, переместив которую, выбирите нужную позицию. Установите курсор в нужную позицию, ткнув стилусом на "треке". С места, где установлен курсор, трек можно проиграть, нажав на "play" (остановить можно, нажав на ту же кнопку). Установите метки начала и конца нарезки, воспользовавшись соответствующими кнопками. После этого, можно нажать на "save". После сохранения трека, его можно прослушать.&nbsp;<br />ВНИМАНИЕ!! Программа работает только с mp3 файлами,созданными с постоянным битрейтом!&nbsp;<br /><b>Для работоспособности нужен python не ниже версии 1.9.4. Python и программу ставить на один и тот же диск!&nbsp;</b><br /><table id="ipb-attach-table-1627-0-99970000-1243760335" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1627-0-99970000-1243760335" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1627-0-99970000-1243760335" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1627-0-99970000-1243760335" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1627" title="Scr000400.jpg - Размер: 38,46 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243760017_thumb.jpg" id="ipb-attach-img-1627-0-99970000-1243760335" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1627-0-99970000-1243760335" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (38,46 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1626-0-99981600-1243760335" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1626-0-99981600-1243760335" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1626-0-99981600-1243760335" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1626-0-99981600-1243760335" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1626" title="Scr000399.jpg - Размер: 59,26 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243760011_thumb.jpg" id="ipb-attach-img-1626-0-99981600-1243760335" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1626-0-99981600-1243760335" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (59,26 килобайт)</div></div></td></tr></tbody></table>&nbsp;</span><br /></b></span></font><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1628" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1628" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Python_1.9.5.zip</a>&nbsp;( 2,75 мегабайт )<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1629" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1629" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">XpressCut_0.1_ru.zip</a>&nbsp;( 142,57 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=951">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Игры для Nokia 5800 и Nokia N97: Asphalt 4 Elite Racing 3D v.1.0.1</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/igri-dlja-nokia-5800-i-nokia-n97-asphalt-4-elite-racing-3d-v101.html" />
-    <id>tag:touchnokia.ru,2009://1.808</id>
-
-    <published>2009-05-31T08:37:27Z</published>
-    <updated>2009-05-31T08:44:42Z</updated>
-
-    <summary><![CDATA[Asphalt 4 Elite Racing 3D v1.0.1Разработчик:&nbsp;GameloftЯзык:&nbsp;Английский (В sis версии Русский)Состояние:&nbsp;FreeОписание:&nbsp;Долгожданная, великолепная, бриллиантовая 3D версия самых лучших гонок для мобильного Asphalt 4: Elite Racing 3D! Ты до сих пор это читаешь? Быстро качать, ты не должен пропустить эту игру!-10 удивительных автомобилей...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Игры для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="3d" label="3D" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="4" label="4" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="asphalt" label="Asphalt" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="elite" label="Elite" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="racing" label="Racing" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v101" label="v.1.0.1" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Игры" label="Игры" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<font class="Apple-style-span" color="#26394D" face="Verdana" size="6"><span class="Apple-style-span" style="font-size: 19px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; "><span style="font-size: 14pt; line-height: 19px; "><b>Asphalt 4 Elite Racing 3D v1.0.1</b></span><br /><br /><b>Разработчик:</b>&nbsp;Gameloft<br /><b>Язык:</b>&nbsp;Английский (В sis версии Русский)<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Долгожданная, великолепная, бриллиантовая 3D версия самых лучших гонок для мобильного Asphalt 4: Elite Racing 3D! Ты до сих пор это читаешь? Быстро качать, ты не должен пропустить эту игру!<br />-10 удивительных автомобилей и мотоциклов, включая такие, как Bugatti Veyron, Ferrari F430 Spider, Nissan GT-R, Ducati 1098.<br />-Гоняй по шести самых горячих городам мира: Монте Карло, Беверли Хиллз, Шангай, Нью-Йорк, Дюбай, Париж.<br />-Удивительная 3D графика просто захватывает дыхание!<br />-Тюнингуй свой автомобиль в собственном гараже!<br />-Наслаждайся пятью различными режимами игры, такими как преследование, дрифт, и сбей всех.<br />-Адаптируйся в различных погодных условиях: сможешь ли управлять своим автомобилем в ливень?<br /><table id="ipb-attach-table-1607-0-92318400-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1607-0-92318400-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1607-0-92318400-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1607-0-92318400-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1607" title="Scr000391.jpg - Размер: 61,07 килобайт, Скачано: 17" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243712008_thumb.jpg" id="ipb-attach-img-1607-0-92318400-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1607-0-92318400-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (61,07 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1608-0-92356700-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1608-0-92356700-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1608-0-92356700-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1608-0-92356700-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1608" title="Scr000393.jpg - Размер: 63,54 килобайт, Скачано: 62" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243712016_thumb.jpg" id="ipb-attach-img-1608-0-92356700-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1608-0-92356700-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">640 x 360 (63,54 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1609" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1609" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Asphalt4.zip</a>&nbsp;( 684,82 килобайт )<br /><br /><b>И версия Asphalt 4 HD в sis</b><br /><table id="ipb-attach-table-1622-0-92421200-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1622-0-92421200-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1622-0-92421200-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1622-0-92421200-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1622" title="screen1.jpg - Размер: 72,42 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243758764_thumb.jpg" id="ipb-attach-img-1622-0-92421200-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1622-0-92421200-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">639 x 359 (72,42 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><table id="ipb-attach-table-1623-0-92441100-1243759431" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1623-0-92441100-1243759431" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 240px; height: 173px; text-align: center; "><div id="ipb-attach-ct-1623-0-92441100-1243759431" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 63%</div><a id="ipb-attach-url-1623-0-92441100-1243759431" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1623" title="screen2.jpg - Размер: 60,41 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243758819_thumb.jpg" id="ipb-attach-img-1623-0-92441100-1243759431" class="ipb" width="240" height="135" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1623-0-92441100-1243759431" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">639 x 359 (60,41 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1624" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1624" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">Asphalt4.N5800.Unsigned.zip</a>&nbsp;( 5,35 мегабайт )</span><br /></b></span></font><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=949">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Игры для Nokia 5800 и Nokia N97: 3D Fast and Furious</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/igri-dlja-nokia-5800-i-nokia-n97-3d-fast-and-furious.html" />
-    <id>tag:touchnokia.ru,2009://1.809</id>
-
-    <published>2009-05-30T19:47:24Z</published>
-    <updated>2009-05-31T08:24:20Z</updated>
-
-    <summary><![CDATA[3D Fast and FuriousРазработчик:&nbsp;i-playЯзык:&nbsp;АнглийскийСостояние:Описание:&nbsp;Хорошая игра с 3D графикой&nbsp;Уменьшено до 50%360 x 640 (34,56 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (44,54 килобайт)&nbsp;&nbsp;&nbsp;3D_Fast_and_Furious_n5800.zip&nbsp;( 675,77 килобайт ) Обсуждение ведем здесь...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Игры для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="3d" label="3D" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="and" label="and" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="fast" label="Fast" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="furious" label="Furious" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Игры" label="Игры" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>3D Fast and Furious</b></span><br /><br /><b>Разработчик:</b>&nbsp;i-play<br /><b>Язык:</b>&nbsp;Английский<br /><b>Состояние:</b><br /><b>Описание:</b>&nbsp;Хорошая игра с 3D графикой<br /><table id="ipb-attach-table-1616-0-66426500-1243758190" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1616-0-66426500-1243758190" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1616-0-66426500-1243758190" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1616-0-66426500-1243758190" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1616" title="Scr000396.jpg - Размер: 34,56 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243757911_thumb.jpg" id="ipb-attach-img-1616-0-66426500-1243758190" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1616-0-66426500-1243758190" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (34,56 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1617-0-66441400-1243758190" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1617-0-66441400-1243758190" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1617-0-66441400-1243758190" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1617-0-66441400-1243758190" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1617" title="Scr000397.jpg - Размер: 44,54 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243757917_thumb.jpg" id="ipb-attach-img-1617-0-66441400-1243758190" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1617-0-66441400-1243758190" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (44,54 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1621" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1621" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">3D_Fast_and_Furious_n5800.zip</a>&nbsp;( 675,77 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=956">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Kaspersky Mobile Security 8.0 release v.8.0.51 - Обновление</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-kaspersky-mobile-security-80-release-v8051---obnovlenie.html" />
-    <id>tag:touchnokia.ru,2009://1.807</id>
-
-    <published>2009-05-30T19:16:24Z</published>
-    <updated>2009-05-30T19:46:19Z</updated>
-
-    <summary><![CDATA[Kaspersky Mobile Security 8.0 release v.8.0.51Разработчик:&nbsp;ЗАО "Лаборатория Касперского"Язык:&nbsp;РусскийСостояние:&nbsp;Free&nbsp;(действительна до 1.02.2048 года)Описание:&nbsp;Антивирус Касперского® Mobile это удобное и надежное решение для защиты смартфонов под управлением Symbian OS и Windows Mobile от вредоносных программ для мобильных платформ.ПреимуществаЗащита от мобильных вирусов в режиме реального...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Безопасность" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="80" label="8.0" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="kaspersky" label="Kaspersky" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="mobile" label="Mobile" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="release" label="release" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="security" label="Security" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v8051" label="v.8.0.51" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<font class="Apple-style-span" color="#26394D" face="Verdana" size="6"><span class="Apple-style-span" style="font-size: 19px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><b><span class="Apple-style-span" style="font-size: 12px; font-weight: normal; "><span style="font-size: 14pt; line-height: 19px; "><b>Kaspersky Mobile Security 8.0 release v.8.0.51</b></span><br /><br /><b>Разработчик:</b>&nbsp;ЗАО "Лаборатория Касперского"<br /><b>Язык:</b>&nbsp;Русский<br /><b>Состояние:</b>&nbsp;Free&nbsp;<u><i>(действительна до 1.02.2048 года)</i></u><br /><b>Описание:</b>&nbsp;Антивирус Касперского® Mobile это удобное и надежное решение для защиты смартфонов под управлением Symbian OS и Windows Mobile от вредоносных программ для мобильных платформ.<br />Преимущества<br />Защита от мобильных вирусов в режиме реального времени<br />Защита от спама в SMS/EMS/MMS с помощью черных и белых списков<br />Незаметная работа в фоновом режиме<br />Автоматическое обновление антивирусных баз<br />Основные функции<br />Антивирусная проверка встроенной памяти телефона, а также карт памяти по требованию<br />Проверка всех входящих или модифицируемых объектов без участия пользователя<br />Полная антивирусная проверка по расписанию в удобное для пользователя время<br />Бесплатная техническая поддержка по вопросам установки, активации, настройки и эксплуатации продукта<br /><br /><table id="ipb-attach-table-1605-0-65086900-1243712699" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1605-0-65086900-1243712699" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1605-0-65086900-1243712699" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1605-0-65086900-1243712699" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1605" title="Scr000390.jpg - Размер: 42,68 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243710731_thumb.jpg" id="ipb-attach-img-1605-0-65086900-1243712699" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1605-0-65086900-1243712699" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (42,68 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1604-0-65116400-1243712699" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1604-0-65116400-1243712699" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1604-0-65116400-1243712699" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1604-0-65116400-1243712699" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1604" title="Scr000389.jpg - Размер: 69,83 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243710725_thumb.jpg" id="ipb-attach-img-1604-0-65116400-1243712699" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1604-0-65116400-1243712699" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (69,83 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1610" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1610" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">kaspersky_mobil.zip</a>&nbsp;( 885,88 килобайт )&nbsp;<font class="Apple-style-span" style="font-size: 0.8em; ">- <i>в архиве находится инструкция на английском по регистрации программы</i></font></span><br /></b></span></font><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=478">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Dudu Recorder v.3.20</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-dudu-recorder-v320.html" />
-    <id>tag:touchnokia.ru,2009://1.806</id>
-
-    <published>2009-05-30T18:37:40Z</published>
-    <updated>2009-05-30T18:39:45Z</updated>
-
-    <summary><![CDATA[Dudu Recorder v.3.20Разработчик:&nbsp;HongDi TechnologyЯзык:&nbsp;English&nbsp;Состояние:&nbsp;Free (для регистрации вводим&nbsp;12090704Описание:&nbsp;Маленький диктофон, имеющий функции: записывает в формате АМR, умеет сортировать записи, есть авто-старт, неограниченная длительность записи (зависит от количества свободного места на диске), скрывает записи, выбор памяти для записи. Если при установке выдает ошибка...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Мультимедиа" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="dudu" label="Dudu" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="recorder" label="Recorder" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v320" label="v.3.20" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Dudu Recorder v.3.20</b></span><br /><br /><b>Разработчик:</b>&nbsp;HongDi Technology<br /><b>Язык:</b>&nbsp;English&nbsp;<br /><b>Состояние:</b>&nbsp;Free (для регистрации вводим&nbsp;<span style="color: rgb(0, 255, 0); ">12090704</span><br /><b>Описание:</b>&nbsp;Маленький диктофон, имеющий функции: записывает в формате АМR, умеет сортировать записи, есть авто-старт, неограниченная длительность записи (зависит от количества свободного места на диске), скрывает записи, выбор памяти для записи. Если при установке выдает ошибка обновления удалите предыдущие версии!<br /><b>Изменения в v.3.20:</b><br />-Добавлена защита паролем<br />-горячии клавиши<br />-скрытый режим (приложения не видно в списке запущенных)&nbsp;<br /><table id="ipb-attach-table-1233-0-61670800-1243708652" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1233-0-61670800-1243708652" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1233-0-61670800-1243708652" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1233-0-61670800-1243708652" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1233" title="Scr000232.jpg - Размер: 49,76 килобайт, Скачано: 4" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241347699_thumb.jpg" id="ipb-attach-img-1233-0-61670800-1243708652" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1233-0-61670800-1243708652" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (49,76 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1234-0-61699800-1243708652" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1234-0-61699800-1243708652" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1234-0-61699800-1243708652" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1234-0-61699800-1243708652" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1234" title="Scr000233.jpg - Размер: 50,93 килобайт, Скачано: 2" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241347705_thumb.jpg" id="ipb-attach-img-1234-0-61699800-1243708652" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1234-0-61699800-1243708652" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (50,93 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1602" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1602" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">dudu320.zip</a>&nbsp;( 114,99 килобайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=710">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: MyPhone v.2.11 - Обновление</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-myphone-v211---obnovlenie.html" />
-    <id>tag:touchnokia.ru,2009://1.805</id>
-
-    <published>2009-05-30T17:58:41Z</published>
-    <updated>2009-05-30T17:59:38Z</updated>
-
-    <summary><![CDATA[MyPhone v.2.11Разработчик:&nbsp;immmoooЯзык:&nbsp;АнглийскийСостояние:&nbsp;TrialОписание:&nbsp;Эмулятор интерфейса iPhone на 5800&nbsp;Уменьшено до 50%360 x 640 (32,26 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (63,16 килобайт)&nbsp;&nbsp;&nbsp;myphone.zip&nbsp;( 410,09 килобайт )Обсуждение ведем здесь...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Разное" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="myphone" label="MyPhone" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v211" label="v.2.11" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>MyPhone v.2.11</b></span><br /><br /><b>Разработчик:</b>&nbsp;immmooo<br /><b>Язык:</b>&nbsp;Английский<br /><b>Состояние:</b>&nbsp;Trial<br /><b>Описание:</b>&nbsp;Эмулятор интерфейса iPhone на 5800<br /><table id="ipb-attach-table-1313-0-50472400-1243706274" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1313-0-50472400-1243706274" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1313-0-50472400-1243706274" style="font-size: 9px; ">&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1313-0-50472400-1243706274" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1313" title="Scr000270.jpg - Размер: 32,26 килобайт, Скачано: 36" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241950940_thumb.jpg" id="ipb-attach-img-1313-0-50472400-1243706274" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1313-0-50472400-1243706274" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (32,26 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1314-0-50507200-1243706274" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1314-0-50507200-1243706274" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1314-0-50507200-1243706274" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1314-0-50507200-1243706274" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1314" title="Scr000272.jpg - Размер: 63,16 килобайт, Скачано: 28" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1241950944_thumb.jpg" id="ipb-attach-img-1314-0-50507200-1243706274" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1314-0-50507200-1243706274" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (63,16 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1601" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1601" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">myphone.zip</a>&nbsp;( 410,09 килобайт )<br />Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=762">здесь</a></span>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Eye Call v.1.04</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-eye-call-v104.html" />
-    <id>tag:touchnokia.ru,2009://1.804</id>
-
-    <published>2009-05-30T17:47:01Z</published>
-    <updated>2009-05-30T17:58:12Z</updated>
-
-    <summary><![CDATA[Eye Call v.1.04Разработчик:&nbsp;EyeSight.Язык:&nbsp;АнглийскийСостояние:&nbsp;FreeОписание:&nbsp;Бывает так что кто-то звонит, а звук так неуместен, а с помощью вот этой программы достаточно махнуть рукой и телефон заглушит его. Также можно настроить что-бы на 2-ой взмах отсылалось SMS звонящему.[*]&nbsp;Если у вас&nbsp;разблокирован смартфон&nbsp;то качаем и ставим,...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Разное" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="call" label="Call" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="eye" label="Eye" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v104" label="v.1.04" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Eye Call v.1.04</b></span><br /><br /><b>Разработчик:</b>&nbsp;EyeSight.<br /><b>Язык:</b>&nbsp;Английский<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Бывает так что кто-то звонит, а звук так неуместен, а с помощью вот этой программы достаточно махнуть рукой и телефон заглушит его. Также можно настроить что-бы на 2-ой взмах отсылалось SMS звонящему.<br /><b><span style="color: rgb(255, 0, 0); ">[*]</span>&nbsp;</b>Если у вас&nbsp;<a href="http://touchnokia.ru/forums/index.php?showtopic=252" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(255, 0, 0); ">разблокирован смартфон</span></a>&nbsp;то качаем и ставим, если нет то файл необходимо&nbsp;<a href="http://touchnokia.ru/forums/index.php?showtopic=8" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><span style="color: rgb(0, 128, 0); ">подписать</span></a><br /><table id="ipb-attach-table-1598-0-56466900-1243705624" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1598-0-56466900-1243705624" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1598-0-56466900-1243705624" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1598-0-56466900-1243705624" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1598" title="Scr000385.jpg - Размер: 30,56 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243705383_thumb.jpg" id="ipb-attach-img-1598-0-56466900-1243705624" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1598-0-56466900-1243705624" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (30,56 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1599-0-56483600-1243705624" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1599-0-56483600-1243705624" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1599-0-56483600-1243705624" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1599-0-56483600-1243705624" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1599" title="Scr000388.jpg - Размер: 47,39 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243705390_thumb.jpg" id="ipb-attach-img-1599-0-56483600-1243705624" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1599-0-56483600-1243705624" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (47,39 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1600" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1600" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">eyesight.zip</a>&nbsp;( 1,34 мегабайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=947">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: OVI Store</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-ovi-store.html" />
-    <id>tag:touchnokia.ru,2009://1.803</id>
-
-    <published>2009-05-28T19:57:54Z</published>
-    <updated>2009-05-28T19:59:03Z</updated>
-
-    <summary><![CDATA[OVI StoreРазработчик:&nbsp;Язык:&nbsp;РусскийСостояние:&nbsp;FreeОписание:&nbsp;Программа для скачивания контента из Nokia OVI Store (программы, игры, картинки и т.д) прямо на телефоне.Присутствует возможность фильтрации представленного - только бесплатные.&nbsp;Уменьшено до 50%360 x 640 (61,05 килобайт)&nbsp;&nbsp;Уменьшено до 50%360 x 640 (25,44 килобайт)&nbsp;&nbsp;&nbsp;OVIStore.zip&nbsp;( 616,74 килобайт ) Обсуждение ведем...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Интернет" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="ovi" label="OVI" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="store" label="Store" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>OVI Store</b></span><br /><br /><b>Разработчик:</b>&nbsp;<br /><b>Язык:</b>&nbsp;Русский<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;Программа для скачивания контента из Nokia OVI Store (программы, игры, картинки и т.д) прямо на телефоне.<br />Присутствует возможность фильтрации представленного - только бесплатные.<br /><table id="ipb-attach-table-1594-0-86762900-1243540593" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1594-0-86762900-1243540593" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1594-0-86762900-1243540593" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1594-0-86762900-1243540593" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1594" title="Scr000379.jpg - Размер: 61,05 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243540199_thumb.jpg" id="ipb-attach-img-1594-0-86762900-1243540593" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1594-0-86762900-1243540593" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (61,05 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1595-0-86774400-1243540593" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1595-0-86774400-1243540593" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1595-0-86774400-1243540593" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1595-0-86774400-1243540593" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1595" title="Scr000380.jpg - Размер: 25,44 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243540204_thumb.jpg" id="ipb-attach-img-1595-0-86774400-1243540593" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1595-0-86774400-1243540593" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (25,44 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1596" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1596" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">OVIStore.zip</a>&nbsp;( 616,74 килобайт )</span> <br /><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=934">здесь&nbsp;</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: Talkonaut v.5.51.68</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-talkonaut-v55168.html" />
-    <id>tag:touchnokia.ru,2009://1.802</id>
-
-    <published>2009-05-28T19:16:28Z</published>
-    <updated>2009-05-28T19:18:50Z</updated>
-
-    <summary>Talkonaut v.5.51.68Разработчик: talkonaut.comЯзык: РусскийСостояние: FreeОписание: Talkonaut - это бесплатный GoogleTalk/Jabber IM клиент с голосовыми функциями.Функции:бесплатные звонки на GTalk, MSN Messenger, Yahoo, SIP;отправка и получение сообщений из: GTalk, Jabber, ICQ, MSN, AIM и Yahoo;дешевые звонки через GTalk;бесплатные звонки с вашего существующего...</summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Интернет" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="talkonaut" label="Talkonaut" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v55168" label="v.5.51.68" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b>Talkonaut v.5.51.68</b></span><br /><br /><b>Разработчик</b>: talkonaut.com<br /><b>Язык</b>: Русский<br /><b>Состояние</b>: Free<br /><b>Описание</b>: Talkonaut - это бесплатный GoogleTalk/Jabber IM клиент с голосовыми функциями.<br /><b>Функции:</b><ul><li>бесплатные звонки на GTalk, MSN Messenger, Yahoo, SIP;</li><li>отправка и получение сообщений из: GTalk, Jabber, ICQ, MSN, AIM и Yahoo;</li><li>дешевые звонки через GTalk;</li><li>бесплатные звонки с вашего существующего SIP-счета;</li><li>наличие смайликов, сигналов, передачи файлов через Jabber;</li><li>поддержка Jabber Service Discovery для работы с другими IM клиентами, поиск контактов ICQ и отправка SMS с помощью Mail.RU Agent;</li><li>поддержка сжатия трафика в 5-10 раз.</li></ul><b>Что нового:</b><br /><ul><li>Добавлено расширение (PNG, JPG или GIF) к имени файла при сохранении аватара.</li></ul><table id="ipb-attach-table-1592-0-63012200-1243538186" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1592-0-63012200-1243538186" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1592-0-63012200-1243538186" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1592-0-63012200-1243538186" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1592" title="Scr000002.jpg - Размер: 74,56 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243538165_thumb.jpg" id="ipb-attach-img-1592-0-63012200-1243538186" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1592-0-63012200-1243538186" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (74,56 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1591-0-63028800-1243538186" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1591-0-63028800-1243538186" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1591-0-63028800-1243538186" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1591-0-63028800-1243538186" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1591" title="Scr000001.jpg - Размер: 34,58 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243538155_thumb.jpg" id="ipb-attach-img-1591-0-63028800-1243538186" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1591-0-63028800-1243538186" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (34,58 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1590" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a>&nbsp;&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1590" title="Скачать файл" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; ">talkonaut.zip</a>&nbsp;( 1,29 мегабайт )</span> <div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=928">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-<entry>
-    <title>Программы для Nokia 5800 и Nokia N97: MobileAgent v.1.51</title>
-    <link rel="alternate" type="text/html" href="http://touchnokia.ru/2009/05/programmi-dlja-nokia-5800-i-nokia-n97-mobileagent-v151.html" />
-    <id>tag:touchnokia.ru,2009://1.801</id>
-
-    <published>2009-05-27T20:38:05Z</published>
-    <updated>2009-05-28T19:27:55Z</updated>
-
-    <summary><![CDATA[MobileAgent v.1.51Разработчик:&nbsp;mail.ruЯзык:&nbsp;РусскийСостояние:&nbsp;FreeОписание:&nbsp;- Одновременная работа в агенте, аське и Jabber/GTalk- передача файлов- анимированные смайлы- доступ к почтеи многое другое...Изменения:- анимация интерфейса;- поддержка системных скинов;- поддержка графических скинов;- поддержка Jabber/GTalk/Я.Онлайн/Live Journal и т.п.- расширенный поиск по Агенту;- автостатусы и автоответчик;- работа с...]]></summary>
-    <author>
-        <name>iPod</name>
-        <uri>http://TouchNokia.ru</uri>
-    </author>
-    
-        <category term="Интернет" scheme="http://www.sixapart.com/ns/types#category" />
-    
-        <category term="Программы для Nokia 5800" scheme="http://www.sixapart.com/ns/types#category" />
-    
-    <category term="5800" label="5800" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="mobileagent" label="MobileAgent" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="n97" label="N97:" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="nokia" label="Nokia" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="v151" label="v.1.51" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="для" label="для" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="и" label="и" scheme="http://www.sixapart.com/ns/types#tag" />
-    <category term="Программы" label="Программы" scheme="http://www.sixapart.com/ns/types#tag" />
-    
-    <content type="html" xml:lang="ru" xml:base="http://touchnokia.ru/">
-        <![CDATA[<span class="Apple-style-span" style="color: rgb(38, 57, 77); font-family: Verdana; font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span style="font-size: 14pt; line-height: 19px; "><b><div>MobileAgent v.1.51</div></b></span><br /><b>Разработчик:</b>&nbsp;mail.ru<br /><b>Язык:</b>&nbsp;Русский<br /><b>Состояние:</b>&nbsp;Free<br /><b>Описание:</b>&nbsp;- Одновременная работа в агенте, аське и Jabber/GTalk<br />- передача файлов<br />- анимированные смайлы<br />- доступ к почте<br />и многое другое...<br /><b>Изменения:</b><br />- анимация интерфейса;<br />- поддержка системных скинов;<br />- поддержка графических скинов;<br />- поддержка Jabber/GTalk/Я.Онлайн/Live Journal и т.п.<br />- расширенный поиск по Агенту;<br />- автостатусы и автоответчик;<br />- работа с картами (пока Москва Питер детально, вся Россия в небольшом зуме);<br />- возможность заранее загрузить файлы кэша Москвы и Питера;<br />- показ пробок;<br />- поиск по карте;<br />- позиционирование по GPS или сотовым вышкам;<br />- отправка своего местоположения собеседникам;<br />- просмотр чужих локаций;<br />- виджет на рабочий стол для быстрого доступа к данным о погоде, пробках и валюте.&nbsp;<br /><table id="ipb-attach-table-1570-0-85779200-1243456696" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1570-0-85779200-1243456696" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1570-0-85779200-1243456696" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1570-0-85779200-1243456696" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1570" title="Scr000377.jpg - Размер: 45,85 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243456529_thumb.jpg" id="ipb-attach-img-1570-0-85779200-1243456696" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; cursor: pointer; " /></a><div id="ipb-attach-cb-1570-0-85779200-1243456696" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (45,85 килобайт)</div></div></td></tr></tbody></table>&nbsp;<table id="ipb-attach-table-1571-0-85795300-1243456696" cellspacing="0" cellpadding="0" style="width: auto; display: inline-block; "><tbody><tr><td style="padding-top: 5px; padding-right: 5px; padding-bottom: 5px; padding-left: 5px; "><div id="ipb-attach-div-1571-0-85795300-1243456696" class="resized-linked-image" title="Нажмите для просмотра полного изображения" style="margin-top: 1px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 8px; padding-bottom: 5px; padding-left: 8px; background-color: rgb(134, 161, 184); border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; color: rgb(0, 0, 0); font-size: 10px; width: 180px; height: 358px; text-align: center; "><div id="ipb-attach-ct-1571-0-85795300-1243456696" style="font-size: 9px; "><img src="http://touchnokia.ru/forums/style_images/hi-tech/img-resized.png" border="0" alt="" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " />&nbsp;Уменьшено до 50%</div><a id="ipb-attach-url-1571-0-85795300-1243456696" href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1571" title="Scr000378.jpg - Размер: 48,64 килобайт, Скачано: 0" target="_blank" style="background-image: initial; background-repeat: initial; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; color: rgb(14, 21, 29); text-decoration: underline; background-position: initial initial; "><img src="http://touchnokia.ru/forums/uploads/monthly_05_2009/post-1-1243456538_thumb.jpg" id="ipb-attach-img-1571-0-85795300-1243456696" class="ipb" width="180" height="320" alt="Прикрепленное изображение" title="Нажмите для просмотра полного изображения" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; vertical-align: middle; " /></a><div id="ipb-attach-cb-1571-0-85795300-1243456696" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 9px; text-align: center; ">360 x 640 (48,64 килобайт)</div></div></td></tr></tbody></table>&nbsp;<br /><a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1593" title="Скачать файл" target="_blank"><img src="http://touchnokia.ru/forums/style_images/hi-tech/folder_mime_types/zip.gif" alt="Прикрепленный файл" /></a>
-&nbsp;<a href="http://touchnokia.ru/forums/index.php?act=attach&amp;type=post&amp;id=1593" title="Скачать файл" target="_blank">mobileagent.zip</a> ( 1,36 мегабайт )</span><div><font class="Apple-style-span" color="#26394D" face="Verdana" size="3"><span class="Apple-style-span" style="font-size: 12px; line-height: 19px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">Обсуждение ведем <a href="http://touchnokia.ru/forums/index.php?showtopic=926">здесь</a></span></font></div>]]>
-        
-    </content>
-</entry>
-
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_background_repeat_repeat_x.xml b/lib/feedparser/tests/wellformed/sanitize/style_background_repeat_repeat_x.xml
deleted file mode 100644
index a18a4ed2ec19215e13aeb84fc3600c27fddd8f42..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_background_repeat_repeat_x.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="background-repeat: repeat-x;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="background-repeat: repeat-x;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_background_url.xml b/lib/feedparser/tests/wellformed/sanitize/style_background_url.xml
deleted file mode 100644
index 6a11b45bf0485d2918c767ce38d6852d8bf73d68..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_background_url.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style contains url
-Expect:       not bozo and entries[0]['description'] == '<span style="background-color: #000;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="background-color: #000; background-image: url(/category/images/cafeneon_small.jpg); background-repeat: no-repeat;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_background_yellow.xml b/lib/feedparser/tests/wellformed/sanitize/style_background_yellow.xml
deleted file mode 100644
index a96c7fe3b9a855e1a9127593d17e33eac253f8e8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_background_yellow.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="background: yellow;"
-Expect:       not bozo and entries[0]['description'] == '<span style="background: yellow;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="background: yellow;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_0.xml
deleted file mode 100644
index 082aeb471caf89b1cc3d09acd8f8d871f800efc2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_0.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: 0;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: 0;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: 0;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_1px_solid_rgb_0_0_0_.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_1px_solid_rgb_0_0_0_.xml
deleted file mode 100644
index ead5a4df2b130e9b8222074bc4c2d87e3f947979..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_1px_solid_rgb_0_0_0_.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: 1px solid rgb(0, 0, 0);"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: 1px solid rgb(0, 0, 0);">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: 1px solid rgb(0, 0, 0);"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_3px_solid_ccc.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_3px_solid_ccc.xml
deleted file mode 100644
index 211b47f1dce8dbf9d75863a57fe8d287afb83978..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_3px_solid_ccc.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: 3px solid #ccc;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: 3px solid #ccc;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: 3px solid #ccc;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_0pt.xml
deleted file mode 100644
index 0a61570465f04cb3e5a1c5859c9e635368b88c41..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_0pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-bottom: 0pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-bottom: 0pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-bottom: 0pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dashed.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dashed.xml
deleted file mode 100644
index 3938ecca4c9463c61ff3da9aad849f5bd5e2afdc..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dashed.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-bottom: dashed;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-bottom: dashed;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-bottom: dashed;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dotted.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dotted.xml
deleted file mode 100644
index 6f22f48f317f6e0f493246794c15275df6dea623..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_bottom_dotted.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-bottom: dotted;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-bottom: dotted;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-bottom: dotted;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_collapse_collapse.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_collapse_collapse.xml
deleted file mode 100644
index 6e6d62e944fdeac9c74a9a76dba9072d51e5fb56..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_collapse_collapse.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-collapse: collapse;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-collapse: collapse;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-collapse: collapse;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_left_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_left_0pt.xml
deleted file mode 100644
index 3f00fe0013427a6ba00d6c2fd4841961a5ac3a35..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_left_0pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-left: 0pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-left: 0pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-left: 0pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_medium_none_.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_medium_none_.xml
deleted file mode 100644
index bea1e643af987cef59b788a3f9c0d14581318080..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_medium_none_.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: medium none ;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: medium none ;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: medium none ;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_none_important.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_none_important.xml
deleted file mode 100644
index 1b9dfa94fe082a4f4b04f0366b8d3203a0df7a82..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_none_important.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: none !important;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: none !important;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: none !important;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_right_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_right_0pt.xml
deleted file mode 100644
index d9066f5234eab15127df438c82ab24e9044454ec..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_right_0pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-right: 0pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-right: 0pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-right: 0pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_solid_2px_000000.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_solid_2px_000000.xml
deleted file mode 100644
index 2fc5f4b69324197c7168b1c8d3de2fc5678a8620..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_solid_2px_000000.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border: solid 2px #000000;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border: solid 2px #000000;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border: solid 2px #000000;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_border_top_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_border_top_0pt.xml
deleted file mode 100644
index d12947118625ccdb53183823bc918671989378d2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_border_top_0pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="border-top: 0pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="border-top: 0pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="border-top: 0pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_clear_both.xml b/lib/feedparser/tests/wellformed/sanitize/style_clear_both.xml
deleted file mode 100644
index 2efb73de08ac100facb457308acf08fc23230897..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_clear_both.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="clear: both;"
-Expect:       not bozo and entries[0]['description'] == '<span style="clear: both;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="clear: both;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_000080.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_000080.xml
deleted file mode 100644
index a03fde1e2a3529c87875e201f4c6521dc1e591a6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_000080.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: #000080;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: #000080;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: #000080;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_008.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_008.xml
deleted file mode 100644
index 4f412b304a3232340038ffc2f607d5810a832c71..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_008.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: #008;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: #008;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: #008;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_999999.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_999999.xml
deleted file mode 100644
index e741bfa7be4f9aa8cdc006a0673ec34e5783ff38..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_999999.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: #999999;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: #999999;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: #999999;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_blue.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_blue.xml
deleted file mode 100644
index 06eb8fe72d4a53c7275f2a40d109a598a03fd6b2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_blue.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: blue;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: blue;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: blue;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_maroon.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_maroon.xml
deleted file mode 100644
index 42649ebc2c0b00b6c6cd445ff7a25d8571766a1e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_maroon.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: maroon;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: maroon;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: maroon;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_red.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_red.xml
deleted file mode 100644
index 6cacbbec02e42a0a34e32c642ee12215fcac8d2f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_red.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: red;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: red;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: red;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_rgb_0_128_0_.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_rgb_0_128_0_.xml
deleted file mode 100644
index b269a17f92c600e8a5d3a0ea722bf27c3ed6a730..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_rgb_0_128_0_.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: rgb(0, 128, 0);"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: rgb(0, 128, 0);">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: rgb(0, 128, 0);"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_color_teal.xml b/lib/feedparser/tests/wellformed/sanitize/style_color_teal.xml
deleted file mode 100644
index b5afc8f1ac476f5fb6164a41a8d1ff7c1129df51..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_color_teal.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="color: teal;"
-Expect:       not bozo and entries[0]['description'] == '<span style="color: teal;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="color: teal;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_cursor_pointer.xml b/lib/feedparser/tests/wellformed/sanitize/style_cursor_pointer.xml
deleted file mode 100644
index ee69ca178b7d72344ad163e299ea34df3eadcbcf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_cursor_pointer.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="cursor: pointer;"
-Expect:       not bozo and entries[0]['description'] == '<span style="cursor: pointer;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="cursor: pointer;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_display_block.xml b/lib/feedparser/tests/wellformed/sanitize/style_display_block.xml
deleted file mode 100644
index 95642617f29014f60127ad69252a8f76f40d2e44..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_display_block.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="display: block;"
-Expect:       not bozo and entries[0]['description'] == '<span style="display: block;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="display: block;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_float_left.xml b/lib/feedparser/tests/wellformed/sanitize/style_float_left.xml
deleted file mode 100644
index b9e11fa7819129095f6512972de7ad66fee8825e..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_float_left.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="float: left;"
-Expect:       not bozo and entries[0]['description'] == '<span style="float: left;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="float: left;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_float_right.xml b/lib/feedparser/tests/wellformed/sanitize/style_float_right.xml
deleted file mode 100644
index eb4009cf751053bdddb83c19c4a411a28f98cf70..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_float_right.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="float: right;"
-Expect:       not bozo and entries[0]['description'] == '<span style="float: right;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="float: right;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family__comic_sans_ms.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family__comic_sans_ms.xml
deleted file mode 100644
index 3ae327dc1f067375af618288bc887b5c9bec9202..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_family__comic_sans_ms.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-family : Comic Sans MS;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-family: Comic Sans MS;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-family : Comic Sans MS;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family_arial_sans_serif.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family_arial_sans_serif.xml
deleted file mode 100644
index 5b21c424551a0ad54d1d38ffbc76c9d00c34c879..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_family_arial_sans_serif.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-family: arial,sans-serif;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-family: arial,sans-serif;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-family: arial,sans-serif;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family_lucida_console_.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family_lucida_console_.xml
deleted file mode 100644
index a8a6fe5fb94bf309d35fbdc8e810ca9ebf8b70c3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_family_lucida_console_.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-family: 'Lucida Console';"
-Expect:       not bozo and entries[0]['description'] == '''<span style="font-family: 'Lucida Console';">Some text</span>'''
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-family: 'Lucida Console';"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_family_symbol.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_family_symbol.xml
deleted file mode 100644
index 0221e7a8eab0343a6ad6a01429ea37feb200deee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_family_symbol.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-family: Symbol;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-family: Symbol;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-family: Symbol;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_0_9em.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_0_9em.xml
deleted file mode 100644
index 4b658fcfc37b96729eb1c577342f475309ea5ea2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_0_9em.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-size: 0.9em;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-size: 0.9em;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-size: 0.9em;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_10pt.xml
deleted file mode 100644
index 27a79943df62a579995dd56a9623d49859b039e3..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-size: 10pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-size: 10pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-size: 10pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10px.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_10px.xml
deleted file mode 100644
index ba00024a2e42d10485315e3ba9283182a1e0c45c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_10px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-size: 10px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-size: 10px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-size: 10px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_size_smaller.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_size_smaller.xml
deleted file mode 100644
index 04bf3641aa21c9f1e98fb33cefbb63339ef6d01f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_size_smaller.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-size: smaller;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-size: smaller;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-size: smaller;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_style_italic.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_style_italic.xml
deleted file mode 100644
index 31aa7539b16fa253bcc291f2f14f892af77d8b27..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_style_italic.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-style: italic;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-style: italic;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-style: italic;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_font_weight_bold.xml b/lib/feedparser/tests/wellformed/sanitize/style_font_weight_bold.xml
deleted file mode 100644
index f63a008f8fd4db3e33a91b6ad443d4cd62acd086..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_font_weight_bold.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="font-weight: bold;"
-Expect:       not bozo and entries[0]['description'] == '<span style="font-weight: bold;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="font-weight: bold;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_height_100px.xml b/lib/feedparser/tests/wellformed/sanitize/style_height_100px.xml
deleted file mode 100644
index bba108a59f88725981bd3f403d19f488ebebdeaa..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_height_100px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="height: 100px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="height: 100px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="height: 100px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_height_2px.xml b/lib/feedparser/tests/wellformed/sanitize/style_height_2px.xml
deleted file mode 100644
index 4b2291617af77fe02287f86a57f39b9a2457cafb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_height_2px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="height: 2px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="height: 2px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="height: 2px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_letter_spacing_1px.xml b/lib/feedparser/tests/wellformed/sanitize/style_letter_spacing_1px.xml
deleted file mode 100644
index 23e7b90c897db63ebd8c93645e0f097615989564..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_letter_spacing_1px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="letter-spacing:1px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="letter-spacing: 1px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="letter-spacing:1px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_line_height_normal.xml b/lib/feedparser/tests/wellformed/sanitize/style_line_height_normal.xml
deleted file mode 100644
index 1637198b873ea4a014ff29c158e45022f634bb4f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_line_height_normal.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="line-height: normal;"
-Expect:       not bozo and entries[0]['description'] == '<span style="line-height: normal;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="line-height: normal;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_0.xml
deleted file mode 100644
index 572664ff56993cdcdfe960a65e63fcb602978b13..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_0.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin: 0;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin: 0;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin: 0;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_0_15px_0_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_0_15px_0_0.xml
deleted file mode 100644
index 0ff41b46a28f04e187fa1309789cca27a609cc29..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_0_15px_0_0.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin: 0 15px 0 0;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin: 0 15px 0 0;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin: 0 15px 0 0;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_0px_important.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_0px_important.xml
deleted file mode 100644
index 2c9fb9cd7eea6a2cc1a3302f78c9e35bb8a598d8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_0px_important.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin: 0px !important;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin: 0px !important;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin: 0px !important;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_5px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_5px.xml
deleted file mode 100644
index e64fcffff83d3809c2cab51f590577a544268377..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_5px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin: 5px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin: 5px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin: 5px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_99999em.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_99999em.xml
deleted file mode 100644
index 09e9b2b78d898a593e88cf1619fc8807fe41ccf0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_99999em.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin: 99999em;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin: 99999em;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_0pt.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_0pt.xml
deleted file mode 100644
index 2b7f4a71f0bdb9a500bce31da94475a9f07ba08f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_0pt.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-bottom: 0pt;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-bottom: 0pt;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-bottom: 0pt;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_10px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_10px.xml
deleted file mode 100644
index ab6801a84716d57ddf7a6c0b7ba0c543016c5567..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_bottom_10px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-bottom: 10px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-bottom: 10px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-bottom: 10px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_left_5px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_left_5px.xml
deleted file mode 100644
index be252c76decd5d96dfda2a432bbf0f5fdc90df18..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_left_5px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-left: 5px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-left: 5px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-left: 5px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_right_0px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_right_0px.xml
deleted file mode 100644
index 14fc788c754f304a06d248a1bad2002e1c11677b..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_right_0px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-right: 0px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-right: 0px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-right: 0px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_0in.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_top_0in.xml
deleted file mode 100644
index 906cbb5566a13e520a1800070a6e5554bed57cd5..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_0in.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-top: 0in;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-top: 0in;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-top: 0in;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_10px.xml b/lib/feedparser/tests/wellformed/sanitize/style_margin_top_10px.xml
deleted file mode 100644
index 78fb3c85a8a665aba709e730445a1cadffccdcc6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_margin_top_10px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="margin-top: 10px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="margin-top: 10px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="margin-top: 10px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_moz_background_clip_initial.xml b/lib/feedparser/tests/wellformed/sanitize/style_moz_background_clip_initial.xml
deleted file mode 100644
index f4ab506827d6c2d34c10aa591bde986c46b78f5d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_moz_background_clip_initial.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="-moz-background-clip: initial;"
-Expect:       not bozo and entries[0]['description'] == '<tr>Some text</tr>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;tr style="background: yellow none repeat scroll 0%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;Some text&lt;/tr&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_ansi_language_nl.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_ansi_language_nl.xml
deleted file mode 100644
index 3fea651e4168c064d60312eb755f10c3b8df78d7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_ansi_language_nl.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-ansi-language: NL;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-ansi-language: NL;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_bidi_font_weight_normal.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_bidi_font_weight_normal.xml
deleted file mode 100644
index d075aa0d8d44906ca8df4d9241b7488bb255daba..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_bidi_font_weight_normal.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-bidi-font-weight: normal;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-bidi-font-weight: normal;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_highlight_yellow.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_highlight_yellow.xml
deleted file mode 100644
index b44c6dc40c2d70c7c715713f4eeef498270c40ec..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_highlight_yellow.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-highlight: yellow;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-highlight: yellow;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_layout_grid_align_none.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_layout_grid_align_none.xml
deleted file mode 100644
index 275bfcae954216b82296829b9880f29d1121a7e8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_layout_grid_align_none.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-layout-grid-align: none;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-layout-grid-align: none;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_list_l0_level1_lfo1.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_list_l0_level1_lfo1.xml
deleted file mode 100644
index d743dd10838a6f8329c5fbcdcc9957a086193bee..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_list_l0_level1_lfo1.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-list: l0 level1 lfo1;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-list: l0 level1 lfo1;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_no_proof_yes.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_no_proof_yes.xml
deleted file mode 100644
index 8a9f5b1c2c6c0c635202939bc68a24e808b864d9..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_no_proof_yes.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-no-proof: yes;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-no-proof: yes;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_spacerun_yes.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_spacerun_yes.xml
deleted file mode 100644
index a7ed12c67e919dde7cad4c0c43cb07995e549207..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_spacerun_yes.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-spacerun: yes;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-spacerun: yes;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_mso_tab_count_3.xml b/lib/feedparser/tests/wellformed/sanitize/style_mso_tab_count_3.xml
deleted file mode 100644
index 665118d129eb41e8f8d02c6e2c656c9abf5406c1..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_mso_tab_count_3.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="mso-tab-count: 3;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="mso-tab-count: 3;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_overflow_auto.xml b/lib/feedparser/tests/wellformed/sanitize/style_overflow_auto.xml
deleted file mode 100644
index bc347ec5dc376fa5ed119a2a6ac348a54dbdc503..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_overflow_auto.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="overflow: auto;"
-Expect:       not bozo and entries[0]['description'] == '<span style="overflow: auto;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="overflow: auto;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_0.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_0.xml
deleted file mode 100644
index 7f3ee3fcf1511612a9910c2f0faaecfad1350f13..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_0.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding: 0;"
-Expect:       not bozo and entries[0]['description'] == '<span style="padding: 0;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding: 0;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_0_0_12px_12px.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_0_0_12px_12px.xml
deleted file mode 100644
index 4a4310cd797f5a7c56ea2ef619ad820fdbd7a381..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_0_0_12px_12px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding: 0 0 12px 12px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="padding: 0 0 12px 12px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding: 0 0 12px 12px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_2ex.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_2ex.xml
deleted file mode 100644
index 6dc1b5b3d6b9b9c5c589e963ea197efc82b5d599..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_2ex.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding: 2ex;"
-Expect:       not bozo and entries[0]['description'] == '<span style="padding: 2ex;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding: 2ex;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_99999em.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_99999em.xml
deleted file mode 100644
index eca4144ca549f23160b06193dc8f5d815c6d6b69..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_99999em.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding: 99999em;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding: 99999em;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_left_4px.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_left_4px.xml
deleted file mode 100644
index 7cbe16efc18cb48fb3056ca03a6a1c7be859d783..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_left_4px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding-left: 4px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="padding-left: 4px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding-left: 4px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_padding_right_0in.xml b/lib/feedparser/tests/wellformed/sanitize/style_padding_right_0in.xml
deleted file mode 100644
index 1077f170fcbe07d51ca3e7fb2efb65910437478f..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_padding_right_0in.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="padding-right: 0in;"
-Expect:       not bozo and entries[0]['description'] == '<span style="padding-right: 0in;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="padding-right: 0in;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_position_absolute.xml b/lib/feedparser/tests/wellformed/sanitize/style_position_absolute.xml
deleted file mode 100644
index 4b436e00d616566c49f56e9f17b018d59eefbd44..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_position_absolute.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="position: absolute;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="position: absolute;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_tab_stops_list_5in.xml b/lib/feedparser/tests/wellformed/sanitize/style_tab_stops_list_5in.xml
deleted file mode 100644
index 6bd2c9abb0dbaee570f4381211ec834db1594ed7..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_tab_stops_list_5in.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="tab-stops: list .5in;"
-Expect:       not bozo and entries[0]['description'] == '<span>Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="tab-stops: list .5in;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_align_center.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_align_center.xml
deleted file mode 100644
index f3055eae571fda19a2ca1c4bc7e4f559295a165d..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_text_align_center.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="text-align: center;"
-Expect:       not bozo and entries[0]['description'] == '<span style="text-align: center;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="text-align: center;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_align_left.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_align_left.xml
deleted file mode 100644
index cc9b3e5255e041794d83fa859c723c8f2c14ffc8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_text_align_left.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="text-align: left;"
-Expect:       not bozo and entries[0]['description'] == '<span style="text-align: left;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="text-align: left;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_align_right.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_align_right.xml
deleted file mode 100644
index aaa3c7579bb50f556e8258dc5863401ad714f6f2..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_text_align_right.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="text-align: right;"
-Expect:       not bozo and entries[0]['description'] == '<span style="text-align: right;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="text-align: right;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_decoration_underline.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_decoration_underline.xml
deleted file mode 100644
index b2461ecdf45228c3a170e046c37b3505a717f7d6..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_text_decoration_underline.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="text-decoration: underline;"
-Expect:       not bozo and entries[0]['description'] == '<span style="text-decoration: underline;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="text-decoration: underline;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_text_indent_0_5in.xml b/lib/feedparser/tests/wellformed/sanitize/style_text_indent_0_5in.xml
deleted file mode 100644
index 87d1cacd25d51f3de289cd758a7f0ad7d4bbaf2c..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_text_indent_0_5in.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="TEXT-INDENT: 0.5in;"
-Expect:       not bozo and entries[0]['description'] == '<span style="TEXT-INDENT: 0.5in;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="TEXT-INDENT: 0.5in;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_bottom.xml b/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_bottom.xml
deleted file mode 100644
index 9c3da9f05ad3cd658591203bd8537a5f360866bf..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_bottom.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="vertical-align: bottom;"
-Expect:       not bozo and entries[0]['description'] == '<span style="vertical-align: bottom;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="vertical-align: bottom;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_top.xml b/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_top.xml
deleted file mode 100644
index 55b45cc1a738e24d770d4eb73dd678f6d396281a..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_vertical_align_top.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="vertical-align: top;"
-Expect:       not bozo and entries[0]['description'] == '<span style="vertical-align: top;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="vertical-align: top;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_white_space_nowrap.xml b/lib/feedparser/tests/wellformed/sanitize/style_white_space_nowrap.xml
deleted file mode 100644
index 61e0c04dd99c3f6621d06c5b1f904c89ecbf1015..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_white_space_nowrap.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="white-space: nowrap;"
-Expect:       not bozo and entries[0]['description'] == '<span style="white-space: nowrap;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="white-space: nowrap;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_white_space_top.xml b/lib/feedparser/tests/wellformed/sanitize/style_white_space_top.xml
deleted file mode 100644
index c48d32a8ee0c9f9e1a2ede864ebaf6848c5e7ea0..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_white_space_top.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="white-space: top;"
-Expect:       not bozo and entries[0]['description'] == '<span style="white-space: top;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="white-space: top;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/style_width_300px.xml b/lib/feedparser/tests/wellformed/sanitize/style_width_300px.xml
deleted file mode 100644
index f7ae6d70690d73441c38bb732e8c63520e048bc8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/style_width_300px.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<!--
-Description:  style="width: 300px;"
-Expect:       not bozo and entries[0]['description'] == '<span style="width: 300px;">Some text</span>'
--->
-<rss version="2.0">
-<channel>
-<item>
-<description>&lt;span style="width: 300px;"&gt;Some text&lt;/span&gt;</description>
-</item>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/sanitize/xml_declaration_unexpected_character.xml b/lib/feedparser/tests/wellformed/sanitize/xml_declaration_unexpected_character.xml
deleted file mode 100644
index 089dceae5345475d035d8bfdb17e6926d095af75..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/xml_declaration_unexpected_character.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: xml declaration unexpected character
-Expect:      not bozo and feed['title'] == u'&lt;!DOCTYPE ~'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html">&lt;!DOCTYPE ~</title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/xml_malicious_comment.xml b/lib/feedparser/tests/wellformed/sanitize/xml_malicious_comment.xml
deleted file mode 100644
index db79e86c5df6592ec975aa0cabe2fffff50f0450..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/xml_malicious_comment.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: malicious comment
-Expect:      not bozo and feed['title'] == u'safe'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html">sa&lt;!-- -- nonwhitespace &gt;fe&lt;script&gt;alert(1);&lt;/script&gt;</title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sanitize/xml_unclosed_comment.xml b/lib/feedparser/tests/wellformed/sanitize/xml_unclosed_comment.xml
deleted file mode 100644
index 75a642796ddacbbb9b31486a9389b30c556874e8..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sanitize/xml_unclosed_comment.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!--
-Description: unclosed comment
-Expect:      not bozo and feed['title'] == u'safe'
--->
-<feed xmlns="http://www.w3.org/2005/Atom">
-  <title type="html">safe&lt;!--</title>
-</feed>
diff --git a/lib/feedparser/tests/wellformed/sgml/charref_uppercase_x.xml b/lib/feedparser/tests/wellformed/sgml/charref_uppercase_x.xml
deleted file mode 100644
index 51a13b737c31ce4ef198fff1948f0d1d0cecf201..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/sgml/charref_uppercase_x.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: ensure an uppercase X in a hex charref doesn't crash feedparser
-Expect: not bozo and entries[0]['summary'] == u'&#x61;'
--->
-<rss version="2.0">
-  <channel>
-    <item><description>&amp;#X61;</description></item>
-  </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/xml/empty_xmlns_uri.xml b/lib/feedparser/tests/wellformed/xml/empty_xmlns_uri.xml
deleted file mode 100644
index da68ece27517b61cdf168ca32649ffa8e67c40fb..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/xml/empty_xmlns_uri.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--
-Description: empty xmlns uri
-Expect:      not bozo and feed['title'] == u'empty'
--->
-<rss xmlns="">
-    <channel>
-        <title>empty</title>
-    </channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/xml/escaped_apos.xml b/lib/feedparser/tests/wellformed/xml/escaped_apos.xml
deleted file mode 100644
index 6340ca9bdca72349502c32fc6f4e5721550de216..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/xml/escaped_apos.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-XXX - THIS TEST SHOULD BE UPDATED WHEN SGML AND XML OUTPUT IS IDENTICAL
-Description: ensure apos is translated correctly
-Expect: not bozo and feed['title'] == u'it&apos;s correct' or feed['title'] == u"it's correct"
--->
-<rss>
-<channel>
-    <title type="html">it&amp;apos;s correct</title>
-</channel>
-</rss>
diff --git a/lib/feedparser/tests/wellformed/xml/xlink_ns_no_prefix.xml b/lib/feedparser/tests/wellformed/xml/xlink_ns_no_prefix.xml
deleted file mode 100644
index a0c376cd323b0b1f581546040429e76b2d4a94a4..0000000000000000000000000000000000000000
--- a/lib/feedparser/tests/wellformed/xml/xlink_ns_no_prefix.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<!--
-Description: xmlns without prefix with xlink uri causes crash
-Expect: not bozo and feed['title'] == u'xlink'
--->
-<rss>
-    <bogus xmlns="http://www.w3.org/1999/xlink"/>
-    <channel>
-        <title>xlink</title>
-    </channel>
-</rss>
diff --git a/lib/feedparser/urls.py b/lib/feedparser/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..85b8fd1c49d067bfea8eded73cb16bdb2c53154c
--- /dev/null
+++ b/lib/feedparser/urls.py
@@ -0,0 +1,131 @@
+from __future__ import absolute_import, unicode_literals
+
+import re
+
+try:
+    import urllib.parse as urlparse
+except ImportError:
+    import urlparse as urlparse
+
+from .html import _BaseHTMLProcessor
+
+# If you want feedparser to allow all URL schemes, set this to ()
+# List culled from Python's urlparse documentation at:
+#   http://docs.python.org/library/urlparse.html
+# as well as from "URI scheme" at Wikipedia:
+#   https://secure.wikimedia.org/wikipedia/en/wiki/URI_scheme
+# Many more will likely need to be added!
+ACCEPTABLE_URI_SCHEMES = (
+    'file', 'ftp', 'gopher', 'h323', 'hdl', 'http', 'https', 'imap', 'magnet',
+    'mailto', 'mms', 'news', 'nntp', 'prospero', 'rsync', 'rtsp', 'rtspu',
+    'sftp', 'shttp', 'sip', 'sips', 'snews', 'svn', 'svn+ssh', 'telnet',
+    'wais',
+    # Additional common-but-unofficial schemes
+    'aim', 'callto', 'cvs', 'facetime', 'feed', 'git', 'gtalk', 'irc', 'ircs',
+    'irc6', 'itms', 'mms', 'msnim', 'skype', 'ssh', 'smb', 'svn', 'ymsg',
+)
+#ACCEPTABLE_URI_SCHEMES = ()
+
+_urifixer = re.compile('^([A-Za-z][A-Za-z0-9+-.]*://)(/*)(.*?)')
+def _urljoin(base, uri):
+    uri = _urifixer.sub(r'\1\3', uri)
+    try:
+        uri = urlparse.urljoin(base, uri)
+    except ValueError:
+        uri = ''
+    return uri
+
+def _convert_to_idn(url):
+    """Convert a URL to IDN notation"""
+    # this function should only be called with a unicode string
+    # strategy: if the host cannot be encoded in ascii, then
+    # it'll be necessary to encode it in idn form
+    parts = list(urlparse.urlsplit(url))
+    try:
+        parts[1].encode('ascii')
+    except UnicodeEncodeError:
+        # the url needs to be converted to idn notation
+        host = parts[1].rsplit(':', 1)
+        newhost = []
+        port = ''
+        if len(host) == 2:
+            port = host.pop()
+        for h in host[0].split('.'):
+            newhost.append(h.encode('idna').decode('utf-8'))
+        parts[1] = '.'.join(newhost)
+        if port:
+            parts[1] += ':' + port
+        return urlparse.urlunsplit(parts)
+    else:
+        return url
+
+def _makeSafeAbsoluteURI(base, rel=None):
+    # bail if ACCEPTABLE_URI_SCHEMES is empty
+    if not ACCEPTABLE_URI_SCHEMES:
+        return _urljoin(base, rel or '')
+    if not base:
+        return rel or ''
+    if not rel:
+        try:
+            scheme = urlparse.urlparse(base)[0]
+        except ValueError:
+            return ''
+        if not scheme or scheme in ACCEPTABLE_URI_SCHEMES:
+            return base
+        return ''
+    uri = _urljoin(base, rel)
+    if uri.strip().split(':', 1)[0] not in ACCEPTABLE_URI_SCHEMES:
+        return ''
+    return uri
+
+class _RelativeURIResolver(_BaseHTMLProcessor):
+    relative_uris = set([('a', 'href'),
+                     ('applet', 'codebase'),
+                     ('area', 'href'),
+                     ('audio', 'src'),
+                     ('blockquote', 'cite'),
+                     ('body', 'background'),
+                     ('del', 'cite'),
+                     ('form', 'action'),
+                     ('frame', 'longdesc'),
+                     ('frame', 'src'),
+                     ('iframe', 'longdesc'),
+                     ('iframe', 'src'),
+                     ('head', 'profile'),
+                     ('img', 'longdesc'),
+                     ('img', 'src'),
+                     ('img', 'usemap'),
+                     ('input', 'src'),
+                     ('input', 'usemap'),
+                     ('ins', 'cite'),
+                     ('link', 'href'),
+                     ('object', 'classid'),
+                     ('object', 'codebase'),
+                     ('object', 'data'),
+                     ('object', 'usemap'),
+                     ('q', 'cite'),
+                     ('script', 'src'),
+                     ('source', 'src'),
+                     ('video', 'poster'),
+                     ('video', 'src')])
+
+    def __init__(self, baseuri, encoding, _type):
+        _BaseHTMLProcessor.__init__(self, encoding, _type)
+        self.baseuri = baseuri
+
+    def resolveURI(self, uri):
+        return _makeSafeAbsoluteURI(self.baseuri, uri.strip())
+
+    def unknown_starttag(self, tag, attrs):
+        attrs = self.normalize_attrs(attrs)
+        attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs]
+        _BaseHTMLProcessor.unknown_starttag(self, tag, attrs)
+
+def _resolveRelativeURIs(htmlSource, baseURI, encoding, _type):
+    # if not _SGML_AVAILABLE:
+    #     return htmlSource
+
+    p = _RelativeURIResolver(baseURI, encoding, _type)
+    p.feed(htmlSource)
+    return p.output()
+
diff --git a/lib/feedparser/util.py b/lib/feedparser/util.py
new file mode 100644
index 0000000000000000000000000000000000000000..f7c02c01eb27c397ef30a63e7049bc692f3fd833
--- /dev/null
+++ b/lib/feedparser/util.py
@@ -0,0 +1,144 @@
+# Copyright 2010-2015 Kurt McKee <contactme@kurtmckee.org>
+# Copyright 2002-2008 Mark Pilgrim
+# All rights reserved.
+#
+# This file is a part of feedparser.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+#   this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import absolute_import, unicode_literals
+
+import warnings
+
+class FeedParserDict(dict):
+    keymap = {'channel': 'feed',
+              'items': 'entries',
+              'guid': 'id',
+              'date': 'updated',
+              'date_parsed': 'updated_parsed',
+              'description': ['summary', 'subtitle'],
+              'description_detail': ['summary_detail', 'subtitle_detail'],
+              'url': ['href'],
+              'modified': 'updated',
+              'modified_parsed': 'updated_parsed',
+              'issued': 'published',
+              'issued_parsed': 'published_parsed',
+              'copyright': 'rights',
+              'copyright_detail': 'rights_detail',
+              'tagline': 'subtitle',
+              'tagline_detail': 'subtitle_detail'}
+    def __getitem__(self, key):
+        '''
+        :return: A :class:`FeedParserDict`.
+        '''
+        if key == 'category':
+            try:
+                return dict.__getitem__(self, 'tags')[0]['term']
+            except IndexError:
+                raise KeyError("object doesn't have key 'category'")
+        elif key == 'enclosures':
+            norel = lambda link: FeedParserDict([(name,value) for (name,value) in link.items() if name!='rel'])
+            return [norel(link) for link in dict.__getitem__(self, 'links') if link['rel']=='enclosure']
+        elif key == 'license':
+            for link in dict.__getitem__(self, 'links'):
+                if link['rel']=='license' and 'href' in link:
+                    return link['href']
+        elif key == 'updated':
+            # Temporarily help developers out by keeping the old
+            # broken behavior that was reported in issue 310.
+            # This fix was proposed in issue 328.
+            if not dict.__contains__(self, 'updated') and \
+                dict.__contains__(self, 'published'):
+                warnings.warn("To avoid breaking existing software while "
+                    "fixing issue 310, a temporary mapping has been created "
+                    "from `updated` to `published` if `updated` doesn't "
+                    "exist. This fallback will be removed in a future version "
+                    "of feedparser.", DeprecationWarning)
+                return dict.__getitem__(self, 'published')
+            return dict.__getitem__(self, 'updated')
+        elif key == 'updated_parsed':
+            if not dict.__contains__(self, 'updated_parsed') and \
+                dict.__contains__(self, 'published_parsed'):
+                warnings.warn("To avoid breaking existing software while "
+                    "fixing issue 310, a temporary mapping has been created "
+                    "from `updated_parsed` to `published_parsed` if "
+                    "`updated_parsed` doesn't exist. This fallback will be "
+                    "removed in a future version of feedparser.",
+                    DeprecationWarning)
+                return dict.__getitem__(self, 'published_parsed')
+            return dict.__getitem__(self, 'updated_parsed')
+        else:
+            realkey = self.keymap.get(key, key)
+            if isinstance(realkey, list):
+                for k in realkey:
+                    if dict.__contains__(self, k):
+                        return dict.__getitem__(self, k)
+            elif dict.__contains__(self, realkey):
+                return dict.__getitem__(self, realkey)
+        return dict.__getitem__(self, key)
+
+    def __contains__(self, key):
+        if key in ('updated', 'updated_parsed'):
+            # Temporarily help developers out by keeping the old
+            # broken behavior that was reported in issue 310.
+            # This fix was proposed in issue 328.
+            return dict.__contains__(self, key)
+        try:
+            self.__getitem__(key)
+        except KeyError:
+            return False
+        else:
+            return True
+
+    has_key = __contains__
+
+    def get(self, key, default=None):
+        '''
+        :return: A :class:`FeedParserDict`.
+        '''
+        try:
+            return self.__getitem__(key)
+        except KeyError:
+            return default
+
+    def __setitem__(self, key, value):
+        key = self.keymap.get(key, key)
+        if isinstance(key, list):
+            key = key[0]
+        return dict.__setitem__(self, key, value)
+
+    def setdefault(self, key, value):
+        if key not in self:
+            self[key] = value
+            return value
+        return self[key]
+
+    def __getattr__(self, key):
+        # __getattribute__() is called first; this will be called
+        # only if an attribute was not already found
+        try:
+            return self.__getitem__(key)
+        except KeyError:
+            raise AttributeError("object has no attribute '%s'" % key)
+
+    def __hash__(self):
+        return id(self)
diff --git a/lib/futures/__init__.py b/lib/futures/__init__.py
deleted file mode 100644
index 8f8b23481f5185cef0f4296817cb78b86e0d3544..0000000000000000000000000000000000000000
--- a/lib/futures/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 2009 Brian Quinlan. All Rights Reserved.
-# Licensed to PSF under a Contributor Agreement.
-
-"""Execute computations asynchronously using threads or processes."""
-
-import warnings
-
-from concurrent.futures import (FIRST_COMPLETED,
-                                FIRST_EXCEPTION,
-                                ALL_COMPLETED,
-                                CancelledError,
-                                TimeoutError,
-                                Future,
-                                Executor,
-                                wait,
-                                as_completed,
-                                ProcessPoolExecutor,
-                                ThreadPoolExecutor)
-
-__author__ = 'Brian Quinlan (brian@sweetapp.com)'
-
-warnings.warn('The futures package has been deprecated. '
-              'Use the concurrent.futures package instead.',
-              DeprecationWarning)
diff --git a/lib/futures/process.py b/lib/futures/process.py
deleted file mode 100644
index e9d37b16ce5b00c97e8179174108d641557a6ac5..0000000000000000000000000000000000000000
--- a/lib/futures/process.py
+++ /dev/null
@@ -1 +0,0 @@
-from concurrent.futures import ProcessPoolExecutor
diff --git a/lib/futures/thread.py b/lib/futures/thread.py
deleted file mode 100644
index f6bd05de66220c53f594987eec35cf47e69dfd2a..0000000000000000000000000000000000000000
--- a/lib/futures/thread.py
+++ /dev/null
@@ -1 +0,0 @@
-from concurrent.futures import ThreadPoolExecutor
diff --git a/lib/rtorrent/lib/bencode.py b/lib/rtorrent/lib/bencode.py
index 97bd2f0ebd6ffe7824e33e94d2c62a71b3de5c38..705d9cd652cca703c17b84742978fc64e581d582 100644
--- a/lib/rtorrent/lib/bencode.py
+++ b/lib/rtorrent/lib/bencode.py
@@ -42,8 +42,10 @@ _py3 = sys.version_info[0] == 3
 
 if _py3:
     _VALID_STRING_TYPES = (str,)
+    _VALID_INT_TYPES = (int,)
 else:
     _VALID_STRING_TYPES = (str, unicode)  # @UndefinedVariable
+    _VALID_INT_TYPES = (int, long)  # @UndefinedVariable
 
 _TYPE_INT = 1
 _TYPE_STRING = 2
@@ -267,7 +269,7 @@ def _encode_dict(data):
 def encode(data):
     if isinstance(data, bool):
         return False
-    elif isinstance(data, int):
+    elif isinstance(data, _VALID_INT_TYPES):
         return _encode_int(data)
     elif isinstance(data, bytes):
         return _encode_string(data)
diff --git a/lib/subliminal/api.py b/lib/subliminal/api.py
index 906b897c9596a9ac872a29f7afd4b13a41d5b713..ee51940a91bdc79bfec04dcfe8b6d8989be6443d 100644
--- a/lib/subliminal/api.py
+++ b/lib/subliminal/api.py
@@ -363,7 +363,7 @@ def download_best_subtitles(videos, languages, min_score=0, hearing_impaired=Fal
     checked_videos = []
     for video in videos:
         if not check_video(video, languages=languages, undefined=only_one):
-            logger.info('Skipping video %r')
+            logger.info('Skipping video %r', video)
             continue
         checked_videos.append(video)
 
diff --git a/lib/subliminal/cli.py b/lib/subliminal/cli.py
index c419ef46a6d288fe444f0e8b02a65f545b9a8d3a..2c4f4c14f84b7b6713b4ecd8fbc70feaaa5067c0 100644
--- a/lib/subliminal/cli.py
+++ b/lib/subliminal/cli.py
@@ -307,7 +307,8 @@ def download(obj, provider, language, age, directory, encoding, single, force, h
             # directories
             if os.path.isdir(p):
                 try:
-                    scanned_videos = scan_videos(p, subtitles=not force, embedded_subtitles=not force)
+                    scanned_videos = scan_videos(p, subtitles=not force, embedded_subtitles=not force,
+                                                 subtitles_dir=directory)
                 except:
                     logger.exception('Unexpected error while collecting directory path %s', p)
                     errored_paths.append(p)
@@ -321,7 +322,7 @@ def download(obj, provider, language, age, directory, encoding, single, force, h
 
             # other inputs
             try:
-                video = scan_video(p, subtitles=not force, embedded_subtitles=not force)
+                video = scan_video(p, subtitles=not force, embedded_subtitles=not force, subtitles_dir=directory)
             except:
                 logger.exception('Unexpected error while collecting path %s', p)
                 errored_paths.append(p)
diff --git a/lib/subliminal/exceptions.py b/lib/subliminal/exceptions.py
index de2fabc0e1f10e37f80ec299b32cf0fc63849dfd..5f5c7a7730d60982f8bf271572e2d27598efddcf 100644
--- a/lib/subliminal/exceptions.py
+++ b/lib/subliminal/exceptions.py
@@ -19,6 +19,11 @@ class AuthenticationError(ProviderError):
     pass
 
 
+class TooManyRequests(ProviderError):
+    """Exception raised by providers when too many requests are made."""
+    pass
+
+
 class DownloadLimitExceeded(ProviderError):
     """Exception raised by providers when download limit is exceeded."""
     pass
diff --git a/lib/subliminal/providers/addic7ed.py b/lib/subliminal/providers/addic7ed.py
index 3edfe357a00db97c81f4658e31fa39339264cad3..c8b9ed2bc351e29980380fb4aeda167ab4bdb63c 100644
--- a/lib/subliminal/providers/addic7ed.py
+++ b/lib/subliminal/providers/addic7ed.py
@@ -8,14 +8,15 @@ from requests import Session
 from . import ParserBeautifulSoup, Provider, get_version
 from .. import __version__
 from ..cache import SHOW_EXPIRATION_TIME, region
-from ..exceptions import AuthenticationError, ConfigurationError, DownloadLimitExceeded
-from ..subtitle import Subtitle, fix_line_ending, guess_matches, guess_properties
+from ..exceptions import AuthenticationError, ConfigurationError, DownloadLimitExceeded, TooManyRequests
+from ..subtitle import (Subtitle, fix_line_ending, guess_matches, guess_properties, sanitize_string,
+                        sanitized_string_equal)
 from ..video import Episode
 
 logger = logging.getLogger(__name__)
 language_converters.register('addic7ed = subliminal.converters.addic7ed:Addic7edConverter')
 
-series_year_re = re.compile('^(?P<series>[ \w]+)(?: \((?P<year>\d{4})\))?$')
+series_year_re = re.compile('^(?P<series>[ \w\'.:]+)(?: \((?P<year>\d{4})\))?$')
 
 
 class Addic7edSubtitle(Subtitle):
@@ -40,7 +41,7 @@ class Addic7edSubtitle(Subtitle):
         matches = super(Addic7edSubtitle, self).get_matches(video, hearing_impaired=hearing_impaired)
 
         # series
-        if video.series and self.series.lower() == video.series.lower():
+        if video.series and sanitized_string_equal(self.series, video.series):
             matches.add('series')
         # season
         if video.season and self.season == video.season:
@@ -49,7 +50,7 @@ class Addic7edSubtitle(Subtitle):
         if video.episode and self.episode == video.episode:
             matches.add('episode')
         # title
-        if video.title and self.title.lower() == video.title.lower():
+        if video.title and sanitized_string_equal(self.title, video.title):
             matches.add('title')
         # year
         if video.year == self.year:
@@ -130,7 +131,7 @@ class Addic7edProvider(Provider):
         # populate the show ids
         show_ids = {}
         for show in soup.select('td.version > h3 > a[href^="/show/"]'):
-            show_ids[show.text.lower().replace('\'', '')] = int(show['href'][6:])
+            show_ids[sanitize_string(show.text).lower()] = int(show['href'][6:])
         logger.debug('Found %d show ids', len(show_ids))
 
         return show_ids
@@ -147,8 +148,8 @@ class Addic7edProvider(Provider):
 
         """
         # build the params
-        series_year = '%s (%d)' % (series, year) if year is not None else series
-        params = {'search': series_year, 'Submit': 'Search'}
+        series_year = '%s %d' % (series, year) if year is not None else series
+        params = {'search': sanitize_string(series_year, replacement=' '), 'Submit': 'Search'}
 
         # make the search
         logger.info('Searching show ids with %r', params)
@@ -161,7 +162,7 @@ class Addic7edProvider(Provider):
         if not suggestion:
             logger.warning('Show id not found: no suggestion')
             return None
-        if not suggestion[0].i.text.lower() == series_year.lower():
+        if not sanitized_string_equal(suggestion[0].i.text, series_year):
             logger.warning('Show id not found: suggestion does not match')
             return None
         show_id = int(suggestion[0]['href'][6:])
@@ -183,24 +184,24 @@ class Addic7edProvider(Provider):
         :rtype: int or None
 
         """
-        series_clean = series.lower().replace('\'', '')
+        series_sanitized = sanitize_string(series).lower()
         show_ids = self._get_show_ids()
         show_id = None
 
         # attempt with country
         if not show_id and country_code:
             logger.debug('Getting show id with country')
-            show_id = show_ids.get('%s (%s)' % (series_clean, country_code.lower()))
+            show_id = show_ids.get('%s %s' % (series_sanitized, country_code.lower()))
 
         # attempt with year
         if not show_id and year:
             logger.debug('Getting show id with year')
-            show_id = show_ids.get('%s (%d)' % (series_clean, year))
+            show_id = show_ids.get('%s %d' % (series_sanitized, year))
 
         # attempt clean
         if not show_id:
             logger.debug('Getting show id')
-            show_id = show_ids.get(series_clean)
+            show_id = show_ids.get(series_sanitized)
 
         # search as last resort
         if not show_id:
@@ -220,6 +221,8 @@ class Addic7edProvider(Provider):
         logger.info('Getting the page of show id %d, season %d', show_id, season)
         r = self.session.get(self.server_url + 'show/%d' % show_id, params={'season': season}, timeout=10)
         r.raise_for_status()
+        if r.status_code == 304:
+            raise TooManyRequests()
         soup = ParserBeautifulSoup(r.content, ['lxml', 'html.parser'])
 
         # loop over subtitle rows
diff --git a/lib/subliminal/providers/napiprojekt.py b/lib/subliminal/providers/napiprojekt.py
index c89db7fb6c75e333b609d14b6251b5d06561ec39..ef64a7171ef803ad18414953c04ce64df6f06a30 100644
--- a/lib/subliminal/providers/napiprojekt.py
+++ b/lib/subliminal/providers/napiprojekt.py
@@ -4,7 +4,8 @@ import logging
 from babelfish import Language
 from requests import Session
 
-from . import Provider
+from . import Provider, get_version
+from .. import __version__
 from ..subtitle import Subtitle
 
 logger = logging.getLogger(__name__)
@@ -61,7 +62,7 @@ class NapiProjektProvider(Provider):
     server_url = 'http://napiprojekt.pl/unit_napisy/dl.php'
 
     def initialize(self):
-        self.session = Session()
+        self.session.headers = {'User-Agent': 'Subliminal/%s' % get_version(__version__)}
 
     def terminate(self):
         self.session.close()
diff --git a/lib/subliminal/providers/opensubtitles.py b/lib/subliminal/providers/opensubtitles.py
index 9698c11de12aa9ccd276fcbb807f510a29069190..5a06a23b84cdc0f59a175f9e2789b1a1ee06aa28 100644
--- a/lib/subliminal/providers/opensubtitles.py
+++ b/lib/subliminal/providers/opensubtitles.py
@@ -12,7 +12,7 @@ from six.moves.xmlrpc_client import ServerProxy
 from . import Provider, TimeoutSafeTransport, get_version
 from .. import __version__
 from ..exceptions import AuthenticationError, ConfigurationError, DownloadLimitExceeded, ProviderError
-from ..subtitle import Subtitle, fix_line_ending, guess_matches
+from ..subtitle import Subtitle, fix_line_ending, guess_matches, sanitized_string_equal
 from ..video import Episode, Movie
 
 logger = logging.getLogger(__name__)
@@ -23,8 +23,8 @@ class OpenSubtitlesSubtitle(Subtitle):
     series_re = re.compile('^"(?P<series_name>.*)" (?P<series_title>.*)$')
 
     def __init__(self, language, hearing_impaired, page_link, subtitle_id, matched_by, movie_kind, hash, movie_name,
-                 movie_release_name, movie_year, movie_imdb_id, series_season, series_episode):
-        super(OpenSubtitlesSubtitle, self).__init__(language, hearing_impaired, page_link)
+                 movie_release_name, movie_year, movie_imdb_id, series_season, series_episode, encoding):
+        super(OpenSubtitlesSubtitle, self).__init__(language, hearing_impaired, page_link, encoding)
         self.subtitle_id = subtitle_id
         self.matched_by = matched_by
         self.movie_kind = movie_kind
@@ -54,7 +54,7 @@ class OpenSubtitlesSubtitle(Subtitle):
         # episode
         if isinstance(video, Episode) and self.movie_kind == 'episode':
             # series
-            if video.series and self.series_name.lower() == video.series.lower():
+            if video.series and sanitized_string_equal(self.series_name, video.series):
                 matches.add('series')
             # season
             if video.season and self.series_season == video.season:
@@ -63,14 +63,14 @@ class OpenSubtitlesSubtitle(Subtitle):
             if video.episode and self.series_episode == video.episode:
                 matches.add('episode')
             # title
-            if video.title and self.series_title.lower() == video.title.lower():
+            if video.title and sanitized_string_equal(self.series_title, video.title):
                 matches.add('title')
             # guess
             matches |= guess_matches(video, guess_episode_info(self.movie_release_name + '.mkv'))
         # movie
         elif isinstance(video, Movie) and self.movie_kind == 'movie':
             # title
-            if video.title and self.movie_name.lower() == video.title.lower():
+            if video.title and sanitized_string_equal(self.movie_name, video.title):
                 matches.add('title')
             # year
             if video.year and self.movie_year == video.year:
@@ -129,9 +129,9 @@ class OpenSubtitlesProvider(Provider):
         if imdb_id:
             criteria.append({'imdbid': imdb_id})
         if query and season and episode:
-            criteria.append({'query': query, 'season': season, 'episode': episode})
+            criteria.append({'query': query.replace('\'', ''), 'season': season, 'episode': episode})
         elif query:
-            criteria.append({'query': query})
+            criteria.append({'query': query.replace('\'', '')})
         if not criteria:
             raise ValueError('Not enough information')
 
@@ -165,10 +165,11 @@ class OpenSubtitlesProvider(Provider):
             movie_imdb_id = int(subtitle_item['IDMovieImdb'])
             series_season = int(subtitle_item['SeriesSeason']) if subtitle_item['SeriesSeason'] else None
             series_episode = int(subtitle_item['SeriesEpisode']) if subtitle_item['SeriesEpisode'] else None
+            encoding = subtitle_item.get('SubEncoding') or None
 
             subtitle = OpenSubtitlesSubtitle(language, hearing_impaired, page_link, subtitle_id, matched_by, movie_kind,
                                              hash, movie_name, movie_release_name, movie_year, movie_imdb_id,
-                                             series_season, series_episode)
+                                             series_season, series_episode, encoding)
             logger.debug('Found subtitle %r', subtitle)
             subtitles.append(subtitle)
 
diff --git a/lib/subliminal/providers/podnapisi.py b/lib/subliminal/providers/podnapisi.py
index 2790c6fa0ea60fb7043bbc1dd80626098aecec88..3a1455714550a729cdeb5f73c04712e390851c4b 100644
--- a/lib/subliminal/providers/podnapisi.py
+++ b/lib/subliminal/providers/podnapisi.py
@@ -18,7 +18,7 @@ from zipfile import ZipFile
 from . import Provider, get_version
 from .. import __version__
 from ..exceptions import ProviderError
-from ..subtitle import Subtitle, fix_line_ending, guess_matches
+from ..subtitle import Subtitle, fix_line_ending, guess_matches, sanitized_string_equal
 from ..video import Episode, Movie
 
 logger = logging.getLogger(__name__)
@@ -47,7 +47,7 @@ class PodnapisiSubtitle(Subtitle):
         # episode
         if isinstance(video, Episode):
             # series
-            if video.series and self.title.lower() == video.series.lower():
+            if video.series and sanitized_string_equal(self.title, video.series):
                 matches.add('series')
             # season
             if video.season and self.season == video.season:
@@ -61,7 +61,7 @@ class PodnapisiSubtitle(Subtitle):
         # movie
         elif isinstance(video, Movie):
             # title
-            if video.title and self.title.lower() == video.title.lower():
+            if video.title and sanitized_string_equal(self.title, video.title):
                 matches.add('title')
             # guess
             for release in self.releases:
@@ -162,7 +162,7 @@ class PodnapisiProvider(Provider):
 
     def download_subtitle(self, subtitle):
         # download as a zip
-        logger.info('Downloading subtitle %r')
+        logger.info('Downloading subtitle %r', subtitle)
         r = self.session.get(self.server_url + subtitle.pid + '/download', params={'container': 'zip'}, timeout=10)
         r.raise_for_status()
 
diff --git a/lib/subliminal/providers/thesubdb.py b/lib/subliminal/providers/thesubdb.py
index 67d71a504e9dc36ecef15566021f2b9727110822..f7f1f2451bc5400e4b4b0335c8584ddee1eee4ac 100644
--- a/lib/subliminal/providers/thesubdb.py
+++ b/lib/subliminal/providers/thesubdb.py
@@ -21,7 +21,7 @@ class TheSubDBSubtitle(Subtitle):
 
     @property
     def id(self):
-        return self.hash
+        return self.hash + '-' + str(self.language)
 
     def get_matches(self, video, hearing_impaired=False):
         matches = super(TheSubDBSubtitle, self).get_matches(video, hearing_impaired=hearing_impaired)
@@ -73,7 +73,7 @@ class TheSubDBProvider(Provider):
         return [s for s in self.query(video.hashes['thesubdb']) if s.language in languages]
 
     def download_subtitle(self, subtitle):
-        logger.info('Downloading subtitle %r')
+        logger.info('Downloading subtitle %r', subtitle)
         params = {'action': 'download', 'hash': subtitle.hash, 'language': subtitle.language.alpha2}
         r = self.session.get(self.server_url, params=params, timeout=10)
         r.raise_for_status()
diff --git a/lib/subliminal/providers/tvsubtitles.py b/lib/subliminal/providers/tvsubtitles.py
index 06fd878a933dc83650aa4e04e423cbac6b03a582..6df1ad22705e9812a7406153b9b90a7eae7b61aa 100644
--- a/lib/subliminal/providers/tvsubtitles.py
+++ b/lib/subliminal/providers/tvsubtitles.py
@@ -11,7 +11,7 @@ from . import ParserBeautifulSoup, Provider, get_version
 from .. import __version__
 from ..cache import EPISODE_EXPIRATION_TIME, SHOW_EXPIRATION_TIME, region
 from ..exceptions import ProviderError
-from ..subtitle import Subtitle, fix_line_ending, guess_matches, guess_properties
+from ..subtitle import Subtitle, fix_line_ending, guess_matches, guess_properties, sanitized_string_equal
 from ..video import Episode
 
 logger = logging.getLogger(__name__)
@@ -42,7 +42,7 @@ class TVsubtitlesSubtitle(Subtitle):
         matches = super(TVsubtitlesSubtitle, self).get_matches(video, hearing_impaired=hearing_impaired)
 
         # series
-        if video.series and self.series.lower() == video.series.lower():
+        if video.series and sanitized_string_equal(self.series, video.series):
             matches.add('series')
         # season
         if video.season and self.season == video.season:
diff --git a/lib/subliminal/subtitle.py b/lib/subliminal/subtitle.py
index eeb840a8023fe713a9d29a27d1b5dcb87edc6bf1..5694af7419ae98461df3e46c237430d1b472b8cb 100644
--- a/lib/subliminal/subtitle.py
+++ b/lib/subliminal/subtitle.py
@@ -1,10 +1,12 @@
 # -*- coding: utf-8 -*-
 import logging
 import os
+import re
 
 import chardet
 from guessit.matchtree import MatchTree
 from guessit.plugins.transformers import get_transformer
+from codecs import lookup
 import pysrt
 
 from .video import Episode, Movie
@@ -25,7 +27,7 @@ class Subtitle(object):
     #: Name of the provider that returns that class of subtitle
     provider_name = ''
 
-    def __init__(self, language, hearing_impaired=False, page_link=None):
+    def __init__(self, language, hearing_impaired=False, page_link=None, encoding=None):
         #: Language of the subtitle
         self.language = language
 
@@ -39,7 +41,15 @@ class Subtitle(object):
         self.content = None
 
         #: Encoding to decode with when accessing :attr:`text`
-        self.encoding = None
+        if encoding:
+            try:
+                # set encoding to canonical codec name
+                self.encoding = lookup(encoding).name
+            except (TypeError, LookupError):
+                logger.debug('Unsupported encoding "%s", setting to None', encoding)
+                self.encoding = None
+        else:
+            self.encoding = None
 
     @property
     def id(self):
@@ -56,7 +66,11 @@ class Subtitle(object):
         if not self.content:
             return
 
-        return self.content.decode(self.encoding or self.guess_encoding(), errors='replace')
+        try:
+            return self.content.decode(self.encoding, errors='replace')
+        except (TypeError, LookupError):
+            # Failback to guess_encoding if empty or unknown encoding provided
+            return self.content.decode(self.guess_encoding(), errors='replace')
 
     def is_valid(self):
         """Check if a :attr:`text` is a valid SubRip format.
@@ -219,6 +233,32 @@ def get_subtitle_path(video_path, language=None, extension='.srt'):
     return subtitle_root + extension
 
 
+def sanitize_string(string, replacement=''):
+    """Replace any special characters from a string.
+
+    :param str string: the string to sanitize.
+    :param str replacement: the replacement for special characters.
+    :return: the sanitized string.
+    :rtype: str
+
+    """
+    return re.sub('[^ a-zA-Z0-9]', replacement, string)
+
+
+def sanitized_string_equal(string1, string2):
+    """Test two strings for equality case insensitively and ignoring special characters.
+
+    :param str string1: the first string to compare.
+    :param str string2: the second string to compare.
+    :return: `True` if the two strings are equal, `False` otherwise.
+    :rtype: bool
+
+    """
+    valid_pattern = '[^a-zA-Z0-9]'
+
+    return sanitize_string(string1).lower() == sanitize_string(string2).lower()
+
+
 def guess_matches(video, guess, partial=False):
     """Get matches between a `video` and a `guess`.
 
@@ -236,7 +276,7 @@ def guess_matches(video, guess, partial=False):
     matches = set()
     if isinstance(video, Episode):
         # series
-        if video.series and 'series' in guess and guess['series'].lower() == video.series.lower():
+        if video.series and 'series' in guess and sanitized_string_equal(guess['series'], video.series):
             matches.add('series')
         # season
         if video.season and 'season' in guess and guess['season'] == video.season:
@@ -255,7 +295,7 @@ def guess_matches(video, guess, partial=False):
         if video.year and 'year' in guess and guess['year'] == video.year:
             matches.add('year')
     # title
-    if video.title and 'title' in guess and guess['title'].lower() == video.title.lower():
+    if video.title and 'title' in guess and sanitized_string_equal(guess['title'], video.title):
         matches.add('title')
     # release_group
     if video.release_group and 'releaseGroup' in guess and guess['releaseGroup'].lower() == video.release_group.lower():
diff --git a/lib/subliminal/video.py b/lib/subliminal/video.py
index cc916ed1b086a12d4c13d65c4d05478a752f274c..11fbfcd90d7816d6c5861a0507033ccf8ec5cf12 100644
--- a/lib/subliminal/video.py
+++ b/lib/subliminal/video.py
@@ -235,10 +235,13 @@ class Movie(Video):
         return '<%s [%r, %d]>' % (self.__class__.__name__, self.title, self.year)
 
 
-def search_external_subtitles(path):
+def search_external_subtitles(path, directory=None):
     """Search for external subtitles from a video `path` and their associated language.
 
+    Unless `directory` is provided, search will be made in the same directory as the video file.
+
     :param str path: path to the video.
+    :param str directory: directory to search for subtitles.
     :return: found subtitles with their languages.
     :rtype: dict
 
@@ -247,7 +250,7 @@ def search_external_subtitles(path):
     dirpath = dirpath or '.'
     fileroot, fileext = os.path.splitext(filename)
     subtitles = {}
-    for p in os.listdir(dirpath):
+    for p in os.listdir(directory or dirpath):
         # keep only valid subtitle filenames
         if not p.startswith(fileroot) or not p.endswith(SUBTITLE_EXTENSIONS):
             continue
@@ -272,12 +275,13 @@ def search_external_subtitles(path):
     return subtitles
 
 
-def scan_video(path, subtitles=True, embedded_subtitles=True):
+def scan_video(path, subtitles=True, embedded_subtitles=True, subtitles_dir=None):
     """Scan a video and its subtitle languages from a video `path`.
 
     :param str path: existing path to the video.
     :param bool subtitles: scan for subtitles with the same name.
     :param bool embedded_subtitles: scan for embedded subtitles.
+    :param str subtitles_dir: directory to search for subtitles.
     :return: the scanned video.
     :rtype: :class:`Video`
 
@@ -309,7 +313,7 @@ def scan_video(path, subtitles=True, embedded_subtitles=True):
 
     # external subtitles
     if subtitles:
-        video.subtitle_languages |= set(search_external_subtitles(path).values())
+        video.subtitle_languages |= set(search_external_subtitles(path, directory=subtitles_dir).values())
 
     # video metadata with enzyme
     try:
@@ -388,12 +392,13 @@ def scan_video(path, subtitles=True, embedded_subtitles=True):
     return video
 
 
-def scan_videos(path, subtitles=True, embedded_subtitles=True):
+def scan_videos(path, subtitles=True, embedded_subtitles=True, subtitles_dir=None):
     """Scan `path` for videos and their subtitles.
 
     :param str path: existing directory path to scan.
     :param bool subtitles: scan for subtitles with the same name.
     :param bool embedded_subtitles: scan for embedded subtitles.
+    :param str subtitles_dir: directory to search for subtitles.
     :return: the scanned videos.
     :rtype: list of :class:`Video`
 
@@ -438,7 +443,8 @@ def scan_videos(path, subtitles=True, embedded_subtitles=True):
 
             # scan video
             try:
-                video = scan_video(filepath, subtitles=subtitles, embedded_subtitles=embedded_subtitles)
+                video = scan_video(filepath, subtitles=subtitles, embedded_subtitles=embedded_subtitles,
+                                   subtitles_dir=subtitles_dir)
             except ValueError:  # pragma: no cover
                 logger.exception('Error scanning video')
                 continue
diff --git a/readme.md b/readme.md
index 2d3c33816d8e5db8e161a052174d16263a7b5617..561276003a677399a679095883eba68be91334d8 100644
--- a/readme.md
+++ b/readme.md
@@ -41,7 +41,7 @@ Automatic Video Library Manager for TV Shows. It watches for new episodes of you
 ##### [Wiki](https://github.com/SickRage/SickRage/wiki)
 
 #### Important
-Before using this with your existing database (sickbeard.db) please make a backup copy of it and delete any other database files such as cache.db and failed.db if present<br/>
+Before using this with your existing database (sickbeard.db) please make a backup copy of it and delete any other database files such as cache.db and failed.db if present<br>
 We HIGHLY recommend starting out with no database files at all to make this a fresh start but the choice is at your own risk
 
 #### Supported providers
diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py
index 6635806f2f3e503ec74e4efa8f4150de7676719f..54d8d0b8c638a068783126b245b6a80244f009a2 100644
--- a/sickbeard/__init__.py
+++ b/sickbeard/__init__.py
@@ -39,7 +39,7 @@ from sickbeard.providers.generic import GenericProvider
 from sickbeard.config import CheckSection, check_setting_int, check_setting_str, check_setting_float, ConfigMigrator, \
     naming_ep_type
 from sickbeard import searchBacklog, showUpdater, versionChecker, properFinder, autoPostProcesser, \
-    subtitles, traktChecker
+    subtitles, traktChecker, numdict
 from sickbeard import db
 from sickbeard import helpers
 from sickbeard import scheduler
@@ -48,7 +48,7 @@ from sickbeard import show_queue
 from sickbeard import logger
 from sickbeard import naming
 from sickbeard import dailysearcher
-from sickbeard.indexers.indexer_api import indexerApi
+from sickbeard.indexers import indexer_api
 from sickbeard.indexers.indexer_exceptions import indexer_shownotfound, indexer_showincomplete, indexer_exception, indexer_error, \
     indexer_episodenotfound, indexer_attributenotfound, indexer_seasonnotfound, indexer_userabort, indexerExcepts
 from sickbeard.common import SD
@@ -63,6 +63,8 @@ from configobj import ConfigObj
 import requests
 requests.packages.urllib3.disable_warnings()
 
+indexerApi = indexer_api.indexerApi
+
 PID = None
 
 CFG = None
@@ -550,7 +552,7 @@ CALENDAR_ICONS = False
 NO_RESTART = False
 
 TMDB_API_KEY = 'edc5f123313769de83a71e157758030b'
-#TRAKT_API_KEY = 'd4161a7a106424551add171e5470112e4afdaf2438e6ef2fe0548edc75924868'
+# TRAKT_API_KEY = 'd4161a7a106424551add171e5470112e4afdaf2438e6ef2fe0548edc75924868'
 
 TRAKT_API_KEY = '5c65f55e11d48c35385d9e8670615763a605fad28374c8ae553a7b7a50651ddd'
 TRAKT_API_SECRET = 'b53e32045ac122a445ef163e6d859403301ffe9b17fb8321d428531b69022a82'
@@ -668,8 +670,8 @@ def initialize(consoleLogging=True):
 
         ACTUAL_LOG_DIR = check_setting_str(CFG, 'General', 'log_dir', 'Logs')
         LOG_DIR = os.path.normpath(os.path.join(DATA_DIR, ACTUAL_LOG_DIR))
-        LOG_NR = check_setting_int(CFG, 'General', 'log_nr', 5) #Default to 5 backup file (sickrage.log.x)
-        LOG_SIZE = check_setting_int(CFG, 'General', 'log_size', 1048576) #Default to max 1MB per logfile
+        LOG_NR = check_setting_int(CFG, 'General', 'log_nr', 5)  # Default to 5 backup file (sickrage.log.x)
+        LOG_SIZE = check_setting_int(CFG, 'General', 'log_size', 1048576)  # Default to max 1MB per logfile
         fileLogging = True
         if not helpers.makeDir(LOG_DIR):
             sys.stderr.write("!!! No log folder, logging to screen only!\n")
@@ -680,10 +682,13 @@ def initialize(consoleLogging=True):
 
         # github api
         try:
-            gh = Github(user_agent="SiCKRAGE").get_organization(GIT_ORG).get_repo(GIT_REPO)
+            if not (GIT_USERNAME and GIT_PASSWORD):
+                gh = Github(user_agent="SiCKRAGE").get_organization(GIT_ORG).get_repo(GIT_REPO)
+            else:
+                gh = Github(login_or_token=GIT_USERNAME, password=GIT_PASSWORD, user_agent="SiCKRAGE").get_organization(GIT_ORG).get_repo(GIT_REPO)
         except Exception as e:
             gh = None
-            logger.log('Unable to setup GitHub properly. GitHub will not be available. Error: %s' % ex(e), logger.WARNING)
+            logger.log(u'Unable to setup GitHub properly. GitHub will not be available. Error: %s' % ex(e), logger.WARNING)
 
         # git reset on update
         GIT_RESET = bool(check_setting_int(CFG, 'General', 'git_reset', 1))
@@ -857,7 +862,7 @@ def initialize(consoleLogging=True):
             NZB_METHOD = 'blackhole'
 
         TORRENT_METHOD = check_setting_str(CFG, 'General', 'torrent_method', 'blackhole')
-        if TORRENT_METHOD not in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent'):
+        if TORRENT_METHOD not in ('blackhole', 'utorrent', 'transmission', 'deluge', 'deluged', 'download_station', 'rtorrent', 'qbittorrent', 'mlnet'):
             TORRENT_METHOD = 'blackhole'
 
         DOWNLOAD_PROPERS = bool(check_setting_int(CFG, 'General', 'download_propers', 1))
@@ -1248,11 +1253,6 @@ def initialize(consoleLogging=True):
             if hasattr(curTorrentProvider, 'pin'):
                 curTorrentProvider.pin = check_setting_str(CFG, curTorrentProvider.getID().upper(),
                                                            curTorrentProvider.getID() + '_pin', '', censor_log=True)
-            if hasattr(curTorrentProvider, 'proxy'):
-                curTorrentProvider.proxy.enabled = bool(check_setting_int(CFG, curTorrentProvider.getID().upper(), curTorrentProvider.getID() + '_proxy', 0))
-                if hasattr(curTorrentProvider.proxy, 'url'):
-                    curTorrentProvider.proxy.url = check_setting_str(CFG, curTorrentProvider.getID().upper(),
-                                                                     curTorrentProvider.getID() + '_proxy_url', '')
             if hasattr(curTorrentProvider, 'confirmed'):
                 curTorrentProvider.confirmed = bool(check_setting_int(CFG, curTorrentProvider.getID().upper(),
                                                                       curTorrentProvider.getID() + '_confirmed', 1))
@@ -1837,12 +1837,6 @@ def save_config():
         if hasattr(curTorrentProvider, 'options'):
             new_config[curTorrentProvider.getID().upper()][
                 curTorrentProvider.getID() + '_options'] = curTorrentProvider.options
-        if hasattr(curTorrentProvider, 'proxy'):
-            new_config[curTorrentProvider.getID().upper()][curTorrentProvider.getID() + '_proxy'] = int(
-                curTorrentProvider.proxy.enabled)
-            if hasattr(curTorrentProvider.proxy, 'url'):
-                new_config[curTorrentProvider.getID().upper()][
-                    curTorrentProvider.getID() + '_proxy_url'] = curTorrentProvider.proxy.url
         if hasattr(curTorrentProvider, 'freeleech'):
             new_config[curTorrentProvider.getID().upper()][curTorrentProvider.getID() + '_freeleech'] = int(
                 curTorrentProvider.freeleech)
diff --git a/sickbeard/blackandwhitelist.py b/sickbeard/blackandwhitelist.py
index 0754d97bdbd889053c6ff0191e340b717a1ed245..796f82aab7409f29be0845ac618d56753bf388fb 100644
--- a/sickbeard/blackandwhitelist.py
+++ b/sickbeard/blackandwhitelist.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Dennis Lutter <lad1337@gmail.com>
 # URL: https://sickrage.tv/
 # Git: https://github.com/SickRage/SickRage.git
@@ -21,6 +22,7 @@ import sickbeard
 from sickbeard import db, logger, helpers
 from adba.aniDBerrors import AniDBCommandTimeoutError
 
+
 class BlackAndWhiteList(object):
     blacklist = []
     whitelist = []
@@ -38,7 +40,7 @@ class BlackAndWhiteList(object):
         logger.log(u'Building black and white list for ' + str(self.show_id), logger.DEBUG)
         self.blacklist = self._load_list('blacklist')
         self.whitelist = self._load_list('whitelist')
-        
+
     def _add_keywords(self, table, values):
         """
         DB: Adds keywords into database for current show
@@ -48,7 +50,7 @@ class BlackAndWhiteList(object):
         """
         myDB = db.DBConnection()
         for value in values:
-            myDB.action('INSERT INTO [' + table + '] (show_id, keyword) VALUES (?,?)', [self.show_id, value]) 
+            myDB.action('INSERT INTO [' + table + '] (show_id, keyword) VALUES (?,?)', [self.show_id, value])
 
     def set_black_keywords(self, values):
         """
@@ -59,7 +61,7 @@ class BlackAndWhiteList(object):
         self._del_all_keywords('blacklist')
         self._add_keywords('blacklist', values)
         self.blacklist = values
-        logger.log('Blacklist set to: %s' % self.blacklist, logger.DEBUG)
+        logger.log(u'Blacklist set to: %s' % self.blacklist, logger.DEBUG)
 
     def set_white_keywords(self, values):
         """
@@ -70,7 +72,7 @@ class BlackAndWhiteList(object):
         self._del_all_keywords('whitelist')
         self._add_keywords('whitelist', values)
         self.whitelist = values
-        logger.log('Whitelist set to: %s' % self.whitelist, logger.DEBUG)            
+        logger.log(u'Whitelist set to: %s' % self.whitelist, logger.DEBUG)
 
     def _del_all_keywords(self, table):
         """
@@ -79,8 +81,8 @@ class BlackAndWhiteList(object):
         :param table: SQL table remove keywords from
         """
         myDB = db.DBConnection()
-        myDB.action('DELETE FROM [' + table + '] WHERE show_id = ?', [self.show_id])        
-        
+        myDB.action('DELETE FROM [' + table + '] WHERE show_id = ?', [self.show_id])
+
     def _load_list(self, table):
         """
         DB: Fetch keywords for current show
@@ -96,8 +98,9 @@ class BlackAndWhiteList(object):
         groups = []
         for result in sqlResults:
             groups.append(result["keyword"])
-            
-        logger.log('BWL: ' + str(self.show_id) + ' loaded keywords from ' + table + ': ' + str(groups), logger.DEBUG)
+
+        logger.log(u'BWL: ' + str(self.show_id) + ' loaded keywords from ' + table + ': ' + str(groups), logger.DEBUG)
+
         return groups
 
     def is_valid(self, result):
@@ -107,10 +110,12 @@ class BlackAndWhiteList(object):
         :param result: Result to analyse
         :return: False if result is not allowed in white/blacklist, True if it is
         """
-        if not result.release_group:
-            logger.log('Failed to detect release group, invalid result', logger.DEBUG)
-            return False
+
         if self.whitelist or self.blacklist:
+            if not result.release_group:
+                logger.log('Failed to detect release group, invalid result', logger.DEBUG)
+                return False
+
             if result.release_group.lower() in [x.lower() for x in self.whitelist]:
                 white_result = True
             elif not self.whitelist:
@@ -122,18 +127,20 @@ class BlackAndWhiteList(object):
             else:
                 black_result = True
 
-            logger.log('Whitelist check passed: %s. Blacklist check passed: %s' % (white_result, black_result), logger.DEBUG)
+            logger.log(u'Whitelist check passed: %s. Blacklist check passed: %s' % (white_result, black_result), logger.DEBUG)
 
             if white_result and black_result:
-                 return True 
+                return True
             else:
-                 return False
+                return False
         else:
-            logger.log('No Whitelist and  Blacklist defined, check passed.', logger.DEBUG)
-            return True 
-             
+            logger.log(u'No Whitelist and  Blacklist defined, check passed.', logger.DEBUG)
+            return True
+
+
 class BlackWhitelistNoShowIDException(Exception):
-    'No show_id was given'
+    """No show_id was given"""
+
 
 def short_group_names(groups):
     """
@@ -150,14 +157,14 @@ def short_group_names(groups):
                 group = sickbeard.ADBA_CONNECTION.group(gname=groupName)
             except AniDBCommandTimeoutError:
                 logger.log(u"Timeout while loading group from AniDB. Trying next group", logger.DEBUG)
-            except:
+            except Exception:
                 logger.log(u"Failed while loading group from AniDB. Trying next group", logger.DEBUG)
             else:
                 for line in group.datalines:
                     if line["shortname"]:
                         shortGroupList.append(line["shortname"])
                     else:
-                        if not groupName in shortGroupList:
+                        if groupName not in shortGroupList:
                             shortGroupList.append(groupName)
     else:
         shortGroupList = groups
diff --git a/sickbeard/browser.py b/sickbeard/browser.py
index c5d9ab1700c8fcb2d93427c8b7fa9453caf32c38..7f10ff350afadc1c009ae7da29b0b072dc367360 100644
--- a/sickbeard/browser.py
+++ b/sickbeard/browser.py
@@ -31,7 +31,7 @@ def getWinDrives():
     from ctypes import windll
 
     drives = []
-    bitmask = windll.kernel32.GetLogicalDrives()  #@UndefinedVariable
+    bitmask = windll.kernel32.GetLogicalDrives()  # @UndefinedVariable
     for letter in string.uppercase:
         if bitmask & 1:
             drives.append(letter)
@@ -83,13 +83,14 @@ def foldersAtPath(path, includeParent=False, includeFiles=False):
         fileList = [{'name': filename, 'path': ek(os.path.join, parentPath, filename)} for filename in ek(os.listdir, parentPath)]
 
     if not includeFiles:
-        fileList = filter(lambda entry: ek(os.path.isdir, entry['path']), fileList)
+        fileList = [x for x in fileList if ek(os.path.isdir, x['path'])]
 
     # prune out directories to protect the user from doing stupid things (already lower case the dir to reduce calls)
     hideList = ["boot", "bootmgr", "cache", "msocache", "recovery", "$recycle.bin", "recycler",
                 "system volume information", "temporary internet files"]  # windows specific
     hideList += [".fseventd", ".spotlight", ".trashes", ".vol", "cachedmessages", "caches", "trash"]  # osx specific
-    fileList = filter(lambda entry: entry['name'].lower() not in hideList, fileList)
+
+    fileList = [x for x in fileList if x['name'].lower() not in hideList]
 
     fileList = sorted(fileList,
                       lambda x, y: cmp(os.path.basename(x['name']).lower(), os.path.basename(y['path']).lower()))
diff --git a/sickbeard/classes.py b/sickbeard/classes.py
index 7c79dbeae0f5bf5fd54332aa863b99a10ebe8a58..a64f8db3f663f346228fbadc9d76b90258f1404b 100644
--- a/sickbeard/classes.py
+++ b/sickbeard/classes.py
@@ -25,7 +25,7 @@ import urllib
 import datetime
 from dateutil import parser
 
-from common import USER_AGENT, Quality
+from sickbeard.common import USER_AGENT, Quality
 from sickrage.helper.common import dateFormat, dateTimeFormat
 
 
@@ -73,13 +73,13 @@ class AuthURLOpener(SickBeardURLopener):
         return SickBeardURLopener.open(self, url)
 
 
-class SearchResult:
+class SearchResult(object):
     """
     Represents a search result from an indexer.
     """
 
     def __init__(self, episodes):
-        self.provider = -1
+        self.provider = None
 
         # release show object
         self.show = None
@@ -114,6 +114,8 @@ class SearchResult:
         # content
         self.content = None
 
+        self.resultType = ''
+
     def __str__(self):
 
         if self.provider is None:
@@ -124,7 +126,10 @@ class SearchResult:
         for extra in self.extraInfo:
             myString += "  " + extra + "\n"
 
-        myString += "Episode: " + str(self.episodes) + "\n"
+        myString += "Episodes:\n"
+        for ep in self.episodes:
+            myString += "  " + str(ep) + "\n"
+
         myString += "Quality: " + Quality.qualityStrings[self.quality] + "\n"
         myString += "Name: " + self.name + "\n"
         myString += "Size: " + str(self.size) + "\n"
@@ -140,24 +145,30 @@ class NZBSearchResult(SearchResult):
     """
     Regular NZB result with an URL to the NZB
     """
-    resultType = "nzb"
+    def __init__(self, episodes):
+        super(NZBSearchResult, self).__init__(episodes)
+        self.resultType = "nzb"
 
 
 class NZBDataSearchResult(SearchResult):
     """
     NZB result where the actual NZB XML data is stored in the extraInfo
     """
-    resultType = "nzbdata"
+    def __init__(self, episodes):
+        super(NZBDataSearchResult, self).__init__(episodes)
+        self.resultType = "nzbdata"
 
 
 class TorrentSearchResult(SearchResult):
     """
     Torrent result with an URL to the torrent
     """
-    resultType = "torrent"
+    def __init__(self, episodes):
+        super(TorrentSearchResult, self).__init__(episodes)
+        self.resultType = "torrent"
 
 
-class AllShowsListUI:
+class AllShowsListUI(object):
     """
     This class is for indexer api. Instead of prompting with a UI to pick the
     desired result out of a list of shows it tries to be smart about it
@@ -200,7 +211,7 @@ class AllShowsListUI:
         return searchResults
 
 
-class ShowListUI:
+class ShowListUI(object):
     """
     This class is for tvdb-api. Instead of prompting with a UI to pick the
     desired result out of a list of shows it tries to be smart about it
@@ -214,17 +225,18 @@ class ShowListUI:
     def selectSeries(self, allSeries):
         try:
             # try to pick a show that's in my show list
+            showIDList = [int(x.indexerid) for x in sickbeard.showList]
             for curShow in allSeries:
-                if filter(lambda x: int(x.indexerid) == int(curShow['id']), sickbeard.showList):
+                if int(curShow['id']) in showIDList:
                     return curShow
-        except:
+        except Exception:
             pass
 
         # if nothing matches then return first result
         return allSeries[0]
 
 
-class Proper:
+class Proper(object):
     def __init__(self, name, url, date, show):
         self.name = name
         self.url = url
@@ -247,7 +259,7 @@ class Proper:
             self.indexerid) + " from " + str(sickbeard.indexerApi(self.indexer).name)
 
 
-class ErrorViewer:
+class ErrorViewer(object):
     """
     Keeps a static list of UIErrors to be displayed on the UI and allows
     the list to be cleared.
@@ -271,7 +283,7 @@ class ErrorViewer:
         return ErrorViewer.errors
 
 
-class WarningViewer:
+class WarningViewer(object):
     """
     Keeps a static list of (warning) UIErrors to be displayed on the UI and allows
     the list to be cleared.
@@ -295,7 +307,7 @@ class WarningViewer:
         return WarningViewer.errors
 
 
-class UIError:
+class UIError(object):
     """
     Represents an error to be displayed in the web UI.
     """
diff --git a/sickbeard/clients/__init__.py b/sickbeard/clients/__init__.py
index 7fe1f62f333d7a8e9f7a7136772bddc63d2c44d6..ddc11114af7adfac01cef01991ef12ae81616aa5 100644
--- a/sickbeard/clients/__init__.py
+++ b/sickbeard/clients/__init__.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -16,19 +17,20 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-__all__ = ['utorrent',
-           'transmission',
-           'deluge',
-           'deluged',
-           'download_station',
-           'rtorrent',
-           'qbittorrent'
+__all__ = [
+    'utorrent',
+    'transmission',
+    'deluge',
+    'deluged',
+    'download_station',
+    'rtorrent',
+    'qbittorrent',
+    'mlnet'
 ]
 
-
-
 # Mapping error status codes to official W3C names
 http_error_code = {
+    # todo: Handle error codes with duplicates (e.g. 451, 499)
     300: 'Multiple Choices',
     301: 'Moved Permanently',
     302: 'Found',
@@ -91,19 +93,26 @@ http_error_code = {
     509: 'Bandwidth Limit Exceeded',
     510: 'Not Extended',
     511: 'Network Authentication Required',
-    522: 'Cloudfare Connection timed out',
-    524: 'Request to host timedout waiting for reply back',
+    520: 'Cloudfare - Web server is returning an unknown error',
+    521: 'Cloudfare - Web server is down',
+    522: 'Cloudfare - Connection timed out',
+    523: 'Cloudfare - Origin is unreachable',
+    524: 'Cloudfare - A timeout occurred',
+    525: 'Cloudfare - SSL handshake failed',
+    526: 'Cloudfare - Invalid SSL certificate',
     598: 'Network read timeout error',
     599: 'Network connect timeout error '
 }
 
-default_host = {'utorrent': 'http://localhost:8000',
-                'transmission': 'http://localhost:9091',
-                'deluge': 'http://localhost:8112',
-                'deluged': 'scgi://localhost:58846',
-                'download_station': 'http://localhost:5000',
-                'rtorrent': 'scgi://localhost:5000',
-                'qbittorrent': 'http://localhost:8080'
+default_host = {
+    'utorrent': 'http://localhost:8000',
+    'transmission': 'http://localhost:9091',
+    'deluge': 'http://localhost:8112',
+    'deluged': 'scgi://localhost:58846',
+    'download_station': 'http://localhost:5000',
+    'rtorrent': 'scgi://localhost:5000',
+    'qbittorrent': 'http://localhost:8080',
+    'mlnet': 'http://localhost:4080'
 }
 
 
diff --git a/sickbeard/clients/deluge_client.py b/sickbeard/clients/deluge_client.py
index 3303ce896fd5cfe5ef4b08da2806e60a98bc0e3d..6e6a92a141c3990fa9b5ea42f32d4d246db10434 100644
--- a/sickbeard/clients/deluge_client.py
+++ b/sickbeard/clients/deluge_client.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Mr_Orange <mr_orange@hotmail.it>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -21,7 +22,7 @@ from base64 import b64encode
 
 import sickbeard
 from sickbeard import logger
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 
 
 class DelugeAPI(GenericClient):
@@ -35,22 +36,22 @@ class DelugeAPI(GenericClient):
 
         post_data = json.dumps({"method": "auth.login",
                                 "params": [self.password],
-                                "id": 1
-        })
+                                "id": 1})
+
         try:
             self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT)
-        except:
+        except Exception:
             return None
 
         self.auth = self.response.json()["result"]
 
         post_data = json.dumps({"method": "web.connected",
                                 "params": [],
-                                "id": 10
-        })
+                                "id": 10})
+
         try:
             self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT)
-        except:
+        except Exception:
             return None
 
         connected = self.response.json()['result']
@@ -58,12 +59,12 @@ class DelugeAPI(GenericClient):
         if not connected:
             post_data = json.dumps({"method": "web.get_hosts",
                                     "params": [],
-                                    "id": 11
-            })
+                                    "id": 11})
             try:
                 self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT)
-            except:
+            except Exception:
                 return None
+
             hosts = self.response.json()['result']
             if len(hosts) == 0:
                 logger.log(self.name + u': WebUI does not contain daemons', logger.ERROR)
@@ -71,20 +72,20 @@ class DelugeAPI(GenericClient):
 
             post_data = json.dumps({"method": "web.connect",
                                     "params": [hosts[0][0]],
-                                    "id": 11
-            })
+                                    "id": 11})
+
             try:
                 self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT)
-            except:
+            except Exception:
                 return None
 
             post_data = json.dumps({"method": "web.connected",
                                     "params": [],
-                                    "id": 10
-            })
+                                    "id": 10})
+
             try:
                 self.response = self.session.post(self.url, data=post_data.encode('utf-8'), verify=sickbeard.TORRENT_VERIFY_CERT)
-            except:
+            except Exception:
                 return None
 
             connected = self.response.json()['result']
@@ -98,8 +99,8 @@ class DelugeAPI(GenericClient):
 
         post_data = json.dumps({"method": "core.add_torrent_magnet",
                                 "params": [result.url, {}],
-                                "id": 2
-        })
+                                "id": 2})
+
         self._request(method='post', data=post_data)
 
         result.hash = self.response.json()['result']
@@ -110,8 +111,8 @@ class DelugeAPI(GenericClient):
 
         post_data = json.dumps({"method": "core.add_torrent_file",
                                 "params": [result.name + '.torrent', b64encode(result.content), {}],
-                                "id": 2
-        })
+                                "id": 2})
+
         self._request(method='post', data=post_data)
 
         result.hash = self.response.json()['result']
@@ -131,27 +132,27 @@ class DelugeAPI(GenericClient):
             # check if label already exists and create it if not
             post_data = json.dumps({"method": 'label.get_labels',
                                     "params": [],
-                                    "id": 3
-            })
+                                    "id": 3})
+
             self._request(method='post', data=post_data)
             labels = self.response.json()['result']
 
-            if labels != None:
+            if labels is not None:
                 if label not in labels:
                     logger.log(self.name + ': ' + label + u" label does not exist in Deluge we must add it",
                                logger.DEBUG)
                     post_data = json.dumps({"method": 'label.add',
                                             "params": [label],
-                                            "id": 4
-                    })
+                                            "id": 4})
+
                     self._request(method='post', data=post_data)
                     logger.log(self.name + ': ' + label + u" label added to Deluge", logger.DEBUG)
 
-                # add label to torrent    
+                # add label to torrent
                 post_data = json.dumps({"method": 'label.set_torrent',
                                         "params": [result.hash, label],
-                                        "id": 5
-                })
+                                        "id": 5})
+
                 self._request(method='post', data=post_data)
                 logger.log(self.name + ': ' + label + u" label added to torrent", logger.DEBUG)
             else:
@@ -160,7 +161,6 @@ class DelugeAPI(GenericClient):
 
         return not self.response.json()['error']
 
-
     def _set_torrent_ratio(self, result):
 
         ratio = None
@@ -170,14 +170,14 @@ class DelugeAPI(GenericClient):
         if ratio:
             post_data = json.dumps({"method": "core.set_torrent_stop_at_ratio",
                                     "params": [result.hash, True],
-                                    "id": 5
-            })
+                                    "id": 5})
+
             self._request(method='post', data=post_data)
 
             post_data = json.dumps({"method": "core.set_torrent_stop_ratio",
                                     "params": [result.hash, float(ratio)],
-                                    "id": 6
-            })
+                                    "id": 6})
+
             self._request(method='post', data=post_data)
 
             return not self.response.json()['error']
@@ -189,14 +189,14 @@ class DelugeAPI(GenericClient):
         if sickbeard.TORRENT_PATH:
             post_data = json.dumps({"method": "core.set_torrent_move_completed",
                                     "params": [result.hash, True],
-                                    "id": 7
-            })
+                                    "id": 7})
+
             self._request(method='post', data=post_data)
 
             post_data = json.dumps({"method": "core.set_torrent_move_completed_path",
                                     "params": [result.hash, sickbeard.TORRENT_PATH],
-                                    "id": 8
-            })
+                                    "id": 8})
+
             self._request(method='post', data=post_data)
 
             return not self.response.json()['error']
@@ -208,8 +208,8 @@ class DelugeAPI(GenericClient):
         if sickbeard.TORRENT_PAUSED:
             post_data = json.dumps({"method": "core.pause_torrent",
                                     "params": [[result.hash]],
-                                    "id": 9
-            })
+                                    "id": 9})
+
             self._request(method='post', data=post_data)
 
             return not self.response.json()['error']
diff --git a/sickbeard/clients/deluged_client.py b/sickbeard/clients/deluged_client.py
index 39b9a07dd2110f3bf043526baf499887155d4917..1c956e86734f1bd7a4e758b7b4ddcb9bfc52bc0c 100644
--- a/sickbeard/clients/deluged_client.py
+++ b/sickbeard/clients/deluged_client.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Paul Wollaston
 # Contributions: Luke Mullan
 #
@@ -8,9 +9,10 @@ from base64 import b64encode
 
 import sickbeard
 from sickbeard import logger
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 from synchronousdeluge import DelugeClient
 
+
 class DelugeDAPI(GenericClient):
 
     drpc = None
@@ -24,18 +26,18 @@ class DelugeDAPI(GenericClient):
 
         return True
 
-    def connect(self, reconnect = False):
+    def connect(self, reconnect=False):
         hostname = self.host.replace("/", "").split(':')
 
         if not self.drpc or reconnect:
-            self.drpc = DelugeRPC(hostname[1], port = hostname[2], username = self.username, password = self.password)
+            self.drpc = DelugeRPC(hostname[1], port=hostname[2], username=self.username, password=self.password)
 
         return self.drpc
 
     def _add_torrent_uri(self, result):
-        label = sickbeard.TORRENT_LABEL
-        if result.show.is_anime:
-            label = sickbeard.TORRENT_LABEL_ANIME
+        # label = sickbeard.TORRENT_LABEL
+        # if result.show.is_anime:
+        #     label = sickbeard.TORRENT_LABEL_ANIME
 
         options = {
             'add_paused': sickbeard.TORRENT_PAUSED
@@ -51,13 +53,12 @@ class DelugeDAPI(GenericClient):
         return remote_torrent
 
     def _add_torrent_file(self, result):
-        label = sickbeard.TORRENT_LABEL
-        if result.show.is_anime:
-            label = sickbeard.TORRENT_LABEL_ANIME
-
-        if not result.content: result.content = {}
+        # label = sickbeard.TORRENT_LABEL
+        # if result.show.is_anime:
+        #     label = sickbeard.TORRENT_LABEL_ANIME
 
         if not result.content:
+            result.content = {}
             return None
 
         options = {
@@ -86,7 +87,6 @@ class DelugeDAPI(GenericClient):
             return self.drpc.set_torrent_label(result.hash, label)
         return True
 
-
     def _set_torrent_ratio(self, result):
         if result.ratio:
             ratio = float(result.ratio)
@@ -117,6 +117,7 @@ class DelugeDAPI(GenericClient):
         else:
             return False, 'Error: Unable to Authenticate!  Please check your config!'
 
+
 class DelugeRPC(object):
 
     host = 'localhost'
@@ -125,7 +126,7 @@ class DelugeRPC(object):
     password = None
     client = None
 
-    def __init__(self, host = 'localhost', port = 58846, username = None, password = None):
+    def __init__(self, host='localhost', port=58846, username=None, password=None):
         super(DelugeRPC, self).__init__()
 
         self.host = host
@@ -140,7 +141,7 @@ class DelugeRPC(object):
     def test(self):
         try:
             self.connect()
-        except:
+        except Exception:
             return False
         return True
 
@@ -151,7 +152,7 @@ class DelugeRPC(object):
             torrent_id = self.client.core.add_torrent_magnet(torrent, options).get()
             if not torrent_id:
                 torrent_id = self._check_torrent(torrent_hash)
-        except Exception as err:
+        except Exception:
             return False
         finally:
             if self.client:
@@ -166,7 +167,7 @@ class DelugeRPC(object):
             torrent_id = self.client.core.add_torrent_file(filename, b64encode(torrent), options).get()
             if not torrent_id:
                 torrent_id = self._check_torrent(torrent_hash)
-        except Exception as err:
+        except Exception:
             return False
         finally:
             if self.client:
@@ -178,7 +179,7 @@ class DelugeRPC(object):
         try:
             self.connect()
             self.client.label.set_torrent(torrent_id, label).get()
-        except Exception as err:
+        except Exception:
             return False
         finally:
             if self.client:
@@ -190,7 +191,7 @@ class DelugeRPC(object):
             self.connect()
             self.client.core.set_torrent_move_completed_path(torrent_id, path).get()
             self.client.core.set_torrent_move_completed(torrent_id, 1).get()
-        except Exception as err:
+        except Exception:
             return False
         finally:
             if self.client:
@@ -225,7 +226,7 @@ class DelugeRPC(object):
         try:
             self.connect()
             self.client.core.pause_torrent(torrent_ids).get()
-        except Exception as err:
+        except Exception:
             return False
         finally:
             if self.client:
@@ -238,7 +239,7 @@ class DelugeRPC(object):
     def _check_torrent(self, torrent_hash):
         torrent_id = self.client.core.get_torrent_status(torrent_hash, {}).get()
         if torrent_id['hash']:
-            logger.log('DelugeD: Torrent already exists in Deluge', logger.DEBUG)
+            logger.log(u'DelugeD: Torrent already exists in Deluge', logger.DEBUG)
             return torrent_hash
         return False
 
diff --git a/sickbeard/clients/download_station_client.py b/sickbeard/clients/download_station_client.py
index bbbd4e86f508443372ca1fed5b9cdabb18a42f77..621e517d87c5432f7543a6033677fda2257025e1 100644
--- a/sickbeard/clients/download_station_client.py
+++ b/sickbeard/clients/download_station_client.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Authors:
 # Pedro Jose Pereira Vieito <pvieito@gmail.com> (Twitter: @pvieito)
 #
@@ -21,7 +22,8 @@
 # Uses the Synology Download Station API: http://download.synology.com/download/Document/DeveloperGuide/Synology_Download_Station_Web_API.pdf
 
 import sickbeard
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
+
 
 class DownloadStationAPI(GenericClient):
 
@@ -38,19 +40,22 @@ class DownloadStationAPI(GenericClient):
         try:
             self.response = self.session.get(auth_url, verify=False)
             self.auth = self.response.json()['data']['sid']
-        except:
+        except Exception:
             return None
 
         return self.auth
 
     def _add_torrent_uri(self, result):
 
-        data = {'api':'SYNO.DownloadStation.Task',
-                'version':'1', 'method':'create',
-                'session':'DownloadStation',
-                '_sid':self.auth,
-                'uri':result.url
-                }
+        data = {
+            'api': 'SYNO.DownloadStation.Task',
+            'version': '1',
+            'method': 'create',
+            'session': 'DownloadStation',
+            '_sid': self.auth,
+            'uri': result.url
+        }
+
         if sickbeard.TORRENT_PATH:
             data['destination'] = sickbeard.TORRENT_PATH
         self._request(method='post', data=data)
@@ -59,15 +64,17 @@ class DownloadStationAPI(GenericClient):
 
     def _add_torrent_file(self, result):
 
-        data = {'api':'SYNO.DownloadStation.Task',
-                'version':'1',
-                'method':'create',
-                'session':'DownloadStation',
-                '_sid':self.auth
-                }
+        data = {
+            'api': 'SYNO.DownloadStation.Task',
+            'version': '1',
+            'method': 'create',
+            'session': 'DownloadStation',
+            '_sid': self.auth
+        }
+
         if sickbeard.TORRENT_PATH:
             data['destination'] = sickbeard.TORRENT_PATH
-        files = {'file':(result.name + '.torrent', result.content)}
+        files = {'file': (result.name + '.torrent', result.content)}
         self._request(method='post', data=data, files=files)
 
         return self.response.json()['success']
diff --git a/sickbeard/clients/generic.py b/sickbeard/clients/generic.py
index 18c0669006eb26399c1d17d75ce2b88b72b9bb19..945554403af1025bdf6606f78c9b2f0a8946c00d 100644
--- a/sickbeard/clients/generic.py
+++ b/sickbeard/clients/generic.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 import re
 import time
 from hashlib import sha1
@@ -5,11 +7,12 @@ from base64 import b16encode, b32decode
 
 import sickbeard
 from sickbeard import logger
-from . import http_error_code
+from sickbeard.clients import http_error_code
 from bencode import bencode, bdecode
 import requests
 from bencode.BTL import BTFailure
 
+
 class GenericClient(object):
     def __init__(self, name, host=None, username=None, password=None):
 
@@ -26,22 +29,15 @@ class GenericClient(object):
         self.session = requests.Session()
         self.session.auth = (self.username, self.password)
 
-    def _request(self, method='get', params={}, data=None, files=None):
+    def _request(self, method='get', params=None, data=None, files=None):
 
         if time.time() > self.last_time + 1800 or not self.auth:
             self.last_time = time.time()
             self._get_auth()
 
         logger.log(
-            self.name + u': Requested a ' + method.upper() + ' connection to url ' + self.url + ' with Params= ' + str(
-                params) + ' Data=' + str(data if data else 'None')[0:99] + (
-            '...' if len(data if data else 'None') > 200 else ''), logger.DEBUG)
-
-        logger.log(
-            self.name + u': Requested a ' + method.upper() + ' connection to url ' + self.url + ' with Params= ' + str(
-                params) + (
-                (' Data=' + str(data)[0:100] + ('...' if len(data) > 100 else '')) if data is not None else ""),
-            logger.DEBUG)
+            self.name + u': Requested a ' + method.upper() + ' connection to url ' + self.url +
+            ' with Params: ' + str(params) + ' Data: ' + str(data)[0:99] + ('...' if len(str(data)) > 200 else ''), logger.DEBUG)
 
         if not self.auth:
             logger.log(self.name + u': Authentication Failed', logger.WARNING)
@@ -143,24 +139,24 @@ class GenericClient(object):
     def _get_torrent_hash(self, result):
 
         if result.url.startswith('magnet'):
-            result.hash = re.findall('urn:btih:([\w]{32,40})', result.url)[0]
+            result.hash = re.findall(r'urn:btih:([\w]{32,40})', result.url)[0]
             if len(result.hash) == 32:
                 result.hash = b16encode(b32decode(result.hash)).lower()
         else:
             if not result.content:
-                logger.log('Torrent without content', logger.ERROR)
+                logger.log(u'Torrent without content', logger.ERROR)
                 raise Exception('Torrent without content')
 
             try:
                 torrent_bdecode = bdecode(result.content)
-            except BTFailure as e:
-                logger.log('Unable to bdecode torrent', logger.ERROR)
-                logger.log('Torrent bencoded data: {0}'.format(str(result.content)), logger.DEBUG)
+            except BTFailure:
+                logger.log(u'Unable to bdecode torrent', logger.ERROR)
+                logger.log(u'Torrent bencoded data: %r' % result.content, logger.DEBUG)
                 raise
             try:
                 info = torrent_bdecode["info"]
-            except Exception as e:
-                logger.log('Unable to find info field in torrent', logger.ERROR)
+            except Exception:
+                logger.log(u'Unable to find info field in torrent', logger.ERROR)
                 raise
             result.hash = sha1(bencode(info)).hexdigest()
 
@@ -221,7 +217,7 @@ class GenericClient(object):
 
         try:
             self.response = self.session.get(self.url, timeout=120, verify=False)
-        except requests.exceptions.ConnectionError, e:
+        except requests.exceptions.ConnectionError:
             return False, 'Error: ' + self.name + ' Connection Error'
         except (requests.exceptions.MissingSchema, requests.exceptions.InvalidURL):
             return False, 'Error: Invalid ' + self.name + ' host'
diff --git a/sickbeard/clients/mlnet_client.py b/sickbeard/clients/mlnet_client.py
new file mode 100644
index 0000000000000000000000000000000000000000..abd4634a0bd71d1b51269c37cb5182c7665b51a2
--- /dev/null
+++ b/sickbeard/clients/mlnet_client.py
@@ -0,0 +1,54 @@
+# coding=utf-8
+
+# Author: kounch
+# URL: http://code.google.com/p/sickbeard/
+#
+# This file is part of SickRage.
+#
+# SickRage 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 3 of the License, or
+# (at your option) any later version.
+#
+# SickRage 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 SickRage.  If not, see <http://www.gnu.org/licenses/>.
+
+from sickbeard.clients.generic import GenericClient
+
+
+class mlnetAPI(GenericClient):
+    def __init__(self, host=None, username=None, password=None):
+
+        super(mlnetAPI, self).__init__('mlnet', host, username, password)
+
+        self.url = self.host
+        # self.session.auth = HTTPDigestAuth(self.username, self.password);
+
+    def _get_auth(self):
+
+        try:
+            self.response = self.session.get(self.host, verify=False)
+            self.auth = self.response.content
+        except Exception:
+            return None
+
+        return self.auth if not self.response.status_code == 404 else None
+
+    def _add_torrent_uri(self, result):
+
+        self.url = self.host + 'submit'
+        params = {'q': 'dllink ' + result.url}
+        return self._request(method='get', params=params)
+
+    def _add_torrent_file(self, result):
+
+        self.url = self.host + 'submit'
+        params = {'q': 'dllink ' + result.url}
+        return self._request(method='get', params=params)
+
+api = mlnetAPI()
diff --git a/sickbeard/clients/qbittorrent_client.py b/sickbeard/clients/qbittorrent_client.py
index 7b39a3f09a6210882b3ede7a3b1bd441587d4b6b..962fd22ac7747597c34a9f33de2fd188e97457e6 100644
--- a/sickbeard/clients/qbittorrent_client.py
+++ b/sickbeard/clients/qbittorrent_client.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Mr_Orange <mr_orange@hotmail.it>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -17,23 +19,24 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
 import sickbeard
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 from requests.auth import HTTPDigestAuth
 
+
 class qbittorrentAPI(GenericClient):
     def __init__(self, host=None, username=None, password=None):
 
         super(qbittorrentAPI, self).__init__('qbittorrent', host, username, password)
 
         self.url = self.host
-        self.session.auth = HTTPDigestAuth(self.username, self.password);
+        self.session.auth = HTTPDigestAuth(self.username, self.password)
 
     def _get_auth(self):
 
         try:
             self.response = self.session.get(self.host, verify=False)
             self.auth = self.response.content
-        except:
+        except Exception:
             return None
 
         return self.auth if not self.response.status_code == 404 else None
@@ -60,7 +63,7 @@ class qbittorrentAPI(GenericClient):
         return self._request(method='post', data=data)
 
     def _set_torrent_pause(self, result):
-        
+
         self.url = self.host+'command/resume'
         if sickbeard.TORRENT_PAUSED:
             self.url = self.host+'command/pause'
diff --git a/sickbeard/clients/rtorrent_client.py b/sickbeard/clients/rtorrent_client.py
index 867599cee2bb49b745b477ed193c5fdbc35a04f0..5e21e79b55fd0ed13fa5c5ef0e57056ab0d7200f 100644
--- a/sickbeard/clients/rtorrent_client.py
+++ b/sickbeard/clients/rtorrent_client.py
@@ -20,7 +20,7 @@ import traceback
 
 import sickbeard
 from sickbeard import logger
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 from rtorrent import RTorrent
 
 
@@ -52,7 +52,6 @@ class rTorrentAPI(GenericClient):
         return self.auth
 
     def _add_torrent_uri(self, result):
-        filedata = None
 
         if not self.auth:
             return False
@@ -82,12 +81,11 @@ class rTorrentAPI(GenericClient):
 
             return True
 
-        except Exception as e:
+        except Exception:
             logger.log(traceback.format_exc(), logger.DEBUG)
             return False
 
     def _add_torrent_file(self, result):
-        filedata = None
 
         if not self.auth:
             return False
@@ -125,7 +123,7 @@ class rTorrentAPI(GenericClient):
 
             return True
 
-        except Exception as e:
+        except Exception:
             logger.log(traceback.format_exc(), logger.DEBUG)
             return False
 
diff --git a/sickbeard/clients/transmission_client.py b/sickbeard/clients/transmission_client.py
index 06fc75a546f50e1bda72b85acd522e00472558c1..c26a8391271e5bb51138e10eed47932fff194648 100644
--- a/sickbeard/clients/transmission_client.py
+++ b/sickbeard/clients/transmission_client.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Mr_Orange <mr_orange@hotmail.it>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -21,7 +23,7 @@ import json
 from base64 import b64encode
 
 import sickbeard
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 
 
 class TransmissionAPI(GenericClient):
@@ -30,7 +32,7 @@ class TransmissionAPI(GenericClient):
         super(TransmissionAPI, self).__init__('Transmission', host, username, password)
 
         if not self.host.endswith('/'):
-            self.host = self.host + '/'
+            self.host += '/'
 
         if self.rpcurl.startswith('/'):
             self.rpcurl = self.rpcurl[1:]
@@ -47,16 +49,16 @@ class TransmissionAPI(GenericClient):
         try:
             self.response = self.session.post(self.url, data=post_data.encode('utf-8'), timeout=120,
                                               verify=sickbeard.TORRENT_VERIFY_CERT)
-            self.auth = re.search('X-Transmission-Session-Id:\s*(\w+)', self.response.text).group(1)
-        except:
+            self.auth = re.search(r'X-Transmission-Session-Id:\s*(\w+)', self.response.text).group(1)
+        except Exception:
             return None
 
         self.session.headers.update({'x-transmission-session-id': self.auth})
 
-        #Validating Transmission authorization
+        # Validating Transmission authorization
         post_data = json.dumps({'arguments': {},
-                                'method': 'session-get',
-        })
+                                'method': 'session-get'})
+
         self._request(method='post', data=post_data)
 
         return self.auth
@@ -65,11 +67,11 @@ class TransmissionAPI(GenericClient):
 
         arguments = {'filename': result.url,
                      'paused': 1 if sickbeard.TORRENT_PAUSED else 0,
-                     'download-dir': sickbeard.TORRENT_PATH
-        }
+                     'download-dir': sickbeard.TORRENT_PATH}
+
         post_data = json.dumps({'arguments': arguments,
-                                'method': 'torrent-add',
-        })
+                                'method': 'torrent-add'})
+
         self._request(method='post', data=post_data)
 
         return self.response.json()['result'] == "success"
@@ -78,11 +80,11 @@ class TransmissionAPI(GenericClient):
 
         arguments = {'metainfo': b64encode(result.content),
                      'paused': 1 if sickbeard.TORRENT_PAUSED else 0,
-                     'download-dir': sickbeard.TORRENT_PATH
-        }
+                     'download-dir': sickbeard.TORRENT_PATH}
+
         post_data = json.dumps({'arguments': arguments,
-                                'method': 'torrent-add',
-        })
+                                'method': 'torrent-add'})
+
         self._request(method='post', data=post_data)
 
         return self.response.json()['result'] == "success"
@@ -104,11 +106,11 @@ class TransmissionAPI(GenericClient):
 
         arguments = {'ids': [result.hash],
                      'seedRatioLimit': ratio,
-                     'seedRatioMode': mode
-        }
+                     'seedRatioMode': mode}
+
         post_data = json.dumps({'arguments': arguments,
-                                'method': 'torrent-set',
-        })
+                                'method': 'torrent-set'})
+
         self._request(method='post', data=post_data)
 
         return self.response.json()['result'] == "success"
@@ -119,12 +121,11 @@ class TransmissionAPI(GenericClient):
             time = int(60 * float(sickbeard.TORRENT_SEED_TIME))
             arguments = {'ids': [result.hash],
                          'seedIdleLimit': time,
-                         'seedIdleMode': 1
-            }
+                         'seedIdleMode': 1}
 
             post_data = json.dumps({'arguments': arguments,
-                                'method': 'torrent-set',
-            })
+                                    'method': 'torrent-set'})
+
             self._request(method='post', data=post_data)
 
             return self.response.json()['result'] == "success"
@@ -148,8 +149,8 @@ class TransmissionAPI(GenericClient):
             arguments['priority-normal'] = []
 
         post_data = json.dumps({'arguments': arguments,
-                                'method': 'torrent-set',
-        })
+                                'method': 'torrent-set'})
+
         self._request(method='post', data=post_data)
 
         return self.response.json()['result'] == "success"
diff --git a/sickbeard/clients/utorrent_client.py b/sickbeard/clients/utorrent_client.py
index c0462f8df1f9ba57996ed18d36a5c6fda8957a31..68a8a7ec63263f3ddf97c685128249481dee4298 100644
--- a/sickbeard/clients/utorrent_client.py
+++ b/sickbeard/clients/utorrent_client.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Authors: Mr_Orange <mr_orange@hotmail.it>, EchelonFour
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -19,7 +21,7 @@
 import re
 
 import sickbeard
-from .generic import GenericClient
+from sickbeard.clients.generic import GenericClient
 
 
 class uTorrentAPI(GenericClient):
@@ -29,23 +31,23 @@ class uTorrentAPI(GenericClient):
 
         self.url = self.host + 'gui/'
 
-    def _request(self, method='get', params={}, files=None):
+    def _request(self, method='get', params=None, data=None, files=None):
 
-        #Workaround for uTorrent 2.2.1
-        #Need a odict but only supported in 2.7+ and sickrage is 2.6+
+        # Workaround for uTorrent 2.2.1
+        # Need a odict but only supported in 2.7+ and sickrage is 2.6+
         ordered_params = {'token': self.auth}
 
-        for k,v in params.iteritems():
+        for k, v in params.iteritems() or {}:
             ordered_params.update({k: v})
 
-        return super(uTorrentAPI, self)._request(method=method, params=ordered_params, files=files)
+        return super(uTorrentAPI, self)._request(method=method, params=ordered_params, data=data, files=files)
 
     def _get_auth(self):
 
         try:
             self.response = self.session.get(self.url + 'token.html', verify=False)
             self.auth = re.findall("<div.*?>(.*?)</", self.response.text)[0]
-        except:
+        except Exception:
             return None
 
         return self.auth if not self.response.status_code == 404 else None
@@ -70,8 +72,8 @@ class uTorrentAPI(GenericClient):
         params = {'action': 'setprops',
                   'hash': result.hash,
                   's': 'label',
-                  'v': label
-        }
+                  'v': label}
+
         return self._request(params=params)
 
     def _set_torrent_ratio(self, result):
@@ -84,14 +86,14 @@ class uTorrentAPI(GenericClient):
             params = {'action': 'setprops',
                       'hash': result.hash,
                       's': 'seed_override',
-                      'v': '1'
-            }
+                      'v': '1'}
+
             if self._request(params=params):
                 params = {'action': 'setprops',
                           'hash': result.hash,
                           's': 'seed_ratio',
-                          'v': float(ratio) * 10
-                }
+                          'v': float(ratio) * 10}
+
                 return self._request(params=params)
             else:
                 return False
@@ -105,27 +107,27 @@ class uTorrentAPI(GenericClient):
             params = {'action': 'setprops',
                       'hash': result.hash,
                       's': 'seed_override',
-                      'v': '1'
-            }
+                      'v': '1'}
+
             if self._request(params=params):
                 params = {'action': 'setprops',
                           'hash': result.hash,
                           's': 'seed_time',
-                          'v': time
-                }
+                          'v': time}
+
                 return self._request(params=params)
             else:
                 return False
         else:
-            return True         
-        
+            return True
+
     def _set_torrent_priority(self, result):
 
         if result.priority == 1:
             params = {'action': 'queuetop', 'hash': result.hash}
             return self._request(params=params)
         else:
-            return True            
+            return True
 
     def _set_torrent_pause(self, result):
 
@@ -137,4 +139,4 @@ class uTorrentAPI(GenericClient):
         return self._request(params=params)
 
 
-api = uTorrentAPI()       
+api = uTorrentAPI()
diff --git a/sickbeard/common.py b/sickbeard/common.py
index a0a63361e96f5ae601dc11f0435a9c9f09bee5e9..a20d543eacc6211fb5c9702d16d5e857824e9a88 100644
--- a/sickbeard/common.py
+++ b/sickbeard/common.py
@@ -22,6 +22,13 @@ import operator
 import platform
 import re
 import uuid
+from numdict import NumDict
+
+import sys
+import os.path
+
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
 from random import shuffle
 
@@ -89,7 +96,7 @@ ARCHIVED = 6  # episodes that you don't have locally (counts toward download com
 IGNORED = 7  # episodes that you don't want included in your download stats
 SNATCHED_PROPER = 9  # qualified with quality
 SUBTITLED = 10  # qualified with quality
-FAILED = 11  #episode downloaded or snatched we don't want
+FAILED = 11  # episode downloaded or snatched we don't want
 SNATCHED_BEST = 12  # episode redownloaded using best quality
 
 NAMING_REPEAT = 1
@@ -107,8 +114,8 @@ multiEpStrings[NAMING_EXTEND] = "Extend"
 multiEpStrings[NAMING_LIMITED_EXTEND] = "Extend (Limited)"
 multiEpStrings[NAMING_LIMITED_EXTEND_E_PREFIXED] = "Extend (Limited, E-prefixed)"
 
-# pylint: disable=W0232,C1001
-class Quality:
+# pylint: disable=W0232
+class Quality(object):
     NONE = 0  # 0
     SDTV = 1  # 1
     SDDVD = 1 << 1  # 2
@@ -221,7 +228,7 @@ class Quality:
         :return: Quality prefix
         """
 
-        #Try Scene names first
+        # Try Scene names first
         quality = Quality.sceneQuality(name, anime)
         if quality != Quality.UNKNOWN:
             return quality
@@ -435,9 +442,9 @@ class Quality:
 
         # 2 corresponds to SDDVD quality
         if quality == 2:
-            if re.search(r"b[rd](|.|-| )(rip|mux)", name.lower()):
+            if re.search(r"b(r|d|rd)?(-| |\.)?(rip|mux)", name.lower()):
                 rip_type = " BDRip"
-            elif re.search(r"dvd(|.|-| )(rip|mux)", name.lower()):
+            elif re.search(r"(dvd)(-| |\.)?(rip|mux)?", name.lower()):
                 rip_type = " DVDRip"
             else:
                 rip_type = ""
@@ -512,46 +519,61 @@ qualityPresetStrings = {SD: "SD",
                         ANY: "Any"}
 
 
-# pylint: disable=R0903,C1001
-class StatusStrings:
-    def __init__(self):
-        self.statusStrings = {UNKNOWN: "Unknown",
-                              UNAIRED: "Unaired",
-                              SNATCHED: "Snatched",
-                              DOWNLOADED: "Downloaded",
-                              SKIPPED: "Skipped",
-                              SNATCHED_PROPER: "Snatched (Proper)",
-                              WANTED: "Wanted",
-                              ARCHIVED: "Archived",
-                              IGNORED: "Ignored",
-                              SUBTITLED: "Subtitled",
-                              FAILED: "Failed",
-                              SNATCHED_BEST: "Snatched (Best)"}
-
-    def __getitem__(self, key):
-        key = int(key)
-        if key in Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED:
-            status, quality = Quality.splitCompositeStatus(key)
-            if quality == Quality.NONE:
-                return self.statusStrings[status]
-            else:
-                return self.statusStrings[status] + " (" + Quality.qualityStrings[quality] + ")"
-        else:
-            return self.statusStrings[key] if self.statusStrings.has_key(key) else ''
-
-    def has_key(self, key):
-        key = int(key)
-        return key in self.statusStrings or key in Quality.DOWNLOADED + Quality.ARCHIVED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST
+class StatusStrings(NumDict):
+    """
+    Dictionary containing strings for status codes
+    """
+    # todo: Deprecate StatusStrings().statusStrings and use StatusStrings() directly
+    # todo: Deprecate .has_key and switch to 'x in y'
+    # todo: Make views return Qualities too
+    # todo:
 
-    def __contains__(self, key):
-        return self.has_key(key)
+    qualities = Quality.DOWNLOADED + Quality.SNATCHED + Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.ARCHIVED
 
-statusStrings = StatusStrings()
+    @property
+    def statusStrings(self):  # for backwards compatibility
+        return self.data
 
+    def __missing__(self, key):
+        """
+        If the key is not found try to determine a status from Quality
 
-# pylint: disable=R0903,C1001
-class Overview:
+        :param key: A numeric key or None
+        :raise KeyError: if the key is invalid and can't be determined from Quality
+        """
+        key = self.numeric(key)  # try to convert the key to a number which will raise KeyError if it can't
+        if key in self.qualities:  # the key wasn't found locally so check in qualities
+            status, quality = Quality.splitCompositeStatus(key)
+            return self[status] if not quality else self[status] + " (" + Quality.qualityStrings[quality] + ")"
+        else:  # the key wasn't found in qualities either
+            raise KeyError(key)  # ... so the key is invalid
 
+    def __contains__(self, key):
+        try:
+            key = self.numeric(key)
+            return key in self.data or key in self.qualities
+        except KeyError:
+            return False
+
+# Assign strings to statuses
+statusStrings = StatusStrings(
+    {UNKNOWN: "Unknown",
+     UNAIRED: "Unaired",
+     SNATCHED: "Snatched",
+     DOWNLOADED: "Downloaded",
+     SKIPPED: "Skipped",
+     SNATCHED_PROPER: "Snatched (Proper)",
+     WANTED: "Wanted",
+     ARCHIVED: "Archived",
+     IGNORED: "Ignored",
+     SUBTITLED: "Subtitled",
+     FAILED: "Failed",
+     SNATCHED_BEST: "Snatched (Best)"
+     }
+)
+
+# pylint: disable=R0903
+class Overview(object):
     UNAIRED = UNAIRED  # 1
     QUAL = 2
     WANTED = WANTED  # 3
@@ -576,4 +598,4 @@ XML_NSMAP = {'xsi': 'http://www.w3.org/2001/XMLSchema-instance',
 countryList = {'Australia': 'AU',
                'Canada': 'CA',
                'USA': 'US'
-              }
+               }
diff --git a/sickbeard/config.py b/sickbeard/config.py
index 7ea8d44345e97968a4813b239da3afe974c615ef..9179213b8913190a174b70d311ef5adadf4942ba 100644
--- a/sickbeard/config.py
+++ b/sickbeard/config.py
@@ -265,7 +265,7 @@ def change_SUBTITLES_FINDER_FREQUENCY(subtitles_finder_frequency):
     :param subtitles_finder_frequency: New frequency
     """
     if subtitles_finder_frequency == '' or subtitles_finder_frequency is None:
-            subtitles_finder_frequency = 1
+        subtitles_finder_frequency = 1
 
     sickbeard.SUBTITLES_FINDER_FREQUENCY = to_int(subtitles_finder_frequency, 1)
 
@@ -388,12 +388,12 @@ def change_PROCESS_AUTOMATICALLY(process_automatically):
 
 def CheckSection(CFG, sec):
     """ Check if INI section exists, if not create it """
-    try:
-        CFG[sec]
+
+    if sec in CFG:
         return True
-    except:
-        CFG[sec] = {}
-        return False
+
+    CFG[sec] = {}
+    return False
 
 
 def checkbox_to_value(option, value_on=1, value_off=0):
@@ -402,7 +402,7 @@ def checkbox_to_value(option, value_on=1, value_off=0):
     any other value returns value_off (0)
     """
 
-    if type(option) is list:
+    if isinstance(option, list):
         option = option[-1]
 
     if option == 'on' or option == 'true':
@@ -499,7 +499,7 @@ def to_int(val, default=0):
 
     try:
         val = int(val)
-    except:
+    except Exception:
         val = default
 
     return val
@@ -536,11 +536,11 @@ def check_setting_int(config, cfg_name, item_name, def_val, silent=True):
 
         if str(my_val) == str(None):
             raise
-    except:
+    except Exception:
         my_val = def_val
         try:
             config[cfg_name][item_name] = my_val
-        except:
+        except Exception:
             config[cfg_name] = {}
             config[cfg_name][item_name] = my_val
 
@@ -558,11 +558,11 @@ def check_setting_float(config, cfg_name, item_name, def_val, silent=True):
         my_val = float(config[cfg_name][item_name])
         if str(my_val) == str(None):
             raise
-    except:
+    except Exception:
         my_val = def_val
         try:
             config[cfg_name][item_name] = my_val
-        except:
+        except Exception:
             config[cfg_name] = {}
             config[cfg_name][item_name] = my_val
 
@@ -578,7 +578,6 @@ def check_setting_float(config, cfg_name, item_name, def_val, silent=True):
 def check_setting_str(config, cfg_name, item_name, def_val, silent=True, censor_log=False):
     # For passwords you must include the word `password` in the item_name and add `helpers.encrypt(ITEM_NAME, ENCRYPTION_VERSION)` in save_config()
     if bool(item_name.find('password') + 1):
-        log = False
         encryption_version = sickbeard.ENCRYPTION_VERSION
     else:
         encryption_version = 0
@@ -587,11 +586,11 @@ def check_setting_str(config, cfg_name, item_name, def_val, silent=True, censor_
         my_val = helpers.decrypt(config[cfg_name][item_name], encryption_version)
         if str(my_val) == str(None):
             raise
-    except:
+    except Exception:
         my_val = def_val
         try:
             config[cfg_name][item_name] = helpers.encrypt(my_val, encryption_version)
-        except:
+        except Exception:
             config[cfg_name] = {}
             config[cfg_name][item_name] = helpers.encrypt(my_val, encryption_version)
 
@@ -599,7 +598,7 @@ def check_setting_str(config, cfg_name, item_name, def_val, silent=True, censor_
         logger.censoredItems[cfg_name, item_name] = my_val
 
     if not silent:
-        logger.log(item_name + " -> " + str(my_val), logger.DEBUG)
+        logger.log(item_name + " -> " + my_val, logger.DEBUG)
 
     return my_val
 
@@ -615,13 +614,14 @@ class ConfigMigrator():
         # check the version of the config
         self.config_version = check_setting_int(config_obj, 'General', 'config_version', sickbeard.CONFIG_VERSION)
         self.expected_config_version = sickbeard.CONFIG_VERSION
-        self.migration_names = {1: 'Custom naming',
-                                2: 'Sync backup number with version number',
-                                3: 'Rename omgwtfnzb variables',
-                                4: 'Add newznab catIDs',
-                                5: 'Metadata update',
-                                6: 'Convert from XBMC to new KODI variables',
-                                7: 'Use version 2 for password encryption'
+        self.migration_names = {
+            1: 'Custom naming',
+            2: 'Sync backup number with version number',
+            3: 'Rename omgwtfnzb variables',
+            4: 'Add newznab catIDs',
+            5: 'Metadata update',
+            6: 'Convert from XBMC to new KODI variables',
+            7: 'Use version 2 for password encryption'
         }
 
     def migrate_config(self):
@@ -630,10 +630,11 @@ class ConfigMigrator():
         """
 
         if self.config_version > self.expected_config_version:
-            logger.log_error_and_exit(u"Your config version (" + str(
-                self.config_version) + ") has been incremented past what this version of SickRage supports (" + str(
-                self.expected_config_version) + ").\n" + \
-                                      "If you have used other forks or a newer version of SickRage, your config file may be unusable due to their modifications.")
+            logger.log_error_and_exit(
+                u"""Your config version (%i) has been incremented past what this version of SickRage supports (%i).
+                If you have used other forks or a newer version of SickRage, your config file may be unusable due to their modifications.""" %
+                (self.config_version, self.expected_config_version)
+            )
 
         sickbeard.CONFIG_VERSION = self.config_version
 
@@ -668,13 +669,13 @@ class ConfigMigrator():
         """
 
         sickbeard.NAMING_PATTERN = self._name_to_pattern()
-        logger.log("Based on your old settings I'm setting your new naming pattern to: " + sickbeard.NAMING_PATTERN)
+        logger.log(u"Based on your old settings I'm setting your new naming pattern to: " + sickbeard.NAMING_PATTERN)
 
         sickbeard.NAMING_CUSTOM_ABD = bool(check_setting_int(self.config_obj, 'General', 'naming_dates', 0))
 
         if sickbeard.NAMING_CUSTOM_ABD:
             sickbeard.NAMING_ABD_PATTERN = self._name_to_pattern(True)
-            logger.log("Adding a custom air-by-date naming pattern to your config: " + sickbeard.NAMING_ABD_PATTERN)
+            logger.log(u"Adding a custom air-by-date naming pattern to your config: " + sickbeard.NAMING_ABD_PATTERN)
         else:
             sickbeard.NAMING_ABD_PATTERN = naming.name_abd_presets[0]
 
@@ -765,7 +766,7 @@ class ConfigMigrator():
             finalName += naming_sep_type[sep_type] + ep_quality
 
         if use_periods:
-            finalName = re.sub("\s+", ".", finalName)
+            finalName = re.sub(r"\s+", ".", finalName)
 
         return finalName
 
diff --git a/sickbeard/dailysearcher.py b/sickbeard/dailysearcher.py
index 8a358def33acfb8f7a044376995db12aa0ba3b30..f96f0c8053efc9ec5238caefb464211c2cee4fdc 100644
--- a/sickbeard/dailysearcher.py
+++ b/sickbeard/dailysearcher.py
@@ -26,7 +26,7 @@ from sickbeard import logger
 from sickbeard import db
 from sickbeard import common
 from sickbeard import helpers
-from sickbeard import sbdatetime, network_timezones
+from sickbeard import network_timezones
 from sickrage.helper.exceptions import MultipleShowObjectsException
 
 
diff --git a/sickbeard/databases/__init__.py b/sickbeard/databases/__init__.py
index 96925d1641e3e383833e831970e4033fed6aca24..2e67a9dd6a0c8ced186cafd0005d0066ebe250e3 100644
--- a/sickbeard/databases/__init__.py
+++ b/sickbeard/databases/__init__.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -16,4 +18,4 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-__all__ = ["mainDB", "cache", "failed"]
\ No newline at end of file
+__all__ = ["mainDB", "cache", "failed"]
diff --git a/sickbeard/databases/cache_db.py b/sickbeard/databases/cache_db.py
index 9734be453c48afe4e03f25d0a6028bfb60a447b6..316955a574211bc3da1bfc9860a21e0e93f4a870 100644
--- a/sickbeard/databases/cache_db.py
+++ b/sickbeard/databases/cache_db.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -18,6 +20,7 @@
 
 from sickbeard import db
 
+
 # Add new migrations at the bottom of the list; subclass the previous migration.
 class InitialSchema(db.SchemaUpgrade):
     def test(self):
@@ -49,6 +52,7 @@ class AddSceneExceptions(InitialSchema):
         self.connection.action(
             "CREATE TABLE scene_exceptions (exception_id INTEGER PRIMARY KEY, indexer_id INTEGER KEY, show_name TEXT);")
 
+
 class AddSceneNameCache(AddSceneExceptions):
     def test(self):
         return self.hasTable("scene_names")
@@ -64,6 +68,7 @@ class AddNetworkTimezones(AddSceneNameCache):
     def execute(self):
         self.connection.action("CREATE TABLE network_timezones (network_name TEXT PRIMARY KEY, timezone TEXT);")
 
+
 class AddLastSearch(AddNetworkTimezones):
     def test(self):
         return self.hasTable("lastSearch")
@@ -71,6 +76,7 @@ class AddLastSearch(AddNetworkTimezones):
     def execute(self):
         self.connection.action("CREATE TABLE lastSearch (provider TEXT, time NUMERIC);")
 
+
 class AddSceneExceptionsSeasons(AddLastSearch):
     def test(self):
         return self.hasColumn("scene_exceptions", "season")
@@ -78,6 +84,7 @@ class AddSceneExceptionsSeasons(AddLastSearch):
     def execute(self):
         self.addColumn("scene_exceptions", "season", "NUMERIC", -1)
 
+
 class AddSceneExceptionsCustom(AddSceneExceptionsSeasons):
     def test(self):
         return self.hasColumn("scene_exceptions", "custom")
@@ -85,6 +92,7 @@ class AddSceneExceptionsCustom(AddSceneExceptionsSeasons):
     def execute(self):
         self.addColumn("scene_exceptions", "custom", "NUMERIC", 0)
 
+
 class AddSceneExceptionsRefresh(AddSceneExceptionsCustom):
     def test(self):
         return self.hasTable("scene_exceptions_refresh")
diff --git a/sickbeard/databases/failed_db.py b/sickbeard/databases/failed_db.py
index 9d880bf3a3453d6bfe740c3ff9665a768c75977b..6a91a8af1c042300c5c5517b25742b1571f8745b 100644
--- a/sickbeard/databases/failed_db.py
+++ b/sickbeard/databases/failed_db.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Tyler Fenby <tylerfenby@gmail.com>
 # URL: http://code.google.com/p/sickbeard/
 #
diff --git a/sickbeard/databases/mainDB.py b/sickbeard/databases/mainDB.py
index d405d30ce625d82498c5523b0e6eee0865d58656..131406cef8fbef13dc99d894d90ac7eb5e77797f 100644
--- a/sickbeard/databases/mainDB.py
+++ b/sickbeard/databases/mainDB.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -48,12 +50,12 @@ class MainSanityCheck(db.DBSanityCheck):
         self.convert_tvrage_to_tvdb()
         self.convert_archived_to_compund()
 
-
+    # todo: fix spelling to compound
     def convert_archived_to_compund(self):
         logger.log(u'Checking for archived episodes not qualified', logger.DEBUG)
 
         query = "SELECT episode_id, showid, status, location, season, episode " + \
-        "FROM tv_episodes WHERE status = %s" % common.ARCHIVED
+                "FROM tv_episodes WHERE status = %s" % common.ARCHIVED
 
         sqlResults = self.connection.select(query)
         if sqlResults:
@@ -67,9 +69,9 @@ class MainSanityCheck(db.DBSanityCheck):
                 fixedStatus = common.Quality.compositeStatus(common.ARCHIVED, quality)
 
             logger.log(u'Changing status from %s to %s for %s: S%02dE%02d at %s (File %s)' %
-                (common.statusStrings[common.ARCHIVED], common.statusStrings[fixedStatus],
-                 archivedEp['showid'], archivedEp['season'], archivedEp['episode'],
-                 archivedEp['location'] if archivedEp['location'] else 'unknown location', ('NOT FOUND', 'EXISTS')[bool(existing)]))
+                       (common.statusStrings[common.ARCHIVED], common.statusStrings[fixedStatus],
+                        archivedEp['showid'], archivedEp['season'], archivedEp['episode'],
+                        archivedEp['location'] if archivedEp['location'] else 'unknown location', ('NOT FOUND', 'EXISTS')[bool(existing)]))
 
             self.connection.action("UPDATE tv_episodes SET status = %i WHERE episode_id = %i" % (fixedStatus, archivedEp['episode_id']))
 
@@ -86,11 +88,11 @@ class MainSanityCheck(db.DBSanityCheck):
         for tvrage_show in sqlResults:
             logger.log(u"Processing %s at %s" % (tvrage_show['show_name'], tvrage_show['location']))
             mapping = self.connection.select("SELECT mindexer_id FROM indexer_mapping WHERE indexer_id=%i AND indexer=%i AND mindexer=%i" %
-                    (tvrage_show['indexer_id'], INDEXER_TVRAGE, INDEXER_TVDB))
+                                             (tvrage_show['indexer_id'], INDEXER_TVRAGE, INDEXER_TVDB))
 
             if len(mapping) != 1:
                 logger.log(u"Error mapping show from tvrage to tvdb for %s (%s), found %i mapping results. Cannot convert automatically!" %
-                        (tvrage_show['show_name'], tvrage_show['location'], len(mapping)), logger.WARNING)
+                           (tvrage_show['show_name'], tvrage_show['location'], len(mapping)), logger.WARNING)
                 logger.log(u"Removing the TVRage show and it's episodes from the DB, use 'addExistingShow'", logger.WARNING)
                 self.connection.action("DELETE FROM tv_shows WHERE indexer_id = %i AND indexer = %i" % (tvrage_show['indexer_id'], INDEXER_TVRAGE))
                 self.connection.action("DELETE FROM tv_episodes WHERE showid = %i" % tvrage_show['indexer_id'])
@@ -100,32 +102,31 @@ class MainSanityCheck(db.DBSanityCheck):
             duplicate = self.connection.select("SELECT * FROM tv_shows WHERE indexer_id = %i AND indexer = %i" % (mapping[0]['mindexer_id'], INDEXER_TVDB))
             if duplicate:
                 logger.log(u'Found %s which has the same id as %s, cannot convert automatically so I am pausing %s' %
-                    (duplicate[0]['show_name'], tvrage_show['show_name'], duplicate[0]['show_name']), logger.WARNING)
+                           (duplicate[0]['show_name'], tvrage_show['show_name'], duplicate[0]['show_name']), logger.WARNING)
                 self.connection.action("UPDATE tv_shows SET paused=1 WHERE indexer=%i AND indexer_id=%i" %
-                        (INDEXER_TVDB, duplicate[0]['indexer_id']))
+                                       (INDEXER_TVDB, duplicate[0]['indexer_id']))
 
                 logger.log(u"Removing %s and it's episodes from the DB" % tvrage_show['show_name'], logger.WARNING)
                 self.connection.action("DELETE FROM tv_shows WHERE indexer_id = %i AND indexer = %i" % (tvrage_show['indexer_id'], INDEXER_TVRAGE))
                 self.connection.action("DELETE FROM tv_episodes WHERE showid = %i" % tvrage_show['indexer_id'])
                 logger.log(u'Manually move the season folders from %s into %s, and delete %s before rescanning %s and unpausing it' %
-                    (tvrage_show['location'], duplicate[0]['location'], tvrage_show['location'], duplicate[0]['show_name']), logger.WARNING)
+                           (tvrage_show['location'], duplicate[0]['location'], tvrage_show['location'], duplicate[0]['show_name']), logger.WARNING)
                 continue
 
-            logger.log('Mapping %s to tvdb id %i' % (tvrage_show['show_name'], mapping[0]['mindexer_id']))
+            logger.log(u'Mapping %s to tvdb id %i' % (tvrage_show['show_name'], mapping[0]['mindexer_id']))
 
             self.connection.action(
                 "UPDATE tv_shows SET indexer=%i, indexer_id=%i WHERE indexer_id=%i" %
-                    (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id'])
-                )
+                (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id'])
+            )
 
             logger.log(u'Relinking episodes to show')
             self.connection.action(
                 "UPDATE tv_episodes SET indexer=%i, showid=%i, indexerid=0 WHERE showid=%i" %
-                    (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id'])
-                )
-
-            logger.log('Please perform a full update on %s' % tvrage_show['show_name'], logger.WARNING)
+                (INDEXER_TVDB, mapping[0]['mindexer_id'], tvrage_show['indexer_id'])
+            )
 
+            logger.log(u'Please perform a full update on %s' % tvrage_show['show_name'], logger.WARNING)
 
     def fix_duplicate_shows(self, column='indexer_id'):
 
@@ -148,7 +149,6 @@ class MainSanityCheck(db.DBSanityCheck):
                         cur_dupe_id["show_id"]))
                 self.connection.action("DELETE FROM tv_shows WHERE show_id = ?", [cur_dupe_id["show_id"]])
 
-
     def fix_duplicate_episodes(self):
 
         sqlResults = self.connection.select(
@@ -265,7 +265,8 @@ class MainSanityCheck(db.DBSanityCheck):
 
         sqlResults = self.connection.select(
             "SELECT subtitles, episode_id FROM tv_episodes WHERE subtitles != '' AND subtitles_lastsearch < ?;",
-                [datetime.datetime(2015, 7, 15, 17, 20, 44, 326380).strftime(dateTimeFormat)])
+            [datetime.datetime(2015, 7, 15, 17, 20, 44, 326380).strftime(dateTimeFormat)]
+        )
 
         validLanguages = [Language.fromopensubtitles(language).opensubtitles for language in language_converters['opensubtitles'].codes if len(language) == 3]
 
@@ -275,19 +276,19 @@ class MainSanityCheck(db.DBSanityCheck):
         for sqlResult in sqlResults:
             langs = []
 
-            logger.log("Checking subtitle codes for episode_id: %s, codes: %s" %
-                (sqlResult['episode_id'], sqlResult['subtitles']), logger.DEBUG)
+            logger.log(u"Checking subtitle codes for episode_id: %s, codes: %s" %
+                       (sqlResult['episode_id'], sqlResult['subtitles']), logger.DEBUG)
 
             for subcode in sqlResult['subtitles'].split(','):
-                if not len(subcode) is 3 or not subcode in validLanguages:
-                    logger.log("Fixing subtitle codes for episode_id: %s, invalid code: %s" %
-                        (sqlResult['episode_id'], subcode), logger.DEBUG)
+                if not len(subcode) is 3 or subcode not in validLanguages:
+                    logger.log(u"Fixing subtitle codes for episode_id: %s, invalid code: %s" %
+                               (sqlResult['episode_id'], subcode), logger.DEBUG)
                     continue
 
                 langs.append(subcode)
 
             self.connection.action("UPDATE tv_episodes SET subtitles = ?, subtitles_lastsearch = ? WHERE episode_id = ?;",
-                [','.join(langs), datetime.datetime.now().strftime(dateTimeFormat), sqlResult['episode_id']])
+                                   [','.join(langs), datetime.datetime.now().strftime(dateTimeFormat), sqlResult['episode_id']])
 
     def fix_show_nfo_lang(self):
         self.connection.action("UPDATE tv_shows SET lang = '' WHERE lang = 0 or lang = '0'")
@@ -300,6 +301,7 @@ def backupDatabase(version):
     else:
         logger.log(u"Proceeding with upgrade")
 
+
 # ======================
 # = Main DB Migrations =
 # ======================
@@ -338,18 +340,18 @@ class InitialSchema(db.SchemaUpgrade):
             cur_db_version = self.checkDBVersion()
 
             if cur_db_version < MIN_DB_VERSION:
-                logger.log_error_and_exit(u"Your database version (" + str(
-                    cur_db_version) + ") is too old to migrate from what this version of SickRage supports (" + \
-                                          str(MIN_DB_VERSION) + ").\n" + \
+                logger.log_error_and_exit(u"Your database version (" +
+                                          str(cur_db_version) + ") is too old to migrate from what this version of SickRage supports (" +
+                                          str(MIN_DB_VERSION) + ").\n" +
                                           "Upgrade using a previous version (tag) build 496 to build 501 of SickRage first or remove database file to begin fresh."
-                )
+                                          )
 
             if cur_db_version > MAX_DB_VERSION:
-                logger.log_error_and_exit(u"Your database version (" + str(
-                    cur_db_version) + ") has been incremented past what this version of SickRage supports (" + \
-                                          str(MAX_DB_VERSION) + ").\n" + \
+                logger.log_error_and_exit(u"Your database version (" +
+                                          str(cur_db_version) + ") has been incremented past what this version of SickRage supports (" +
+                                          str(MAX_DB_VERSION) + ").\n" +
                                           "If you have used other forks of SickRage, your database may be unusable due to their modifications."
-                )
+                                          )
 
 
 class AddSizeAndSceneNameFields(InitialSchema):
@@ -427,7 +429,7 @@ class AddSizeAndSceneNameFields(InitialSchema):
                 except (InvalidNameException, InvalidShowException):
                     continue
 
-                if parse_result.series_name and parse_result.season_number != None and parse_result.episode_numbers and parse_result.release_group:
+                if parse_result.series_name and parse_result.season_number is not None and parse_result.episode_numbers and parse_result.release_group:
                     # if all is well by this point we'll just put the release name into the database
                     self.connection.action("UPDATE tv_episodes SET release_name = ? WHERE episode_id = ?",
                                            [cur_name, ep_results[0]["episode_id"]])
@@ -517,17 +519,17 @@ class Add1080pAndRawHDQualities(RenameSeasonFolders):
 
         result = old_quality
         # move fullhdbluray from 1<<5 to 1<<8 if set
-        if (result & (1 << 5)):
-            result = result & ~(1 << 5)
-            result = result | (1 << 8)
+        if result & (1 << 5):
+            result &= ~(1 << 5)
+            result |= 1 << 8
         # move hdbluray from 1<<4 to 1<<7 if set
-        if (result & (1 << 4)):
-            result = result & ~(1 << 4)
-            result = result | (1 << 7)
+        if result & (1 << 4):
+            result &= ~(1 << 4)
+            result |= 1 << 7
         # move hdwebdl from 1<<3 to 1<<5 if set
-        if (result & (1 << 3)):
-            result = result & ~(1 << 3)
-            result = result | (1 << 5)
+        if result & (1 << 3):
+            result &= ~(1 << 3)
+            result |= 1 << 5
 
         return result
 
@@ -540,7 +542,7 @@ class Add1080pAndRawHDQualities(RenameSeasonFolders):
         """
 
         best = (status & (0xffff << 16)) >> 16
-        initial = status & (0xffff)
+        initial = status & 0xffff
 
         best = self._update_quality(best)
         initial = self._update_quality(initial)
@@ -559,7 +561,7 @@ class Add1080pAndRawHDQualities(RenameSeasonFolders):
         old_hd = common.Quality.combineQualities(
             [common.Quality.HDTV, common.Quality.HDWEBDL >> 2, common.Quality.HDBLURAY >> 3], [])
         new_hd = common.Quality.combineQualities([common.Quality.HDTV, common.Quality.HDWEBDL, common.Quality.HDBLURAY],
-            [])
+                                                 [])
 
         # update ANY -- shift existing qualities and add new 1080p qualities, note that rawHD was not added to the ANY template
         old_any = common.Quality.combineQualities(
@@ -949,6 +951,7 @@ class AddSceneNumberingToTvEpisodes(AddSportsOption):
 
         self.incDBVersion()
 
+
 class AddAnimeTVShow(AddSceneNumberingToTvEpisodes):
     def test(self):
         return self.checkDBVersion() >= 32
@@ -961,6 +964,7 @@ class AddAnimeTVShow(AddSceneNumberingToTvEpisodes):
 
         self.incDBVersion()
 
+
 class AddAbsoluteNumbering(AddAnimeTVShow):
     def test(self):
         return self.checkDBVersion() >= 33
@@ -973,6 +977,7 @@ class AddAbsoluteNumbering(AddAnimeTVShow):
 
         self.incDBVersion()
 
+
 class AddSceneAbsoluteNumbering(AddAbsoluteNumbering):
     def test(self):
         return self.checkDBVersion() >= 34
@@ -986,6 +991,7 @@ class AddSceneAbsoluteNumbering(AddAbsoluteNumbering):
 
         self.incDBVersion()
 
+
 class AddAnimeBlacklistWhitelist(AddSceneAbsoluteNumbering):
 
     def test(self):
@@ -994,13 +1000,16 @@ class AddAnimeBlacklistWhitelist(AddSceneAbsoluteNumbering):
     def execute(self):
         backupDatabase(35)
 
-        cl = []
-        cl.append(["CREATE TABLE blacklist (show_id INTEGER, range TEXT, keyword TEXT)"])
-        cl.append(["CREATE TABLE whitelist (show_id INTEGER, range TEXT, keyword TEXT)"])
+        cl = [
+            ["CREATE TABLE blacklist (show_id INTEGER, range TEXT, keyword TEXT)"],
+            ["CREATE TABLE whitelist (show_id INTEGER, range TEXT, keyword TEXT)"]
+        ]
+
         self.connection.mass_action(cl)
 
         self.incDBVersion()
 
+
 class AddSceneAbsoluteNumbering2(AddAnimeBlacklistWhitelist):
     def test(self):
         return self.checkDBVersion() >= 36
@@ -1013,6 +1022,7 @@ class AddSceneAbsoluteNumbering2(AddAnimeBlacklistWhitelist):
 
         self.incDBVersion()
 
+
 class AddXemRefresh(AddSceneAbsoluteNumbering2):
     def test(self):
         return self.checkDBVersion() >= 37
@@ -1026,6 +1036,7 @@ class AddXemRefresh(AddSceneAbsoluteNumbering2):
 
         self.incDBVersion()
 
+
 class AddSceneToTvShows(AddXemRefresh):
     def test(self):
         return self.checkDBVersion() >= 38
@@ -1038,6 +1049,7 @@ class AddSceneToTvShows(AddXemRefresh):
 
         self.incDBVersion()
 
+
 class AddIndexerMapping(AddSceneToTvShows):
     def test(self):
         return self.checkDBVersion() >= 39
@@ -1054,6 +1066,7 @@ class AddIndexerMapping(AddSceneToTvShows):
 
         self.incDBVersion()
 
+
 class AddVersionToTvEpisodes(AddIndexerMapping):
     def test(self):
         return self.checkDBVersion() >= 40
@@ -1068,6 +1081,7 @@ class AddVersionToTvEpisodes(AddIndexerMapping):
 
         self.incDBVersion()
 
+
 class AddDefaultEpStatusToTvShows(AddVersionToTvEpisodes):
     def test(self):
         return self.checkDBVersion() >= 41
@@ -1080,6 +1094,7 @@ class AddDefaultEpStatusToTvShows(AddVersionToTvEpisodes):
 
         self.incDBVersion()
 
+
 class AlterTVShowsFieldTypes(AddDefaultEpStatusToTvShows):
     def test(self):
         return self.checkDBVersion() >= 42
diff --git a/sickbeard/db.py b/sickbeard/db.py
index e503e2eb3b66a0d299afcdad6ed8658133c0507f..42592f8ccfb1e2739be1598ea7d912c4925c5a98 100644
--- a/sickbeard/db.py
+++ b/sickbeard/db.py
@@ -77,7 +77,7 @@ class DBConnection(object):
             if not args:
                 return self.connection.cursor().execute(query)
             return self.connection.cursor().execute(query, args)
-        except Exception as e:
+        except Exception:
             raise
 
     def execute(self, query, args=None, fetchall=False, fetchone=False):
@@ -97,7 +97,7 @@ class DBConnection(object):
                 return self._execute(query, args).fetchone()
             else:
                 return self._execute(query, args)
-        except Exception as e:
+        except Exception:
             raise
 
     def checkDBVersion(self):
@@ -169,7 +169,7 @@ class DBConnection(object):
                     logger.log(u"Fatal error executing query: " + ex(e), logger.ERROR)
                     raise
 
-            #time.sleep(0.02)
+            # time.sleep(0.02)
 
             return sqlResult
 
@@ -214,7 +214,7 @@ class DBConnection(object):
                     logger.log(u"Fatal error executing query: " + ex(e), logger.ERROR)
                     raise
 
-            #time.sleep(0.02)
+            # time.sleep(0.02)
 
             return sqlResult
 
diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py
index 488d8f17cf3fba73db1f778f861ce7fefd28d78d..2f35739bb0c5ee689cb06cf3d0ba6290b7f3b04a 100644
--- a/sickbeard/helpers.py
+++ b/sickbeard/helpers.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: https://sickrage.tv
 # Git: https://github.com/SickRage/SickRage.git
@@ -19,6 +20,7 @@
 
 
 import os
+import io
 import ctypes
 import random
 import re
@@ -47,26 +49,12 @@ import certifi
 from contextlib import closing
 from socket import timeout as SocketTimeout
 
-
-try:
-    from io import BytesIO as _StringIO
-except ImportError:
-    try:
-        from cStringIO import StringIO as _StringIO
-    except ImportError:
-        from StringIO import StringIO as _StringIO
-
-try:
-    import gzip
-except ImportError:
-    gzip = None
-
 from sickbeard import logger, classes
 from sickbeard.common import USER_AGENT
 from sickbeard.common import mediaExtensions
 from sickbeard.common import subtitleExtensions
 from sickbeard import db
-from sickbeard import notifiers
+from sickbeard.notifiers.synoindex import notifier as synoindex_notifier
 from sickbeard import clients
 from sickbeard.subtitles import isValidLanguage
 from sickrage.helper.encoding import ek
@@ -80,6 +68,8 @@ import shutil_custom
 
 shutil.copyfile = shutil_custom.copyfile_custom
 
+# pylint: disable=W0212
+# Access to a protected member of a client class
 urllib._urlopener = classes.SickBeardURLopener()
 
 
@@ -87,18 +77,19 @@ def fixGlob(path):
     path = re.sub(r'\[', '[[]', path)
     return re.sub(r'(?<!\[)\]', '[]]', path)
 
+
 def indentXML(elem, level=0):
-    '''
+    """
     Does our pretty printing, makes Matt very happy
-    '''
-    i = "\n" + level*"  "
+    """
+    i = "\n" + level * "  "
     if len(elem):
         if not elem.text or not elem.text.strip():
             elem.text = i + "  "
         if not elem.tail or not elem.tail.strip():
             elem.tail = i
         for elem in elem:
-            indentXML(elem, level+1)
+            indentXML(elem, level + 1)
         if not elem.tail or not elem.tail.strip():
             elem.tail = i
     else:
@@ -124,7 +115,6 @@ def remove_non_release_groups(name):
     """
     Remove non release groups from name
     """
-
     if not name:
         return name
 
@@ -132,44 +122,44 @@ def remove_non_release_groups(name):
     # Check your database for funky release_names and add them here, to improve failed handling, archiving, and history.
     # select release_name from tv_episodes WHERE LENGTH(release_name);
     # [eSc], [SSG], [GWC] are valid release groups for non-anime
-    removeWordsList = {r'\[rartv\]$':       'searchre',
-                       r'\[rarbg\]$':       'searchre',
-                       r'\[eztv\]$':        'searchre',
-                       r'\[ettv\]$':        'searchre',
-                       r'\[cttv\]$':        'searchre',
-                       r'\[vtv\]$':         'searchre',
-                       r'\[EtHD\]$':        'searchre',
-                       r'\[GloDLS\]$':      'searchre',
-                       r'\[silv4\]$':       'searchre',
-                       r'\[Seedbox\]$':     'searchre',
-                       r'\[PublicHD\]$':    'searchre',
-                       r'\[AndroidTwoU\]$': 'searchre',
-                       r'\.\[BT\]$':        'searchre',
-                       r' \[1044\]$':       'searchre',
-                       r'\.RiPSaLoT$':      'searchre',
-                       r'\.GiuseppeTnT$':   'searchre',
-                       r'\.Renc$':          'searchre',
-                       r'-NZBGEEK$':        'searchre',
-                       r'-Siklopentan$':    'searchre',
-                       r'-\SpastikusTV\]$':                 'searchre',
-                       r'-RP$':                             'searchre',
-                       r'-20-40$':                          'searchre',
-                       r'\.\[www\.usabit\.com\]$':          'searchre',
-                       r'^\[www\.Cpasbien\.pe\] ':          'searchre',
-                       r'^\[www\.Cpasbien\.com\] ':         'searchre',
-                       r'^\[ www\.Cpasbien\.pw \] ':        'searchre',
-                       r'^\.www\.Cpasbien\.pw':            'searchre',
-                       r'^\[www\.newpct1\.com\]':            'searchre',
-                       r'^\[ www\.Cpasbien\.com \] ':       'searchre',
-                       r'- \{ www\.SceneTime\.com \}$':     'searchre',
-                       r'^\{ www\.SceneTime\.com \} - ':    'searchre',
-                       r'^\[www\.frenchtorrentdb\.com\] ':  'searchre',
-                       r'^\]\.\[www\.tensiontorrent.com\] - ':      'searchre',
-                       r'^\]\.\[ www\.tensiontorrent.com \] - ':    'searchre',
-                       r'\[NO-RAR\] - \[ www\.torrentday\.com \]$': 'searchre',
-                       r'- \[ www\.torrentday\.com \]$':            'searchre',
-                       r'^\[ www\.TorrentDay\.com \] - ':           'searchre',
-                      }
+    removeWordsList = {
+        r'\[rartv\]$':       'searchre',
+        r'\[rarbg\]$':       'searchre',
+        r'\[eztv\]$':        'searchre',
+        r'\[ettv\]$':        'searchre',
+        r'\[cttv\]$':        'searchre',
+        r'\[vtv\]$':         'searchre',
+        r'\[EtHD\]$':        'searchre',
+        r'\[GloDLS\]$':      'searchre',
+        r'\[silv4\]$':       'searchre',
+        r'\[Seedbox\]$':     'searchre',
+        r'\[PublicHD\]$':    'searchre',
+        r'\[AndroidTwoU\]$': 'searchre',
+        r'\.\[BT\]$':        'searchre',
+        r' \[1044\]$':       'searchre',
+        r'\.RiPSaLoT$':      'searchre',
+        r'\.GiuseppeTnT$':   'searchre',
+        r'\.Renc$':          'searchre',
+        r'-NZBGEEK$':        'searchre',
+        r'-Siklopentan$':    'searchre',
+        r'-\[SpastikusTV\]$':                 'searchre',
+        r'-RP$':                             'searchre',
+        r'-20-40$':                          'searchre',
+        r'\.\[www\.usabit\.com\]$':          'searchre',
+        r'^\[www\.Cpasbien\.pe\] ':          'searchre',
+        r'^\[www\.Cpasbien\.com\] ':         'searchre',
+        r'^\[ www\.Cpasbien\.pw \] ':        'searchre',
+        r'^\.www\.Cpasbien\.pw':            'searchre',
+        r'^\[www\.newpct1\.com\]':            'searchre',
+        r'^\[ www\.Cpasbien\.com \] ':       'searchre',
+        r'- \{ www\.SceneTime\.com \}$':     'searchre',
+        r'^\{ www\.SceneTime\.com \} - ':    'searchre',
+        r'^\]\.\[www\.tensiontorrent.com\] - ':      'searchre',
+        r'^\]\.\[ www\.tensiontorrent.com \] - ':    'searchre',
+        r'- \[ www\.torrentday\.com \]$':            'searchre',
+        r'^\[ www\.TorrentDay\.com \] - ':           'searchre',
+        r'\[NO-RAR\] - \[ www\.torrentday\.com \]$': 'searchre',
+    }
 
     _name = name
     for remove_string, remove_type in removeWordsList.iteritems():
@@ -178,7 +168,7 @@ def remove_non_release_groups(name):
         elif remove_type == 'searchre':
             _name = re.sub(r'(?i)' + remove_string, '', _name)
 
-    return _name.strip('.- ')
+    return _name.strip('.- []{}')
 
 
 def replaceExtension(filename, newExt):
@@ -211,6 +201,7 @@ def notTorNZBFile(filename):
 
     return not (filename.endswith(".torrent") or filename.endswith(".nzb"))
 
+
 def isSyncFile(filename):
     """
     Returns true if filename is a syncfile, indicating filesystem may be in flux
@@ -220,7 +211,7 @@ def isSyncFile(filename):
     """
 
     extension = filename.rpartition(".")[2].lower()
-    #if extension == '!sync' or extension == 'lftp-pget-status' or extension == 'part' or extension == 'bts':
+    # if extension == '!sync' or extension == 'lftp-pget-status' or extension == 'part' or extension == 'bts':
     syncfiles = sickbeard.SYNC_FILES
     if extension in syncfiles.split(",") or filename.startswith('.syncthing'):
         return True
@@ -237,7 +228,7 @@ def isMediaFile(filename):
     """
 
     # ignore samples
-    if re.search(r'(^|[\W_])(sample\d*)[\W_]', filename, re.I):
+    if re.search(r'(^|[\W_])(?<!shomin.)(sample\d*)[\W_]', filename, re.I):
         return False
 
     # ignore RARBG release intro
@@ -306,7 +297,7 @@ def sanitizeFileName(name):
     # remove bad chars from the filename
     name = re.sub(r'[\\/\*]', '-', name)
     name = re.sub(r'[:"<>|?]', '', name)
-    name = re.sub(ur'\u2122', '', name) # Trade Mark Sign
+    name = re.sub(ur'\u2122', '', name)  # Trade Mark Sign
 
     # remove leading/trailing periods and spaces
     name = name.strip(' .')
@@ -314,7 +305,7 @@ def sanitizeFileName(name):
     return name
 
 
-def _remove_file_failed(failed_file):
+def remove_file_failed(failed_file):
     """
     Remove file from filesystem
 
@@ -352,6 +343,7 @@ def findCertainShow(showList, indexerid):
     elif len(results) > 1:
         raise MultipleShowObjectsException()
 
+
 def makeDir(path):
     """
     Make a directory on the filesystem
@@ -364,7 +356,7 @@ def makeDir(path):
         try:
             ek(os.makedirs, path)
             # do the library update for synoindex
-            notifiers.synoindex_notifier.addFolder(path)
+            synoindex_notifier().addFolder(path)
         except OSError:
             return False
     return True
@@ -457,16 +449,17 @@ def searchIndexerForShowID(regShowName, indexer=None, indexer_id=None, ui=None):
             if not (seriesname and series_id):
                 continue
             ShowObj = findCertainShow(sickbeard.showList, int(series_id))
-            #Check if we can find the show in our list (if not, it's not the right show)
+            # Check if we can find the show in our list (if not, it's not the right show)
             if (indexer_id is None) and (ShowObj is not None) and (ShowObj.indexerid == int(series_id)):
-                return (seriesname, i, int(series_id))
+                return seriesname, i, int(series_id)
             elif (indexer_id is not None) and (int(indexer_id) == int(series_id)):
-                return (seriesname, i, int(indexer_id))
+                return seriesname, i, int(indexer_id)
 
         if indexer:
             break
 
-    return (None, None, None)
+    return None, None, None
+
 
 def listMediaFiles(path):
     """
@@ -628,7 +621,7 @@ def make_dirs(path):
                     # use normpath to remove end separator, otherwise checks permissions against itself
                     chmodAsParent(ek(os.path.normpath, sofar))
                     # do the library update for synoindex
-                    notifiers.synoindex_notifier.addFolder(sofar)
+                    synoindex_notifier().addFolder(sofar)
                 except (OSError, IOError) as e:
                     logger.log(u"Failed creating %s : %r" % (sofar, ex(e)), logger.ERROR)
                     return False
@@ -646,7 +639,7 @@ def rename_ep_file(cur_path, new_path, old_path_length=0):
     :param old_path_length: The length of media file path (old name) WITHOUT THE EXTENSION
     """
 
-    #new_dest_dir, new_dest_name = os.path.split(new_path)  # @UnusedVariable
+    # new_dest_dir, new_dest_name = os.path.split(new_path)  # @UnusedVariable
 
     if old_path_length == 0 or old_path_length > len(cur_path):
         # approach from the right
@@ -708,7 +701,7 @@ def delete_empty_folders(check_empty_dir, keep_dir=None):
                 # need shutil.rmtree when ignore_items is really implemented
                 ek(os.rmdir, check_empty_dir)
                 # do the library update for synoindex
-                notifiers.synoindex_notifier.deleteFolder(check_empty_dir)
+                synoindex_notifier().deleteFolder(check_empty_dir)
             except OSError as e:
                 logger.log(u"Unable to delete %s. Error: %r" % (check_empty_dir, repr(e)), logger.WARNING)
                 break
@@ -815,7 +808,7 @@ def fixSetGroupID(childPath):
 
         try:
             ek(os.chown, childPath, -1, parentGID)  # @UndefinedVariable - only available on UNIX
-            logger.log(u"Respecting the set-group-ID bit on the parent directory for %s" % (childPath), logger.DEBUG)
+            logger.log(u"Respecting the set-group-ID bit on the parent directory for %s" % childPath, logger.DEBUG)
         except OSError:
             logger.log(
                 u"Failed to respect the set-group-ID bit on the parent directory for %s (setting group ID %i)" % (
@@ -860,9 +853,9 @@ def get_absolute_number_from_season_and_episode(show, season, episode):
 
         if len(sqlResults) == 1:
             absolute_number = int(sqlResults[0]["absolute_number"])
-            logger.log("Found absolute number %s for show %s S%02dE%02d" % (absolute_number, show.name, season, episode), logger.DEBUG)
+            logger.log(u"Found absolute number %s for show %s S%02dE%02d" % (absolute_number, show.name, season, episode), logger.DEBUG)
         else:
-            logger.log("No entries for absolute number for show %s S%02dE%02d" % (show.name, season, episode), logger.DEBUG)
+            logger.log(u"No entries for absolute number for show %s S%02dE%02d" % (show.name, season, episode), logger.DEBUG)
 
     return absolute_number
 
@@ -881,7 +874,7 @@ def get_all_episodes_from_absolute_number(show, absolute_numbers, indexer_id=Non
                 episodes.append(ep.episode)
                 season = ep.season  # this will always take the last found season so eps that cross the season border are not handeled well
 
-    return (season, episodes)
+    return season, episodes
 
 
 def sanitizeSceneName(name, anime=False):
@@ -945,6 +938,7 @@ def arithmeticEval(s):
 
     return _eval(node.body)
 
+
 def create_https_certificates(ssl_cert, ssl_key):
     """
     Create self-signed HTTPS certificares and store in paths 'ssl_cert' and 'ssl_key'
@@ -954,6 +948,9 @@ def create_https_certificates(ssl_cert, ssl_key):
     :return: True on success, False on failure
     """
 
+    assert isinstance(ssl_key, unicode)
+    assert isinstance(ssl_cert, unicode)
+
     try:
         from OpenSSL import crypto  # @UnresolvedImport
         from certgen import createKeyPair, createCertRequest, createCertificate, TYPE_RSA, \
@@ -974,8 +971,10 @@ def create_https_certificates(ssl_cert, ssl_key):
 
     # Save the key and certificate to disk
     try:
-        open(ssl_key, 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey))
-        open(ssl_cert, 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
+        # pylint: disable=E1101
+        # Module has no member
+        io.open(ssl_key, 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey))
+        io.open(ssl_cert, 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
     except Exception:
         logger.log(u"Error creating SSL key and certificate", logger.ERROR)
         return False
@@ -1095,8 +1094,10 @@ def md5_for_file(filename, block_size=2 ** 16):
     :return MD5 hexdigest on success, or None on failure
     """
 
+    assert isinstance(filename, unicode)
+
     try:
-        with open(filename, 'rb') as f:
+        with io.open(filename, 'rb') as f:
             md5 = hashlib.md5()
             while True:
                 data = f.read(block_size)
@@ -1117,6 +1118,7 @@ def get_lan_ip():
     except Exception:
         return socket.gethostname()
 
+
 def check_url(url):
     """
     Check if a URL exists without downloading the whole file.
@@ -1159,6 +1161,7 @@ To add a new encryption_version:
 # Key Generators
 unique_key1 = hex(uuid.getnode() ** 2)  # Used in encryption v1
 
+
 # Encryption Functions
 def encrypt(data, encryption_version=0, _decrypt=False):
     # Version 1: Simple XOR encryption (this is not very secure, but works)
@@ -1220,12 +1223,12 @@ def get_show(name, tryIndexers=False):
             fromCache = True
             showObj = findCertainShow(sickbeard.showList, int(cache))
 
-        #try indexers
+        # try indexers
         if not showObj and tryIndexers:
             showObj = findCertainShow(sickbeard.showList,
                                       searchIndexerForShowID(full_sanitizeSceneName(name), ui=classes.ShowListUI)[2])
 
-        #try scene exceptions
+        # try scene exceptions
         if not showObj:
             ShowID = sickbeard.scene_exceptions.get_scene_exception_by_name(name)[0]
             if ShowID:
@@ -1306,7 +1309,9 @@ def set_up_anidb_connection():
         return False
 
     if not sickbeard.ADBA_CONNECTION:
-        anidb_logger = lambda x: logger.log("anidb: %s " % x, logger.DEBUG)
+        def anidb_logger(msg):
+            return logger.log(u"anidb: %s " % msg, logger.DEBUG)
+
         try:
             sickbeard.ADBA_CONNECTION = adba.Connection(keepAlive=True, log=anidb_logger)
         except Exception as e:
@@ -1413,7 +1418,7 @@ def restoreConfigZip(archive, targetDir):
             def path_leaf(path):
                 head, tail = os.path.split(path)
                 return tail or os.path.basename(head)
-            bakFilename = '{0}-{1}'.format(path_leaf(targetDir), datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d_%H%M%S'))
+            bakFilename = '{0}-{1}'.format(path_leaf(targetDir), datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))
             shutil.move(targetDir, os.path.join(os.path.dirname(targetDir), bakFilename))
 
         zip_file = zipfile.ZipFile(archive, 'r', allowZip64=True)
@@ -1493,7 +1498,7 @@ def touchFile(fname, atime=None):
     :return: True on success, False on failure
     """
 
-    if None != atime:
+    if atime is not None:
         try:
             with file(fname, 'a'):
                 os.utime(fname, (atime, atime))
@@ -1526,7 +1531,8 @@ def _getTempDir():
         except ImportError:
             return os.path.join(tempfile.gettempdir(), "sickrage")
 
-    return os.path.join(tempfile.gettempdir(), "sickrage-%s" % (uid))
+    return os.path.join(tempfile.gettempdir(), "sickrage-%s" % uid)
+
 
 def codeDescription(status_code):
     """
@@ -1535,7 +1541,7 @@ def codeDescription(status_code):
     if status_code in clients.http_error_code:
         return clients.http_error_code[status_code]
     else:
-        logger.log(u"Unknown error code. Please submit an issue", logger.WARNING)
+        logger.log(u"Unknown error code: %s. Please submit an issue" % status_code, logger.ERROR)
         return 'unknown'
 
 
@@ -1553,19 +1559,20 @@ def _setUpSession(session, headers):
     session = CacheControl(sess=session, cache=caches.FileCache(os.path.join(cache_dir, 'sessions'), use_dir_lock=True), cache_etags=False)
 
     # request session clear residual referer
-    if 'Referer' in session.headers and not 'Referer' in headers:
+    if 'Referer' in session.headers and 'Referer' not in headers or {}:
         session.headers.pop('Referer')
 
     # request session headers
     session.headers.update({'User-Agent': USER_AGENT, 'Accept-Encoding': 'gzip,deflate'})
-    session.headers.update(headers)
+    if headers:
+        session.headers.update(headers)
 
     # request session ssl verify
     session.verify = certifi.where() if sickbeard.SSL_VERIFY else False
 
     # request session proxies
-    if not 'Referer' in session.headers and sickbeard.PROXY_SETTING:
-        logger.log("Using proxy: " + sickbeard.PROXY_SETTING, logger.DEBUG)
+    if 'Referer' not in session.headers and sickbeard.PROXY_SETTING:
+        logger.log(u"Using global proxy: " + sickbeard.PROXY_SETTING, logger.DEBUG)
         scheme, address = urllib2.splittype(sickbeard.PROXY_SETTING)
         address = sickbeard.PROXY_SETTING if scheme else 'http://' + sickbeard.PROXY_SETTING
         session.proxies = {
@@ -1580,7 +1587,7 @@ def _setUpSession(session, headers):
     return session
 
 
-def getURL(url, post_data=None, params={}, headers={}, timeout=30, session=None, json=False, proxyGlypeProxySSLwarning=None):
+def getURL(url, post_data=None, params=None, headers=None, timeout=30, session=None, json=False, needBytes=False):
     """
     Returns a byte-string retrieved from the url provider.
     """
@@ -1612,15 +1619,6 @@ def getURL(url, post_data=None, params={}, headers={}, timeout=30, session=None,
                        % (url, resp.status_code, codeDescription(resp.status_code)), logger.DEBUG)
             return None
 
-        if proxyGlypeProxySSLwarning is not None:
-            if re.search('The site you are attempting to browse is on a secure connection', resp.text):
-                resp = session.get(proxyGlypeProxySSLwarning, timeout=timeout, allow_redirects=True, verify=session.verify)
-
-                if not resp.ok:
-                    logger.log(u"GlypeProxySSLwarning: Requested getURL %s returned status code is %s: %s"
-                               % (url, resp.status_code, codeDescription(resp.status_code)), logger.DEBUG)
-                    return None
-
     except (SocketTimeout, TypeError) as e:
         logger.log(u"Connection timed out (sockets) accessing getURL %s Error: %r" % (url, ex(e)), logger.WARNING)
         return None
@@ -1642,15 +1640,10 @@ def getURL(url, post_data=None, params={}, headers={}, timeout=30, session=None,
         logger.log(traceback.format_exc(), logger.WARNING)
         return None
 
-    attempts = 0
-    while gzip and len(resp.content) > 1 and resp.content[0] == '\x1f' and resp.content[1] == '\x8b' and attempts < 3:
-        attempts += 1
-        resp._content = gzip.GzipFile(fileobj=_StringIO(resp.content)).read()
+    return (resp.text, resp.content)[needBytes] if not json else resp.json()
 
-    return resp.content if not json else resp.json()
 
-
-def download_file(url, filename, session=None, headers={}):
+def download_file(url, filename, session=None, headers=None):
     """
     Downloads a file specified
 
@@ -1672,7 +1665,7 @@ def download_file(url, filename, session=None, headers={}):
                 return False
 
             try:
-                with open(filename, 'wb') as fp:
+                with io.open(filename, 'wb') as fp:
                     for chunk in resp.iter_content(chunk_size=1024):
                         if chunk:
                             fp.write(chunk)
@@ -1683,27 +1676,27 @@ def download_file(url, filename, session=None, headers={}):
                 logger.log(u"Problem setting permissions or writing file to: %s" % filename, logger.WARNING)
 
     except (SocketTimeout, TypeError) as e:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"Connection timed out (sockets) while loading download URL %s Error: %r" % (url, ex(e)), logger.WARNING)
         return None
     except requests.exceptions.HTTPError as e:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"HTTP error %r while loading download URL %s " % (ex(e), url), logger.WARNING)
         return False
     except requests.exceptions.ConnectionError as e:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"Connection error %r while loading download URL %s " % (ex(e), url), logger.WARNING)
         return False
     except requests.exceptions.Timeout as e:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"Connection timed out %r while loading download URL %s " % (ex(e), url), logger.WARNING)
         return False
     except EnvironmentError as e:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"Unable to save the file: %r " % ex(e), logger.WARNING)
         return False
     except Exception:
-        _remove_file_failed(filename)
+        remove_file_failed(filename)
         logger.log(u"Unknown exception while loading download URL %s : %r" % (url, traceback.format_exc()), logger.WARNING)
         return False
 
@@ -1755,6 +1748,7 @@ def generateApiKey():
     logger.log(u"New API generated")
     return m.hexdigest()
 
+
 def pretty_filesize(file_bytes):
     """Return humanly formatted sizes from bytes"""
     for mod in ['B', 'KB', 'MB', 'GB', 'TB', 'PB']:
@@ -1766,16 +1760,19 @@ if __name__ == '__main__':
     import doctest
     doctest.testmod()
 
+
 def remove_article(text=''):
     """Remove the english articles from a text string"""
 
     return re.sub(r'(?i)^(?:(?:A(?!\s+to)n?)|The)\s(\w)', r'\1', text)
 
+
 def generateCookieSecret():
     """Generate a new cookie secret"""
 
     return base64.b64encode(uuid.uuid4().bytes + uuid.uuid4().bytes)
 
+
 def verify_freespace(src, dest, oldfile=None):
     """
     Checks if the target system has enough free space to copy or move a file.
@@ -1789,7 +1786,7 @@ def verify_freespace(src, dest, oldfile=None):
     if not isinstance(oldfile, list):
         oldfile = [oldfile]
 
-    logger.log("Trying to determine free space on destination drive", logger.DEBUG)
+    logger.log(u"Trying to determine free space on destination drive", logger.DEBUG)
 
     if hasattr(os, 'statvfs'):  # POSIX
         def disk_usage(path):
@@ -1801,29 +1798,28 @@ def verify_freespace(src, dest, oldfile=None):
         import sys
 
         def disk_usage(path):
-            _, total, free = ctypes.c_ulonglong(), ctypes.c_ulonglong(), \
-                               ctypes.c_ulonglong()
+            _, total, free = ctypes.c_ulonglong(), ctypes.c_ulonglong(), ctypes.c_ulonglong()
             if sys.version_info >= (3,) or isinstance(path, unicode):
                 fun = ctypes.windll.kernel32.GetDiskFreeSpaceExW
             else:
                 fun = ctypes.windll.kernel32.GetDiskFreeSpaceExA
             ret = fun(path, ctypes.byref(_), ctypes.byref(total), ctypes.byref(free))
             if ret == 0:
-                logger.log("Unable to determine free space, something went wrong", logger.WARNING)
+                logger.log(u"Unable to determine free space, something went wrong", logger.WARNING)
                 raise ctypes.WinError()
             return free.value
     else:
-        logger.log("Unable to determine free space on your OS")
+        logger.log(u"Unable to determine free space on your OS")
         return True
 
     if not ek(os.path.isfile, src):
-        logger.log("A path to a file is required for the source. " + src + " is not a file.", logger.WARNING)
+        logger.log(u"A path to a file is required for the source. " + src + " is not a file.", logger.WARNING)
         return True
 
     try:
         diskfree = disk_usage(dest)
     except Exception:
-        logger.log("Unable to determine free space, so I will assume there is enough.", logger.WARNING)
+        logger.log(u"Unable to determine free space, so I will assume there is enough.", logger.WARNING)
         return True
 
     neededspace = ek(os.path.getsize, src)
@@ -1836,10 +1832,11 @@ def verify_freespace(src, dest, oldfile=None):
     if diskfree > neededspace:
         return True
     else:
-        logger.log("Not enough free space: Needed: %s bytes ( %s ), found: %s bytes ( %s )"
+        logger.log(u"Not enough free space: Needed: %s bytes ( %s ), found: %s bytes ( %s )"
                    % (neededspace, pretty_filesize(neededspace), diskfree, pretty_filesize(diskfree)), logger.WARNING)
         return False
 
+
 # https://gist.github.com/thatalextaylor/7408395
 def pretty_time_delta(seconds):
     sign_string = '-' if seconds < 0 else ''
@@ -1860,8 +1857,9 @@ def pretty_time_delta(seconds):
 
     return time_delta
 
+
 def isFileLocked(checkfile, writeLockCheck=False):
-    '''
+    """
     Checks to see if a file is locked. Performs three checks
         1. Checks if the file even exists
         2. Attempts to open the file for reading. This will determine if the file has a write lock.
@@ -1871,14 +1869,15 @@ def isFileLocked(checkfile, writeLockCheck=False):
             or deleted.
     :param file: the file being checked
     :param writeLockCheck: when true will check if the file is locked for writing (prevents move operations)
-    '''
+    """
 
-    checkfile = ek(os.path.abspath, checkfile)
+    checkfile = os.path.abspath(checkfile)
+    assert isinstance(checkfile, unicode)
 
     if not os.path.exists(checkfile):
         return True
     try:
-        f = open(checkfile, 'r')
+        f = io.open(checkfile, 'rb')
         f.close()
     except IOError:
         return True
@@ -1896,11 +1895,12 @@ def isFileLocked(checkfile, writeLockCheck=False):
 
     return False
 
+
 def getDiskSpaceUsage(diskPath=None):
-    '''
+    """
     returns the free space in human readable bytes for a given path or False if no path given
     :param diskPath: the filesystem path being checked
-    '''
+    """
     if diskPath and os.path.exists(diskPath):
         if platform.system() == 'Windows':
             free_bytes = ctypes.c_ulonglong(0)
diff --git a/sickbeard/image_cache.py b/sickbeard/image_cache.py
index 907d6d4fb4319d3ca9a69b1da5d3492ad1468044..88c431d02d89ee46ce3772f4c6a4cdd04fb1af16 100644
--- a/sickbeard/image_cache.py
+++ b/sickbeard/image_cache.py
@@ -250,7 +250,7 @@ class ImageCache:
             return False
 
         # retrieve the image from indexer using the generic metadata class
-        #TODO: refactor
+        # TODO: refactor
         metadata_generator = GenericMetadata()
         img_data = metadata_generator._retrieve_show_image(img_type_name, show_obj)
         result = metadata_generator._write_image(img_data, dest_path)
diff --git a/sickbeard/imdbPopular.py b/sickbeard/imdbPopular.py
index 3d09ec4b0b999080631489d3555dca4fc6819b7d..26af7f89548299e1b901d1f413e28885da5c44e0 100644
--- a/sickbeard/imdbPopular.py
+++ b/sickbeard/imdbPopular.py
@@ -8,8 +8,8 @@ import sickbeard
 from sickbeard import helpers
 from sickrage.helper.encoding import ek
 
-# pylint: disable=C1001
-class imdbPopular:
+
+class imdbPopular(object):
     def __init__(self):
         """Gets a list of most popular TV series from imdb"""
 
diff --git a/sickbeard/indexers/__init__.py b/sickbeard/indexers/__init__.py
index b7e23c773751df46f399d1da9078435235764548..bdbdcca31206955d112052f32f86dbab0cec2093 100644
--- a/sickbeard/indexers/__init__.py
+++ b/sickbeard/indexers/__init__.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -16,4 +18,4 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-from . import indexer_api, indexer_exceptions
\ No newline at end of file
+from . import indexer_api, indexer_exceptions
diff --git a/sickbeard/indexers/indexer_api.py b/sickbeard/indexers/indexer_api.py
index da79422daabdc1b0ed57deefc3629ce74c693bad..bf9f09ab6bb74a0081e42869c38edbdee630c934 100644
--- a/sickbeard/indexers/indexer_api.py
+++ b/sickbeard/indexers/indexer_api.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
diff --git a/sickbeard/indexers/indexer_config.py b/sickbeard/indexers/indexer_config.py
index 4494e8e26afaf9010fb222ac1ed2c1f0987b83b7..0cc742403802bc080e2b06c3cbe9733882d862d0 100644
--- a/sickbeard/indexers/indexer_config.py
+++ b/sickbeard/indexers/indexer_config.py
@@ -1,41 +1,39 @@
+# coding=utf-8
+
 from tvdb_api.tvdb_api import Tvdb
 import requests
 
-INDEXER_TVDB = 1
-
-#Must keep
-INDEXER_TVRAGE = 2
-
-initConfig = {}
-indexerConfig = {}
-
-initConfig['valid_languages'] = [
-    "da", "fi", "nl", "de", "it", "es", "fr", "pl", "hu", "el", "tr",
-    "ru", "he", "ja", "pt", "zh", "cs", "sl", "hr", "ko", "en", "sv", "no"
-]
-
-initConfig['langabbv_to_id'] = {
-    'el': 20, 'en': 7, 'zh': 27,
-    'it': 15, 'cs': 28, 'es': 16, 'ru': 22, 'nl': 13, 'pt': 26, 'no': 9,
-    'tr': 21, 'pl': 18, 'fr': 17, 'hr': 31, 'de': 14, 'da': 10, 'fi': 11,
-    'hu': 19, 'ja': 25, 'he': 24, 'ko': 32, 'sv': 8, 'sl': 30
+initConfig = {
+    'valid_languages': ["da", "fi", "nl", "de", "it", "es", "fr", "pl", "hu", "el", "tr",
+                        "ru", "he", "ja", "pt", "zh", "cs", "sl", "hr", "ko", "en", "sv", "no"
+                        ],
+    'langabbv_to_id': {'el': 20, 'en': 7, 'zh': 27,
+                       'it': 15, 'cs': 28, 'es': 16, 'ru': 22, 'nl': 13, 'pt': 26, 'no': 9,
+                       'tr': 21, 'pl': 18, 'fr': 17, 'hr': 31, 'de': 14, 'da': 10, 'fi': 11,
+                       'hu': 19, 'ja': 25, 'he': 24, 'ko': 32, 'sv': 8, 'sl': 30
+                       }
 }
 
-indexerConfig[INDEXER_TVDB] = {
-    'id': INDEXER_TVDB,
-    'name': 'theTVDB',
-    'module': Tvdb,
-    'api_params': {'apikey': 'F9C450E78D99172E',
-                   'language': 'en',
-                   'useZip': True,
-                  },
-    'session': requests.Session()
+INDEXER_TVDB = 1
+INDEXER_TVRAGE = 2  # Must keep
+
+indexerConfig = {
+    INDEXER_TVDB: {
+        'id': INDEXER_TVDB,
+        'name': 'theTVDB',
+        'module': Tvdb,
+        'api_params': {'apikey': 'F9C450E78D99172E',
+                       'language': 'en',
+                       'useZip': True,
+                       },
+        'session': requests.Session(),
+        'trakt_id': 'tvdb_id',
+        'xem_origin': 'tvdb',
+        'icon': 'thetvdb16.png',
+        'scene_loc': 'http://sickrage.github.io/sb_tvdb_scene_exceptions/exceptions.txt',
+        'show_url': 'http://thetvdb.com/?tab=series&id=',
+        'base_url': 'http://thetvdb.com/api/%(apikey)s/series/'
+    }
 }
 
-# TVDB Indexer Settings
-indexerConfig[INDEXER_TVDB]['trakt_id'] = 'tvdb_id'
-indexerConfig[INDEXER_TVDB]['xem_origin'] = 'tvdb'
-indexerConfig[INDEXER_TVDB]['icon'] = 'thetvdb16.png'
-indexerConfig[INDEXER_TVDB]['scene_loc'] = 'http://SickRage.github.io/sb_tvdb_scene_exceptions/exceptions.txt'
-indexerConfig[INDEXER_TVDB]['show_url'] = 'http://thetvdb.com/?tab=series&id='
-indexerConfig[INDEXER_TVDB]['base_url'] = 'http://thetvdb.com/api/%(apikey)s/series/' % indexerConfig[INDEXER_TVDB]['api_params']
+indexerConfig[INDEXER_TVDB]['base_url'] %= indexerConfig[INDEXER_TVDB]['api_params']  # insert API key into base url
diff --git a/sickbeard/indexers/indexer_exceptions.py b/sickbeard/indexers/indexer_exceptions.py
index f8bd2221808289df3fd1eccae37c14081d6e947f..d2a67bd09a4b12d6ca84ebf5f64686bcebba7fd3 100644
--- a/sickbeard/indexers/indexer_exceptions.py
+++ b/sickbeard/indexers/indexer_exceptions.py
@@ -1,21 +1,20 @@
 #!/usr/bin/env python2.7
 # encoding:utf-8
-#author:echel0n
-#project:indexer_api
-#repository:http://github.com/echel0n/Sick-Beard
-#license:unlicense (http://unlicense.org/)
+
+# author:echel0n
+# project:indexer_api
+# repository:http://github.com/echel0n/Sick-Beard
+# license:unlicense (http://unlicense.org/)
 
 """Custom exceptions used or raised by indexer_api"""
 
+from tvdb_api.tvdb_exceptions import (tvdb_exception, tvdb_error, tvdb_userabort, tvdb_shownotfound, tvdb_showincomplete,
+                                      tvdb_seasonnotfound, tvdb_episodenotfound, tvdb_attributenotfound)
+
 __author__ = "echel0n"
 __version__ = "1.0"
 
-from tvdb_api.tvdb_exceptions import \
-    tvdb_exception, tvdb_attributenotfound, tvdb_episodenotfound, tvdb_error, \
-    tvdb_seasonnotfound, tvdb_shownotfound, tvdb_showincomplete, tvdb_userabort
-
-indexerExcepts = ["indexer_exception", "indexer_error", "indexer_userabort", "indexer_shownotfound",
-                  "indexer_showincomplete",
+indexerExcepts = ["indexer_exception", "indexer_error", "indexer_userabort", "indexer_shownotfound", "indexer_showincomplete",
                   "indexer_seasonnotfound", "indexer_episodenotfound", "indexer_attributenotfound"]
 
 tvdbExcepts = ["tvdb_exception", "tvdb_error", "tvdb_userabort", "tvdb_shownotfound", "tvdb_showincomplete",
diff --git a/sickbeard/logger.py b/sickbeard/logger.py
index d84683c170d5a42ed2b0736ea948afca1aecb81c..e65a6a5af8252bf7e8057f912f5959d35c9f450f 100644
--- a/sickbeard/logger.py
+++ b/sickbeard/logger.py
@@ -16,8 +16,9 @@
 #
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
-# pylint: disable=W0703
 
+
+import io
 import os
 import re
 import sys
@@ -28,13 +29,14 @@ import platform
 import locale
 import traceback
 
+from github import Github, InputFileContent
+
 import sickbeard
 from sickbeard import classes
 from sickrage.helper.common import dateTimeFormat
-from sickrage.helper.encoding import ek, ss
 from sickrage.helper.exceptions import ex
-from github import Github, InputFileContent
-import codecs
+from sickrage.helper.encoding import ss
+
 
 # log levels
 ERROR = logging.ERROR
@@ -60,18 +62,24 @@ class NullHandler(logging.Handler):
 
 
 class CensoredFormatter(logging.Formatter, object):
-    def __init__(self, *args, **kwargs):
-        super(CensoredFormatter, self).__init__(*args, **kwargs)
+    def __init__(self, fmt=None, datefmt=None, encoding='utf-8'):
+        super(CensoredFormatter, self).__init__(fmt, datefmt)
+        self.encoding = encoding
 
     def format(self, record):
         """Strips censored items from string"""
         msg = super(CensoredFormatter, self).format(record)
-        # pylint: disable=W0612
-        for k, v in censoredItems.iteritems():
-            if v and len(v) > 0 and v in msg:
-                msg = msg.replace(v, len(v) * '*')
+
+        if not isinstance(msg, unicode):
+            msg = msg.decode(self.encoding, 'replace') # Convert to unicode
+
+        for _, v in censoredItems.iteritems():
+            if not isinstance(v, unicode):
+                v = v.decode(self.encoding, 'replace') # Convert to unicode
+            msg = msg.replace(v, len(v) * u'*')
+
         # Needed because Newznab apikey isn't stored as key=value in a section.
-        msg = re.sub(r'([&?]r|[&?]apikey|[&?]api_key)=[^&]*([&\w]?)', r'\1=**********\2', msg)
+        msg = re.sub(ur'([&?]r|[&?]apikey|[&?]api_key)=[^&]*([&\w]?)', ur'\1=**********\2', msg)
         return msg
 
 
@@ -118,7 +126,7 @@ class Logger(object):
         # console log handler
         if self.consoleLogging:
             console = logging.StreamHandler()
-            console.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)s::%(message)s', '%H:%M:%S'))
+            console.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)s::%(message)s', '%H:%M:%S', encoding='utf-8'))
             console.setLevel(INFO if not self.debugLogging else DEBUG)
 
             for logger in self.loggers:
@@ -127,8 +135,8 @@ class Logger(object):
         # rotating log file handler
         if self.fileLogging:
             rfh = logging.handlers.RotatingFileHandler(self.logFile, maxBytes=sickbeard.LOG_SIZE, backupCount=sickbeard.LOG_NR, encoding='utf-8')
-            rfh.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)-8s %(message)s', dateTimeFormat))
-            rfh.setLevel(DEBUG)
+            rfh.setFormatter(CensoredFormatter(u'%(asctime)s %(levelname)-8s %(message)s', dateTimeFormat, encoding='utf-8'))
+            rfh.setLevel(INFO if not self.debugLogging else DEBUG)
 
             for logger in self.loggers:
                 logger.addHandler(rfh)
@@ -142,28 +150,21 @@ class Logger(object):
         message = meThread + u" :: " + msg
 
         # Change the SSL error to a warning with a link to information about how to fix it.
-        check = re.sub(r'error \[Errno 1\] _ssl.c:\d{3}: error:\d{8}:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error', 'See: http://git.io/vJrkM', message)
+        check = re.sub(ur'error \[Errno 1\] _ssl.c:\d{3}: error:\d{8}:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error', 'See: http://git.io/vJrkM', message)
         if check is not message:
             message = check
             level = WARNING
-        
-        #Avoid open issues when user only need to clear cache to fix issue    
-        if re.search(r"_mako\'$",message):
-            #'C__SickRage_gui_slick_views_schedule_mako' 
-            #'_usr_local_sickrage_var_SickRage_gui_slick_views_schedule_mako'
-            #'_volume1___plugins_AppCentral_sickbeard_tvrage_SickBeard_TVRage_gui_slick_views_schedule_mako'
-            message = 'Please stop SickRage and delete \SickRage\cache\mako folder. You can see cache folder location in SickRage Help&Info menu'
-            level = WARNING            
 
         if level == ERROR:
-            self.logger.exception(message, *args, **kwargs)
             classes.ErrorViewer.add(classes.UIError(message))
         elif level == WARNING:
-            self.logger.exception(message, *args, **kwargs)
             classes.WarningViewer.add(classes.UIError(message))
 
             # if sickbeard.GIT_AUTOISSUES:
             #    self.submit_errors()
+
+        if level == ERROR:
+            self.logger.exception(message, *args, **kwargs)
         else:
             self.logger.log(level, message, *args, **kwargs)
 
@@ -175,11 +176,11 @@ class Logger(object):
         else:
             sys.exit(1)
 
-    def submit_errors(self):
+    def submit_errors(self): # Too many local variables, too many branches, pylint: disable=R0912,R0914
 
         submitter_result = u''
         issue_id = None
-        # pylint: disable=R0912,R0914,R0915
+
         if not (sickbeard.GIT_USERNAME and sickbeard.GIT_PASSWORD and sickbeard.DEBUG and len(classes.ErrorViewer.errors) > 0):
             submitter_result = u'Please set your GitHub username and password in the config and enable debug. Unable to submit issue ticket to GitHub!'
             return submitter_result, issue_id
@@ -213,12 +214,12 @@ class Logger(object):
             log_data = None
 
             if os.path.isfile(self.logFile):
-                with ek(codecs.open, *[self.logFile, 'r', 'utf-8']) as f:
+                with io.open(self.logFile, 'r', encoding='utf-8') as f:
                     log_data = f.readlines()
 
             for i in range(1, int(sickbeard.LOG_NR)):
                 if os.path.isfile(self.logFile + ".%i" % i) and (len(log_data) <= 500):
-                    with ek(codecs.open, *[self.logFile + ".%i" % i, 'r', 'utf-8']) as f:
+                    with io.open(self.logFile + ".%i" % i, 'r', encoding='utf-8') as f:
                         log_data += f.readlines()
 
             log_data = [line for line in reversed(log_data)]
@@ -227,7 +228,7 @@ class Logger(object):
             for curError in sorted(classes.ErrorViewer.errors, key=lambda error: error.time, reverse=True)[:500]:
 
                 try:
-                    title_Error = ss(str(curError.title))
+                    title_Error = ss(curError.title)
                     if not len(title_Error) or title_Error == 'None':
                         title_Error = re.match(r"^[A-Z0-9\-\[\] :]+::\s*(.*)$", ss(curError.message)).group(1)
 
@@ -237,14 +238,13 @@ class Logger(object):
                     self.log("Unable to get error title : " + ex(e), ERROR)
 
                 gist = None
-                regex = r"^(%s)\s+([A-Z]+)\s+([0-9A-Z\-]+)\s*(.*)$" % curError.time
+                regex = ur"^(%s)\s+([A-Z]+)\s+([0-9A-Z\-]+)\s*(.*)$" % curError.time
                 for i, x in enumerate(log_data):
-                    x = ss(x)
                     match = re.match(regex, x)
                     if match:
                         level = match.group(2)
                         if reverseNames[level] == ERROR:
-                            paste_data = "".join(log_data[i:i+50])
+                            paste_data = u"".join(log_data[i:i+50])
                             if paste_data:
                                 gist = gh.get_user().create_gist(True, {"sickrage.log": InputFileContent(paste_data)})
                             break
@@ -254,11 +254,10 @@ class Logger(object):
                 message = u"### INFO\n"
                 message += u"Python Version: **" + sys.version[:120].replace('\n', '') + "**\n"
                 message += u"Operating System: **" + platform.platform() + "**\n"
-                if not 'Windows' in platform.platform():
-                    try:
-                        message += u"Locale: " + locale.getdefaultlocale()[1] + "\n"
-                    except Exception:
-                        message += u"Locale: unknown" + "\n"
+                try:
+                    message += u"Locale: " + locale.getdefaultlocale()[1] + "\n"
+                except Exception:
+                    message += u"Locale: unknown" + "\n"
                 message += u"Branch: **" + sickbeard.BRANCH + "**\n"
                 message += u"Commit: SickRage/SickRage@" + sickbeard.CUR_COMMIT_HASH + "\n"
                 if gist and gist != 'No ERROR found':
@@ -275,29 +274,21 @@ class Logger(object):
                 title_Error = u"[APP SUBMITTED]: " + title_Error
                 reports = gh.get_organization(gh_org).get_repo(gh_repo).get_issues(state="all")
 
-                def is_mako_error(title):
-                    #[APP SUBMITTED]: Loaded module _home_pi_SickRage_gui_slick_views_home_mako not found in sys.modules
-                    #[APP SUBMITTED]: Loaded module _opt_sickbeard_gui_slick_views_home_mako not found in sys.modules
-                    #[APP SUBMITTED]: Loaded module D__TV_SickRage_gui_slick_views_home_mako not found in sys.modules
-                    return re.search(r".* Loaded module .* not found in sys\.modules", title) is not None
-
                 def is_ascii_error(title):
-                    #[APP SUBMITTED]: 'ascii' codec can't encode characters in position 00-00: ordinal not in range(128)
-                    #[APP SUBMITTED]: 'charmap' codec can't decode byte 0x00 in position 00: character maps to <undefined>
-                    return re.search(r".* codec can't .*code .* in position .*:", title) is not None
+                    # [APP SUBMITTED]: 'ascii' codec can't encode characters in position 00-00: ordinal not in range(128)
+                    # [APP SUBMITTED]: 'charmap' codec can't decode byte 0x00 in position 00: character maps to <undefined>
+                    return re.search(ur".* codec can't .*code .* in position .*:", title) is not None
 
                 def is_malformed_error(title):
-                    #[APP SUBMITTED]: not well-formed (invalid token): line 0, column 0
-                    re.search(r".* not well-formed \(invalid token\): line .* column .*", title) is not None
+                    # [APP SUBMITTED]: not well-formed (invalid token): line 0, column 0
+                    return re.search(ur".* not well-formed \(invalid token\): line .* column .*", title) is not None
 
-                mako_error = is_mako_error(title_Error)
                 ascii_error = is_ascii_error(title_Error)
                 malformed_error = is_malformed_error(title_Error)
 
                 issue_found = False
                 for report in reports:
                     if title_Error.rsplit(' :: ')[-1] in report.title or \
-           	         (mako_error and is_mako_error(report.title)) or \
                         (malformed_error and is_malformed_error(report.title)) or \
                             (ascii_error and is_ascii_error(report.title)):
 
@@ -331,7 +322,8 @@ class Logger(object):
             issue_id = None
         finally:
             self.submitter_running = False
-            return submitter_result, issue_id
+
+        return submitter_result, issue_id
 
 # pylint: disable=R0903
 class Wrapper(object):
diff --git a/sickbeard/metadata/__init__.py b/sickbeard/metadata/__init__.py
index 2e8f09157dd32d43218324298e337f19887d32ba..aa6862f5e8bc3a20f7961fea9949e4f8bff5902a 100644
--- a/sickbeard/metadata/__init__.py
+++ b/sickbeard/metadata/__init__.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -16,15 +18,16 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-__all__ = ['generic', 'helpers', 'kodi', 'kodi_12plus', 'mediabrowser', 'ps3', 'wdtv', 'tivo', 'mede8er']
-
 import sys
 from sickbeard.metadata import kodi, kodi_12plus, mediabrowser, ps3, wdtv, tivo, mede8er, generic, helpers
 
+__all__ = ['generic', 'helpers', 'kodi', 'kodi_12plus', 'mediabrowser', 'ps3', 'wdtv', 'tivo', 'mede8er']
+
 
 def available_generators():
     return [x for x in __all__ if x not in ['generic', 'helpers']]
 
+
 def _getMetadataModule(name):
     name = name.lower()
     prefix = "sickbeard.metadata."
diff --git a/sickbeard/metadata/generic.py b/sickbeard/metadata/generic.py
index 6af12b5eb2928f2d18020250db2b20eaaaa1184e..5e570fd8f4fe237b4f0185fd8fbe118a3b8d2eba 100644
--- a/sickbeard/metadata/generic.py
+++ b/sickbeard/metadata/generic.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -17,7 +19,8 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
 
-import os.path
+import os
+import io
 import re
 
 try:
@@ -31,7 +34,6 @@ from sickbeard import helpers
 from sickbeard import logger
 from sickbeard.metadata import helpers as metadata_helpers
 from sickbeard.show_name_helpers import allPossibleShowNames
-from sickrage.helper.encoding import ek, ss
 from sickrage.helper.exceptions import ex
 
 from tmdb_api.tmdb_api import TMDB
@@ -61,17 +63,17 @@ class GenericMetadata(object):
                  season_posters=False, season_banners=False,
                  season_all_poster=False, season_all_banner=False):
 
-        self.name = "Generic"
+        self.name = u"Generic"
 
-        self._ep_nfo_extension = "nfo"
-        self._show_metadata_filename = "tvshow.nfo"
+        self._ep_nfo_extension = u"nfo"
+        self._show_metadata_filename = u"tvshow.nfo"
 
-        self.fanart_name = "fanart.jpg"
-        self.poster_name = "poster.jpg"
-        self.banner_name = "banner.jpg"
+        self.fanart_name = u"fanart.jpg"
+        self.poster_name = u"poster.jpg"
+        self.banner_name = u"banner.jpg"
 
-        self.season_all_poster_name = "season-all-poster.jpg"
-        self.season_all_banner_name = "season-all-banner.jpg"
+        self.season_all_poster_name = u"season-all-poster.jpg"
+        self.season_all_banner_name = u"season-all-banner.jpg"
 
         self.show_metadata = show_metadata
         self.episode_metadata = episode_metadata
@@ -88,7 +90,7 @@ class GenericMetadata(object):
         config_list = [self.show_metadata, self.episode_metadata, self.fanart, self.poster, self.banner,
                        self.episode_thumbnails, self.season_posters, self.season_banners, self.season_all_poster,
                        self.season_all_banner]
-        return '|'.join([str(int(x)) for x in config_list])
+        return u'|'.join([str(int(x)) for x in config_list])
 
     def get_id(self):
         return GenericMetadata.makeID(self.name)
@@ -112,78 +114,59 @@ class GenericMetadata(object):
         self.season_all_poster = config_list[8]
         self.season_all_banner = config_list[9]
 
+    @staticmethod
+    def _check_exists(location):
+        if location:
+            assert isinstance(location, unicode)
+            result = os.path.isfile(location)
+            logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG)
+            return result
+        return False
+
     def _has_show_metadata(self, show_obj):
-        result = ek(os.path.isfile, self.get_show_file_path(show_obj))
-        logger.log(u"Checking if " + self.get_show_file_path(show_obj) + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_show_file_path(show_obj))
 
     def _has_episode_metadata(self, ep_obj):
-        result = ek(os.path.isfile, self.get_episode_file_path(ep_obj))
-        logger.log(u"Checking if " + self.get_episode_file_path(ep_obj) + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_episode_file_path(ep_obj))
 
     def _has_fanart(self, show_obj):
-        result = ek(os.path.isfile, self.get_fanart_path(show_obj))
-        logger.log(u"Checking if " + self.get_fanart_path(show_obj) + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_fanart_path(show_obj))
 
     def _has_poster(self, show_obj):
-        result = ek(os.path.isfile, self.get_poster_path(show_obj))
-        logger.log(u"Checking if " + self.get_poster_path(show_obj) + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_poster_path(show_obj))
 
     def _has_banner(self, show_obj):
-        result = ek(os.path.isfile, self.get_banner_path(show_obj))
-        logger.log(u"Checking if " + self.get_banner_path(show_obj) + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_banner_path(show_obj))
 
     def _has_episode_thumb(self, ep_obj):
-        location = self.get_episode_thumb_path(ep_obj)
-        result = location != None and ek(os.path.isfile, location)
-        if location:
-            logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_episode_thumb_path(ep_obj))
 
     def _has_season_poster(self, show_obj, season):
-        location = self.get_season_poster_path(show_obj, season)
-        result = location != None and ek(os.path.isfile, location)
-        if location:
-            logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_season_poster_path(show_obj, season))
 
     def _has_season_banner(self, show_obj, season):
-        location = self.get_season_banner_path(show_obj, season)
-        result = location != None and ek(os.path.isfile, location)
-        if location:
-            logger.log(u"Checking if " + location + " exists: " + str(result), logger.DEBUG)
-        return result
+        return self._check_exists(self.get_season_banner_path(show_obj, season))
 
     def _has_season_all_poster(self, show_obj):
-        result = ek(os.path.isfile, self.get_season_all_poster_path(show_obj))
-        logger.log(u"Checking if " + self.get_season_all_poster_path(show_obj) + " exists: " + str(result),
-                   logger.DEBUG)
-        return result
+        return self._check_exists(self.get_season_all_poster_path(show_obj))
 
     def _has_season_all_banner(self, show_obj):
-        result = ek(os.path.isfile, self.get_season_all_banner_path(show_obj))
-        logger.log(u"Checking if " + self.get_season_all_banner_path(show_obj) + " exists: " + str(result),
-                   logger.DEBUG)
-        return result
+        return self._check_exists(self.get_season_all_banner_path(show_obj))
 
     def get_show_file_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self._show_metadata_filename)
+        return os.path.join(show_obj.location, self._show_metadata_filename)
 
     def get_episode_file_path(self, ep_obj):
-        return ek(helpers.replaceExtension, ep_obj.location, self._ep_nfo_extension)
+        return helpers.replaceExtension(ep_obj.location, self._ep_nfo_extension)
 
     def get_fanart_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self.fanart_name)
+        return os.path.join(show_obj.location, self.fanart_name)
 
     def get_poster_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self.poster_name)
+        return os.path.join(show_obj.location, self.poster_name)
 
     def get_banner_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self.banner_name)
+        return os.path.join(show_obj.location, self.banner_name)
 
     @staticmethod
     def get_episode_thumb_path(ep_obj):
@@ -191,7 +174,8 @@ class GenericMetadata(object):
         Returns the path where the episode thumbnail should be stored.
         ep_obj: a TVEpisode instance for which to create the thumbnail
         """
-        if ek(os.path.isfile, ep_obj.location):
+        assert isinstance(ep_obj.location, unicode)
+        if os.path.isfile(ep_obj.location):
 
             tbn_filename = ep_obj.location.rpartition(".")
 
@@ -220,7 +204,7 @@ class GenericMetadata(object):
         else:
             season_poster_filename = 'season' + str(season).zfill(2)
 
-        return ek(os.path.join, show_obj.location, season_poster_filename + '-poster.jpg')
+        return os.path.join(show_obj.location, season_poster_filename + '-poster.jpg')
 
     @staticmethod
     def get_season_banner_path(show_obj, season):
@@ -238,13 +222,13 @@ class GenericMetadata(object):
         else:
             season_banner_filename = 'season' + str(season).zfill(2)
 
-        return ek(os.path.join, show_obj.location, season_banner_filename + '-banner.jpg')
+        return os.path.join(show_obj.location, season_banner_filename + '-banner.jpg')
 
     def get_season_all_poster_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self.season_all_poster_name)
+        return os.path.join(show_obj.location, self.season_all_poster_name)
 
     def get_season_all_banner_path(self, show_obj):
-        return ek(os.path.join, show_obj.location, self.season_all_banner_name)
+        return os.path.join(show_obj.location, self.season_all_banner_name)
 
     # pylint: disable=W0613,R0201
     def _show_data(self, show_obj):
@@ -282,8 +266,10 @@ class GenericMetadata(object):
                 logger.DEBUG)
 
             nfo_file_path = self.get_show_file_path(show_obj)
+            assert isinstance(nfo_file_path, unicode)
+
             try:
-                with open(nfo_file_path, 'r') as xmlFileObj:
+                with io.open(nfo_file_path, 'rb') as xmlFileObj:
                     showXML = etree.ElementTree(file=xmlFileObj)
 
                 indexerid = showXML.find('id')
@@ -297,7 +283,7 @@ class GenericMetadata(object):
                 # Make it purdy
                 helpers.indentXML(root)
 
-                showXML.write(nfo_file_path)
+                showXML.write(nfo_file_path, encoding='UTF-8')
                 helpers.chmodAsParent(nfo_file_path)
 
                 return True
@@ -345,10 +331,9 @@ class GenericMetadata(object):
     def create_season_banners(self, show_obj):
         if self.season_banners and show_obj:
             result = []
+            logger.log(u"Metadata provider " + self.name + " creating season banners for " + show_obj.name, logger.DEBUG)
             for season, _ in show_obj.episodes.iteritems():  # @UnusedVariable
                 if not self._has_season_banner(show_obj, season):
-                    logger.log(u"Metadata provider " + self.name + " creating season banners for " + show_obj.name,
-                               logger.DEBUG)
                     result = result + [self.save_season_banners(show_obj, season)]
             return all(result)
         return False
@@ -413,19 +398,20 @@ class GenericMetadata(object):
             return False
 
         nfo_file_path = self.get_show_file_path(show_obj)
-        nfo_file_dir = ek(os.path.dirname, nfo_file_path)
+        assert isinstance(nfo_file_path, unicode)
+
+        nfo_file_dir = os.path.dirname(nfo_file_path)
 
         try:
-            if not ek(os.path.isdir, nfo_file_dir):
+            if not os.path.isdir(nfo_file_dir):
                 logger.log(u"Metadata dir didn't exist, creating it at " + nfo_file_dir, logger.DEBUG)
-                ek(os.makedirs, nfo_file_dir)
+                os.makedirs(nfo_file_dir)
                 helpers.chmodAsParent(nfo_file_dir)
 
             logger.log(u"Writing show nfo file to " + nfo_file_path, logger.DEBUG)
 
-            nfo_file = open(nfo_file_path, 'w')
-
-            data.write(nfo_file, encoding="utf-8")
+            nfo_file = io.open(nfo_file_path, 'wb')
+            data.write(nfo_file, encoding='UTF-8')
             nfo_file.close()
             helpers.chmodAsParent(nfo_file_path)
         except IOError, e:
@@ -458,19 +444,18 @@ class GenericMetadata(object):
             return False
 
         nfo_file_path = self.get_episode_file_path(ep_obj)
-        nfo_file_dir = ek(os.path.dirname, nfo_file_path)
+        assert isinstance(nfo_file_path, unicode)
+        nfo_file_dir = os.path.dirname(nfo_file_path)
 
         try:
-            if not ek(os.path.isdir, nfo_file_dir):
+            if not os.path.isdir(nfo_file_dir):
                 logger.log(u"Metadata dir didn't exist, creating it at " + nfo_file_dir, logger.DEBUG)
-                ek(os.makedirs, nfo_file_dir)
+                os.makedirs(nfo_file_dir)
                 helpers.chmodAsParent(nfo_file_dir)
 
             logger.log(u"Writing episode nfo file to " + nfo_file_path, logger.DEBUG)
-
-            nfo_file = open(nfo_file_path, 'w')
-
-            data.write(nfo_file, encoding="utf-8")
+            nfo_file = io.open(nfo_file_path, 'wb')
+            data.write(nfo_file, encoding='UTF-8')
             nfo_file.close()
             helpers.chmodAsParent(nfo_file_path)
         except IOError, e:
@@ -618,8 +603,6 @@ class GenericMetadata(object):
         else:
             return False
 
-        return True
-
     def save_season_banners(self, show_obj, season):
         """
         Saves all season banners to disk for the given show.
@@ -667,8 +650,6 @@ class GenericMetadata(object):
         else:
             return False
 
-        return True
-
     def save_season_all_poster(self, show_obj, which=None):
         # use the default season all poster name
         poster_path = self.get_season_all_poster_path(show_obj)
@@ -702,24 +683,26 @@ class GenericMetadata(object):
         image_path: file location to save the image to
         """
 
+        assert isinstance(image_path, unicode)
+
         # don't bother overwriting it
-        if ek(os.path.isfile, image_path):
+        if os.path.isfile(image_path):
             logger.log(u"Image already exists, not downloading", logger.DEBUG)
             return False
 
-        image_dir = ek(os.path.dirname, image_path)
+        image_dir = os.path.dirname(image_path)
 
         if not image_data:
-            logger.log(u"Unable to retrieve image to save in %s, skipping" % (ss(image_path)), logger.DEBUG)
+            logger.log(u"Unable to retrieve image to save in %s, skipping" % image_path, logger.DEBUG)
             return False
 
         try:
-            if not ek(os.path.isdir, image_dir):
+            if not os.path.isdir(image_dir):
                 logger.log(u"Metadata dir didn't exist, creating it at " + image_dir, logger.DEBUG)
-                ek(os.makedirs, image_dir)
+                os.makedirs(image_dir)
                 helpers.chmodAsParent(image_dir)
 
-            outFile = open(image_path, 'wb')
+            outFile = io.open(image_path, 'wb')
             outFile.write(image_data)
             outFile.close()
             helpers.chmodAsParent(image_path)
@@ -920,27 +903,29 @@ class GenericMetadata(object):
 
         empty_return = (None, None, None)
 
-        metadata_path = ek(os.path.join, folder, self._show_metadata_filename)
+        assert isinstance(folder, unicode)
 
-        if not ek(os.path.isdir, folder) or not ek(os.path.isfile, metadata_path):
-            logger.log(u"Can't load the metadata file from " + repr(metadata_path) + ", it doesn't exist", logger.DEBUG)
+        metadata_path = os.path.join(folder, self._show_metadata_filename)
+
+        if not os.path.isdir(folder) or not os.path.isfile(metadata_path):
+            logger.log(u"Can't load the metadata file from " + metadata_path + ", it doesn't exist", logger.DEBUG)
             return empty_return
 
         logger.log(u"Loading show info from metadata file in " + folder, logger.DEBUG)
 
         try:
-            with open(metadata_path, 'r') as xmlFileObj:
+            with io.open(metadata_path, 'rb') as xmlFileObj:
                 showXML = etree.ElementTree(file=xmlFileObj)
 
-            if showXML.findtext('title') == None or (showXML.findtext('tvdbid') == None and showXML.findtext('id') == None):
+            if showXML.findtext('title') is None or (showXML.findtext('tvdbid') is None and showXML.findtext('id') is None):
                 logger.log(u"Invalid info in tvshow.nfo (missing name or id): %s %s %s" % (showXML.findtext('title'), showXML.findtext('tvdbid'), showXML.findtext('id')))
                 return empty_return
 
             name = showXML.findtext('title')
 
-            if showXML.findtext('tvdbid') != None:
+            if showXML.findtext('tvdbid') is not None:
                 indexer_id = int(showXML.findtext('tvdbid'))
-            elif showXML.findtext('id') != None:
+            elif showXML.findtext('id') is not None:
                 indexer_id = int(showXML.findtext('id'))
             else:
                 logger.log(u"Empty <id> or <tvdbid> field in NFO, unable to find a ID", logger.WARNING)
@@ -951,7 +936,7 @@ class GenericMetadata(object):
                 return empty_return
 
             indexer = None
-            if showXML.find('episodeguide/url') != None:
+            if showXML.find('episodeguide/url') is not None:
                 epg_url = showXML.findtext('episodeguide/url').lower()
                 if str(indexer_id) in epg_url:
                     if 'thetvdb.com' in epg_url:
@@ -960,16 +945,15 @@ class GenericMetadata(object):
                         logger.log(u"Invalid Indexer ID (" + str(indexer_id) + "), not using metadata file because it has TVRage info", logger.WARNING)
                         return empty_return
 
-
         except Exception, e:
             logger.log(
                 u"There was an error parsing your existing metadata file: '" + metadata_path + "' error: " + ex(e),
                 logger.WARNING)
             return empty_return
 
-        return (indexer_id, name, indexer)
+        return indexer_id, name, indexer
 
-    def _retrieve_show_images_from_tmdb(self, show, type):
+    def _retrieve_show_images_from_tmdb(self, show, img_type):
         types = {'poster': 'poster_path',
                  'banner': None,
                  'fanart': 'backdrop_path',
@@ -992,15 +976,15 @@ class GenericMetadata(object):
             search = tmdb.Search()
             for show_name in set(allPossibleShowNames(show)):
                 for result in search.collection({'query': show_name})['results'] + search.tv({'query': show_name})['results']:
-                    if types[type] and getattr(result, types[type]):
-                        return "{0}{1}{2}".format(base_url, max_size, result[types[type]])
+                    if types[img_type] and getattr(result, types[img_type]):
+                        return "{0}{1}{2}".format(base_url, max_size, result[types[img_type]])
 
         except Exception:
             pass
 
-        logger.log(u"Could not find any " + type + " images on TMDB for " + show.name, logger.INFO)
+        logger.log(u"Could not find any " + img_type + " images on TMDB for " + show.name, logger.INFO)
 
-    def _retrieve_show_images_from_fanart(self, show, type, thumb=False):
+    def _retrieve_show_images_from_fanart(self, show, img_type, thumb=False):
         types = {
             'poster': fanart.TYPE.TV.POSTER,
             'banner': fanart.TYPE.TV.BANNER,
@@ -1016,17 +1000,17 @@ class GenericMetadata(object):
                     apikey=sickbeard.FANART_API_KEY,
                     id=indexerid,
                     ws=fanart.WS.TV,
-                    type=types[type],
+                    type=types[img_type],
                     sort=fanart.SORT.POPULAR,
                     limit=fanart.LIMIT.ONE,
                 )
 
                 resp = request.response()
-                url = resp[types[type]][0]['url']
+                url = resp[types[img_type]][0]['url']
                 if thumb:
                     url = re.sub('/fanart/', '/preview/', url)
                 return url
         except Exception:
             pass
 
-        logger.log(u"Could not find any " + type + " images on Fanart.tv for " + show.name, logger.INFO)
+        logger.log(u"Could not find any " + img_type + " images on Fanart.tv for " + show.name, logger.INFO)
diff --git a/sickbeard/metadata/helpers.py b/sickbeard/metadata/helpers.py
index 6f3eb3ff48145bb9094aec88dbe9a64c69a7404f..c952c6644ef54580b37a88404223c274746ec2f1 100644
--- a/sickbeard/metadata/helpers.py
+++ b/sickbeard/metadata/helpers.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -21,21 +23,21 @@ from sickbeard import logger
 import requests
 
 meta_session = requests.Session()
-def getShowImage(url, imgNum=None):
-    image_data = None  # @UnusedVariable
 
-    if url == None:
+
+def getShowImage(url, imgNum=None):
+    if url is None:
         return None
 
     # if they provided a fanart number try to use it instead
-    if imgNum != None:
+    if imgNum is not None:
         tempURL = url.split('-')[0] + "-" + str(imgNum) + ".jpg"
     else:
         tempURL = url
 
     logger.log(u"Fetching image from " + tempURL, logger.DEBUG)
 
-    image_data = helpers.getURL(tempURL, session=meta_session)
+    image_data = helpers.getURL(tempURL, session=meta_session, needBytes=True)
     if image_data is None:
         logger.log(u"There was an error trying to retrieve the image, aborting", logger.WARNING)
         return
diff --git a/sickbeard/metadata/kodi.py b/sickbeard/metadata/kodi.py
index ac9e243129304fe7e30e8fc896fdb6e1e7ace333..b093e82729b79f5a094b76caa7e1795157a1f0d4 100644
--- a/sickbeard/metadata/kodi.py
+++ b/sickbeard/metadata/kodi.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
diff --git a/sickbeard/metadata/kodi_12plus.py b/sickbeard/metadata/kodi_12plus.py
index cdd254333058079bb39d481c3903d62e808bdecd..4014b8144db2c3432538c278e686f0a318807635 100644
--- a/sickbeard/metadata/kodi_12plus.py
+++ b/sickbeard/metadata/kodi_12plus.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # URL: http://code.google.com/p/sickbeard/
 #
 # This file is part of SickRage.
@@ -305,12 +307,12 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
                 thumb = etree.SubElement(episode, "thumb")
                 thumb.text = myEp['filename'].strip()
 
-            #watched = etree.SubElement(episode, "watched")
-            #watched.text = 'false'
+            # watched = etree.SubElement(episode, "watched")
+            # watched.text = 'false'
 
             if getattr(myEp, 'writer', None):
-                credits = etree.SubElement(episode, "credits")
-                credits.text = myEp['writer'].strip()
+                ep_credits = etree.SubElement(episode, "credits")
+                ep_credits.text = myEp['writer'].strip()
 
             if getattr(myEp, 'director', None):
                 director = etree.SubElement(episode, "director")
@@ -321,7 +323,7 @@ class KODI_12PlusMetadata(generic.GenericMetadata):
                 rating.text = myEp['rating']
 
             if getattr(myEp, 'gueststars', None) and isinstance(myEp['gueststars'], basestring):
-                for actor in (x.strip() for x in  myEp['gueststars'].split('|') if x.strip()):
+                for actor in (x.strip() for x in myEp['gueststars'].split('|') if x.strip()):
                     cur_actor = etree.SubElement(episode, "actor")
                     cur_actor_name = etree.SubElement(cur_actor, "name")
                     cur_actor_name.text = actor
diff --git a/sickbeard/metadata/mede8er.py b/sickbeard/metadata/mede8er.py
index c4bd685b73edc80e2eb779251647a2732c9d975e..654465e11d23753794f4f46abbd23e033ec6a904 100644
--- a/sickbeard/metadata/mede8er.py
+++ b/sickbeard/metadata/mede8er.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -16,14 +18,14 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
+import io
+import os
 import datetime
-import os.path
 
 import sickbeard
-
+from sickbeard import logger, helpers
 from sickbeard.metadata import mediabrowser
 
-from sickbeard import logger, helpers
 from sickrage.helper.common import dateFormat
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex, ShowNotFoundException
@@ -316,7 +318,7 @@ class Mede8erMetadata(mediabrowser.MediaBrowserMetadata):
                 if getattr(myShow, '_actors', None) or getattr(myEp, 'gueststars', None):
                     cast = etree.SubElement(episode, "cast")
                     if getattr(myEp, 'gueststars', None) and isinstance(myEp['gueststars'], basestring):
-                        for actor in (x.strip() for x in  myEp['gueststars'].split('|') if x.strip()):
+                        for actor in (x.strip() for x in myEp['gueststars'].split('|') if x.strip()):
                             cur_actor = etree.SubElement(cast, "actor")
                             cur_actor.text = actor
 
@@ -377,9 +379,9 @@ class Mede8erMetadata(mediabrowser.MediaBrowserMetadata):
 
             logger.log(u"Writing show nfo file to " + nfo_file_path, logger.DEBUG)
 
-            nfo_file = open(nfo_file_path, 'w')
+            nfo_file = io.open(nfo_file_path, 'wb')
 
-            data.write(nfo_file, encoding="UTF-8")
+            data.write(nfo_file)
             nfo_file.close()
             helpers.chmodAsParent(nfo_file_path)
         except IOError, e:
@@ -422,9 +424,9 @@ class Mede8erMetadata(mediabrowser.MediaBrowserMetadata):
 
             logger.log(u"Writing episode nfo file to " + nfo_file_path, logger.DEBUG)
 
-            nfo_file = open(nfo_file_path, 'w')
+            nfo_file = io.open(nfo_file_path, 'wb')
 
-            data.write(nfo_file, encoding="UTF-8")
+            data.write(nfo_file)
             nfo_file.close()
             helpers.chmodAsParent(nfo_file_path)
         except IOError, e:
diff --git a/sickbeard/metadata/mediabrowser.py b/sickbeard/metadata/mediabrowser.py
index a9d608a20828ac8d62be6f6ccf995748308bd00b..e4319528190a4a2466dc19be684ea0cf6b5acc6c 100644
--- a/sickbeard/metadata/mediabrowser.py
+++ b/sickbeard/metadata/mediabrowser.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -98,7 +100,7 @@ class MediaBrowserMetadata(generic.GenericMetadata):
     # Override with empty methods for unsupported features
     def retrieveShowMetadata(self, folder):
         # while show metadata is generated, it is not supported for our lookup
-        return (None, None, None)
+        return None, None, None
 
     def create_season_all_poster(self, show_obj):
         pass
@@ -272,7 +274,6 @@ class MediaBrowserMetadata(generic.GenericMetadata):
             indexerid = etree.SubElement(tv_node, "id")
             indexerid.text = str(myShow['id'])
 
-
         if getattr(myShow, 'seriesname', None):
             SeriesName = etree.SubElement(tv_node, "SeriesName")
             SeriesName.text = myShow['seriesname']
@@ -401,10 +402,11 @@ class MediaBrowserMetadata(generic.GenericMetadata):
 
         eps_to_write = [ep_obj] + ep_obj.relatedEps
 
-        persons_dict = {}
-        persons_dict['Director'] = []
-        persons_dict['GuestStar'] = []
-        persons_dict['Writer'] = []
+        persons_dict = {
+            'Director': [],
+            'GuestStar': [],
+            'Writer': []
+        }
 
         indexer_lang = ep_obj.show.lang
 
diff --git a/sickbeard/metadata/ps3.py b/sickbeard/metadata/ps3.py
index 6dbeab00e73f0ae1752e62d0f7bd350c299eba7d..e11da1389730c8a43f62755c921ea48ab2f5ad36 100644
--- a/sickbeard/metadata/ps3.py
+++ b/sickbeard/metadata/ps3.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -77,7 +79,7 @@ class PS3Metadata(generic.GenericMetadata):
     # Override with empty methods for unsupported features
     def retrieveShowMetadata(self, folder):
         # no show metadata generated, we abort this lookup function
-        return (None, None, None)
+        return None, None, None
 
     def create_show_metadata(self, show_obj):
         pass
diff --git a/sickbeard/metadata/tivo.py b/sickbeard/metadata/tivo.py
index 228254a3f3165448dcaf20686fedb5ed89d58fb0..6d9cd236ed8e4ec644b0e50c3585d035765f75b8 100644
--- a/sickbeard/metadata/tivo.py
+++ b/sickbeard/metadata/tivo.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # Author: Gordon Turner <gordonturner@gordonturner.ca>
 # URL: http://code.google.com/p/sickbeard/
@@ -18,11 +20,11 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
 
-import datetime
+import io
 import os
+import datetime
 
 import sickbeard
-
 from sickbeard import logger, helpers
 from sickbeard.metadata import generic
 from sickrage.helper.encoding import ek
@@ -84,7 +86,7 @@ class TIVOMetadata(generic.GenericMetadata):
     # Override with empty methods for unsupported features
     def retrieveShowMetadata(self, folder):
         # no show metadata generated, we abort this lookup function
-        return (None, None, None)
+        return None, None, None
 
     def create_show_metadata(self, show_obj):
         pass
@@ -224,7 +226,7 @@ class TIVOMetadata(generic.GenericMetadata):
             # after the episode's title and before the description on the Program screen.
 
             # FIXME: Hardcode isEpisode to true for now, not sure how to handle movies
-            data += ("isEpisode : true\n")
+            data += "isEpisode : true\n"
 
             # Write the synopsis of the video here
             # Micrsoft Word's smartquotes can die in a fire.
@@ -232,8 +234,7 @@ class TIVOMetadata(generic.GenericMetadata):
             # Replace double curly quotes
             sanitizedDescription = sanitizedDescription.replace(u"\u201c", "\"").replace(u"\u201d", "\"")
             # Replace single curly quotes
-            sanitizedDescription = sanitizedDescription.replace(u"\u2018", "'").replace(u"\u2019", "'").replace(
-                u"\u02BC", "'")
+            sanitizedDescription = sanitizedDescription.replace(u"\u2018", "'").replace(u"\u2019", "'").replace(u"\u02BC", "'")
 
             data += ("description : " + sanitizedDescription + "\n")
 
@@ -320,7 +321,7 @@ class TIVOMetadata(generic.GenericMetadata):
 
             logger.log(u"Writing episode nfo file to " + nfo_file_path, logger.DEBUG)
 
-            with open(nfo_file_path, 'w') as nfo_file:
+            with io.open(nfo_file_path, 'w') as nfo_file:
                 # Calling encode directly, b/c often descriptions have wonky characters.
                 nfo_file.write(data.encode("utf-8"))
 
diff --git a/sickbeard/metadata/wdtv.py b/sickbeard/metadata/wdtv.py
index 7dfa88f7dbad441a0cd53fab4a6435e89d8e833b..03310c80cecf56ca953ca43e0e6a75878cd3e32a 100644
--- a/sickbeard/metadata/wdtv.py
+++ b/sickbeard/metadata/wdtv.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -93,7 +95,7 @@ class WDTVMetadata(generic.GenericMetadata):
     # Override with empty methods for unsupported features
     def retrieveShowMetadata(self, folder):
         # no show metadata generated, we abort this lookup function
-        return (None, None, None)
+        return None, None, None
 
     def create_show_metadata(self, show_obj):
         pass
diff --git a/sickbeard/name_cache.py b/sickbeard/name_cache.py
index d8b5bfed722790b59e49c064169cb2d8abcfee57..c577acd101b2618e89937fad7a4a2002b8f5fce7 100644
--- a/sickbeard/name_cache.py
+++ b/sickbeard/name_cache.py
@@ -31,9 +31,6 @@ def addNameToCache(name, indexer_id=0):
     :param name: The show name to cache
     :param indexer_id: the TVDB id that this show should be cached with (can be None/0 for unknown)
     """
-
-    global nameCache
-
     cacheDB = db.DBConnection('cache.db')
 
     # standardize the name we're using to account for small differences in providers
@@ -50,8 +47,6 @@ def retrieveNameFromCache(name):
     :param name: The show name to look up.
     :return: the TVDB id that resulted from the cache lookup or None if the show wasn't found in the cache
     """
-    global nameCache
-
     name = sickbeard.helpers.full_sanitizeSceneName(name)
     if name in nameCache:
         return int(nameCache[name])
@@ -60,12 +55,6 @@ def clearCache(indexerid=0):
     """
     Deletes all "unknown" entries from the cache (names with indexer_id of 0).
     """
-    global nameCache
-
-    # init name cache
-    if not nameCache:
-        nameCache = {}
-
     cacheDB = db.DBConnection('cache.db')
     cacheDB.action("DELETE FROM scene_names WHERE indexer_id = ? OR indexer_id = ?", (indexerid, 0))
 
@@ -87,7 +76,6 @@ def buildNameCache(show=None):
 
     :param show: Specify show to build name cache for, if None, just do all shows
     """
-    global nameCache
     with nameCacheLock:
         sickbeard.scene_exceptions.retrieve_exceptions()
 
@@ -105,4 +93,4 @@ def buildNameCache(show=None):
                     continue
 
                 nameCache[name] = int(show.indexerid)
-        logger.log(u"Internal name cache for " + show.name + " set to: [ " + u', '.join([key for key, value in nameCache.iteritems() if value == show.indexerid]) +" ]" , logger.DEBUG)
+        logger.log(u"Internal name cache for " + show.name + " set to: [ " + u', '.join([key for key, value in nameCache.iteritems() if value == show.indexerid]) +" ]", logger.DEBUG)
diff --git a/sickbeard/name_parser/parser.py b/sickbeard/name_parser/parser.py
index 2e77fe3756ee3d4ef3dba43f4b41934f704dfaf9..9ea8bbe6119ed9aa778f3c84602152e3031b011e 100644
--- a/sickbeard/name_parser/parser.py
+++ b/sickbeard/name_parser/parser.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -78,7 +80,7 @@ class NameParser(object):
     def _compile_regexes(self, regexMode):
         if regexMode == self.ANIME_REGEX:
             dbg_str = u"ANIME"
-            uncompiled_regex = [regexes.anime_regexes, regexes.normal_regexes]
+            uncompiled_regex = [regexes.anime_regexes]
         elif regexMode == self.NORMAL_REGEX:
             dbg_str = u"NORMAL"
             uncompiled_regex = [regexes.normal_regexes]
@@ -346,7 +348,7 @@ class NameParser(object):
         b = getattr(second, attr)
 
         # if a is good use it
-        if a != None or (isinstance(a, list) and a):
+        if a is not None or (isinstance(a, list) and a):
             return a
         # if not use b (if b isn't set it'll just be default)
         else:
@@ -459,7 +461,7 @@ class NameParser(object):
                 "Unable to parse " + name.encode(sickbeard.SYS_ENCODING, 'xmlcharrefreplace'))
 
         # if there's no useful info in it then raise an exception
-        if final_result.season_number == None and not final_result.episode_numbers and final_result.air_date == None and not final_result.ab_episode_numbers and not final_result.series_name:
+        if final_result.season_number is None and not final_result.episode_numbers and final_result.air_date is None and not final_result.ab_episode_numbers and not final_result.series_name:
             raise InvalidNameException("Unable to parse " + name.encode(sickbeard.SYS_ENCODING, 'xmlcharrefreplace'))
 
         if cache_result:
@@ -483,7 +485,7 @@ class ParseResult(object):
                  score=None,
                  quality=None,
                  version=None
-                ):
+                 ):
 
         self.original_name = original_name
 
@@ -545,11 +547,11 @@ class ParseResult(object):
         return True
 
     def __str__(self):
-        if self.series_name != None:
+        if self.series_name is not None:
             to_return = self.series_name + u' - '
         else:
             to_return = u''
-        if self.season_number != None:
+        if self.season_number is not None:
             to_return += 'S' + str(self.season_number).zfill(2)
         if self.episode_numbers and len(self.episode_numbers):
             for e in self.episode_numbers:
@@ -595,7 +597,7 @@ class NameParserCache(object):
 
     def get(self, name):
         if name in self._previous_parsed:
-            logger.log("Using cached parse result for: " + name, logger.DEBUG)
+            logger.log(u"Using cached parse result for: " + name, logger.DEBUG)
             return self._previous_parsed[name]
 
 
diff --git a/sickbeard/name_parser/regexes.py b/sickbeard/name_parser/regexes.py
index 432da8ed1250b800cd940f96debe32e74ed68125..b2beb6882e3eb7d75a7db5548994d307ffc70d96 100644
--- a/sickbeard/name_parser/regexes.py
+++ b/sickbeard/name_parser/regexes.py
@@ -1,3 +1,5 @@
+# coding=utf-8
+
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -116,7 +118,7 @@ normal_regexes = [
      '''),
 
     ('newpct',
-    # Example: Sobrenatural - Temporada 10 [HDTV][Cap.1023][Espanol Castellano]
+     # Example: Sobrenatural - Temporada 10 [HDTV][Cap.1023][Espanol Castellano]
      r'''
      (?P<series_name>.+?)                      # Showw_Name: "Sobrenatural"
      (?:.-.+\d{1,2}.\[)                        # Separator and junk: " - Temporada 10 ["
@@ -147,7 +149,7 @@ normal_regexes = [
      ((?<![. _-])(?<!WEB)                        # Make sure this is really the release group
      -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$              # Group
      '''
-    ),
+     ),
 
     ('no_season_multi_ep',
      # Show.Name.E02-03
@@ -162,7 +164,7 @@ normal_regexes = [
      ((?<![. _-])(?<!WEB)                        # Make sure this is really the release group
      -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$              # Group
      '''
-    ),
+     ),
 
     ('no_season_general',
      # Show.Name.E23.Test
@@ -180,7 +182,7 @@ normal_regexes = [
      ((?<![. _-])(?<!WEB)                        # Make sure this is really the release group
      -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$              # Group
      '''
-    ),
+     ),
 
     ('no_season',
      # Show Name - 01 - Ep Name
@@ -195,7 +197,7 @@ normal_regexes = [
      ((?<![. _-])(?<!WEB)                            # Make sure this is really the release group
      -(?P<release_group>[^- ]+([. _-]\[.*\])?))?)?$  # Group
      '''
-    ),
+     ),
 
     ('bare',
      # Show.Name.102.Source.Quality.Etc-Group
@@ -239,14 +241,14 @@ anime_regexes = [
      # [ISLAND]One_Piece_679_[VOSTFR]_[8bit]_[720p]_[EB7838FC].mp4
      r'''
      ^\[(?P<release_group>ISLAND?)\]                                          # Release Group
-	 (?P<series_name>.+?)[ ._-]+                                              # Show_Name and separator
-	 (?P<ep_ab_num>\d{1,3})[ ._-]+                                            # Episode number
-	 (\[VOSTFR\])
-	 ([ ._-]+\[[vV](?P<version>[0-9])\])*[ ._-]+                              # Version
-	 (\[(8bit|10bit)\])?[ ._-]+
-	 \[(?P<extra_info>(\d{3,4}[xp]?\d{0,4})?[\.\w\s-]*)\][ ._-]+              # Extra info
-	 (\[(?P<crc>\w{8})\])?                                                    # CRC
-	 .*?
+     (?P<series_name>.+?)[ ._-]+                                              # Show_Name and separator
+     (?P<ep_ab_num>\d{1,3})[ ._-]+                                            # Episode number
+     (\[VOSTFR\])
+     ([ ._-]+\[[vV](?P<version>[0-9])\])*[ ._-]+                              # Version
+     (\[(8bit|10bit)\])?[ ._-]+
+     \[(?P<extra_info>(\d{3,4}[xp]?\d{0,4})?[\.\w\s-]*)\][ ._-]+              # Extra info
+     (\[(?P<crc>\w{8})\])?                                                    # CRC
+     .*?
      '''),
 
     ('anime_Kaerizaki-Fansub',
@@ -354,7 +356,7 @@ anime_regexes = [
      .*?
      '''
 
-    ),
+     ),
 
     ('anime_and_normal_x',
      # Bleach - s16e03-04 - 313-314
@@ -373,7 +375,7 @@ anime_regexes = [
      .*?
      '''
 
-    ),
+     ),
 
     ('anime_and_normal_reverse',
      # Bleach - 313-314 - s16e03-04
@@ -389,7 +391,7 @@ anime_regexes = [
      (?P<extra_ep_num>\d+))*                      # additional E03/etc
      .*?
      '''
-    ),
+     ),
 
     ('anime_and_normal_front',
      # 165.Naruto Shippuuden.s08e014
@@ -404,7 +406,7 @@ anime_regexes = [
      (?P<extra_ep_num>\d+))*                      # additional E03/etc
      .*?
      '''
-    ),
+     ),
 
     ('anime_ep_name',
      r'''
@@ -418,7 +420,7 @@ anime_regexes = [
     (?:\[(?P<crc>\w{8})\])?
     .*?
      '''
-    ),
+     ),
 
     ('anime_WarB3asT',
      # 003. Show Name - Ep Name.ext
diff --git a/sickbeard/naming.py b/sickbeard/naming.py
index 87cf89f6423d490136473ae8a2f20375381f03ab..752ef9817147a864582ea6611f709687eb642ec3 100644
--- a/sickbeard/naming.py
+++ b/sickbeard/naming.py
@@ -25,9 +25,9 @@ from sickbeard import tv
 from sickbeard import common
 from sickbeard import logger
 from sickbeard.name_parser.parser import NameParser
-from sickrage.helper.encoding import ek
+from sickbeard.common import Quality, DOWNLOADED
 
-from common import Quality, DOWNLOADED
+from sickrage.helper.encoding import ek
 
 name_presets = (
     '%SN - %Sx%0E - %EN',
@@ -222,7 +222,7 @@ def validate_name(pattern, multi=None, anime_type=None, file_only=False, abd=Fal
         logger.log(u"Unable to parse " + new_name + ", not valid", logger.DEBUG)
         return False
 
-    logger.log("The name " + new_name + " parsed into " + str(result), logger.DEBUG)
+    logger.log(u"The name " + new_name + " parsed into " + str(result), logger.DEBUG)
 
     if abd or sports:
         if result.air_date != ep.airdate:
diff --git a/sickbeard/network_timezones.py b/sickbeard/network_timezones.py
index f6cc0030081d6f0856027d05bac9d3136ed40a2e..78a9278693abe0abe64a6b0ec82fb37f4e0a1a4d 100644
--- a/sickbeard/network_timezones.py
+++ b/sickbeard/network_timezones.py
@@ -21,7 +21,6 @@ import re
 import datetime
 import requests
 from dateutil import tz
-from os import name as osname
 
 from sickbeard import db
 from sickbeard import helpers
@@ -33,11 +32,7 @@ am_regex = re.compile(r'(A[. ]? ?M)', flags=re.IGNORECASE)
 pm_regex = re.compile(r'(P[. ]? ?M)', flags=re.IGNORECASE)
 
 network_dict = None
-
-if osname == 'nt' and tz.tzwinlocal is not None:
-    sb_timezone = tz.tzwinlocal()
-else:
-    sb_timezone = tz.tzlocal()
+sb_timezone = tz.tzwinlocal() if tz.tzwinlocal else tz.tzlocal()
 
 # update the network timezone table
 def update_network_dict():
@@ -53,7 +48,7 @@ def update_network_dict():
     d = {}
     try:
         for line in url_data.splitlines():
-            (key, val) = line.decode('utf-8').strip().rsplit(u':', 1)
+            (key, val) = line.strip().rsplit(u':', 1)
             if key is None or val is None:
                 continue
             d[key] = val
@@ -76,7 +71,7 @@ def update_network_dict():
             del network_list[network]
 
     if network_list:
-        purged = list(x for x in network_list)
+        purged = [x for x in network_list]
         queries.append(['DELETE FROM network_timezones WHERE network_name IN (%s);' % ','.join(['?'] * len(purged)), purged])
 
     if queries:
@@ -170,8 +165,7 @@ def parse_date_time(d, t, network):
     te = datetime.datetime.fromordinal(helpers.tryInt(d) or 1)
     try:
         foreign_timezone = get_network_timezone(network, network_dict)
-        foreign_naive = datetime.datetime(te.year, te.month, te.day, hr, m, tzinfo=foreign_timezone)
-        return foreign_naive
+        return datetime.datetime(te.year, te.month, te.day, hr, m, tzinfo=foreign_timezone)
     except Exception:
         return datetime.datetime(te.year, te.month, te.day, hr, m, tzinfo=sb_timezone)
 
diff --git a/sickbeard/notifiers/boxcar.py b/sickbeard/notifiers/boxcar.py
index 40be70aa9110f096fe9ba28b0adf409587243690..90252e00ac52ec87032b47c9255859a6251f55fb 100644
--- a/sickbeard/notifiers/boxcar.py
+++ b/sickbeard/notifiers/boxcar.py
@@ -73,14 +73,14 @@ class BoxcarNotifier:
         except urllib2.HTTPError, e:
             # if we get an error back that doesn't have an error code then who knows what's really happening
             if not hasattr(e, 'code'):
-                logger.log("Boxcar notification failed. Error code: " + ex(e), logger.ERROR)
+                logger.log(u"Boxcar notification failed. Error code: " + ex(e), logger.ERROR)
                 return False
             else:
-                logger.log("Boxcar notification failed. Error code: " + str(e.code), logger.WARNING)
+                logger.log(u"Boxcar notification failed. Error code: " + str(e.code), logger.WARNING)
 
             # HTTP status 404 if the provided email address isn't a Boxcar user.
             if e.code == 404:
-                logger.log("Username is wrong/not a boxcar email. Boxcar will send an email to it", logger.WARNING)
+                logger.log(u"Username is wrong/not a boxcar email. Boxcar will send an email to it", logger.WARNING)
                 return False
 
             # For HTTP status code 401's, it is because you are passing in either an invalid token, or the user has not added your service.
@@ -88,26 +88,26 @@ class BoxcarNotifier:
 
                 # If the user has already added your service, we'll return an HTTP status code of 401.
                 if subscribe:
-                    logger.log("Already subscribed to service", logger.ERROR)
+                    logger.log(u"Already subscribed to service", logger.ERROR)
                     # i dont know if this is true or false ... its neither but i also dont know how we got here in the first place
                     return False
 
-                #HTTP status 401 if the user doesn't have the service added
+                # HTTP status 401 if the user doesn't have the service added
                 else:
                     subscribeNote = self._sendBoxcar(msg, title, email, True)
                     if subscribeNote:
-                        logger.log("Subscription send", logger.DEBUG)
+                        logger.log(u"Subscription send", logger.DEBUG)
                         return True
                     else:
-                        logger.log("Subscription could not be send", logger.ERROR)
+                        logger.log(u"Subscription could not be send", logger.ERROR)
                         return False
 
             # If you receive an HTTP status code of 400, it is because you failed to send the proper parameters
             elif e.code == 400:
-                logger.log("Wrong data sent to boxcar", logger.ERROR)
+                logger.log(u"Wrong data sent to boxcar", logger.ERROR)
                 return False
 
-        logger.log("Boxcar notification successful.", logger.INFO)
+        logger.log(u"Boxcar notification successful.", logger.INFO)
         return True
 
     def notify_snatch(self, ep_name, title=notifyStrings[NOTIFY_SNATCH]):
@@ -140,14 +140,14 @@ class BoxcarNotifier:
         """
 
         if not sickbeard.USE_BOXCAR and not force:
-            logger.log("Notification for Boxcar not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for Boxcar not enabled, skipping this notification", logger.DEBUG)
             return False
 
         # if no username was given then use the one from the config
         if not username:
             username = sickbeard.BOXCAR_USERNAME
 
-        logger.log("Sending notification for " + message, logger.DEBUG)
+        logger.log(u"Sending notification for " + message, logger.DEBUG)
 
         return self._sendBoxcar(message, title, username)
 
diff --git a/sickbeard/notifiers/boxcar2.py b/sickbeard/notifiers/boxcar2.py
index b6e9f468071b045e18e892ba8b8b0219dd36f960..3dd4a9a5a31662b0de443c9d970a2e46897e00ef 100644
--- a/sickbeard/notifiers/boxcar2.py
+++ b/sickbeard/notifiers/boxcar2.py
@@ -45,7 +45,7 @@ class Boxcar2Notifier:
         """
 
         # build up the URL and parameters
-	#more info goes here - https://boxcar.uservoice.com/knowledgebase/articles/306788-how-to-send-your-boxcar-account-a-notification
+        # more info goes here - https://boxcar.uservoice.com/knowledgebase/articles/306788-how-to-send-your-boxcar-account-a-notification
         msg = msg.strip()
         curUrl = API_URL
 
@@ -65,22 +65,22 @@ class Boxcar2Notifier:
         except Exception as e:
             # if we get an error back that doesn't have an error code then who knows what's really happening
             if not hasattr(e, 'code'):
-                logger.log("Boxcar2 notification failed." + ex(e), logger.ERROR)
+                logger.log(u"Boxcar2 notification failed." + ex(e), logger.ERROR)
                 return False
             else:
-                logger.log("Boxcar2 notification failed. Error code: " + str(e.code), logger.WARNING)
+                logger.log(u"Boxcar2 notification failed. Error code: " + str(e.code), logger.WARNING)
 
             # HTTP status 404
             if e.code == 404:
-                logger.log("Access token is invalid. Check it.", logger.WARNING)
+                logger.log(u"Access token is invalid. Check it.", logger.WARNING)
                 return False
 
             # If you receive an HTTP status code of 400, it is because you failed to send the proper parameters
             elif e.code == 400:
-                logger.log("Wrong data send to boxcar2", logger.ERROR)
+                logger.log(u"Wrong data send to boxcar2", logger.ERROR)
                 return False
 
-        logger.log("Boxcar2 notification successful.", logger.DEBUG)
+        logger.log(u"Boxcar2 notification successful.", logger.DEBUG)
         return True
 
     def notify_snatch(self, ep_name, title=notifyStrings[NOTIFY_SNATCH]):
@@ -112,14 +112,14 @@ class Boxcar2Notifier:
         """
 
         if not sickbeard.USE_BOXCAR2:
-            logger.log("Notification for Boxcar2 not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for Boxcar2 not enabled, skipping this notification", logger.DEBUG)
             return False
 
         # if no username was given then use the one from the config
         if not accesstoken:
             accesstoken = sickbeard.BOXCAR2_ACCESSTOKEN
 
-        logger.log("Sending notification for " + message, logger.DEBUG)
+        logger.log(u"Sending notification for " + message, logger.DEBUG)
 
         self._sendBoxcar2(message, title, accesstoken)
         return True
diff --git a/sickbeard/notifiers/emailnotify.py b/sickbeard/notifiers/emailnotify.py
index f6c9633597249207975a451f54159328d2bdc974..c63b036708ea94a152ffb45721030be2e3362630 100644
--- a/sickbeard/notifiers/emailnotify.py
+++ b/sickbeard/notifiers/emailnotify.py
@@ -59,7 +59,7 @@ class EmailNotifier:
             show = self._parseEp(ep_name)
             to = self._generate_recipients(show)
             if len(to) == 0:
-                logger.log('Skipping email notify because there are no configured recipients', logger.WARNING)
+                logger.log(u'Skipping email notify because there are no configured recipients', logger.WARNING)
             else:
                 try:
                     msg = MIMEMultipart('alternative')
@@ -81,9 +81,9 @@ class EmailNotifier:
                 msg['Date'] = formatdate(localtime=True)
                 if self._sendmail(sickbeard.EMAIL_HOST, sickbeard.EMAIL_PORT, sickbeard.EMAIL_FROM, sickbeard.EMAIL_TLS,
                                   sickbeard.EMAIL_USER, sickbeard.EMAIL_PASSWORD, to, msg):
-                    logger.log("Snatch notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
+                    logger.log(u"Snatch notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
                 else:
-                    logger.log("Snatch notification ERROR: %s" % self.last_err, logger.ERROR)
+                    logger.log(u"Snatch notification ERROR: %s" % self.last_err, logger.ERROR)
 
     def notify_download(self, ep_name, title="Completed:"):
         """
@@ -98,7 +98,7 @@ class EmailNotifier:
             show = self._parseEp(ep_name)
             to = self._generate_recipients(show)
             if len(to) == 0:
-                logger.log('Skipping email notify because there are no configured recipients', logger.WARNING)
+                logger.log(u'Skipping email notify because there are no configured recipients', logger.WARNING)
             else:
                 try:
                     msg = MIMEMultipart('alternative')
@@ -120,9 +120,9 @@ class EmailNotifier:
                 msg['Date'] = formatdate(localtime=True)
                 if self._sendmail(sickbeard.EMAIL_HOST, sickbeard.EMAIL_PORT, sickbeard.EMAIL_FROM, sickbeard.EMAIL_TLS,
                                   sickbeard.EMAIL_USER, sickbeard.EMAIL_PASSWORD, to, msg):
-                    logger.log("Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
+                    logger.log(u"Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
                 else:
-                    logger.log("Download notification ERROR: %s" % self.last_err, logger.ERROR)
+                    logger.log(u"Download notification ERROR: %s" % self.last_err, logger.ERROR)
 
     def notify_subtitle_download(self, ep_name, lang, title="Downloaded subtitle:"):
         """
@@ -137,7 +137,7 @@ class EmailNotifier:
             show = self._parseEp(ep_name)
             to = self._generate_recipients(show)
             if len(to) == 0:
-                logger.log('Skipping email notify because there are no configured recipients', logger.WARNING)
+                logger.log(u'Skipping email notify because there are no configured recipients', logger.WARNING)
             else:
                 try:
                     msg = MIMEMultipart('alternative')
@@ -158,9 +158,9 @@ class EmailNotifier:
                 msg['To'] = ','.join(to)
                 if self._sendmail(sickbeard.EMAIL_HOST, sickbeard.EMAIL_PORT, sickbeard.EMAIL_FROM, sickbeard.EMAIL_TLS,
                                   sickbeard.EMAIL_USER, sickbeard.EMAIL_PASSWORD, to, msg):
-                    logger.log("Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
+                    logger.log(u"Download notification sent to [%s] for '%s'" % (to, ep_name), logger.DEBUG)
                 else:
-                    logger.log("Download notification ERROR: %s" % self.last_err, logger.ERROR)
+                    logger.log(u"Download notification ERROR: %s" % self.last_err, logger.ERROR)
 
 
     def notify_git_update(self, new_version="??"):
@@ -184,11 +184,11 @@ class EmailNotifier:
                             addrs.append(addr)
 
         addrs = set(addrs)
-        logger.log('Notification recipients: %s' % addrs, logger.DEBUG)
+        logger.log(u'Notification recipients: %s' % addrs, logger.DEBUG)
         return addrs
 
     def _sendmail(self, host, port, smtp_from, use_tls, user, pwd, to, msg, smtpDebug=False):
-        logger.log('HOST: %s; PORT: %s; FROM: %s, TLS: %s, USER: %s, PWD: %s, TO: %s' % (
+        logger.log(u'HOST: %s; PORT: %s; FROM: %s, TLS: %s, USER: %s, PWD: %s, TO: %s' % (
             host, port, smtp_from, use_tls, user, pwd, to), logger.DEBUG)
         try:
             srv = smtplib.SMTP(host, int(port))
@@ -202,13 +202,13 @@ class EmailNotifier:
         try:
             if (use_tls == '1' or use_tls == True) or (len(user) > 0 and len(pwd) > 0):
                 srv.ehlo()
-                logger.log('Sent initial EHLO command!', logger.DEBUG)
+                logger.log(u'Sent initial EHLO command!', logger.DEBUG)
             if use_tls == '1' or use_tls == True:
                 srv.starttls()
-                logger.log('Sent STARTTLS command!', logger.DEBUG)
+                logger.log(u'Sent STARTTLS command!', logger.DEBUG)
             if len(user) > 0 and len(pwd) > 0:
                 srv.login(user, pwd)
-                logger.log('Sent LOGIN command!', logger.DEBUG)
+                logger.log(u'Sent LOGIN command!', logger.DEBUG)
             srv.sendmail(smtp_from, to, msg.as_string())
             srv.quit()
             return True
@@ -222,7 +222,7 @@ class EmailNotifier:
         sep = " - "
         titles = ep_name.split(sep)
         titles.sort(key=len, reverse=True)
-        logger.log("TITLES: %s" % titles, logger.DEBUG)
+        logger.log(u"TITLES: %s" % titles, logger.DEBUG)
         return titles
 
 
diff --git a/sickbeard/notifiers/freemobile.py b/sickbeard/notifiers/freemobile.py
index e4dba3732626c064c83d95f7001bef519e6539b9..ab203bcba5c0c6020abd662ede3d5acf04658217 100644
--- a/sickbeard/notifiers/freemobile.py
+++ b/sickbeard/notifiers/freemobile.py
@@ -43,7 +43,7 @@ class FreeMobileNotifier:
         if apiKey == None:
             apiKey = sickbeard.FREEMOBILE_APIKEY
 
-        logger.log("Free Mobile in use with API KEY: " + apiKey, logger.DEBUG)
+        logger.log(u"Free Mobile in use with API KEY: " + apiKey, logger.DEBUG)
 
         # build up the URL and parameters
         msg = msg.strip()
@@ -53,7 +53,7 @@ class FreeMobileNotifier:
         req = urllib2.Request(URL)
         # send the request to Free Mobile
         try:
-            reponse = urllib2.urlopen(req)
+            urllib2.urlopen(req)
         except IOError, e:
             if hasattr(e,'code'):
                 if e.code == 400:
@@ -115,10 +115,10 @@ class FreeMobileNotifier:
         """
 
         if not sickbeard.USE_FREEMOBILE and not force:
-            logger.log("Notification for Free Mobile not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for Free Mobile not enabled, skipping this notification", logger.DEBUG)
             return False, "Disabled"
 
-        logger.log("Sending a SMS for " + message, logger.DEBUG)
+        logger.log(u"Sending a SMS for " + message, logger.DEBUG)
 
         return self._sendFreeMobileSMS(title, message, id, apiKey)
 
diff --git a/sickbeard/notifiers/growl.py b/sickbeard/notifiers/growl.py
index b71510b4eb2b3289c3b850d136ca896e19dd43d6..10e32204b20681b379081780f3dd1c4139c7ab65 100644
--- a/sickbeard/notifiers/growl.py
+++ b/sickbeard/notifiers/growl.py
@@ -52,10 +52,10 @@ class GrowlNotifier:
 
     def _send_growl(self, options, message=None):
 
-        #Send Notification
+        # Send Notification
         notice = gntp.GNTPNotice()
 
-        #Required
+        # Required
         notice.add_header('Application-Name', options['app'])
         notice.add_header('Notification-Name', options['name'])
         notice.add_header('Notification-Title', options['title'])
@@ -63,7 +63,7 @@ class GrowlNotifier:
         if options['password']:
             notice.set_password(options['password'])
 
-        #Optional
+        # Optional
         if options['sticky']:
             notice.add_header('Notification-Sticky', options['sticky'])
         if options['priority']:
@@ -169,7 +169,7 @@ class GrowlNotifier:
         opts['app'] = 'SickRage'
         opts['debug'] = False
 
-        #Send Registration
+        # Send Registration
         register = gntp.GNTPRegister()
         register.add_header('Application-Name', opts['app'])
         register.add_header('Application-Icon', self.sr_logo_url)
diff --git a/sickbeard/notifiers/kodi.py b/sickbeard/notifiers/kodi.py
index ceaa80345a8b9a216fb70883d07c49f00ea427ec..e2303b4e8e6750ce375d891f513771f12a30304c 100644
--- a/sickbeard/notifiers/kodi.py
+++ b/sickbeard/notifiers/kodi.py
@@ -121,7 +121,7 @@ class KODINotifier:
 
         # suppress notifications if the notifier is disabled but the notify options are checked
         if not sickbeard.USE_KODI and not force:
-            logger.log("Notification for KODI not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for KODI not enabled, skipping this notification", logger.DEBUG)
             return False
 
         result = ''
diff --git a/sickbeard/notifiers/libnotify.py b/sickbeard/notifiers/libnotify.py
index dc86055c72e4fd45f3930676ecba1f6793cdf967..402b99a1e53dfaf16264e069df4ab8efa65d8105 100644
--- a/sickbeard/notifiers/libnotify.py
+++ b/sickbeard/notifiers/libnotify.py
@@ -29,7 +29,7 @@ def diagnose():
     user-readable message indicating possible issues.
     '''
     try:
-        from gi.repository import Notify #@UnusedImport
+        from gi.repository import Notify  # @UnusedImport
     except ImportError:
         return (u"<p>Error: gir-notify isn't installed. On Ubuntu/Debian, install the "
                 u"<a href=\"apt:gir1.2-notify-0.7\">gir1.2-notify-0.7</a> or "
diff --git a/sickbeard/notifiers/nma.py b/sickbeard/notifiers/nma.py
index f1dffcbe7fa56192793a90b59a7bcbed2229d0d8..c0cb173f2d7e3f2e7ea090b969b14f80cda1acd8 100644
--- a/sickbeard/notifiers/nma.py
+++ b/sickbeard/notifiers/nma.py
@@ -51,7 +51,7 @@ class NMA_Notifier:
 
         if len(keys) > 1: batch = True
 
-        logger.log("NMA: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, batch=%s" % (event, message, nma_priority, batch), logger.DEBUG)
+        logger.log(u"NMA: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, batch=%s" % (event, message, nma_priority, batch), logger.DEBUG)
         response = p.push(application=title, event=event, description=message, priority=nma_priority, batch_mode=batch)
 
         if not response[nma_api][u'code'] == u'200':
diff --git a/sickbeard/notifiers/nmj.py b/sickbeard/notifiers/nmj.py
index e86b81be0724119803ef681ec165ea9266157707..313998de30ffa91d9b7222bca774facdd0b781b0 100644
--- a/sickbeard/notifiers/nmj.py
+++ b/sickbeard/notifiers/nmj.py
@@ -87,7 +87,7 @@ class NMJNotifier:
 
     def notify_snatch(self, ep_name):
         return False
-        #Not implemented: Start the scanner when snatched does not make any sense
+        # Not implemented: Start the scanner when snatched does not make any sense
 
     def notify_download(self, ep_name):
         if sickbeard.USE_NMJ:
@@ -184,7 +184,7 @@ class NMJNotifier:
         force: If True then the notification will be sent even if NMJ is disabled in the config
         """
         if not sickbeard.USE_NMJ and not force:
-            logger.log("Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG)
             return False
 
         # fill in omitted parameters
diff --git a/sickbeard/notifiers/nmjv2.py b/sickbeard/notifiers/nmjv2.py
index 7c02bca1151e14407a3545cea2f9847eb7e04788..24464b039e68ce6780f2e2eeeee7ab54c49d4fe7 100644
--- a/sickbeard/notifiers/nmjv2.py
+++ b/sickbeard/notifiers/nmjv2.py
@@ -33,7 +33,7 @@ except ImportError:
 class NMJv2Notifier:
     def notify_snatch(self, ep_name):
         return False
-        #Not implemented: Start the scanner when snatched does not make any sense
+        # Not implemented: Start the scanner when snatched does not make any sense
 
     def notify_download(self, ep_name):
         self._notifyNMJ()
@@ -104,7 +104,7 @@ class NMJv2Notifier:
         Returns: True if the request succeeded, False otherwise
         """
 
-        #if a host is provided then attempt to open a handle to that URL
+        # if a host is provided then attempt to open a handle to that URL
         try:
             url_scandir = "http://" + host + ":8008/metadata_database?arg0=update_scandir&arg1=" + sickbeard.NMJv2_DATABASE + "&arg2=&arg3=update_all"
             logger.log(u"NMJ scan update command sent to host: %s" % (host), logger.DEBUG)
@@ -165,7 +165,7 @@ class NMJv2Notifier:
         force: If True then the notification will be sent even if NMJ is disabled in the config
         """
         if not sickbeard.USE_NMJv2 and not force:
-            logger.log("Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for NMJ scan update not enabled, skipping this notification", logger.DEBUG)
             return False
 
         # fill in omitted parameters
diff --git a/sickbeard/notifiers/prowl.py b/sickbeard/notifiers/prowl.py
index 93400e5322b3f479e4a9b6d3b5e15894040c3c88..195631498b4ea19fc6e2472456836c6572c00f3a 100644
--- a/sickbeard/notifiers/prowl.py
+++ b/sickbeard/notifiers/prowl.py
@@ -73,7 +73,7 @@ class ProwlNotifier:
 
         title = "SickRage"
 
-        logger.log("PROWL: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, api=%s" % (event, message, prowl_priority, prowl_api), logger.DEBUG)
+        logger.log(u"PROWL: Sending notice with details: event=\"%s\", message=\"%s\", priority=%s, api=%s" % (event, message, prowl_priority, prowl_api), logger.DEBUG)
 
         http_handler = HTTPSConnection("api.prowlapp.com")
 
diff --git a/sickbeard/notifiers/pushbullet.py b/sickbeard/notifiers/pushbullet.py
index 275578d47179b613ef8af0345b779ecb589a3fa0..5f8bc65d932bfadc4a277bdd778d4497c9c5b094 100644
--- a/sickbeard/notifiers/pushbullet.py
+++ b/sickbeard/notifiers/pushbullet.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*
 # Author: Pedro Correia (http://github.com/pedrocorreia/)
 # Based on pushalot.py by Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
@@ -17,107 +18,99 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage. If not, see <http://www.gnu.org/licenses/>.
 
-import socket
-from httplib import HTTPSConnection, HTTPException
 import json
-from ssl import SSLError
+import requests
+import traceback
+
 import sickbeard
-from sickbeard import logger, common
+from sickbeard import logger
+from sickbeard.common import notifyStrings
+from sickbeard.common import NOTIFY_SNATCH
+from sickbeard.common import NOTIFY_DOWNLOAD
+from sickbeard.common import NOTIFY_GIT_UPDATE
+from sickbeard.common import NOTIFY_GIT_UPDATE_TEXT
+from sickbeard.common import NOTIFY_SUBTITLE_DOWNLOAD
+
+
+class PushbulletNotifier(object):
+    session = requests.Session()
+    TEST_EVENT = 'Test'
 
+    def __init__(self):
+        pass
 
-class PushbulletNotifier:
     def test_notify(self, pushbullet_api):
-        return self._sendPushbullet(pushbullet_api, event="Test", message="Testing Pushbullet settings from SickRage",
-                                    method="POST", notificationType="note", force=True)
+        logger.log(u"Sending a test Pushbullet notification.", logger.DEBUG)
+        return self._sendPushbullet(pushbullet_api, event=self.TEST_EVENT, message="Testing Pushbullet settings from SickRage")
 
     def get_devices(self, pushbullet_api):
-        return self._sendPushbullet(pushbullet_api, method="GET", force=True)
+        logger.log(u"Testing Pushbullet authentication and retrieving the device list.", logger.DEBUG)
+        return self._sendPushbullet(pushbullet_api)
 
     def notify_snatch(self, ep_name):
         if sickbeard.PUSHBULLET_NOTIFY_ONSNATCH:
-            self._sendPushbullet(pushbullet_api=None, event=common.notifyStrings[common.NOTIFY_SNATCH] + " : " + ep_name, message=ep_name,
-                                 notificationType="note", method="POST")
+            self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_SNATCH] + " : " + ep_name, message=ep_name)
 
     def notify_download(self, ep_name):
         if sickbeard.PUSHBULLET_NOTIFY_ONDOWNLOAD:
-            self._sendPushbullet(pushbullet_api=None, event=common.notifyStrings[common.NOTIFY_DOWNLOAD] + " : " + ep_name,
-                                 message=ep_name, notificationType="note", method="POST")
+            self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_DOWNLOAD] + " : " + ep_name, message=ep_name)
 
     def notify_subtitle_download(self, ep_name, lang):
         if sickbeard.PUSHBULLET_NOTIFY_ONSUBTITLEDOWNLOAD:
-            self._sendPushbullet(pushbullet_api=None, event=common.notifyStrings[common.NOTIFY_SUBTITLE_DOWNLOAD] + " : " + ep_name + " : " + lang,
-                                 message=ep_name + ": " + lang, notificationType="note", method="POST")
-                                 
-    def notify_git_update(self, new_version = "??"):
+            self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_SUBTITLE_DOWNLOAD] + " : " + ep_name + " : " + lang, message=ep_name + ": " + lang)
+
+    def notify_git_update(self, new_version="??"):
         if sickbeard.USE_PUSHBULLET:
-            update_text=common.notifyStrings[common.NOTIFY_GIT_UPDATE_TEXT]
-            title=common.notifyStrings[common.NOTIFY_GIT_UPDATE]
-            self._sendPushbullet(pushbullet_api=None, event=title, message=update_text + new_version, notificationType="note", method="POST")
+            self._sendPushbullet(pushbullet_api=None, event=notifyStrings[NOTIFY_GIT_UPDATE], message=notifyStrings[NOTIFY_GIT_UPDATE_TEXT] + new_version)
 
-    def _sendPushbullet(self, pushbullet_api=None, pushbullet_device=None, event=None, message=None,
-                        notificationType=None, method=None, force=False):
+    def _sendPushbullet(self, pushbullet_api=None, pushbullet_device=None, event=None, message=None):
 
-        if not sickbeard.USE_PUSHBULLET and not force:
+        if not (sickbeard.USE_PUSHBULLET or event is 'Test' or event is None):
             return False
 
-        if pushbullet_api == None:
-            pushbullet_api = sickbeard.PUSHBULLET_API
-        if pushbullet_device == None:
-            pushbullet_device = sickbeard.PUSHBULLET_DEVICE
-
-        if method == 'POST':
-            uri = '/v2/pushes'
-        else:
-            uri = '/v2/devices'
-
-        logger.log(u"Pushbullet event: " + str(event), logger.DEBUG)
-        logger.log(u"Pushbullet message: " + str(message), logger.DEBUG)
-        logger.log(u"Pushbullet api: " + str(pushbullet_api), logger.DEBUG)
-        logger.log(u"Pushbullet devices: " + str(pushbullet_device), logger.DEBUG)
-        logger.log(u"Pushbullet notification type: " + str(notificationType), logger.DEBUG)
-
-        http_handler = HTTPSConnection("api.pushbullet.com")
-
-        if notificationType == None:
-            testMessage = True
-            try:
-                logger.log(u"Testing Pushbullet authentication and retrieving the device list.", logger.DEBUG)
-                http_handler.request(method, uri, None, headers={'Authorization': 'Bearer %s' % pushbullet_api})
-            except (SSLError, HTTPException, socket.error):
-                logger.log(u"Pushbullet notification failed.", logger.ERROR)
-                return False
-        else:
-            testMessage = False
-            try:
-                data = {
-                    'title': event.encode('utf-8'),
-                    'body': message.encode('utf-8'),
-                    'device_iden': pushbullet_device,
-                    'type': notificationType}
-                data = json.dumps(data)
-                http_handler.request(method, uri, body=data,
-                                     headers={'Content-Type': 'application/json', 'Authorization': 'Bearer %s' % pushbullet_api})
-            except (SSLError, HTTPException, socket.error):
-                return False
-
-        response = http_handler.getresponse()
-        request_body = response.read()
-        request_status = response.status
-        logger.log(u"Pushbullet response: %s" % request_body, logger.DEBUG)
-
-        if request_status == 200:
-            if testMessage:
-                return request_body
-            else:
-                logger.log(u"Pushbullet notifications sent.", logger.DEBUG)
-                return True
-        elif request_status == 410:
-            logger.log(u"Pushbullet auth failed: %s" % response.reason, logger.ERROR)
+        pushbullet_api = pushbullet_api or sickbeard.PUSHBULLET_API
+        pushbullet_device = pushbullet_device or sickbeard.PUSHBULLET_DEVICE
+
+        logger.log(u"Pushbullet event: %r" % event, logger.DEBUG)
+        logger.log(u"Pushbullet message: %r" % message, logger.DEBUG)
+        logger.log(u"Pushbullet api: %r" % pushbullet_api, logger.DEBUG)
+        logger.log(u"Pushbullet devices: %r" % pushbullet_device, logger.DEBUG)
+        logger.log(u"Pushbullet notification type: %r" % 'note' if event else 'None', logger.DEBUG)
+
+        url = 'https://api.pushbullet.com/v2/%s' % ('devices', 'pushes')[event is not None]
+
+        data = json.dumps({
+            'title': event.encode('utf-8'),
+            'body': message.encode('utf-8'),
+            'device_iden': pushbullet_device.encode('utf-8'),
+            'type': 'note'
+        }) if event else None
+
+        method = 'GET' if data is None else 'POST'
+        headers = {'Content-Type': 'application/json', 'Authorization': 'Bearer %s' % pushbullet_api}
+
+        try:
+            response = self.session.request(method, url, data=data, headers=headers)
+        except Exception:
+            logger.log(u'Pushbullet authorization failed with exception: %r' % traceback.format_exc(), logger.DEBUG)
             return False
-        else:
+
+        if response.status_code == 410:
+            logger.log(u'Pushbullet authorization failed', logger.DEBUG)
+            return False
+
+        if response.status_code != 200:
+            logger.log(u'Pushbullet call failed with error code %r' % response.status_code, logger.DEBUG)
+            return False
+
+        logger.log(u"Pushbullet response: %r" % response.text, logger.DEBUG)
+
+        if not response.text:
             logger.log(u"Pushbullet notification failed.", logger.ERROR)
             return False
 
+        logger.log(u"Pushbullet notifications sent.", logger.DEBUG)
+        return (True, response.text)[event is self.TEST_EVENT or event is None]
 
-notifier = PushbulletNotifier
 
+notifier = PushbulletNotifier
diff --git a/sickbeard/notifiers/pushover.py b/sickbeard/notifiers/pushover.py
index d21ba204325c449164c1ab102568ed976d13265a..e605f3c31dee51da7f5b37a3d0ef4909bb56243a 100644
--- a/sickbeard/notifiers/pushover.py
+++ b/sickbeard/notifiers/pushover.py
@@ -29,8 +29,8 @@ from sickrage.helper.exceptions import ex
 
 API_URL = "https://api.pushover.net/1/messages.json"
 
-# pylint: disable=W0232,C1001
-class PushoverNotifier:
+# pylint: disable=W0232
+class PushoverNotifier(object):
     def test_notify(self, userKey=None, apiKey=None):
         return self._notifyPushover("This is a test notification from SickRage", 'Test', userKey=userKey, apiKey=apiKey, force=True)
 
@@ -55,7 +55,7 @@ class PushoverNotifier:
         if sound == None:
             sound = sickbeard.PUSHOVER_SOUND
 
-        logger.log("Pushover API KEY in use: " + apiKey, logger.DEBUG)
+        logger.log(u"Pushover API KEY in use: " + apiKey, logger.DEBUG)
 
         # build up the URL and parameters
         msg = msg.strip()
@@ -93,39 +93,39 @@ class PushoverNotifier:
         except urllib2.HTTPError, e:
             # if we get an error back that doesn't have an error code then who knows what's really happening
             if not hasattr(e, 'code'):
-                logger.log("Pushover notification failed." + ex(e), logger.ERROR)
+                logger.log(u"Pushover notification failed." + ex(e), logger.ERROR)
                 return False
             else:
-                logger.log("Pushover notification failed. Error code: " + str(e.code), logger.ERROR)
+                logger.log(u"Pushover notification failed. Error code: " + str(e.code), logger.ERROR)
 
             # HTTP status 404 if the provided email address isn't a Pushover user.
             if e.code == 404:
-                logger.log("Username is wrong/not a pushover email. Pushover will send an email to it", logger.WARNING)
+                logger.log(u"Username is wrong/not a pushover email. Pushover will send an email to it", logger.WARNING)
                 return False
 
             # For HTTP status code 401's, it is because you are passing in either an invalid token, or the user has not added your service.
             elif e.code == 401:
 
-                #HTTP status 401 if the user doesn't have the service added
+                # HTTP status 401 if the user doesn't have the service added
                 subscribeNote = self._sendPushover(msg, title, sound=sound, userKey=userKey, apiKey=apiKey)
                 if subscribeNote:
-                    logger.log("Subscription sent", logger.DEBUG)
+                    logger.log(u"Subscription sent", logger.DEBUG)
                     return True
                 else:
-                    logger.log("Subscription could not be sent", logger.ERROR)
+                    logger.log(u"Subscription could not be sent", logger.ERROR)
                     return False
 
             # If you receive an HTTP status code of 400, it is because you failed to send the proper parameters
             elif e.code == 400:
-                logger.log("Wrong data sent to pushover", logger.ERROR)
+                logger.log(u"Wrong data sent to pushover", logger.ERROR)
                 return False
 
             # If you receive a HTTP status code of 429, it is because the message limit has been reached (free limit is 7,500)
             elif e.code == 429:
-                logger.log("Pushover API message limit reached - try a different API key", logger.ERROR)
+                logger.log(u"Pushover API message limit reached - try a different API key", logger.ERROR)
                 return False
 
-        logger.log("Pushover notification successful.", logger.INFO)
+        logger.log(u"Pushover notification successful.", logger.INFO)
         return True
 
     def notify_snatch(self, ep_name, title=notifyStrings[NOTIFY_SNATCH]):
@@ -160,10 +160,10 @@ class PushoverNotifier:
         """
 
         if not sickbeard.USE_PUSHOVER and not force:
-            logger.log("Notification for Pushover not enabled, skipping this notification", logger.DEBUG)
+            logger.log(u"Notification for Pushover not enabled, skipping this notification", logger.DEBUG)
             return False
 
-        logger.log("Sending notification for " + message, logger.DEBUG)
+        logger.log(u"Sending notification for " + message, logger.DEBUG)
 
         return self._sendPushover(message, title, sound=sound, userKey=userKey, apiKey=apiKey)
 
diff --git a/sickbeard/notifiers/pytivo.py b/sickbeard/notifiers/pytivo.py
index 1fb2f631b91f86fa2c859e8df1bbe6bb828219f5..e7e9434df78a8e7372c383b6092394b687747225 100644
--- a/sickbeard/notifiers/pytivo.py
+++ b/sickbeard/notifiers/pytivo.py
@@ -90,7 +90,7 @@ class pyTivoNotifier:
         request = Request(requestUrl)
 
         try:
-            response = urlopen(request)  #@UnusedVariable
+            response = urlopen(request)  # @UnusedVariable
         except HTTPError , e:
             if hasattr(e, 'reason'):
                 logger.log(u"pyTivo notification: Error, failed to reach a server - " + e.reason, logger.ERROR)
diff --git a/sickbeard/notifiers/synoindex.py b/sickbeard/notifiers/synoindex.py
index 95d3a14ed286b51bc68d95d50acda414ad3e5889..854eb1e43742fa8b31a62f63a8088d7e54e573b1 100644
--- a/sickbeard/notifiers/synoindex.py
+++ b/sickbeard/notifiers/synoindex.py
@@ -54,7 +54,7 @@ class synoIndexNotifier:
             try:
                 p = subprocess.Popen(synoindex_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
                                      cwd=sickbeard.PROG_DIR)
-                out, err = p.communicate()  #@UnusedVariable
+                out, err = p.communicate()  # @UnusedVariable
                 logger.log(u"Script result: " + str(out), logger.DEBUG)
             except OSError, e:
                 logger.log(u"Unable to run synoindex: " + ex(e), logger.ERROR)
@@ -79,7 +79,7 @@ class synoIndexNotifier:
             try:
                 p = subprocess.Popen(synoindex_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
                                      cwd=sickbeard.PROG_DIR)
-                out, err = p.communicate()  #@UnusedVariable
+                out, err = p.communicate()  # @UnusedVariable
                 logger.log(u"Script result: " + str(out), logger.DEBUG)
             except OSError, e:
                 logger.log(u"Unable to run synoindex: " + ex(e), logger.ERROR)
diff --git a/sickbeard/notifiers/synologynotifier.py b/sickbeard/notifiers/synologynotifier.py
index 240c69fb266e9d8f47268df0d5876cc2a3bec2f6..ee0591f0111710f70df22bcd6369d6ef0a9365e9 100644
--- a/sickbeard/notifiers/synologynotifier.py
+++ b/sickbeard/notifiers/synologynotifier.py
@@ -52,7 +52,7 @@ class synologyNotifier:
         try:
             p = subprocess.Popen(synodsmnotify_cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
                                  cwd=sickbeard.PROG_DIR)
-            out, err = p.communicate()  #@UnusedVariable
+            out, err = p.communicate()  # @UnusedVariable
             logger.log(u"Script result: " + str(out), logger.DEBUG)
         except OSError, e:
             logger.log(u"Unable to run synodsmnotify: " + ex(e))
diff --git a/sickbeard/notifiers/trakt.py b/sickbeard/notifiers/trakt.py
index a7f7f2c1c57943897489a29e6bb47b2245e29c8c..ab587637eddff96fcaf2815aa2b4453d7da76600 100644
--- a/sickbeard/notifiers/trakt.py
+++ b/sickbeard/notifiers/trakt.py
@@ -194,7 +194,7 @@ class TraktNotifier:
             if season not in uniqueSeasons:
                 uniqueSeasons.append(season)
 
-        #build the query
+        # build the query
         seasonsList = []
         for searchedSeason in uniqueSeasons:
             episodesList = []
diff --git a/sickbeard/notifiers/tweet.py b/sickbeard/notifiers/tweet.py
index f905b31c3652021caa0bdfe65eee94d08a38391b..de7aabbdc2d99c7eed5e9659b881540a3a85d37c 100644
--- a/sickbeard/notifiers/tweet.py
+++ b/sickbeard/notifiers/tweet.py
@@ -23,9 +23,9 @@ from sickrage.helper.exceptions import ex
 
 # parse_qsl moved to urlparse module in v2.6
 try:
-    from urlparse import parse_qsl  #@UnusedImport
+    from urlparse import parse_qsl  # @UnusedImport
 except ImportError:
-    from cgi import parse_qsl  #@Reimport
+    from cgi import parse_qsl  # @Reimport
 
 import oauth2 as oauth
 import pythontwitter as twitter
@@ -63,16 +63,16 @@ class TwitterNotifier:
 
     def _get_authorization(self):
 
-        signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()  #@UnusedVariable
+        signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()  # @UnusedVariable
         oauth_consumer = oauth.Consumer(key=self.consumer_key, secret=self.consumer_secret)
         oauth_client = oauth.Client(oauth_consumer)
 
-        logger.log('Requesting temp token from Twitter', logger.DEBUG)
+        logger.log(u'Requesting temp token from Twitter', logger.DEBUG)
 
         resp, content = oauth_client.request(self.REQUEST_TOKEN_URL, 'GET')
 
         if resp['status'] != '200':
-            logger.log('Invalid response from Twitter requesting temp token: %s' % resp['status'], logger.ERROR)
+            logger.log(u'Invalid response from Twitter requesting temp token: %s' % resp['status'], logger.ERROR)
         else:
             request_token = dict(parse_qsl(content))
 
@@ -91,26 +91,26 @@ class TwitterNotifier:
         token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret'])
         token.set_verifier(key)
 
-        logger.log('Generating and signing request for an access token using key ' + key, logger.DEBUG)
+        logger.log(u'Generating and signing request for an access token using key ' + key, logger.DEBUG)
 
-        signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()  #@UnusedVariable
+        signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()  # @UnusedVariable
         oauth_consumer = oauth.Consumer(key=self.consumer_key, secret=self.consumer_secret)
-        logger.log('oauth_consumer: ' + str(oauth_consumer), logger.DEBUG)
+        logger.log(u'oauth_consumer: ' + str(oauth_consumer), logger.DEBUG)
         oauth_client = oauth.Client(oauth_consumer, token)
-        logger.log('oauth_client: ' + str(oauth_client), logger.DEBUG)
+        logger.log(u'oauth_client: ' + str(oauth_client), logger.DEBUG)
         resp, content = oauth_client.request(self.ACCESS_TOKEN_URL, method='POST', body='oauth_verifier=%s' % key)
-        logger.log('resp, content: ' + str(resp) + ',' + str(content), logger.DEBUG)
+        logger.log(u'resp, content: ' + str(resp) + ',' + str(content), logger.DEBUG)
 
         access_token = dict(parse_qsl(content))
-        logger.log('access_token: ' + str(access_token), logger.DEBUG)
+        logger.log(u'access_token: ' + str(access_token), logger.DEBUG)
 
-        logger.log('resp[status] = ' + str(resp['status']), logger.DEBUG)
+        logger.log(u'resp[status] = ' + str(resp['status']), logger.DEBUG)
         if resp['status'] != '200':
-            logger.log('The request for a token with did not succeed: ' + str(resp['status']), logger.ERROR)
+            logger.log(u'The request for a token with did not succeed: ' + str(resp['status']), logger.ERROR)
             return False
         else:
-            logger.log('Your Twitter Access Token key: %s' % access_token['oauth_token'], logger.DEBUG)
-            logger.log('Access Token secret: %s' % access_token['oauth_token_secret'], logger.DEBUG)
+            logger.log(u'Your Twitter Access Token key: %s' % access_token['oauth_token'], logger.DEBUG)
+            logger.log(u'Access Token secret: %s' % access_token['oauth_token_secret'], logger.DEBUG)
             sickbeard.TWITTER_USERNAME = access_token['oauth_token']
             sickbeard.TWITTER_PASSWORD = access_token['oauth_token_secret']
             return True
diff --git a/sickbeard/numdict.py b/sickbeard/numdict.py
new file mode 100644
index 0000000000000000000000000000000000000000..8549ba6d20e3c387ed38563d578e7ae499e66170
--- /dev/null
+++ b/sickbeard/numdict.py
@@ -0,0 +1,126 @@
+# coding=utf-8
+
+"""
+class NumDict - A dict with numeric keys
+"""
+
+from collections import MutableMapping
+
+
+class NumDict(MutableMapping):
+    """
+    NumDict() -> new empty dictionary
+
+    NumDict(mapping) -> new dictionary initialized from a mapping object's
+        (key, value) pairs
+
+    NumDict(iterable) -> new dictionary initialized as if via:
+        d = {}
+        for k, v in iterable:
+            d[k] = v
+
+    NumDict(**kwargs) -> TypeError - key words cannot be numeric
+
+    All keys must be numeric or None
+    """
+
+    def __init__(self, iterable=None, **kwargs):
+        self.data = {}
+        iterable = kwargs.pop('dict', None) if iterable is None else iterable
+        if iterable is not None:
+            self.update(iterable)
+        if len(kwargs):
+            self.update(kwargs)
+
+    def __len__(self):
+        return len(self.data)
+
+    def __getitem__(self, key):
+        key = self.numeric(key)
+        if key in self.data:
+            return self.data[key]
+        if hasattr(self.__class__, "__missing__"):
+            # noinspection PyUnresolvedReferences
+            return self.__class__.__missing__(self, key)
+        raise KeyError(key)
+
+    def __setitem__(self, key, item):
+        try:
+            key = self.numeric(key)
+        except KeyError:
+            raise TypeError(key)
+        self.data[key] = item
+
+    def __delitem__(self, key):
+        key = self.numeric(key)
+        del self.data[key]
+
+    def __iter__(self):
+        return iter(self.data)
+
+    def __contains__(self, key):
+        try:
+            key = self.numeric(key)
+            return key in self.data
+        except KeyError:
+            return False
+
+    def __repr__(self):
+        return repr(self.data)
+
+    def has_key(self, key):
+        """
+        DEPRECATED: Check for existence of key
+
+        :param key: A numeric key
+        :return: True if key is found, else False
+        """
+        return key in self
+
+    def copy(self):
+        """
+        Create a copy of a NumDict
+        :return: A copy
+        """
+        if self.__class__ is NumDict:
+            return NumDict(self.data.copy())
+        import copy
+        data = self.data
+        try:
+            self.data = {}
+            c = copy.copy(self)
+        finally:
+            self.data = data
+        c.update(self)
+        return c
+
+    @classmethod
+    def fromkeys(cls, iterable, value=None):
+        """
+        Build a NumDict from a dictionary
+
+        :param iterable:
+        :param value:
+        :return:
+        """
+        d = cls()
+        for key in iterable:
+            key = cls.numeric(key)
+            d[key] = value
+        return d
+
+    @staticmethod
+    def numeric(key):
+        """
+        Converts a key to its numeric representation
+
+        :param key: numeric dict key
+        :raise KeyError: if key can't be converted to an integer
+        :return: a numeric key
+        :rtype: int
+        """
+        try:
+            return int(key)
+        except (TypeError, ValueError):
+            if key is not None:
+                raise KeyError(key)
diff --git a/sickbeard/nzbSplitter.py b/sickbeard/nzbSplitter.py
index 717d6b7e6d52ba6b37a29d0afd6d36b8c98d75d9..5f76e0c413f06354d03657d6d083336c073629a8 100644
--- a/sickbeard/nzbSplitter.py
+++ b/sickbeard/nzbSplitter.py
@@ -76,7 +76,7 @@ def getSeasonNZBs(name, urlData, season):
             xmlns = xmlnsMatch.group(1)
         match = re.search(regex, curFile.get("subject"), re.I)
         if not match:
-            #print curFile.get("subject"), "doesn't match", regex
+            # print curFile.get("subject"), "doesn't match", regex
             continue
         curEp = match.group(1)
         if curEp not in epFiles:
@@ -128,7 +128,7 @@ def splitResult(result):
     :param result: search result object
     :return: False upon failure, a list of episode objects otherwise
     """
-    urlData = helpers.getURL(result.url, session=requests.Session())
+    urlData = helpers.getURL(result.url, session=requests.Session(), needBytes=True)
     if urlData is None:
         logger.log(u"Unable to load url " + result.url + ", can't download season NZB", logger.ERROR)
         return False
diff --git a/sickbeard/nzbget.py b/sickbeard/nzbget.py
index ebc6419c560c0e05b9af0d4ae625be24fcea2463..40f6ddf95e7899731562e592afab72f0db4c7c26 100644
--- a/sickbeard/nzbget.py
+++ b/sickbeard/nzbget.py
@@ -18,20 +18,15 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
 
-
 import httplib
 import datetime
-
-import sickbeard
-
 from base64 import standard_b64encode
 import xmlrpclib
 
+import sickbeard
 from sickbeard.providers.generic import GenericProvider
-
 from sickbeard import logger, helpers
-
-from common import Quality
+from sickbeard.common import Quality
 
 
 def sendNZB(nzb, proper=False):
@@ -46,7 +41,7 @@ def sendNZB(nzb, proper=False):
     category = sickbeard.NZBGET_CATEGORY
     if nzb.show.is_anime:
         category = sickbeard.NZBGET_CATEGORY_ANIME
-    
+
     if sickbeard.NZBGET_USE_HTTPS:
         nzbgetXMLrpc = "https://%(username)s:%(password)s@%(host)s/xmlrpc"
     else:
@@ -73,7 +68,7 @@ def sendNZB(nzb, proper=False):
         return False
 
     except xmlrpclib.ProtocolError, e:
-        if (e.errmsg == "Unauthorized"):
+        if e.errmsg == "Unauthorized":
             logger.log(u"NZBget username or password is incorrect.", logger.ERROR)
         else:
             logger.log(u"Protocol Error: " + e.errmsg, logger.ERROR)
@@ -121,7 +116,7 @@ def sendNZB(nzb, proper=False):
                 if nzb.resultType == "nzb":
                     genProvider = GenericProvider("")
                     data = genProvider.getURL(nzb.url)
-                    if (data == None):
+                    if data == None:
                         return False
                     nzbcontent64 = standard_b64encode(data)
                 nzbget_result = nzbGetRPC.append(nzb.name + ".nzb", category, addToTop, nzbcontent64)
@@ -133,7 +128,7 @@ def sendNZB(nzb, proper=False):
                 nzbget_result = nzbGetRPC.appendurl(nzb.name + ".nzb", category, nzbgetprio, False,
                                                     nzb.url, False, dupekey, dupescore, "score")
         # v13+ has a new combined append method that accepts both (url and content)
-        # also the return value has changed from boolean to integer 
+        # also the return value has changed from boolean to integer
         # (Positive number representing NZBID of the queue item. 0 and negative numbers represent error codes.)
         elif nzbget_version >= 13:
             nzbget_result = True if nzbGetRPC.append(nzb.name + ".nzb", nzbcontent64 if nzbcontent64 is not None else nzb.url,
@@ -153,6 +148,6 @@ def sendNZB(nzb, proper=False):
         else:
             logger.log(u"NZBget could not add %s to the queue" % (nzb.name + ".nzb"), logger.ERROR)
             return False
-    except:
+    except Exception:
         logger.log(u"Connect Error to NZBget: could not add %s to the queue" % (nzb.name + ".nzb"), logger.ERROR)
         return False
diff --git a/sickbeard/postProcessor.py b/sickbeard/postProcessor.py
index 48089573cad7435fa74c8ecb8ec4e8337f3004ce..e66f7c4ec6e248f3451263001b886d4a31f40492 100644
--- a/sickbeard/postProcessor.py
+++ b/sickbeard/postProcessor.py
@@ -366,7 +366,7 @@ class PostProcessor(object):
                 helpers.copyFile(cur_file_path, new_file_path)
                 helpers.chmodAsParent(new_file_path)
             except (IOError, OSError), e:
-                logger.log("Unable to copy file " + cur_file_path + " to " + new_file_path + ": " + ex(e), logger.ERROR)
+                logger.log(u"Unable to copy file " + cur_file_path + " to " + new_file_path + ": " + ex(e), logger.ERROR)
                 raise
 
         self._combined_file_operation(file_path, new_path, new_base_name, associated_files, action=_int_copy,
@@ -514,7 +514,7 @@ class PostProcessor(object):
         if not name:
             return to_return
 
-        logger.log(u"Analyzing name " + repr(name), logger.DEBUG)
+        logger.log(u"Analyzing name " + name, logger.DEBUG)
 
         name = helpers.remove_non_release_groups(helpers.remove_extension(name))
 
@@ -1108,7 +1108,7 @@ class PostProcessor(object):
         # log it to history
         history.logDownload(ep_obj, self.file_path, new_ep_quality, self.release_group, new_ep_version)
 
-        #If any notification fails, don't stop postProcessor
+        # If any notification fails, don't stop postProcessor
         try:
             # send notifications
             notifiers.notify_download(ep_obj._format_pattern('%SN - %Sx%0E - %EN - %QN'))
diff --git a/sickbeard/processTV.py b/sickbeard/processTV.py
index 2b5b7f954ff3d42aa01307d84689b90d80bfb3f4..6e74a64a09d05a8c0160aa5c798279f8e1dd70eb 100644
--- a/sickbeard/processTV.py
+++ b/sickbeard/processTV.py
@@ -28,7 +28,7 @@ from sickbeard import logger
 from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 from sickbeard import common
 from sickbeard import failedProcessor
-from sickrage.helper.encoding import ek
+from sickrage.helper.encoding import ek, ss
 from sickrage.helper.exceptions import EpisodePostProcessingFailedException, ex, FailedPostProcessingFailedException
 
 from unrar2 import RarFile
@@ -44,7 +44,7 @@ import shutil_custom
 shutil.copyfile = shutil_custom.copyfile_custom
 
 
-class ProcessResult:
+class ProcessResult(object):
     def __init__(self):
         self.result = True
         self.output = ''
@@ -127,8 +127,7 @@ def delete_files(processPath, notwantedFiles, result, force=False):
             try:
                 ek(os.chmod, cur_file_path, stat.S_IWRITE)
             except OSError, e:
-                result.output += logHelper(u"Cannot change permissions of " + cur_file_path + ': ' + str(e.strerror),
-                                       logger.DEBUG)
+                result.output += logHelper(u"Cannot change permissions of " + cur_file_path + ': ' + ex(e), logger.DEBUG)
         try:
             ek(os.remove, cur_file_path)
         except OSError, e:
@@ -140,7 +139,7 @@ def logHelper(logMessage, logLevel=logger.INFO):
     return logMessage + u"\n"
 
 
-def processDir(dirName, nzbName=None, process_method=None, force=False, is_priority=None, delete_on=False, failed=False, type="auto"):
+def processDir(dirName, nzbName=None, process_method=None, force=False, is_priority=None, delete_on=False, failed=False, proc_type="auto"):
     """
     Scans through the files in dirName and processes whatever media files it finds
 
@@ -148,7 +147,7 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
     :param nzbName: The NZB name which resulted in this folder being downloaded
     :param force: True to postprocess already postprocessed files
     :param failed: Boolean for whether or not the download failed
-    :param type: Type of postprocessing auto or manual
+    :param proc_type: Type of postprocessing auto or manual
     """
 
     result = ProcessResult()
@@ -174,10 +173,10 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
             logger.DEBUG)
         return result.output
 
-    path, dirs, files = get_path_dir_files(dirName, nzbName, type)
+    path, dirs, files = get_path_dir_files(dirName, nzbName, proc_type)
 
-    files = filter(helpers.notTorNZBFile, files)
-    SyncFiles = filter(helpers.isSyncFile, files)
+    files = [x for x in files if helpers.notTorNZBFile(x)]
+    SyncFiles = [x for x in files if helpers.isSyncFile(x)]
 
     # Don't post process if files are still being synced and option is activated
     if SyncFiles and sickbeard.POSTPONE_IF_SYNC_FILES:
@@ -189,11 +188,11 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
         result.output += logHelper(u"PostProcessing Path: " + path, logger.INFO)
         result.output += logHelper(u"PostProcessing Dirs: " + str(dirs), logger.DEBUG)
 
-        rarFiles = filter(helpers.isRarFile, files)
+        rarFiles = [x for x in files if helpers.isRarFile(x)]
         rarContent = unRAR(path, rarFiles, force, result)
         files += rarContent
-        videoFiles = filter(helpers.isMediaFile, files)
-        videoInRar = filter(helpers.isMediaFile, rarContent)
+        videoFiles = [x for x in files if helpers.isMediaFile(x)]
+        videoInRar = [x for x in rarContent if helpers.isMediaFile(x)]
 
         result.output += logHelper(u"PostProcessing Files: " + str(files), logger.DEBUG)
         result.output += logHelper(u"PostProcessing VideoFiles: " + str(videoFiles), logger.DEBUG)
@@ -209,7 +208,7 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
 
         result.result = True
 
-        #Don't Link media when the media is extracted from a rar in the same path
+        # Don't Link media when the media is extracted from a rar in the same path
         if process_method in ('hardlink', 'symlink') and videoInRar:
             process_media(path, videoInRar, nzbName, 'move', force, is_priority, result)
             delete_files(path, rarContent, result)
@@ -229,35 +228,35 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
         result.output += logHelper(u"Sync Files: " + str(SyncFiles) + " in path: " + path)
         result.missedfiles.append(path + " : Syncfiles found")
 
-    #Process Video File in all TV Subdir
-    for dir in [x for x in dirs if validateDir(path, x, nzbNameOriginal, failed, result)]:
+    # Process Video File in all TV Subdir
+    for curDir in [x for x in dirs if validateDir(path, x, nzbNameOriginal, failed, result)]:
 
         result.result = True
 
-        for processPath, processDir, fileList in ek(os.walk, ek(os.path.join, path, dir), topdown=False):
+        for processPath, _, fileList in ek(os.walk, ek(os.path.join, path, curDir), topdown=False):
 
-            if (not validateDir(path, processPath, nzbNameOriginal, failed, result)):
+            if not validateDir(path, processPath, nzbNameOriginal, failed, result):
                 continue
 
             postpone = False
 
-            SyncFiles = filter(helpers.isSyncFile, fileList)
+            SyncFiles = [x for x in fileList if helpers.isSyncFile(x)]
 
             # Don't post process if files are still being synced and option is activated
             if SyncFiles and sickbeard.POSTPONE_IF_SYNC_FILES:
                 postpone = True
 
             if not postpone:
-                rarFiles = filter(helpers.isRarFile, fileList)
+                rarFiles = [x for x in fileList if helpers.isRarFile(x)]
                 rarContent = unRAR(processPath, rarFiles, force, result)
                 fileList = set(fileList + rarContent)
-                videoFiles = filter(helpers.isMediaFile, fileList)
-                videoInRar = filter(helpers.isMediaFile, rarContent)
+                videoFiles = [x for x in fileList if helpers.isMediaFile(x)]
+                videoInRar = [x for x in rarContent if helpers.isMediaFile(x)]
                 notwantedFiles = [x for x in fileList if x not in videoFiles]
                 if notwantedFiles:
                     result.output += logHelper(u"Found unwanted files: " + str(notwantedFiles), logger.DEBUG)
 
-                #Don't Link media when the media is extracted from a rar in the same path
+                # Don't Link media when the media is extracted from a rar in the same path
                 if process_method in ('hardlink', 'symlink') and videoInRar:
                     process_media(processPath, videoInRar, nzbName, 'move', force, is_priority, result)
                     process_media(processPath, set(videoFiles) - set(videoInRar), nzbName, process_method, force,
@@ -271,16 +270,15 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior
                 else:
                     process_media(processPath, videoFiles, nzbName, process_method, force, is_priority, result)
 
-                    #Delete all file not needed
+                    # Delete all file not needed
                     if process_method != "move" or not result.result \
-                            or (type == "manual" and not delete_on):  #Avoid to delete files if is Manual PostProcessing
+                            or (proc_type == "manual" and not delete_on):  # Avoid to delete files if is Manual PostProcessing
                         continue
 
                     delete_files(processPath, notwantedFiles, result)
 
-                    if (not sickbeard.NO_DELETE or type == "manual") and process_method == "move" and \
-                                    ek(os.path.normpath, processPath) != ek(os.path.normpath,
-                                                                                  sickbeard.TV_DOWNLOAD_DIR):
+                    if (not sickbeard.NO_DELETE or proc_type == "manual") and process_method == "move" and \
+                        ek(os.path.normpath, processPath) != ek(os.path.normpath, sickbeard.TV_DOWNLOAD_DIR):
                         if delete_folder(processPath, check_empty=True):
                             result.output += logHelper(u"Deleted folder: " + processPath, logger.DEBUG)
             else:
@@ -325,12 +323,10 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result):
         result.output += logHelper(u"The directory name indicates it failed to extract.", logger.DEBUG)
         failed = True
     elif folder_name.startswith('_UNDERSIZED_'):
-        result.output += logHelper(u"The directory name indicates that it was previously rejected for being undersized.",
-                               logger.DEBUG)
+        result.output += logHelper(u"The directory name indicates that it was previously rejected for being undersized.", logger.DEBUG)
         failed = True
     elif folder_name.upper().startswith('_UNPACK'):
-        result.output += logHelper(u"The directory name indicates that this release is in the process of being unpacked.",
-                               logger.DEBUG)
+        result.output += logHelper(u"The directory name indicates that this release is in the process of being unpacked.", logger.DEBUG)
         result.missedfiles.append(dirName + " : Being unpacked")
         return False
 
@@ -349,9 +345,9 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result):
     sqlResults = myDB.select("SELECT * FROM tv_shows")
 
     for sqlShow in sqlResults:
-        if dirName.lower().startswith(
-                        ek(os.path.realpath, sqlShow["location"]).lower() + os.sep) or dirName.lower() == ek(
-                os.path.realpath, sqlShow["location"]).lower():
+        if dirName.lower().startswith(ek(os.path.realpath, sqlShow["location"]).lower() + os.sep) or \
+            dirName.lower() == ek(os.path.realpath, sqlShow["location"]).lower():
+
             result.output += logHelper(
                 u"Cannot process an episode that's already been moved to its show dir, skipping " + dirName,
                 logger.WARNING)
@@ -360,14 +356,14 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result):
     # Get the videofile list for the next checks
     allFiles = []
     allDirs = []
-    for processPath, processDir, fileList in ek(os.walk, ek(os.path.join, path, dirName), topdown=False):
-        allDirs += processDir
+    for _, processdir, fileList in ek(os.walk, ek(os.path.join, path, dirName), topdown=False):
+        allDirs += processdir
         allFiles += fileList
 
-    videoFiles = filter(helpers.isMediaFile, allFiles)
+    videoFiles = [x for x in allFiles if helpers.isMediaFile(x)]
     allDirs.append(dirName)
 
-    #check if the dir have at least one tv video file
+    # check if the dir have at least one tv video file
     for video in videoFiles:
         try:
             NameParser().parse(video, cache_result=False)
@@ -375,16 +371,16 @@ def validateDir(path, dirName, nzbNameOriginal, failed, result):
         except (InvalidNameException, InvalidShowException):
             pass
 
-    for dir in allDirs:
+    for proc_dir in allDirs:
         try:
-            NameParser().parse(dir, cache_result=False)
+            NameParser().parse(proc_dir, cache_result=False)
             return True
         except (InvalidNameException, InvalidShowException):
             pass
 
     if sickbeard.UNPACK:
-        #Search for packed release
-        packedFiles = filter(helpers.isRarFile, allFiles)
+        # Search for packed release
+        packedFiles = [x for x in allFiles if helpers.isRarFile(x)]
 
         for packed in packedFiles:
             try:
@@ -494,35 +490,35 @@ def already_postprocessed(dirName, videofile, force, result):
     myDB = db.DBConnection()
     sqlResult = myDB.select("SELECT * FROM tv_episodes WHERE release_name = ?", [dirName])
     if sqlResult:
-        #result.output += logHelper(u"You're trying to post process a dir that's already been processed, skipping", logger.DEBUG)
+        # result.output += logHelper(u"You're trying to post process a dir that's already been processed, skipping", logger.DEBUG)
         return True
 
     else:
         sqlResult = myDB.select("SELECT * FROM tv_episodes WHERE release_name = ?", [videofile.rpartition('.')[0]])
         if sqlResult:
-            #result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG)
+            # result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG)
             return True
 
-        #Needed if we have downloaded the same episode @ different quality
-        #But we need to make sure we check the history of the episode we're going to PP, and not others
+        # Needed if we have downloaded the same episode @ different quality
+        # But we need to make sure we check the history of the episode we're going to PP, and not others
         np = NameParser(dirName, tryIndexers=True)
-        try: #if it fails to find any info (because we're doing an unparsable folder (like the TV root dir) it will throw an exception, which we want to ignore
+        try:  # if it fails to find any info (because we're doing an unparsable folder (like the TV root dir) it will throw an exception, which we want to ignore
             parse_result = np.parse(dirName)
-        except: #ignore the exception, because we kind of expected it, but create parse_result anyway so we can perform a check on it.
+        except Exception:  # ignore the exception, because we kind of expected it, but create parse_result anyway so we can perform a check on it.
             parse_result = False
 
 
-        search_sql = "SELECT tv_episodes.indexerid, history.resource FROM tv_episodes INNER JOIN history ON history.showid=tv_episodes.showid" #This part is always the same
+        search_sql = "SELECT tv_episodes.indexerid, history.resource FROM tv_episodes INNER JOIN history ON history.showid=tv_episodes.showid"  # This part is always the same
         search_sql += " WHERE history.season=tv_episodes.season and history.episode=tv_episodes.episode"
-        #If we find a showid, a season number, and one or more episode numbers then we need to use those in the query
+        # If we find a showid, a season number, and one or more episode numbers then we need to use those in the query
         if parse_result and (parse_result.show.indexerid and parse_result.episode_numbers and parse_result.season_number):
             search_sql += " and tv_episodes.showid = '" + str(parse_result.show.indexerid) + "' and tv_episodes.season = '" + str(parse_result.season_number) + "' and tv_episodes.episode = '" + str(parse_result.episode_numbers[0]) + "'"
 
         search_sql += " and tv_episodes.status IN (" + ",".join([str(x) for x in common.Quality.DOWNLOADED]) + ")"
         search_sql += " and history.resource LIKE ?"
-        sqlResult = myDB.select(search_sql, [u'%' + videofile])
+        sqlResult = myDB.select(search_sql, ['%' + videofile])
         if sqlResult:
-            #result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG)
+            # result.output += logHelper(u"You're trying to post process a video that's already been processed, skipping", logger.DEBUG)
             return True
 
     return False
@@ -563,26 +559,25 @@ def process_media(processPath, videoFiles, nzbName, process_method, force, is_pr
         if result.result:
             result.output += logHelper(u"Processing succeeded for " + cur_video_file_path)
         else:
-            result.output += logHelper(u"Processing failed for " + cur_video_file_path + ": " + process_fail_message,
-                                   logger.WARNING)
+            result.output += logHelper(u"Processing failed for " + cur_video_file_path + ": " + process_fail_message, logger.WARNING)
             result.missedfiles.append(cur_video_file_path + " : Processing failed: " + process_fail_message)
             result.aggresult = False
 
 
-def get_path_dir_files(dirName, nzbName, type):
+def get_path_dir_files(dirName, nzbName, proc_type):
     """
     Get files in a path
 
     :param dirName: Directory to start in
     :param nzbName: NZB file, if present
-    :param type: auto/manual
+    :param proc_type: auto/manual
     :return: a tuple of (path,dirs,files)
     """
     path = ""
     dirs = []
     files = []
 
-    if dirName == sickbeard.TV_DOWNLOAD_DIR and not nzbName or type == "manual":  # Scheduled Post Processing Active
+    if dirName == sickbeard.TV_DOWNLOAD_DIR and not nzbName or proc_type == "manual":  # Scheduled Post Processing Active
         # Get at first all the subdir in the dirName
         for path, dirs, files in ek(os.walk, dirName):
             break
diff --git a/sickbeard/properFinder.py b/sickbeard/properFinder.py
index 4c7e8e2c779938abb733ca0a747701d05d9b4ee4..f792b77b0860dc8e7cad5c3f484716816ab7d12c 100644
--- a/sickbeard/properFinder.py
+++ b/sickbeard/properFinder.py
@@ -189,12 +189,12 @@ class ProperFinder:
                 oldRelease_group = (sqlResults[0]["release_group"])
 
                 if oldVersion > -1 and oldVersion < bestResult.version:
-                    logger.log("Found new anime v" + str(bestResult.version) + " to replace existing v" + str(oldVersion))
+                    logger.log(u"Found new anime v" + str(bestResult.version) + " to replace existing v" + str(oldVersion))
                 else:
                     continue
 
                 if oldRelease_group != bestResult.release_group:
-                    logger.log("Skipping proper from release group: " + bestResult.release_group + ", does not match existing release group: " + oldRelease_group)
+                    logger.log(u"Skipping proper from release group: " + bestResult.release_group + ", does not match existing release group: " + oldRelease_group)
                     continue
 
             # if the show is in our list and there hasn't been a proper already added for that particular episode then add it to our list of propers
diff --git a/sickbeard/providers/__init__.py b/sickbeard/providers/__init__.py
index 781f76169ad50c6f293a05807607556434b592e4..4c1ef35f20de77103780ed12b28f30181129b652 100644
--- a/sickbeard/providers/__init__.py
+++ b/sickbeard/providers/__init__.py
@@ -18,7 +18,7 @@
 
 from sickbeard.providers import btn, newznab, womble, thepiratebay, torrentleech, kat, iptorrents, torrentz, \
     omgwtfnzbs, scc, hdtorrents, torrentday, hdbits, hounddawgs, nextgen, speedcd, nyaatorrents, animenzb, bluetigers, cpasbien, fnt, xthor, torrentbytes, \
-    frenchtorrentdb, freshontv, titansoftv, libertalia, morethantv, bitsoup, t411, tokyotoshokan, shazbat, rarbg, alpharatio, tntvillage, binsearch, torrentproject, extratorrent, \
+    freshontv, titansoftv, libertalia, morethantv, bitsoup, t411, tokyotoshokan, shazbat, rarbg, alpharatio, tntvillage, binsearch, torrentproject, extratorrent, \
     scenetime, btdigg, strike, transmitthenet, tvchaosuk, bitcannon, pretome, gftracker, hdspace, newpct
 
 __all__ = ['womble',
@@ -38,7 +38,6 @@ __all__ = ['womble',
            'nyaatorrents',
            'animenzb',
            'torrentbytes',
-           'frenchtorrentdb',
            'freshontv',
            'titansoftv',
            'libertalia',
@@ -217,7 +216,7 @@ def makeTorrentRssProvider(configString):
 
     try:
         torrentRss = sys.modules['sickbeard.providers.rsstorrent']
-    except:
+    except Exception:
         return
 
     newProvider = torrentRss.TorrentRssProvider(name, url, cookies, titleTAG, search_mode, search_fallback, enable_daily,
@@ -228,7 +227,7 @@ def makeTorrentRssProvider(configString):
 
 
 def getDefaultNewznabProviders():
-    #name|url|key|catIDs|enabled|search_mode|search_fallback|enable_daily|enable_backlog
+    # name|url|key|catIDs|enabled|search_mode|search_fallback|enable_daily|enable_backlog
     return 'NZB.Cat|https://nzb.cat/||5030,5040,5010|0|eponly|1|1|1!!!' + \
            'NZBGeek|https://api.nzbgeek.info/||5030,5040|0|eponly|0|0|0!!!' + \
            'NZBs.org|https://nzbs.org/||5030,5040|0|eponly|0|0|0!!!' + \
@@ -243,10 +242,10 @@ def getProviderModule(name):
         raise Exception("Can't find " + prefix + name + " in " + "Providers")
 
 
-def getProviderClass(id):
+def getProviderClass(provider_id):
     providerMatch = [x for x in
                      sickbeard.providerList + sickbeard.newznabProviderList + sickbeard.torrentRssProviderList if
-                     x.getID() == id]
+                     x.getID() == provider_id]
 
     if len(providerMatch) != 1:
         return None
diff --git a/sickbeard/providers/alpharatio.py b/sickbeard/providers/alpharatio.py
index 6ae9a842aef480583bae9bc4cabd5c397cb392c0..300dccdb984ec39438464a121c53a70487b0fa03 100644
--- a/sickbeard/providers/alpharatio.py
+++ b/sickbeard/providers/alpharatio.py
@@ -53,9 +53,6 @@ class AlphaRatioProvider(generic.TorrentProvider):
 
         self.cache = AlphaRatioCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
         login_params = {'username': self.username,
                         'password': self.password,
@@ -86,7 +83,7 @@ class AlphaRatioProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (search_string, self.catagories)
@@ -101,7 +98,7 @@ class AlphaRatioProvider(generic.TorrentProvider):
                         torrent_table = html.find('table', attrs={'id': 'torrent_table'})
                         torrent_rows = torrent_table.find_all('tr') if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrent_rows) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -116,7 +113,7 @@ class AlphaRatioProvider(generic.TorrentProvider):
                                 download_url = self.urls['download'] % (url['href'])
                                 seeders = cells[len(cells)-2].contents[0]
                                 leechers = cells[len(cells)-1].contents[0]
-                                #FIXME
+                                # FIXME
                                 size = -1
                             except (AttributeError, TypeError):
                                 continue
@@ -124,22 +121,22 @@ class AlphaRatioProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
 
-                except Exception, e:
+                except Exception:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.WARNING)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/animenzb.py b/sickbeard/providers/animenzb.py
index 5a384a6221dc28a50b377906db6eb97decc03692..ae122eeb9844d530e8c1565ebb797abd4fb9a8ce 100644
--- a/sickbeard/providers/animenzb.py
+++ b/sickbeard/providers/animenzb.py
@@ -46,9 +46,6 @@ class animenzb(generic.NZBProvider):
 
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _get_season_search_strings(self, ep_obj):
         return [x for x in show_name_helpers.makeSceneSeasonSearchString(self.show, ep_obj)]
 
@@ -71,14 +68,14 @@ class animenzb(generic.NZBProvider):
         searchURL = self.url + "rss?" + urllib.urlencode(params)
         logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
         results = []
-        for curItem in self.cache.getRSSFeed(searchURL, items=['entries'])['entries'] or []:
+        for curItem in self.cache.getRSSFeed(searchURL)['entries'] or []:
             (title, url) = self._get_title_and_url(curItem)
 
             if title and url:
                 results.append(curItem)
                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
-        #For each search mode sort all the items by seeders if available if available
+        # For each search mode sort all the items by seeders if available if available
         results.sort(key=lambda tup: tup[0], reverse=True)
 
         return results
diff --git a/sickbeard/providers/binsearch.py b/sickbeard/providers/binsearch.py
index f320fc6b654f5e2d3e3f516201d30852c3eb8461..c71d6e3123cb63f09dff32b5806b8b660eb326e7 100644
--- a/sickbeard/providers/binsearch.py
+++ b/sickbeard/providers/binsearch.py
@@ -18,7 +18,7 @@ import urllib
 import re
 
 
-import generic
+from sickbeard.providers import generic
 
 from sickbeard import logger
 from sickbeard import tvcache
@@ -32,8 +32,6 @@ class BinSearchProvider(generic.NZBProvider):
         self.urls = {'base_url': 'https://www.binsearch.info/'}
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
 
 class BinSearchCache(tvcache.TVCache):
     def __init__(self, provider_obj):
@@ -44,13 +42,13 @@ class BinSearchCache(tvcache.TVCache):
         # compile and save our regular expressions
 
         # this pulls the title from the URL in the description
-        self.descTitleStart = re.compile('^.*https?://www\.binsearch\.info/.b=')
+        self.descTitleStart = re.compile(r'^.*https?://www\.binsearch\.info/.b=')
         self.descTitleEnd = re.compile('&amp;.*$')
 
         # these clean up the horrible mess of a title if the above fail
         self.titleCleaners = [
-            re.compile('.?yEnc.?\(\d+/\d+\)$'),
-            re.compile(' \[\d+/\d+\] '),
+            re.compile(r'.?yEnc.?\(\d+/\d+\)$'),
+            re.compile(r' \[\d+/\d+\] '),
         ]
 
     def _get_title_and_url(self, item):
@@ -94,9 +92,9 @@ class BinSearchCache(tvcache.TVCache):
         self.setLastUpdate()
 
         cl = []
-        for group in ['alt.binaries.boneless','alt.binaries.misc','alt.binaries.hdtv','alt.binaries.hdtv.x264','alt.binaries.tv','alt.binaries.tvseries','alt.binaries.teevee']:
+        for group in ['alt.binaries.hdtv', 'alt.binaries.hdtv.x264', 'alt.binaries.tv', 'alt.binaries.tvseries', 'alt.binaries.teevee']:
             url = self.provider.url + 'rss.php?'
-            urlArgs = {'max': 1000,'g': group}
+            urlArgs = {'max': 1000, 'g': group}
 
             url += urllib.urlencode(urlArgs)
 
diff --git a/sickbeard/providers/bitcannon.py b/sickbeard/providers/bitcannon.py
index 1be697e4db88f7b6176dff1c54d49ef81d8f19bb..54ea2276879e6a796187d287a8b9addf0ce57d7a 100644
--- a/sickbeard/providers/bitcannon.py
+++ b/sickbeard/providers/bitcannon.py
@@ -44,9 +44,6 @@ class BitCannonProvider(generic.TorrentProvider):
             'trackers': self.url + 'stats',
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
@@ -76,9 +73,9 @@ class BitCannonProvider(generic.TorrentProvider):
                     leechers = swarm.get(u'Leechers', 0)
                     size = item.get(u'Size', -1)
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
@@ -86,12 +83,12 @@ class BitCannonProvider(generic.TorrentProvider):
                     download_url = 'magnet:?xt=urn:btih:%s&dn=%s&tr=%s' % (info_hash, quote_plus(title.encode('utf-8')), u'&tr='.join([quote_plus(x.encode('utf-8')) for x in trackers]))
 
                     item = title, download_url, size, seeders, leechers
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
@@ -112,7 +109,7 @@ class BitCannonCache(tvcache.TVCache):
 
     def _getRSSData(self):
         return {'entries': []}
-        #search_strings = {'RSS': ['']}
-        #return {'entries': self.provider._doSearch(search_strings)}
+        # search_strings = {'RSS': ['']}
+        # return {'entries': self.provider._doSearch(search_strings)}
 
 provider = BitCannonProvider()
diff --git a/sickbeard/providers/bitsoup.py b/sickbeard/providers/bitsoup.py
index 0867cacb08736d4492406983f831f6f5ea5e6a56..162f7b3bc1fb63f8c236a443f5b28f2b7a4c9faf 100644
--- a/sickbeard/providers/bitsoup.py
+++ b/sickbeard/providers/bitsoup.py
@@ -52,9 +52,6 @@ class BitSoupProvider(generic.TorrentProvider):
             "c42": 1, "c45": 1, "c49": 1, "c7": 1
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
         if not self.username or not self.password:
             logger.log(u"Invalid username or password. Check your settings", logger.WARNING)
@@ -92,7 +89,7 @@ class BitSoupProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 self.search_params['search'] = search_string
@@ -106,7 +103,7 @@ class BitSoupProvider(generic.TorrentProvider):
                         torrent_table = html.find('table', attrs={'class': 'koptekst'})
                         torrent_rows = torrent_table.find_all('tr') if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrent_rows) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -121,7 +118,7 @@ class BitSoupProvider(generic.TorrentProvider):
                                 title = link.getText()
                                 seeders = int(cells[10].getText())
                                 leechers = int(cells[11].getText())
-                                #FIXME
+                                # FIXME
                                 size = -1
                             except (AttributeError, TypeError):
                                 continue
@@ -129,22 +126,22 @@ class BitSoupProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                                #Filter unseeded torrent
+                                # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
 
-                except Exception, e:
+                except Exception:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.WARNING)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/bluetigers.py b/sickbeard/providers/bluetigers.py
index 98039041a35fa10528dda0e6abc06677c3c7b130..4c431edac135f07eee683b7782df652feda87182 100644
--- a/sickbeard/providers/bluetigers.py
+++ b/sickbeard/providers/bluetigers.py
@@ -56,9 +56,6 @@ class BLUETIGERSProvider(generic.TorrentProvider):
 
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
             return True
@@ -91,7 +88,7 @@ class BLUETIGERSProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 self.search_params['search'] = search_string
@@ -113,7 +110,7 @@ class BLUETIGERSProvider(generic.TorrentProvider):
                                 title = link.text
                                 download_url = self.urls['base_url'] + "/" + link['href']
                                 download_url = download_url.replace("torrents-details", "download")
-                                #FIXME
+                                # FIXME
                                 size = -1
                                 seeders = 1
                                 leechers = 0
@@ -121,14 +118,14 @@ class BLUETIGERSProvider(generic.TorrentProvider):
                                 if not title or not download_url:
                                     continue
 
-                                #Filter unseeded torrent
-                                #if seeders < self.minseed or leechers < self.minleech:
-                                #    if mode != 'RSS':
+                                # Filter unseeded torrent
+                                # if seeders < self.minseed or leechers < self.minleech:
+                                #    if mode is not 'RSS':
                                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 #    continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
@@ -136,7 +133,7 @@ class BLUETIGERSProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/btdigg.py b/sickbeard/providers/btdigg.py
index 648f8612ce175113d3bfd3445f2211cb82aa57ee..70ee530ed0ef56819f98e85d805f3d43fcdf3140 100644
--- a/sickbeard/providers/btdigg.py
+++ b/sickbeard/providers/btdigg.py
@@ -1,7 +1,7 @@
 # Author: Jodi Jones <venom@gen-x.co.nz>
 # URL: http://code.google.com/p/sickbeard/
 #
-#Ported to sickrage by: matigonkas
+# Ported to sickrage by: matigonkas
 #
 # This file is part of SickRage.
 #
@@ -38,9 +38,6 @@ class BTDIGGProvider(generic.TorrentProvider):
 
         self.cache = BTDiggCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
@@ -50,7 +47,7 @@ class BTDIGGProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s" % search_string, logger.DEBUG)
 
                 searchURL = self.urls['api'] + "api/private-341ada3245790954/s02?q=" + search_string + "&p=0&order=1"
@@ -58,7 +55,7 @@ class BTDIGGProvider(generic.TorrentProvider):
 
                 jdata = self.getURL(searchURL, json=True)
                 if not jdata:
-                    logger.log("No data returned to be parsed!!!")
+                    logger.log(u"No data returned to be parsed!!!")
                     return []
 
                 for torrent in jdata:
@@ -66,26 +63,26 @@ class BTDIGGProvider(generic.TorrentProvider):
                         title = torrent['name']
                         download_url = torrent['magnet']
                         size = torrent['size']
-                        #FIXME
+                        # FIXME
                         seeders = 1
                         leechers = 0
 
                         if not all([title, download_url]):
                             continue
 
-                        #Filter unseeded torrent
-                        #if seeders < self.minseed or leechers < self.minleech:
-                        #    if mode != 'RSS':
+                        # Filter unseeded torrent
+                        # if seeders < self.minseed or leechers < self.minleech:
+                        #    if mode is not 'RSS':
                         #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         #    continue
 
                         item = title, download_url, size, seeders, leechers
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result: %s" % title, logger.DEBUG)
 
                         items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/btn.py b/sickbeard/providers/btn.py
index 6647c38167d1fa02e82996c864911393b72466e5..6b3b767289e6ea00e8d6e80c2d7f97cf65274513 100644
--- a/sickbeard/providers/btn.py
+++ b/sickbeard/providers/btn.py
@@ -52,9 +52,6 @@ class BTNProvider(generic.TorrentProvider):
 
         self.url = self.urls['website']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
         if not self.api_key:
             logger.log(u"Invalid api key. Check your settings", logger.WARNING)
@@ -91,7 +88,7 @@ class BTNProvider(generic.TorrentProvider):
 
         parsedJSON = self._api_call(apikey, params)
         if not parsedJSON:
-            logger.log("No data returned from provider", logger.DEBUG)
+            logger.log(u"No data returned from provider", logger.DEBUG)
             return results
 
         if self._checkAuthFromData(parsedJSON):
@@ -128,7 +125,7 @@ class BTNProvider(generic.TorrentProvider):
                     logger.log(u"Found result: %s " % title, logger.DEBUG)
                     results.append(torrent_info)
 
-        #FIXME SORT RESULTS
+        # FIXME SORT RESULTS
         return results
 
     def _api_call(self, apikey, params={}, results_per_page=1000, offset=0):
diff --git a/sickbeard/providers/cpasbien.py b/sickbeard/providers/cpasbien.py
index 7d80b003f7eec6dbcbb9d933103adf49888fcd89..67641af0006547fd78cb73d998bf3508d14bd042 100644
--- a/sickbeard/providers/cpasbien.py
+++ b/sickbeard/providers/cpasbien.py
@@ -40,9 +40,6 @@ class CpasbienProvider(generic.TorrentProvider):
 
         self.cache = CpasbienCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
@@ -52,7 +49,7 @@ class CpasbienProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.url + '/recherche/'+search_string.replace('.', '-') + '.html'
@@ -85,14 +82,14 @@ class CpasbienProvider(generic.TorrentProvider):
                                 title = link.text.lower().strip()
                                 pageURL = link['href']
 
-                                #downloadTorrentLink = torrentSoup.find("a", title.startswith('Cliquer'))
+                                # downloadTorrentLink = torrentSoup.find("a", title.startswith('Cliquer'))
                                 tmp = pageURL.split('/')[-1].replace('.html', '.torrent')
 
                                 downloadTorrentLink = ('http://www.cpasbien.io/telechargement/%s' % tmp)
 
                                 if downloadTorrentLink:
                                     download_url = downloadTorrentLink
-                                    #FIXME
+                                    # FIXME
                                     size = -1
                                     seeders = 1
                                     leechers = 0
@@ -104,7 +101,7 @@ class CpasbienProvider(generic.TorrentProvider):
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
@@ -112,7 +109,7 @@ class CpasbienProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
@@ -130,7 +127,7 @@ class CpasbienCache(tvcache.TVCache):
         self.minTime = 30
 
     def _getRSSData(self):
-        #search_strings = {'RSS': ['']}
+        # search_strings = {'RSS': ['']}
         return {'entries': {}}
 
 provider = CpasbienProvider()
diff --git a/sickbeard/providers/extratorrent.py b/sickbeard/providers/extratorrent.py
index 2549d82763e5aa91ef46ef3d29bfce14fa145bd0..d16cccb75180c752bf8fccc6c906c176f44fdcde 100644
--- a/sickbeard/providers/extratorrent.py
+++ b/sickbeard/providers/extratorrent.py
@@ -19,7 +19,6 @@
 import re
 import traceback
 import xmltodict
-import HTMLParser
 from xml.parsers.expat import ExpatError
 
 from sickbeard import logger
@@ -50,9 +49,6 @@ class ExtraTorrentProvider(generic.TorrentProvider):
         self.headers.update({'User-Agent': USER_AGENT})
         self.search_params = {'cid': 8}
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
@@ -62,22 +58,22 @@ class ExtraTorrentProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 try:
-                    self.search_params.update({'type': ('search', 'rss')[mode == 'RSS'], 'search': search_string})
+                    self.search_params.update({'type': ('search', 'rss')[mode is 'RSS'], 'search': search_string})
                     data = self.getURL(self.urls['rss'], params=self.search_params)
                     if not data:
-                        logger.log("No data returned from provider", logger.DEBUG)
+                        logger.log(u"No data returned from provider", logger.DEBUG)
                         continue
 
                     if not data.startswith('<?xml'):
-                        logger.log(u'Expected xml but got something else, is your proxy failing?', logger.INFO)
+                        logger.log(u'Expected xml but got something else, is your mirror failing?', logger.INFO)
                         continue
 
                     try:
-                        data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data.encode('utf-8')).decode('utf-8').replace('&', '&amp;'))
+                        data = xmltodict.parse(data)
                     except ExpatError:
                         logger.log(u"Failed parsing provider. Traceback: %r\n%r" % (traceback.format_exc(), data), logger.ERROR)
                         continue
@@ -101,14 +97,14 @@ class ExtraTorrentProvider(generic.TorrentProvider):
                         if not all([title, download_url]):
                             continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                             continue
 
                         item = title, download_url, size, seeders, leechers
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                         items[mode].append(item)
@@ -116,7 +112,7 @@ class ExtraTorrentProvider(generic.TorrentProvider):
                 except (AttributeError, TypeError, KeyError, ValueError):
                     logger.log(u"Failed parsing provider. Traceback: %r" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/fnt.py b/sickbeard/providers/fnt.py
index 4d15496433a3115d5f089fb8592195a5b1b59d6f..52f83e8a32985ffb9ca1129eb9efc874ea2f8fb7 100644
--- a/sickbeard/providers/fnt.py
+++ b/sickbeard/providers/fnt.py
@@ -54,9 +54,6 @@ class FNTProvider(generic.TorrentProvider):
             "visible": 1, "freeleech": 0, "nuke": 1, "3D": 0, "sort": "size", "order": "desc"
             }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
@@ -93,7 +90,7 @@ class FNTProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 self.search_params['recherche'] = search_string
@@ -127,7 +124,7 @@ class FNTProvider(generic.TorrentProvider):
                                         detailseedleech = link['mtcontent']
                                         seeders = int(detailseedleech.split("<font color='#00b72e'>")[1].split("</font>")[0])
                                         leechers = int(detailseedleech.split("<font color='red'>")[1].split("</font>")[0])
-                                        #FIXME
+                                        # FIXME
                                         size = -1
                                     except Exception:
                                         logger.log(u"Unable to parse torrent id & seeders & leechers. Traceback: %s " % traceback.format_exc(), logger.DEBUG)
@@ -136,14 +133,14 @@ class FNTProvider(generic.TorrentProvider):
                                     if not all([title, download_url]):
                                         continue
 
-                                    #Filter unseeded torrent
+                                    # Filter unseeded torrent
                                     if seeders < self.minseed or leechers < self.minleech:
-                                        if mode != 'RSS':
+                                        if mode is not 'RSS':
                                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                         continue
 
                                     item = title, download_url, size, seeders, leechers
-                                    if mode != 'RSS':
+                                    if mode is not 'RSS':
                                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                     items[mode].append(item)
@@ -151,7 +148,7 @@ class FNTProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/frenchtorrentdb.py b/sickbeard/providers/frenchtorrentdb.py
deleted file mode 100644
index 90e1e2e00adf6d3c568ee31421b27ac25594d0d7..0000000000000000000000000000000000000000
--- a/sickbeard/providers/frenchtorrentdb.py
+++ /dev/null
@@ -1,203 +0,0 @@
-# Authors: Yannick Croissant <yannick.croissant@gmail.com>
-#          adaur <adaur.underground@gmail.com>
-# URL: http://code.google.com/p/sickbeard/
-#
-# This file is part of SickRage.
-#
-# Sick Beard 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 3 of the License, or
-# (at your option) any later version.
-#
-# Sick Beard 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 Sick Beard.  If not, see <http://www.gnu.org/licenses/>.
-
-import re
-from sickbeard.providers import generic
-
-from sickbeard.bs4_parser import BS4Parser
-from sickbeard import logger
-from sickbeard import tvcache
-
-class FrenchTorrentDBProvider(generic.TorrentProvider):
-
-    def __init__(self):
-
-        generic.TorrentProvider.__init__(self, "FrenchTorrentDB")
-
-        self.supportsBacklog = True
-
-
-        self.urls = {
-            'base_url': 'http://www.frenchtorrentdb.com',
-            }
-
-        self.url = self.urls['base_url']
-        self.search_params = {
-            "adv_cat%5Bs%5D%5B1%5D": 95,
-            "adv_cat%5Bs%5D%5B2%5D": 190,
-            "adv_cat%5Bs%5D%5B3%5D": 101,
-            "adv_cat%5Bs%5D%5B4%5D": 191,
-            "adv_cat%5Bs%5D%5B5%5D": 197,
-            "adv_cat%5Bs%5D%5B7%5D": 199,
-            "adv_cat%5Bs%5D%5B8%5D": 201,
-            "adv_cat%5Bs%5D%5B9%5D": 128,
-            "section": "TORRENTS",
-            "exact": 1,
-            "submit": "GO"
-            }
-
-        self.username = None
-        self.password = None
-        self.ratio = None
-        self.minseed = None
-        self.minleech = None
-
-    def isEnabled(self):
-        return self.enabled
-
-    def _doLogin(self):
-
-        params = {
-            "section": "LOGIN",
-            "challenge": 1
-        }
-
-        data = self.getURL(self.url, params=params, json=True)
-
-        post_data = {
-            'username'    : self.username,
-            'password'    : self.password,
-            'secure_login': self._getSecureLogin(data['challenge']),
-            'hash'        : data['hash']
-            }
-
-        params.pop('challenge')
-        params['ajax'] = 1
-        self.getURL(self.url, params=params, post_data=post_data)
-
-        return True
-
-    def _getSecureLogin(self, challenges):
-
-        def fromCharCode(*args):
-            return ''.join(map(unichr, args))
-
-        def decodeString(p, a, c, k, e, d):
-            a = int(a)
-            c = int(c)
-            def e(c):
-                if c < a:
-                    f = ''
-                else:
-                    f = e(c / a)
-                return f + fromCharCode(c % a + 161)
-            while c:
-                c -= 1
-                if k[c]:
-                    regex = re.compile(e(c))
-                    p = re.sub(regex, k[c], p)
-            return p
-
-        def decodeChallenge(challenge):
-            regexGetArgs = re.compile('\'([^\']+)\',([0-9]+),([0-9]+),\'([^\']+)\'')
-            regexIsEncoded = re.compile('decodeURIComponent')
-            regexUnquote = re.compile('\'')
-            if challenge == 'a':
-                return '05f'
-            if re.match(regexIsEncoded, challenge) == None:
-                return re.sub(regexUnquote, '', challenge)
-            args = re.findall(regexGetArgs, challenge)
-            decoded = decodeString(
-                args[0][0], args[0][1],
-                args[0][2], args[0][3].split('|'),
-                0, {})
-            return decoded
-
-        secureLogin = ''
-        for challenge in challenges:
-            secureLogin += decodeChallenge(challenge)
-        return secureLogin
-
-    def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
-
-        results = []
-        items = {'Season': [], 'Episode': [], 'RSS': []}
-
-        # check for auth
-        if not self._doLogin():
-            return results
-
-        for mode in search_strings.keys():
-            logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
-            for search_string in search_strings[mode]:
-
-                if mode != 'RSS':
-                    logger.log(u"Search string: %s " % search_string, logger.DEBUG)
-
-                self.search_params['name'] = search_string
-
-                r = self.getURL(self.url, params=self.search_params)
-                with BS4Parser(r, features=["html5lib", "permissive"]) as html:
-                    resultsTable = html.find("div", {"class": "DataGrid"})
-
-                    if resultsTable:
-                        rows = resultsTable.findAll("ul")
-
-                        for row in rows:
-                            link = row.find("a", title=True)
-                            title = link['title']
-                            #FIXME
-                            size = -1
-                            seeders = 1
-                            leechers = 0
-
-                            autogetURL = self.url + '/' + (row.find("li", {"class": "torrents_name"}).find('a')['href'][1:]).replace('#FTD_MENU', '&menu=4')
-                            r = self.getURL(autogetURL)
-                            with BS4Parser(r, features=["html5lib", "permissive"]) as html:
-
-                                download_url = html.find("div", {"class" : "autoget"}).find('a')['href']
-
-                                if not all([title, download_url]):
-                                    continue
-
-                                #Filter unseeded torrent
-                                #if seeders < self.minseed or leechers < self.minleech:
-                                #    if mode != 'RSS':
-                                #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
-                                #    continue
-
-                                item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
-                                    logger.log(u"Found result: %s " % title, logger.DEBUG)
-
-                                items[mode].append(item)
-
-            #For each search mode sort all the items by seeders if available
-            items[mode].sort(key=lambda tup: tup[3], reverse=True)
-
-            results += items[mode]
-
-        return results
-
-    def seedRatio(self):
-        return self.ratio
-
-
-class FrenchTorrentDBCache(tvcache.TVCache):
-    def __init__(self, provider_obj):
-        tvcache.TVCache.__init__(self, provider_obj)
-
-        # Only poll FTDB every 10 minutes max
-        self.minTime = 10
-
-    def _getRSSData(self):
-        search_strings = {'RSS': ['']}
-        return {'entries': self.provider._doSearch(search_strings)}
-
-provider = FrenchTorrentDBProvider()
diff --git a/sickbeard/providers/freshontv.py b/sickbeard/providers/freshontv.py
index ec355f82fcbd6c08692cae77e99c7fd7016d9364..3c5b7688d2263a848cda22853a42611976029326 100644
--- a/sickbeard/providers/freshontv.py
+++ b/sickbeard/providers/freshontv.py
@@ -57,9 +57,6 @@ class FreshOnTVProvider(generic.TorrentProvider):
 
         self.cookies = None
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
@@ -120,7 +117,7 @@ class FreshOnTVProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (freeleech, search_string)
@@ -129,13 +126,13 @@ class FreshOnTVProvider(generic.TorrentProvider):
                 max_page_number = 0
 
                 if not init_html:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 try:
                     with BS4Parser(init_html, features=["html5lib", "permissive"]) as init_soup:
 
-                        #Check to see if there is more than 1 page of results
+                        # Check to see if there is more than 1 page of results
                         pager = init_soup.find('div', {'class': 'pager'})
                         if pager:
                             page_links = pager.find_all('a', href=True)
@@ -150,26 +147,26 @@ class FreshOnTVProvider(generic.TorrentProvider):
                                     if page_int > max_page_number:
                                         max_page_number = page_int
 
-                        #limit page number to 15 just in case something goes wrong
+                        # limit page number to 15 just in case something goes wrong
                         if max_page_number > 15:
                             max_page_number = 15
-                        #limit RSS search
+                        # limit RSS search
                         if max_page_number > 3 and mode is 'RSS':
                             max_page_number = 3
-                except:
+                except Exception:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
                     continue
 
                 data_response_list = []
                 data_response_list.append(init_html)
 
-                #Freshon starts counting pages from zero, even though it displays numbers from 1
+                # Freshon starts counting pages from zero, even though it displays numbers from 1
                 if max_page_number > 1:
                     for i in range(1, max_page_number):
 
                         time.sleep(1)
                         page_searchURL = searchURL + '&page=' + str(i)
-                        #'.log(u"Search string: " + page_searchURL, logger.DEBUG)
+                        # '.log(u"Search string: " + page_searchURL, logger.DEBUG)
                         page_html = self.getURL(page_searchURL)
 
                         if not page_html:
@@ -185,14 +182,14 @@ class FreshOnTVProvider(generic.TorrentProvider):
 
                             torrent_rows = html.findAll("tr", {"class": re.compile('torrent_[0-9]*')})
 
-                            #Continue only if a Release is found
+                            # Continue only if a Release is found
                             if len(torrent_rows) == 0:
                                 logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                                 continue
 
                             for individual_torrent in torrent_rows:
 
-                                #skip if torrent has been nuked due to poor quality
+                                # skip if torrent has been nuked due to poor quality
                                 if individual_torrent.find('img', alt='Nuked') != None:
                                     continue
 
@@ -208,7 +205,7 @@ class FreshOnTVProvider(generic.TorrentProvider):
                                     download_url = self.urls['download'] % (str(torrent_id))
                                     seeders = tryInt(individual_torrent.find('td', {'class': 'table_seeders'}).find('span').text.strip(), 1)
                                     leechers = tryInt(individual_torrent.find('td', {'class': 'table_leechers'}).find('a').text.strip(), 0)
-                                    #FIXME
+                                    # FIXME
                                     size = -1
                                 except Exception:
                                     continue
@@ -216,22 +213,22 @@ class FreshOnTVProvider(generic.TorrentProvider):
                                 if not all([title, download_url]):
                                     continue
 
-                                #Filter unseeded torrent
+                                # Filter unseeded torrent
                                 if seeders < self.minseed or leechers < self.minleech:
-                                    if mode != 'RSS':
+                                    if mode is not 'RSS':
                                         logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                     continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
 
-                except Exception as e:
+                except Exception:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/generic.py b/sickbeard/providers/generic.py
index c93f2f9dd4c0b506709af12a2c2c55c1320a3ef4..ff2cadc275245beef54ac686cb79d33e5ed78196 100644
--- a/sickbeard/providers/generic.py
+++ b/sickbeard/providers/generic.py
@@ -22,7 +22,6 @@ import datetime
 import os
 import re
 import itertools
-import urllib
 from random import shuffle
 from base64 import b16encode, b32decode
 
@@ -40,7 +39,7 @@ from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 from sickbeard import show_name_helpers
 
-class GenericProvider:
+class GenericProvider(object):
     NZB = "nzb"
     TORRENT = "torrent"
 
@@ -50,8 +49,6 @@ class GenericProvider:
         self.providerType = None
         self.name = name
 
-        self.proxy = ProviderProxy()
-        self.proxyGlypeProxySSLwarning = None
         self.urls = {}
         self.url = ''
 
@@ -87,7 +84,7 @@ class GenericProvider:
 
         shuffle(self.btCacheURLS)
 
-        self.proper_strings = ['PROPER|REPACK']
+        self.proper_strings = ['PROPER|REPACK|REAL']
 
     def getID(self):
         return GenericProvider.makeID(self.name)
@@ -99,6 +96,8 @@ class GenericProvider:
     def imageName(self):
         return self.getID() + '.png'
 
+    # pylint: disable=R0201,W0612
+    # Method could be a function, Unused variable
     def _checkAuth(self):
         return True
 
@@ -106,18 +105,10 @@ class GenericProvider:
         return True
 
     def isActive(self):
-        if self.providerType == GenericProvider.NZB and sickbeard.USE_NZBS:
-            return self.isEnabled()
-        elif self.providerType == GenericProvider.TORRENT and sickbeard.USE_TORRENTS:
-            return self.isEnabled()
-        else:
-            return False
+        return False
 
     def isEnabled(self):
-        """
-        This should be overridden and should return the config setting eg. sickbeard.MYPROVIDER
-        """
-        return False
+        return self.enabled
 
     def getResult(self, episodes):
         """
@@ -135,22 +126,14 @@ class GenericProvider:
 
         return result
 
-    def getURL(self, url, post_data=None, params=None, timeout=30, json=False):
+    def getURL(self, url, post_data=None, params=None, timeout=30, json=False, needBytes=False):
         """
         By default this is just a simple urlopen call but this method should be overridden
         for providers with special URL requirements (like cookies)
         """
 
-        if self.proxy.isEnabled():
-            self.headers.update({'Referer': self.proxy.getProxyURL()})
-            self.proxyGlypeProxySSLwarning = self.proxy.getProxyURL() + 'includes/process.php?action=sslagree&submit=Continue anyway...'
-        else:
-            if 'Referer' in self.headers:
-                self.headers.pop('Referer')
-            self.proxyGlypeProxySSLwarning = None
-
-        return helpers.getURL(self.proxy._buildURL(url), post_data=post_data, params=params, headers=self.headers, timeout=timeout,
-                              session=self.session, json=json, proxyGlypeProxySSLwarning=self.proxyGlypeProxySSLwarning)
+        return helpers.getURL(url, post_data=post_data, params=params, headers=self.headers, timeout=timeout,
+                              session=self.session, json=json, needBytes=needBytes)
 
 
     def _makeURL(self, result):
@@ -162,19 +145,19 @@ class GenericProvider:
 
                 try:
                     torrent_name = re.findall('dn=([^&]+)', result.url)[0]
-                except:
+                except Exception:
                     torrent_name = 'NO_DOWNLOAD_NAME'
 
                 if len(torrent_hash) == 32:
                     torrent_hash = b16encode(b32decode(torrent_hash)).upper()
 
                 if not torrent_hash:
-                    logger.log("Unable to extract torrent hash from magnet: " + ex(result.url), logger.ERROR)
+                    logger.log(u"Unable to extract torrent hash from magnet: " + ex(result.url), logger.ERROR)
                     return urls, filename
 
                 urls = [x.format(torrent_hash=torrent_hash, torrent_name=torrent_name) for x in self.btCacheURLS]
-            except:
-                logger.log("Unable to extract torrent hash or name from magnet: " + ex(result.url), logger.ERROR)
+            except Exception:
+                logger.log(u"Unable to extract torrent hash or name from magnet: " + ex(result.url), logger.ERROR)
                 return urls, filename
         else:
             urls = [result.url]
@@ -200,17 +183,11 @@ class GenericProvider:
 
         urls, filename = self._makeURL(result)
 
-        if self.proxy.isEnabled():
-            self.headers.update({'Referer': self.proxy.getProxyURL()})
-        elif 'Referer' in self.headers:
-            self.headers.pop('Referer')
-
         for url in urls:
             if 'NO_DOWNLOAD_NAME' in url:
                 continue
 
-            if not self.proxy.isEnabled() and url.startswith('http'):
-                # Let's just set a referer for every .torrent/.nzb, should work as a cover-all without side-effects
+            if url.startswith('http'):
                 self.headers.update({'Referer': '/'.join(url.split('/')[:3]) + '/'})
 
             logger.log(u"Downloading a result from " + self.name + " at " + url)
@@ -219,13 +196,13 @@ class GenericProvider:
             if url.endswith(GenericProvider.TORRENT) and filename.endswith(GenericProvider.NZB):
                 filename = filename.rsplit('.', 1)[0] + '.' + GenericProvider.TORRENT
 
-            if helpers.download_file(self.proxy._buildURL(url), filename, session=self.session, headers=self.headers):
+            if helpers.download_file(url, filename, session=self.session, headers=self.headers):
                 if self._verify_download(filename):
                     logger.log(u"Saved result to " + filename, logger.INFO)
                     return True
                 else:
                     logger.log(u"Could not download %s" % url, logger.WARNING)
-                    helpers._remove_file_failed(filename)
+                    helpers.remove_file_failed(filename)
 
         if len(urls):
             logger.log(u"Failed to download any results", logger.WARNING)
@@ -242,10 +219,12 @@ class GenericProvider:
             try:
                 parser = createParser(file_name)
                 if parser:
+                    # pylint: disable=W0212
+                    # Access to a protected member of a client class
                     mime_type = parser._getMimeType()
                     try:
                         parser.stream._input.close()
-                    except:
+                    except Exception:
                         pass
                     if mime_type == 'application/x-bittorrent':
                         return True
@@ -272,6 +251,8 @@ class GenericProvider:
         quality = Quality.sceneQuality(title, anime)
         return quality
 
+    # pylint: disable=R0201,W0613
+    # Method could be a function, Unused argument
     def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None):
         return []
 
@@ -405,9 +386,8 @@ class GenericProvider:
                             u"This is supposed to be a season pack search but the result " + title + " is not a valid season pack, skipping it",
                             logger.DEBUG)
                         addCacheEntry = True
-                    if len(parse_result.episode_numbers) and (
-                                    parse_result.season_number not in set([ep.season for ep in episodes]) or not [ep for ep in episodes if
-                                                                                 ep.scene_episode in parse_result.episode_numbers]):
+                    if len(parse_result.episode_numbers) and (parse_result.season_number not in set([ep.season for ep in episodes])
+                                                              or not [ep for ep in episodes if ep.scene_episode in parse_result.episode_numbers]):
                         logger.log(
                             u"The result " + title + " doesn't seem to be a valid episode that we are trying to snatch, ignoring",
                             logger.DEBUG)
@@ -457,6 +437,8 @@ class GenericProvider:
             # add parsed result to cache for usage later on
             if addCacheEntry:
                 logger.log(u"Adding item from search to cache: " + title, logger.DEBUG)
+                # pylint: disable=W0212
+                # Access to a protected member of a client class
                 ci = self.cache._addCacheEntry(title, url, parse_result=parse_result)
                 if ci is not None:
                     cl.append(ci)
@@ -512,6 +494,8 @@ class GenericProvider:
 
         # check if we have items to add to cache
         if len(cl) > 0:
+            # pylint: disable=W0212
+            # Access to a protected member of a client class
             myDB = self.cache._getDB()
             myDB.mass_action(cl)
 
@@ -538,6 +522,9 @@ class NZBProvider(GenericProvider):
 
         self.providerType = GenericProvider.NZB
 
+    def isActive(self):
+        return sickbeard.USE_NZBS and self.isEnabled()
+
     def _get_size(self, item):
         try:
             size = item.get('links')[1].get('length', -1)
@@ -556,8 +543,11 @@ class TorrentProvider(GenericProvider):
 
         self.providerType = GenericProvider.TORRENT
 
+    def isActive(self):
+        return sickbeard.USE_TORRENTS and self.isEnabled()
+
     def _get_title_and_url(self, item):
-        from feedparser.feedparser import FeedParserDict
+        from feedparser.util import FeedParserDict
         if isinstance(item, (dict, FeedParserDict)):
             title = item.get('title', '')
             download_url = item.get('url', '')
@@ -604,7 +594,7 @@ class TorrentProvider(GenericProvider):
             elif ep_obj.show.anime:
                 ep_string = show_name + ' ' + "%d" % ep_obj.scene_absolute_number
             else:
-                ep_string = show_name + ' S%02d' % int(ep_obj.scene_season)  #1) showName.SXX
+                ep_string = show_name + ' S%02d' % int(ep_obj.scene_season)  # 1) showName.SXX
 
             search_string['Season'].append(ep_string.encode('utf-8').strip())
 
@@ -627,7 +617,7 @@ class TorrentProvider(GenericProvider):
                 ep_string += "%02d" % int(ep_obj.scene_absolute_number)
             else:
                 ep_string += sickbeard.config.naming_ep_type[2] % {'seasonnumber': ep_obj.scene_season,
-                                                              'episodenumber': ep_obj.scene_episode}
+                                                                   'episodenumber': ep_obj.scene_episode}
             if add_string:
                 ep_string = ep_string + ' %s' % add_string
 
@@ -635,7 +625,8 @@ class TorrentProvider(GenericProvider):
 
         return [search_string]
 
-    def _clean_title_from_provider(self, title):
+    @staticmethod
+    def _clean_title_from_provider(title):
         return (title or '').replace(' ', '.')
 
     def findPropers(self, search_date=datetime.datetime.today()):
@@ -662,44 +653,3 @@ class TorrentProvider(GenericProvider):
                         results.append(classes.Proper(title, url, datetime.datetime.today(), show))
 
         return results
-
-class ProviderProxy:
-    def __init__(self):
-        self.Type = 'GlypeProxy'
-        self.param = 'browse.php?u='
-        self.option = '&b=32&f=norefer'
-        self.enabled = False
-        self.url = None
-
-        self.urls = {
-            'getprivate.eu (NL)': 'http://getprivate.eu/',
-            'hideme.nl (NL)': 'http://hideme.nl/',
-            'proxite.eu (DE)': 'http://proxite.eu/',
-            'interproxy.net (EU)': 'http://interproxy.net/',
-        }
-
-    def isEnabled(self):
-        """ Return True if we Choose to call TPB via Proxy """
-        return self.enabled
-
-    def getProxyURL(self):
-        """ Return the Proxy URL Choosen via Provider Setting """
-        return str(self.url)
-
-    def _buildURL(self, url):
-        """ Return the Proxyfied URL of the page """
-        if self.isEnabled():
-            url = self.getProxyURL() + self.param + urllib.quote_plus(url.encode('UTF-8')) + self.option
-            logger.log(u"Proxified URL: " + url, logger.DEBUG)
-
-        return url
-
-    def _buildRE(self, regx):
-        """ Return the Proxyfied RE string """
-        if self.isEnabled():
-            regx = re.sub('//1', self.option, regx).replace('&', '&amp;')
-            logger.log(u"Proxified REGEX: " + regx, logger.DEBUG)
-        else:
-            regx = re.sub('//1', '', regx)
-
-        return regx
diff --git a/sickbeard/providers/gftracker.py b/sickbeard/providers/gftracker.py
index 58c7be00605953626ced43f2a9c21cede6fa6970..826e42ccf49dbda3a63661c9f5cf626d89f2e161 100644
--- a/sickbeard/providers/gftracker.py
+++ b/sickbeard/providers/gftracker.py
@@ -56,9 +56,6 @@ class GFTrackerProvider(generic.TorrentProvider):
 
         self.cache = GFTrackerCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
@@ -97,7 +94,7 @@ class GFTrackerProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (self.categories, search_string)
@@ -149,12 +146,12 @@ class GFTrackerProvider(generic.TorrentProvider):
 
                             # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/hdbits.py b/sickbeard/providers/hdbits.py
index a4eb0acf2eee061ed5e727de34c223f8f11dc826..fe2f6b91f45375a80100c93172804fa6cfa4c8d0 100644
--- a/sickbeard/providers/hdbits.py
+++ b/sickbeard/providers/hdbits.py
@@ -49,9 +49,6 @@ class HDBitsProvider(generic.TorrentProvider):
 
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.passkey:
@@ -87,7 +84,7 @@ class HDBitsProvider(generic.TorrentProvider):
 
     def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None):
 
-        #FIXME
+        # FIXME
         results = []
 
         logger.log(u"Search string: %s" %  search_params, logger.DEBUG)
@@ -107,7 +104,7 @@ class HDBitsProvider(generic.TorrentProvider):
 
             for item in items:
                 results.append(item)
-        #FIXME SORTING
+        # FIXME SORTING
         return results
 
     def findPropers(self, search_date=None):
diff --git a/sickbeard/providers/hdspace.py b/sickbeard/providers/hdspace.py
index fe6d82b8b5198af03a2bb426e025965c2e26cccc..48eec48a7180d1cb79130ceb3e37c5efd1a39178 100644
--- a/sickbeard/providers/hdspace.py
+++ b/sickbeard/providers/hdspace.py
@@ -21,7 +21,6 @@
 import re
 import urllib
 import requests
-import traceback
 from bs4 import BeautifulSoup
 
 from sickbeard import logger
@@ -56,9 +55,6 @@ class HDSpaceProvider(generic.TorrentProvider):
 
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
@@ -97,18 +93,18 @@ class HDSpaceProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     searchURL = self.urls['search'] % (urllib.quote_plus(search_string.replace('.', ' ')),)
                 else:
                     searchURL = self.urls['search'] % ''
 
                 logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s" %  search_string, logger.DEBUG)
 
                 data = self.getURL(searchURL)
                 if not data or 'please try later' in data:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 # Search result page contains some invalid html that prevents html parser from returning all data.
@@ -123,7 +119,7 @@ class HDSpaceProvider(generic.TorrentProvider):
 
                 html = BeautifulSoup(data[index:], 'html5lib')
                 if not html:
-                    logger.log("No html data parsed from provider", logger.DEBUG)
+                    logger.log(u"No html data parsed from provider", logger.DEBUG)
                     continue
 
                 torrents = html.findAll('tr')
@@ -133,7 +129,7 @@ class HDSpaceProvider(generic.TorrentProvider):
                 # Skip column headers
                 for result in torrents[1:]:
                     if len(result.contents) < 10:
-                        #skip extraneous rows at the end
+                        # skip extraneous rows at the end
                         continue
 
                     try:
@@ -147,14 +143,14 @@ class HDSpaceProvider(generic.TorrentProvider):
                         if not all([title, download_url]):
                             continue
 
-                        #Filter unseeded torrent
+                        # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                             continue
 
                         item = title, download_url, size, seeders, leechers
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                         items[mode].append(item)
@@ -162,7 +158,7 @@ class HDSpaceProvider(generic.TorrentProvider):
                     except (AttributeError, TypeError, KeyError, ValueError):
                         continue
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/hdtorrents.py b/sickbeard/providers/hdtorrents.py
index 357e207e9ba661252369bb2a737e1978207f7b27..e2708f3cdd8db40a231cc133930e7aba15b8bfa4 100644
--- a/sickbeard/providers/hdtorrents.py
+++ b/sickbeard/providers/hdtorrents.py
@@ -53,10 +53,6 @@ class HDTorrentsProvider(generic.TorrentProvider):
 
         self.cache = HDTorrentsCache(self)
 
-
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
@@ -96,18 +92,18 @@ class HDTorrentsProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     searchURL = self.urls['search'] % (urllib.quote_plus(search_string), self.categories)
                 else:
                     searchURL = self.urls['rss'] % self.categories
 
                 logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s" %  search_string, logger.DEBUG)
 
                 data = self.getURL(searchURL)
                 if not data or 'please try later' in data:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 # Search result page contains some invalid html that prevents html parser from returning all data.
@@ -123,7 +119,7 @@ class HDTorrentsProvider(generic.TorrentProvider):
 
                 with BS4Parser(data, features=["html5lib", "permissive"]) as html:
                     if not html:
-                        logger.log("No html data parsed from provider", logger.DEBUG)
+                        logger.log(u"No html data parsed from provider", logger.DEBUG)
                         continue
 
                     empty = html.find('No torrents here')
@@ -179,14 +175,14 @@ class HDTorrentsProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
@@ -194,7 +190,7 @@ class HDTorrentsProvider(generic.TorrentProvider):
                         except (AttributeError, TypeError, KeyError, ValueError):
                             continue
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/hounddawgs.py b/sickbeard/providers/hounddawgs.py
index 6c9f18c1a7f64e3e7c69442506fe3d56f25a43c3..3736bfcb4d4bde0066dc9b69c71e5e8dfcdec5f5 100644
--- a/sickbeard/providers/hounddawgs.py
+++ b/sickbeard/providers/hounddawgs.py
@@ -62,9 +62,6 @@ class HoundDawgsProvider(generic.TorrentProvider):
             "searchtags": ''
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
@@ -98,7 +95,7 @@ class HoundDawgsProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 self.search_params['searchstr'] = search_string
@@ -132,10 +129,10 @@ class HoundDawgsProvider(generic.TorrentProvider):
                             allAs = (torrent[1]).find_all('a')
 
                             try:
-                                #link = self.urls['base_url'] + allAs[2].attrs['href']
-                                #url = result.find('td', attrs={'class': 'quickdownload'}).find('a')
+                                # link = self.urls['base_url'] + allAs[2].attrs['href']
+                                # url = result.find('td', attrs={'class': 'quickdownload'}).find('a')
                                 title = allAs[2].string
-                                #Trimming title so accepted by scene check(Feature has been rewuestet i forum)
+                                # Trimming title so accepted by scene check(Feature has been rewuestet i forum)
                                 title = title.replace("custom.", "")
                                 title = title.replace("CUSTOM.", "")
                                 title = title.replace("Custom.", "")
@@ -147,7 +144,7 @@ class HoundDawgsProvider(generic.TorrentProvider):
                                 title = title.replace("Subs.", "")
 
                                 download_url = self.urls['base_url']+allAs[0].attrs['href']
-                                #FIXME
+                                # FIXME
                                 size = -1
                                 seeders = 1
                                 leechers = 0
@@ -158,14 +155,14 @@ class HoundDawgsProvider(generic.TorrentProvider):
                             if not title or not download_url:
                                 continue
 
-                            #Filter unseeded torrent
-                            #if seeders < self.minseed or leechers < self.minleech:
-                            #    if mode != 'RSS':
+                            # Filter unseeded torrent
+                            # if seeders < self.minseed or leechers < self.minleech:
+                            #    if mode is not 'RSS':
                             #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                             #    continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
@@ -173,7 +170,7 @@ class HoundDawgsProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/iptorrents.py b/sickbeard/providers/iptorrents.py
index de57748862301eccce09c8f83ce7c2bd1031d998..000c9b03e42f0f19a84169d051d85f44bdcc5ac4 100644
--- a/sickbeard/providers/iptorrents.py
+++ b/sickbeard/providers/iptorrents.py
@@ -20,8 +20,8 @@ import re
 from sickbeard.providers import generic
 from sickbeard import logger
 from sickbeard import tvcache
-from sickrage.helper.exceptions import AuthException
 from sickbeard.bs4_parser import BS4Parser
+from sickrage.helper.exceptions import AuthException, ex
 
 class IPTorrentsProvider(generic.TorrentProvider):
     def __init__(self):
@@ -48,9 +48,6 @@ class IPTorrentsProvider(generic.TorrentProvider):
 
         self.categories = '73=&60='
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
@@ -93,12 +90,12 @@ class IPTorrentsProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 # URL with 50 tv-show results, or max 150 if adjusted in IPTorrents profile
                 searchURL = self.urls['search'] % (self.categories, freeleech, search_string)
-                searchURL += ';o=seeders' if mode != 'RSS' else ''
+                searchURL += ';o=seeders' if mode is not 'RSS' else ''
                 logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
 
                 data = self.getURL(searchURL)
@@ -109,7 +106,7 @@ class IPTorrentsProvider(generic.TorrentProvider):
                     data = re.sub(r'(?im)<button.+?<[\/]button>', '', data, 0)
                     with BS4Parser(data, features=["html5lib", "permissive"]) as html:
                         if not html:
-                            logger.log("No data returned from provider", logger.DEBUG)
+                            logger.log(u"No data returned from provider", logger.DEBUG)
                             continue
 
                         if html.find(text='No Torrents Found!'):
@@ -119,7 +116,7 @@ class IPTorrentsProvider(generic.TorrentProvider):
                         torrent_table = html.find('table', attrs={'class': 'torrents'})
                         torrents = torrent_table.find_all('tr') if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrents) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -137,14 +134,14 @@ class IPTorrentsProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
@@ -152,7 +149,7 @@ class IPTorrentsProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Error: %r" % ex(e), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
@@ -162,7 +159,8 @@ class IPTorrentsProvider(generic.TorrentProvider):
     def seedRatio(self):
         return self.ratio
 
-    def _convertSize(self, size):
+    @staticmethod
+    def _convertSize(size):
         size, modifier = size.split(' ')
         size = float(size)
         if modifier in 'KB':
diff --git a/sickbeard/providers/kat.py b/sickbeard/providers/kat.py
index a55349612389d4386c9dffb0351ff26943f2e5d8..0168c132268e8ce7744b95655d32792c2f55588a 100755
--- a/sickbeard/providers/kat.py
+++ b/sickbeard/providers/kat.py
@@ -23,7 +23,6 @@ import traceback
 from urllib import urlencode
 
 import xmltodict
-import HTMLParser
 
 import sickbeard
 from sickbeard import logger
@@ -63,9 +62,6 @@ class KATProvider(generic.TorrentProvider):
             'category': 'tv'
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
@@ -78,28 +74,28 @@ class KATProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                self.search_params['q'] = search_string.encode('utf-8') if mode != 'RSS' else ''
-                self.search_params['field'] = 'seeders' if mode != 'RSS' else 'time_add'
+                self.search_params['q'] = search_string.encode('utf-8') if mode is not 'RSS' else ''
+                self.search_params['field'] = 'seeders' if mode is not 'RSS' else 'time_add'
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s" % search_string, logger.DEBUG)
 
-                url_fmt_string = 'usearch' if mode != 'RSS' else search_string
+                url_fmt_string = 'usearch' if mode is not 'RSS' else search_string
                 try:
                     searchURL = self.urls['search'] % url_fmt_string + '?' + urlencode(self.search_params)
                     logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
                     data = self.getURL(searchURL)
-                    #data = self.getURL(self.urls[('search', 'rss')[mode == 'RSS']], params=self.search_params)
+                    # data = self.getURL(self.urls[('search', 'rss')[mode is 'RSS']], params=self.search_params)
                     if not data:
-                        logger.log("No data returned from provider", logger.DEBUG)
+                        logger.log(u"No data returned from provider", logger.DEBUG)
                         continue
 
                     if not data.startswith('<?xml'):
-                        logger.log(u'Expected xml but got something else, is your proxy failing?', logger.INFO)
+                        logger.log(u'Expected xml but got something else, is your mirror failing?', logger.INFO)
                         continue
 
                     try:
-                        data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data.encode('utf-8')).decode('utf-8').replace('&', '&amp;'))
+                        data = xmltodict.parse(data)
                     except ExpatError:
                         logger.log(u"Failed parsing provider. Traceback: %r\n%r" % (traceback.format_exc(), data), logger.ERROR)
                         continue
@@ -114,8 +110,8 @@ class KATProvider(generic.TorrentProvider):
 
                     for item in entries:
                         try:
-                            title = item['title'].decode('utf-8')
-
+                            title = item['title']
+                            assert isinstance(title, unicode)
                             # Use the torcache link kat provides,
                             # unless it is not torcache or we are not using blackhole
                             # because we want to use magnets if connecting direct to client
@@ -130,7 +126,7 @@ class KATProvider(generic.TorrentProvider):
                             size = int(item['torrent:contentLength'])
 
                             info_hash = item['torrent:infoHash']
-                            #link = item['link']
+                            # link = item['link']
 
                         except (AttributeError, TypeError, KeyError):
                             continue
@@ -138,19 +134,19 @@ class KATProvider(generic.TorrentProvider):
                         if not all([title, download_url]):
                             continue
 
-                        #Filter unseeded torrent
+                        # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                             continue
 
                         if self.confirmed and not verified:
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result " + title + " but that doesn't seem like a verified result so I'm ignoring it", logger.DEBUG)
                             continue
 
                         item = title, download_url, size, seeders, leechers, info_hash
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                         items[mode].append(item)
@@ -158,7 +154,7 @@ class KATProvider(generic.TorrentProvider):
                 except Exception:
                     logger.log(u"Failed parsing provider. Traceback: %r" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/libertalia.py b/sickbeard/providers/libertalia.py
index 6a7a86898ce8cf54e515b424248a1fd53c23e88e..4a4b9b6b4c097cd83d0bcb1951bfd37cc55d1f6e 100644
--- a/sickbeard/providers/libertalia.py
+++ b/sickbeard/providers/libertalia.py
@@ -52,9 +52,6 @@ class LibertaliaProvider(generic.TorrentProvider):
 
         self.cache = LibertaliaCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
@@ -90,7 +87,7 @@ class LibertaliaProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urlsearch % (urllib.quote(search_string), self.categories)
@@ -105,16 +102,16 @@ class LibertaliaProvider(generic.TorrentProvider):
                         rows = resultsTable.findAll("tr", {"class" : re.compile("torrent_row(.*)?")})
                         for row in rows:
 
-                            #bypass first row because title only
+                            # bypass first row because title only
                             columns = row.find('td', {"class" : "torrent_name"})
-                           # isvfclass = row.find('td', {"class" : "sprite-vf"})
-                            #isvostfrclass = row.find('td', {"class" : "sprite-vostfr"})
+                            # isvfclass = row.find('td', {"class" : "sprite-vf"})
+                            # isvostfrclass = row.find('td', {"class" : "sprite-vostfr"})
                             link = columns.find("a", href=re.compile("torrents"))
                             if link:
                                 title = link.text
-                                #recherched = searchURL.replace(".", "(.*)").replace(" ", "(.*)").replace("'", "(.*)")
+                                # recherched = searchURL.replace(".", "(.*)").replace(" ", "(.*)").replace("'", "(.*)")
                                 download_url = row.find("a", href=re.compile("torrent_pass"))['href']
-                                #FIXME
+                                # FIXME
                                 size = -1
                                 seeders = 1
                                 leechers = 0
@@ -122,19 +119,19 @@ class LibertaliaProvider(generic.TorrentProvider):
                                 if not all([title, download_url]):
                                     continue
 
-                                #Filter unseeded torrent
-                                #if seeders < self.minseed or leechers < self.minleech:
-                                #    if mode != 'RSS':
+                                # Filter unseeded torrent
+                                # if seeders < self.minseed or leechers < self.minleech:
+                                #    if mode is not 'RSS':
                                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 #    continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/morethantv.py b/sickbeard/providers/morethantv.py
index a4e55cbcdc5d03fa2aafe62107b5d5ea8e4a3b83..c89b22540ed42b04e4b01db0c55ed7a881b97bd6 100644
--- a/sickbeard/providers/morethantv.py
+++ b/sickbeard/providers/morethantv.py
@@ -62,9 +62,6 @@ class MoreThanTVProvider(generic.TorrentProvider):
 
         self.cache = MoreThanTVCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
@@ -109,7 +106,7 @@ class MoreThanTVProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (search_string.replace('(', '').replace(')', ''))
@@ -125,7 +122,7 @@ class MoreThanTVProvider(generic.TorrentProvider):
                         torrent_table = html.find('table', attrs={'class': 'torrent_table'})
                         torrent_rows = torrent_table.findChildren('tr') if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrent_rows) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -135,7 +132,7 @@ class MoreThanTVProvider(generic.TorrentProvider):
                             cells = result.findChildren('td')
                             link = cells[1].find('a', attrs={'title': 'Download'})
 
-                            #skip if torrent has been nuked due to poor quality
+                            # skip if torrent has been nuked due to poor quality
                             if cells[1].find('img', alt='Nuked') != None:
                                 continue
 
@@ -163,14 +160,14 @@ class MoreThanTVProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
@@ -178,7 +175,7 @@ class MoreThanTVProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/newpct.py b/sickbeard/providers/newpct.py
index 89f0563c3df866bf28146b5bf6d457a1758b171b..ad1dd5412b1d4da7079fc73b8e25ad349aef0284 100644
--- a/sickbeard/providers/newpct.py
+++ b/sickbeard/providers/newpct.py
@@ -71,10 +71,6 @@ class newpctProvider(generic.TorrentProvider):
             'q': ''
         }
 
-
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
@@ -82,7 +78,7 @@ class newpctProvider(generic.TorrentProvider):
 
         lang_info = '' if not epObj or not epObj.show else epObj.show.lang
 
-        #Only search if user conditions are true
+        # Only search if user conditions are true
         if self.onlyspasearch and lang_info != 'es':
             logger.log(u"Show info is not spanish, skipping provider search", logger.DEBUG)
             return results
@@ -156,13 +152,14 @@ class newpctProvider(generic.TorrentProvider):
 
         title = title.replace('Descargar ', '')
 
-        #Quality
+        # Quality
         title = title.replace('[HDTV]', '[720p HDTV x264]')
         title = title.replace('[HDTV 720p AC3 5.1]', '[720p HDTV x264]')
         title = title.replace('[HDTV 1080p AC3 5.1]', '[1080p HDTV x264]')
         title = title.replace('[DVDRIP]', '[DVDrip x264]')
         title = title.replace('[DVD Rip]', '[DVDrip x264]')
         title = title.replace('[DVDrip]', '[DVDrip x264]')
+        title = title.replace('[DVDRIP-AC3.5.1]', '[DVDrip x264]')
         title = title.replace('[BLuRayRip]', '[720p BlueRay x264]')
         title = title.replace('[BRrip]', '[720p BlueRay x264]')
         title = title.replace('[BDrip]', '[720p BlueRay x264]')
diff --git a/sickbeard/providers/newznab.py b/sickbeard/providers/newznab.py
index 6ba2e04743889846e06756f9038aa9c3d8951539..40d447e5bb74f964ec11a5e2d36959ca3ddbf7fa 100644
--- a/sickbeard/providers/newznab.py
+++ b/sickbeard/providers/newznab.py
@@ -88,9 +88,6 @@ class NewznabProvider(generic.NZBProvider):
             return self.getID() + '.png'
         return 'newznab.png'
 
-    def isEnabled(self):
-        return self.enabled
-
     def _getURL(self, url, post_data=None, params=None, timeout=30, json=False):
         return self.getURL(url, post_data=post_data, params=params, timeout=timeout, json=json)
 
@@ -200,7 +197,7 @@ class NewznabProvider(generic.NZBProvider):
 
         if self.needs_auth and not self.key:
             logger.log(u"Invalid api key. Check your settings", logger.WARNING)
-            #raise AuthException("Your authentication credentials for " + self.name + " are missing, check your config.")
+            # raise AuthException("Your authentication credentials for " + self.name + " are missing, check your config.")
 
         return True
 
@@ -300,7 +297,7 @@ class NewznabProvider(generic.NZBProvider):
                 break
 
             if offset != params['offset']:
-                logger.log("Tell your newznab provider to fix their bloody newznab responses")
+                logger.log(u"Tell your newznab provider to fix their bloody newznab responses")
                 break
 
             params['offset'] += params['limit']
@@ -371,7 +368,7 @@ class NewznabCache(tvcache.TVCache):
         while (datetime.datetime.now() - self.last_search).seconds < 5:
             time.sleep(1)
 
-        logger.log("Cache update URL: %s " % rss_url, logger.DEBUG)
+        logger.log(u"Cache update URL: %s " % rss_url, logger.DEBUG)
         data = self.getRSSFeed(rss_url)
 
         self.last_search = datetime.datetime.now()
diff --git a/sickbeard/providers/nextgen.py b/sickbeard/providers/nextgen.py
index 55f6413a81f1d6a27a9ed1f623f81d52c2bd419b..08e575da4364b18283be23c117d8dbf8ce1b67c2 100644
--- a/sickbeard/providers/nextgen.py
+++ b/sickbeard/providers/nextgen.py
@@ -57,9 +57,6 @@ class NextGenProvider(generic.TorrentProvider):
         self.minleech = 0
         self.freeleech = True
 
-    def isEnabled(self):
-        return self.enabled
-
     def getLoginParams(self):
         return {
             'username': self.username,
@@ -83,7 +80,7 @@ class NextGenProvider(generic.TorrentProvider):
                     return True
                 else:
                     self.login_opener = None
-            except:
+            except Exception:
                 self.login_opener = None
 
         if self.login_opener:
@@ -105,7 +102,7 @@ class NextGenProvider(generic.TorrentProvider):
                     return True
 
                 error = 'unknown'
-        except:
+        except Exception:
             error = traceback.format_exc()
             self.login_opener = None
 
@@ -125,7 +122,7 @@ class NextGenProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (urllib.quote(search_string.encode('utf-8')), self.categories)
@@ -148,8 +145,8 @@ class NextGenProvider(generic.TorrentProvider):
 
                         entries = entries_std + entries_sticky
 
-                        #Xirg STANDARD TORRENTS
-                        #Continue only if one Release is found
+                        # Xirg STANDARD TORRENTS
+                        # Continue only if one Release is found
                         if not entries:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -172,14 +169,14 @@ class NextGenProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
@@ -187,7 +184,7 @@ class NextGenProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/nyaatorrents.py b/sickbeard/providers/nyaatorrents.py
index d306e595256f477ab2b3515300a89dcecbe5ce55..ee7ef56343002f1163f55d7743f39f6adff1d441 100644
--- a/sickbeard/providers/nyaatorrents.py
+++ b/sickbeard/providers/nyaatorrents.py
@@ -19,13 +19,9 @@
 import urllib
 import re
 
-import generic
-
-from sickbeard import show_name_helpers
 from sickbeard import logger
-from sickbeard.common import Quality
 from sickbeard import tvcache
-from sickbeard import show_name_helpers
+from sickbeard.providers import generic
 
 
 class NyaaProvider(generic.TorrentProvider):
@@ -49,9 +45,6 @@ class NyaaProvider(generic.TorrentProvider):
         self.minleech = 0
         self.confirmed = False
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
         if self.show and not self.show.is_anime:
             return []
@@ -62,7 +55,7 @@ class NyaaProvider(generic.TorrentProvider):
         for mode in search_strings.keys():
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s" % search_string, logger.DEBUG)
 
                 params = {
@@ -71,7 +64,7 @@ class NyaaProvider(generic.TorrentProvider):
                     "sort": 2,     # Sort Descending By Seeders
                     "order": 1
                 }
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     params["term"] = search_string.encode('utf-8')
 
                 searchURL = self.url + '?' + urllib.urlencode(params)
@@ -81,7 +74,7 @@ class NyaaProvider(generic.TorrentProvider):
                 s = re.compile(summary_regex, re.DOTALL)
 
                 results = []
-                for curItem in self.cache.getRSSFeed(searchURL, items=['entries'])['entries'] or []:
+                for curItem in self.cache.getRSSFeed(searchURL)['entries'] or []:
                     title = curItem['title']
                     download_url = curItem['link']
                     if not all([title, download_url]):
@@ -92,16 +85,16 @@ class NyaaProvider(generic.TorrentProvider):
 
                     # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
-                    if self.confirmed and not verified and mode != 'RSS':
+                    if self.confirmed and not verified and mode is not 'RSS':
                         logger.log(u"Found result " + title + " but that doesn't seem like a verified result so I'm ignoring it", logger.DEBUG)
                         continue
 
                     item = title, download_url, size, seeders, leechers
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     items[mode].append(item)
@@ -113,15 +106,8 @@ class NyaaProvider(generic.TorrentProvider):
 
         return results
 
-    def _extract_name_from_filename(self, filename):
-        name_regex = '(.*?)\.?(\[.*]|\d+\.TPB)\.torrent$'
-        logger.log(u"Comparing %s against %s" % (name_regex, filename), logger.DEBUG)
-        match = re.match(name_regex, filename, re.I)
-        if match:
-            return match.group(1)
-        return None
-
-    def _convertSize(self, size):
+    @staticmethod
+    def _convertSize(size):
         size, modifier = size.split(' ')
         size = float(size)
         if modifier in 'KiB':
@@ -132,7 +118,7 @@ class NyaaProvider(generic.TorrentProvider):
             size = size * 1024**3
         elif modifier in 'TiB':
             size = size * 1024**4
-        return size
+        return int(size)
 
     def seedRatio(self):
         return self.ratio
diff --git a/sickbeard/providers/omgwtfnzbs.py b/sickbeard/providers/omgwtfnzbs.py
index 90f0b362b57f6179bba7086df08a3114b874146d..775061259bcb461e15cb85774571944815fc0d3b 100644
--- a/sickbeard/providers/omgwtfnzbs.py
+++ b/sickbeard/providers/omgwtfnzbs.py
@@ -40,10 +40,6 @@ class OmgwtfnzbsProvider(generic.NZBProvider):
 
         self.supportsBacklog = True
 
-
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.api_key:
diff --git a/sickbeard/providers/pretome.py b/sickbeard/providers/pretome.py
index dda59e612207cfcfee601e74a00fc3ca82e7547c..f165135dd6b09a1ebf9ae419bf5743b6e7edc7e4 100644
--- a/sickbeard/providers/pretome.py
+++ b/sickbeard/providers/pretome.py
@@ -55,9 +55,6 @@ class PretomeProvider(generic.TorrentProvider):
 
         self.cache = PretomeCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password or not self.pin:
@@ -94,7 +91,7 @@ class PretomeProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (urllib.quote(search_string.encode('utf-8')), self.categories)
@@ -106,7 +103,7 @@ class PretomeProvider(generic.TorrentProvider):
 
                 try:
                     with BS4Parser(data, features=["html5lib", "permissive"]) as html:
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         empty = html.find('h2', text="No .torrents fit this filter criteria")
                         if empty:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
@@ -149,14 +146,14 @@ class PretomeProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
@@ -164,7 +161,7 @@ class PretomeProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/rarbg.py b/sickbeard/providers/rarbg.py
index 149f23519e29e87878e526757f78e19b158d0ed0..cfd171f831b29a9a238dc3332f0441eed892688a 100644
--- a/sickbeard/providers/rarbg.py
+++ b/sickbeard/providers/rarbg.py
@@ -79,14 +79,10 @@ class RarbgProvider(generic.TorrentProvider):
 
         self.cache = RarbgCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
         if self.token and self.tokenExpireDate and datetime.datetime.now() < self.tokenExpireDate:
             return True
 
-        resp_json = None
 
         response = self.getURL(self.urls['token'], timeout=30, json=True)
         if not response:
@@ -119,14 +115,14 @@ class RarbgProvider(generic.TorrentProvider):
             ep_indexerid = None
             ep_indexer = None
 
-        for mode in search_params.keys(): #Mode = RSS, Season, Episode
+        for mode in search_params.keys():  # Mode = RSS, Season, Episode
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
-                if mode == 'RSS':
+                if mode is 'RSS':
                     searchURL = self.urls['listing'] + self.defaultOptions
                 elif mode == 'Season':
                     if ep_indexer == INDEXER_TVDB:
@@ -168,7 +164,7 @@ class RarbgProvider(generic.TorrentProvider):
                         self.next_request = datetime.datetime.now() + datetime.timedelta(seconds=10)
 
                         if not data:
-                            logger.log("No data returned from provider", logger.DEBUG)
+                            logger.log(u"No data returned from provider", logger.DEBUG)
                             raise GetOutOfLoop
                         if re.search('ERROR', data):
                             logger.log(u"Error returned from provider", logger.DEBUG)
@@ -197,12 +193,8 @@ class RarbgProvider(generic.TorrentProvider):
                                 return results
                             logger.log(u"Using new token", logger.DEBUG)
                             continue
-                        if re.search('<div id="error">.*</div>', data):
-                            logger.log(u"Proxy %s does not support https" % self.proxy.getProxyURL(), logger.DEBUG)
-                            searchURL = searchURL.replace(u'https', 'http')
-                            continue
 
-                        #No error found break
+                        # No error found break
                         break
                     else:
                         logger.log(u"Retried 3 times without getting results", logger.DEBUG)
@@ -216,7 +208,7 @@ class RarbgProvider(generic.TorrentProvider):
                         data_json = json.loads(data.group())
                     else:
                         data_json = {}
-                except Exception as e:
+                except Exception:
                     logger.log(u"JSON load failed: %s" % traceback.format_exc(), logger.ERROR)
                     logger.log(u"JSON load failed. Data dump: %s" % data, logger.DEBUG)
                     continue
@@ -229,13 +221,13 @@ class RarbgProvider(generic.TorrentProvider):
                             size = item['size']
                             seeders = item['seeders']
                             leechers = item['leechers']
-                            pubdate = item['pubdate']
+                            # pubdate = item['pubdate']
 
                             if not all([title, download_url]):
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
                             items[mode].append(item)
 
diff --git a/sickbeard/providers/rsstorrent.py b/sickbeard/providers/rsstorrent.py
index 436e91c3f056c0e9e3ae9394ba64aa0b6072756d..434174d3654945b27a5c5e8f8acca359e1470317 100644
--- a/sickbeard/providers/rsstorrent.py
+++ b/sickbeard/providers/rsstorrent.py
@@ -15,21 +15,21 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
+import io
 import os
 import re
+import requests
+from bencode import bdecode
 
 import sickbeard
-import generic
-
+from sickbeard.providers import generic
 from sickbeard import helpers
 from sickbeard import logger
 from sickbeard import tvcache
+
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 
-import requests
-from bencode import bdecode
-
 
 class TorrentRssProvider(generic.TorrentProvider):
     def __init__(self, name, url, cookies='', titleTAG='title', search_mode='eponly', search_fallback=False, enable_daily=False,
@@ -52,26 +52,23 @@ class TorrentRssProvider(generic.TorrentProvider):
         self.titleTAG = titleTAG
 
     def configStr(self):
-        return "%s|%s|%s|%s|%d|%s|%d|%d|%d" % (self.name or '',
-                                            self.url or '',
-                                            self.cookies or '',
-                                            self.titleTAG or '',
-                                            self.enabled,
-                                            self.search_mode or '',
-                                            self.search_fallback,
-                                            self.enable_daily,
-                                            self.enable_backlog)
+        return "%s|%s|%s|%s|%d|%s|%d|%d|%d" % (
+            self.name or '',
+            self.url or '',
+            self.cookies or '',
+            self.titleTAG or '',
+            self.enabled,
+            self.search_mode or '',
+            self.search_fallback,
+            self.enable_daily,
+            self.enable_backlog
+        )
 
     def imageName(self):
-        if ek(os.path.isfile,
-                 ek(os.path.join, sickbeard.PROG_DIR, 'gui', sickbeard.GUI_NAME, 'images', 'providers',
-                       self.getID() + '.png')):
+        if os.path.isfile(ek(os.path.join, sickbeard.PROG_DIR, 'gui', sickbeard.GUI_NAME, 'images', 'providers', self.getID() + '.png')):
             return self.getID() + '.png'
         return 'torrentrss.png'
 
-    def isEnabled(self):
-        return self.enabled
-
     def _get_title_and_url(self, item):
 
         title = item.get(self.titleTAG)
@@ -88,7 +85,7 @@ class TorrentRssProvider(generic.TorrentProvider):
         for cur_attempt in attempt_list:
             try:
                 url = cur_attempt()
-            except:
+            except Exception:
                 continue
 
             if title and url:
@@ -100,10 +97,12 @@ class TorrentRssProvider(generic.TorrentProvider):
 
         try:
             if self.cookies:
-                cookie_validator = re.compile("^(\w+=\w+)(;\w+=\w+)*$")
+                cookie_validator = re.compile(r"^(\w+=\w+)(;\w+=\w+)*$")
                 if not cookie_validator.match(self.cookies):
                     return (False, 'Cookie is not correctly formatted: ' + self.cookies)
 
+            # pylint: disable=W0212
+            # Access to a protected member of a client class
             data = self.cache._getRSSData()['entries']
             if not data:
                 return (False, 'No items found in the RSS feed ' + self.url)
@@ -116,12 +115,12 @@ class TorrentRssProvider(generic.TorrentProvider):
             if not url:
                 return (False, 'Unable to get torrent url from first item')
 
-            if url.startswith('magnet:') and re.search('urn:btih:([\w]{32,40})', url):
+            if url.startswith('magnet:') and re.search(r'urn:btih:([\w]{32,40})', url):
                 return (True, 'RSS feed Parsed correctly')
             else:
                 if self.cookies:
                     requests.utils.add_dict_to_cookiejar(self.session.cookies,
-                                                         dict(x.rsplit('=', 1) for x in (self.cookies.split(';'))))
+                                                         dict(x.rsplit('=', 1) for x in self.cookies.split(';')))
                 torrent_file = self.getURL(url)
                 try:
                     bdecode(torrent_file)
@@ -134,16 +133,17 @@ class TorrentRssProvider(generic.TorrentProvider):
         except Exception, e:
             return (False, 'Error when trying to load RSS: ' + ex(e))
 
-    def dumpHTML(self, data):
+    @staticmethod
+    def dumpHTML(data):
         dumpName = ek(os.path.join, sickbeard.CACHE_DIR, 'custom_torrent.html')
 
         try:
-            fileOut = open(dumpName, 'wb')
+            fileOut = io.open(dumpName, 'wb')
             fileOut.write(data)
             fileOut.close()
             helpers.chmodAsParent(dumpName)
         except IOError, e:
-            logger.log("Unable to save the file: %s " % repr(e), logger.ERROR)
+            logger.log(u"Unable to save the file: %s " % repr(e), logger.ERROR)
             return False
         logger.log(u"Saved custom_torrent html dump %s " % dumpName, logger.INFO)
         return True
diff --git a/sickbeard/providers/scc.py b/sickbeard/providers/scc.py
index f59d9fc710a385a625a8652506920b8020bcf4de..67159e3e5867a320d5379ecffbbd55e513348120 100644
--- a/sickbeard/providers/scc.py
+++ b/sickbeard/providers/scc.py
@@ -56,9 +56,6 @@ class SCCProvider(generic.TorrentProvider):
         self.categories = { 'sponly': 'c26=26&c44=44&c45=45', # Archive, non-scene HD, non-scene SD; need to include non-scene because WEB-DL packs get added to those categories
                             'eponly': 'c27=27&c17=17&c44=44&c45=45&c33=33&c34=34'} # TV HD, TV SD, non-scene HD, non-scene SD, foreign XviD, foreign x264
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
@@ -92,10 +89,10 @@ class SCCProvider(generic.TorrentProvider):
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
         for mode in search_strings.keys():
-            if mode != 'RSS':
+            if mode is not 'RSS':
                 logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (urllib.quote(search_string), self.categories[search_mode])
@@ -114,7 +111,7 @@ class SCCProvider(generic.TorrentProvider):
                     torrent_table = html.find('table', attrs={'id': 'torrents-table'})
                     torrent_rows = torrent_table.find_all('tr') if torrent_table else []
 
-                    #Continue only if at least one Release is found
+                    # Continue only if at least one Release is found
                     if len(torrent_rows) < 2:
                         logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                         continue
@@ -141,19 +138,19 @@ class SCCProvider(generic.TorrentProvider):
                         if not all([title, download_url]):
                             continue
 
-                        #Filter unseeded torrent
+                        # Filter unseeded torrent
                         if seeders < self.minseed or leechers < self.minleech:
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                             continue
 
                         item = title, download_url, size, seeders, leechers
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                         items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/scenetime.py b/sickbeard/providers/scenetime.py
index 3d50a0daaa9698f5929f69b583df68c081f3fb76..92dabe2a0ce0a4df2f9aa4577ff8557b626a943f 100644
--- a/sickbeard/providers/scenetime.py
+++ b/sickbeard/providers/scenetime.py
@@ -53,9 +53,6 @@ class SceneTimeProvider(generic.TorrentProvider):
 
         self.categories = "&c2=1&c43=13&c9=1&c63=1&c77=1&c79=1&c100=1&c101=1"
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
@@ -84,7 +81,7 @@ class SceneTimeProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (urllib.quote(search_string), self.categories)
@@ -99,7 +96,7 @@ class SceneTimeProvider(generic.TorrentProvider):
                         torrent_table = html.select("#torrenttable table")
                         torrent_rows = torrent_table[0].select("tr") if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrent_rows) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -124,7 +121,7 @@ class SceneTimeProvider(generic.TorrentProvider):
 
                                 seeders = int(cells[labels.index('Seeders')].get_text())
                                 leechers = int(cells[labels.index('Leechers')].get_text())
-                                #FIXME
+                                # FIXME
                                 size = -1
 
                             except (AttributeError, TypeError):
@@ -133,14 +130,14 @@ class SceneTimeProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
@@ -148,7 +145,7 @@ class SceneTimeProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/shazbat.py b/sickbeard/providers/shazbat.py
index 8fffb1dfdbc0c6e2f49fc2fe7d35ab1796f0dc0f..95eb68edbe6ee24c57834076b77c623098fcf5a2 100644
--- a/sickbeard/providers/shazbat.py
+++ b/sickbeard/providers/shazbat.py
@@ -16,10 +16,9 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-import generic
-
 from sickbeard import logger
 from sickbeard import tvcache
+from sickbeard.providers import generic
 from sickrage.helper.exceptions import AuthException
 
 
@@ -41,9 +40,6 @@ class ShazbatProvider(generic.TorrentProvider):
                      'website': u'http://www.shazbat.tv/login',}
         self.url = self.urls['website']
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
         if not self.passkey:
             raise AuthException("Your authentication credentials for " + self.name + " are missing, check your config.")
@@ -74,7 +70,7 @@ class ShazbatCache(tvcache.TVCache):
         rss_url = self.provider.urls['base_url'] + 'rss/recent?passkey=' + provider.passkey + '&fname=true'
         logger.log(u"Cache update URL: %s" % rss_url, logger.DEBUG)
 
-        return self.getRSSFeed(rss_url, items=['entries', 'feed'])
+        return self.getRSSFeed(rss_url)
 
     def _checkAuth(self, data):
         return self.provider._checkAuthFromData(data)
diff --git a/sickbeard/providers/speedcd.py b/sickbeard/providers/speedcd.py
index ca93eba6c02f244a5de23224744eb3bcba95e5ce..a3c5377a8a474674e1f596e97e7706df4a813924 100644
--- a/sickbeard/providers/speedcd.py
+++ b/sickbeard/providers/speedcd.py
@@ -52,9 +52,6 @@ class SpeedCDProvider(generic.TorrentProvider):
 
         self.cache = SpeedCDCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
@@ -83,7 +80,7 @@ class SpeedCDProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 search_string = '+'.join(search_string.split())
@@ -109,25 +106,25 @@ class SpeedCDProvider(generic.TorrentProvider):
                     download_url = self.urls['download'] % (torrent['id'])
                     seeders = int(torrent['seed'])
                     leechers = int(torrent['leech'])
-                    #FIXME
+                    # FIXME
                     size = -1
 
                     if not all([title, download_url]):
                         continue
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
                     item = title, download_url, size, seeders, leechers
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/strike.py b/sickbeard/providers/strike.py
index 3b564f64f21e3951c9df83575e16467f158d3512..e64a6915130f529723e3b2c020262b833b7af1ed 100644
--- a/sickbeard/providers/strike.py
+++ b/sickbeard/providers/strike.py
@@ -32,26 +32,23 @@ class STRIKEProvider(generic.TorrentProvider):
         self.cache = StrikeCache(self)
         self.minseed, self.minleech = 2 * [None]
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        for mode in search_strings.keys(): #Mode = RSS, Season, Episode
+        for mode in search_strings.keys():  # Mode = RSS, Season, Episode
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: " + search_string.strip(), logger.DEBUG)
 
                 searchURL = self.url + "api/v2/torrents/search/?category=TV&phrase=" + search_string
                 logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
                 jdata = self.getURL(searchURL, json=True)
                 if not jdata:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     return []
 
                 results = []
@@ -66,19 +63,19 @@ class STRIKEProvider(generic.TorrentProvider):
                     if not all([title, download_url]):
                         continue
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     item = title, download_url, size, seeders, leechers
                     items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/t411.py b/sickbeard/providers/t411.py
index e1f10c646ad755677c724b9b957ed0f1d1da9820..4a1d4d2f9aff776ad6ff46cee3d7720a1a6dc29f 100644
--- a/sickbeard/providers/t411.py
+++ b/sickbeard/providers/t411.py
@@ -54,9 +54,6 @@ class T411Provider(generic.TorrentProvider):
         self.minleech = 0
         self.confirmed = False
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         if self.token is not None:
@@ -93,10 +90,10 @@ class T411Provider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
-                searchURLS = ([self.urls['search'] % (search_string, u) for u in self.subcategories], [self.urls['rss']])[mode == 'RSS']
+                searchURLS = ([self.urls['search'] % (search_string, u) for u in self.subcategories], [self.urls['rss']])[mode is 'RSS']
                 for searchURL in searchURLS:
                     logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
                     data = self.getURL(searchURL, json=True)
@@ -104,18 +101,18 @@ class T411Provider(generic.TorrentProvider):
                         continue
 
                     try:
-                        if 'torrents' not in data and mode != 'RSS':
+                        if 'torrents' not in data and mode is not 'RSS':
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
 
-                        torrents = data['torrents'] if mode != 'RSS' else data
+                        torrents = data['torrents'] if mode is not 'RSS' else data
 
                         if not torrents:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
 
                         for torrent in torrents:
-                            if mode == 'RSS' and int(torrent['category']) not in self.subcategories:
+                            if mode is 'RSS' and int(torrent['category']) not in self.subcategories:
                                 continue
 
                             try:
@@ -130,31 +127,31 @@ class T411Provider(generic.TorrentProvider):
                                 leechers = int(torrent['leechers'])
                                 verified = bool(torrent['isVerified'])
 
-                                #Filter unseeded torrent
+                                # Filter unseeded torrent
                                 if seeders < self.minseed or leechers < self.minleech:
-                                    if mode != 'RSS':
+                                    if mode is not 'RSS':
                                         logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                     continue
 
-                                if self.confirmed and not verified and mode != 'RSS':
+                                if self.confirmed and not verified and mode is not 'RSS':
                                     logger.log(u"Found result " + title + " but that doesn't seem like a verified result so I'm ignoring it", logger.DEBUG)
                                     continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
 
-                            except Exception as e:
+                            except Exception:
                                 logger.log(u"Invalid torrent data, skipping result: %s" % torrent, logger.DEBUG)
                                 logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.DEBUG)
                                 continue
 
-                    except Exception, e:
+                    except Exception:
                         logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available if available
+            # For each search mode sort all the items by seeders if available if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/thepiratebay.py b/sickbeard/providers/thepiratebay.py
index 6b90b5c5bc685c7e9dede136fecc050d14edf1e2..c9dd88e0362489ec066bd16661932574907e5e16 100644
--- a/sickbeard/providers/thepiratebay.py
+++ b/sickbeard/providers/thepiratebay.py
@@ -62,10 +62,7 @@ class ThePirateBayProvider(generic.TorrentProvider):
             'category': 200
         }
 
-        self.re_title_url = r'/torrent/(?P<id>\d+)/(?P<title>.*?)//1".+?(?P<url>magnet.*?)//1".+?Size (?P<size>[\d\.]*&nbsp;[TGKMiB]{2,3}).+?(?P<seeders>\d+)</td>.+?(?P<leechers>\d+)</td>'
-
-    def isEnabled(self):
-        return self.enabled
+        self.re_title_url = r'/torrent/(?P<id>\d+)/(?P<title>.*?)".+?(?P<url>magnet.*?)".+?Size (?P<size>[\d\.]*&nbsp;[TGKMiB]{2,3}).+?(?P<seeders>\d+)</td>.+?(?P<leechers>\d+)</td>'
 
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
@@ -78,22 +75,21 @@ class ThePirateBayProvider(generic.TorrentProvider):
 
                 self.search_params.update({'q': search_string.strip()})
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: " + search_string, logger.DEBUG)
 
-                searchURL = self.urls[('search', 'rss')[mode == 'RSS']] + '?' + urlencode(self.search_params)
+                searchURL = self.urls[('search', 'rss')[mode is 'RSS']] + '?' + urlencode(self.search_params)
                 logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
                 data = self.getURL(searchURL)
-                #data = self.getURL(self.urls[('search', 'rss')[mode == 'RSS']], params=self.search_params)
+                # data = self.getURL(self.urls[('search', 'rss')[mode is 'RSS']], params=self.search_params)
                 if not data:
                     continue
 
-                re_title_url = self.proxy._buildRE(self.re_title_url).replace('&amp;f=norefer', '')
-                matches = re.compile(re_title_url, re.DOTALL).finditer(data)
+                matches = re.compile(self.re_title_url, re.DOTALL).finditer(data)
                 for torrent in matches:
                     title = torrent.group('title')
                     download_url = torrent.group('url')
-                    #id = int(torrent.group('id'))
+                    # id = int(torrent.group('id'))
                     size = self._convertSize(torrent.group('size'))
                     seeders = int(torrent.group('seeders'))
                     leechers = int(torrent.group('leechers'))
@@ -101,25 +97,25 @@ class ThePirateBayProvider(generic.TorrentProvider):
                     if not all([title, download_url]):
                         continue
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
-                    #Accept Torrent only from Good People for every Episode Search
+                    # Accept Torrent only from Good People for every Episode Search
                     if self.confirmed and re.search(r'(VIP|Trusted|Helper|Moderator)', torrent.group(0)) is None:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Found result %s but that doesn't seem like a trusted result so I'm ignoring it" % title, logger.DEBUG)
                         continue
 
                     item = title, download_url, size, seeders, leechers
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/titansoftv.py b/sickbeard/providers/titansoftv.py
index 8e6d254c624b8f8eb1c178aaf643cc8587c13ad9..c94ba6ef53ec9044250e4b808cbdb45579c79295 100644
--- a/sickbeard/providers/titansoftv.py
+++ b/sickbeard/providers/titansoftv.py
@@ -2,7 +2,7 @@
 # URL: http://code.google.com/p/sickbeard
 # Originally written for SickGear
 #
-# This file is part of SickRage. 
+# This file is part of SickRage.
 #
 # SickRage is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -19,7 +19,7 @@
 
 import urllib
 
-import generic
+from sickbeard.providers import generic
 from sickbeard import logger
 from sickbeard import tvcache
 from sickbeard.helpers import mapIndexersToShow
@@ -38,9 +38,6 @@ class TitansOfTVProvider(generic.TorrentProvider):
         self.url = 'http://titansof.tv/api/torrents'
         self.download_url = 'http://titansof.tv/api/torrents/%s/download?apikey=%s'
 
-    def isEnabled(self):
-        return self.enabled
-
     def seedRatio(self):
         return self.ratio
 
@@ -58,7 +55,7 @@ class TitansOfTVProvider(generic.TorrentProvider):
         return True
 
     def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0, epObj=None):
-        #FIXME ADD MODE
+        # FIXME ADD MODE
         self._checkAuth()
         results = []
         params = {}
@@ -69,26 +66,26 @@ class TitansOfTVProvider(generic.TorrentProvider):
 
         searchURL = self.url + '?' + urllib.urlencode(params)
         logger.log(u"Search string: %s " % search_params, logger.DEBUG)
-        logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG) 
+        logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
 
         parsedJSON = self.getURL(searchURL, json=True)  # do search
 
         if not parsedJSON:
-            logger.log("No data returned from provider", logger.DEBUG)
+            logger.log(u"No data returned from provider", logger.DEBUG)
             return results
 
         if self._checkAuthFromData(parsedJSON):
 
             try:
                 found_torrents = parsedJSON['results']
-            except:
+            except Exception:
                 found_torrents = {}
 
             for result in found_torrents:
-                title = parsedJSON['release_name']
-                id = parsedJSON['id']
-                download_url = self.download_url % (id, self.api_key)
-                #FIXME
+                title = result.get('release_name', '')
+                tid = result.get('id', '')
+                download_url = self.download_url % (tid, self.api_key)
+                # FIXME size, seeders, leechers
                 size = -1
                 seeders = 1
                 leechers = 0
@@ -96,18 +93,18 @@ class TitansOfTVProvider(generic.TorrentProvider):
                 if not all([title, download_url]):
                     continue
 
-                #Filter unseeded torrent
-                #if seeders < self.minseed or leechers < self.minleech:
-                #    if mode != 'RSS':
+                # Filter unseeded torrent
+                # if seeders < self.minseed or leechers < self.minleech:
+                #    if mode is not 'RSS':
                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                 #    continue
 
                 item = title, download_url, size, seeders, leechers
 
                 logger.log(u"Found result: %s " % title, logger.DEBUG)
-                results.append(result)
+                results.append(item)
 
-        #FIXME SORTING
+        # FIXME SORTING
 
         return results
 
diff --git a/sickbeard/providers/tntvillage.py b/sickbeard/providers/tntvillage.py
index c62797543310e3a2c011657bcba2ea13fb2b6da4..5b4fc5d4fb8036ee739ac052dc0d46535eb13c13 100644
--- a/sickbeard/providers/tntvillage.py
+++ b/sickbeard/providers/tntvillage.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Giovanni Borri
 # Modified by gborri, https://github.com/gborri for TNTVillage
 #
@@ -28,35 +29,35 @@ from sickbeard.bs4_parser import BS4Parser
 from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 from sickrage.helper.exceptions import AuthException
 
-category_excluded = {'Sport' : 22,
-                     'Teatro' : 23,
-                     'Video Musicali' : 21,
-                     'Film' : 4,
-                     'Musica' : 2,
-                     'Students Releases' : 13,
-                     'E Books' : 3,
-                     'Linux' : 6,
-                     'Macintosh' : 9,
-                     'Windows Software' : 10,
-                     'Pc Game' : 11,
-                     'Playstation 2' : 12,
-                     'Wrestling' : 24,
-                     'Varie' : 25,
-                     'Xbox' : 26,
-                     'Immagini sfondi' : 27,
-                     'Altri Giochi' : 28,
-                     'Fumetteria' : 30,
-                     'Trash' : 31,
-                     'PlayStation 1' : 32,
-                     'PSP Portable' : 33,
-                     'A Book' : 34,
-                     'Podcast' : 35,
-                     'Edicola' : 36,
-                     'Mobile' : 37}
+category_excluded = {'Sport': 22,
+                     'Teatro': 23,
+                     'Video Musicali': 21,
+                     'Film': 4,
+                     'Musica': 2,
+                     'Students Releases': 13,
+                     'E Books': 3,
+                     'Linux': 6,
+                     'Macintosh': 9,
+                     'Windows Software': 10,
+                     'Pc Game': 11,
+                     'Playstation 2': 12,
+                     'Wrestling': 24,
+                     'Varie': 25,
+                     'Xbox': 26,
+                     'Immagini sfondi': 27,
+                     'Altri Giochi': 28,
+                     'Fumetteria': 30,
+                     'Trash': 31,
+                     'PlayStation 1': 32,
+                     'PSP Portable': 33,
+                     'A Book': 34,
+                     'Podcast': 35,
+                     'Edicola': 36,
+                     'Mobile': 37}
+
 
 class TNTVillageProvider(generic.TorrentProvider):
     def __init__(self):
-
         generic.TorrentProvider.__init__(self, "TNTVillage")
 
         self.supportsBacklog = True
@@ -86,19 +87,19 @@ class TNTVillageProvider(generic.TorrentProvider):
                        ' 720p HEVC',
                        ' 720p']
 
-        self.category_dict = {'Serie TV' : 29,
-                              'Cartoni' : 8,
-                              'Anime' : 7,
-                              'Programmi e Film TV' : 1,
-                              'Documentari' : 14,
-                              'All' : 0}
+        self.category_dict = {'Serie TV': 29,
+                              'Cartoni': 8,
+                              'Anime': 7,
+                              'Programmi e Film TV': 1,
+                              'Documentari': 14,
+                              'All': 0}
 
-        self.urls = {'base_url' : 'http://forum.tntvillage.scambioetico.org',
-                     'login' : 'http://forum.tntvillage.scambioetico.org/index.php?act=Login&CODE=01',
-                     'detail' : 'http://forum.tntvillage.scambioetico.org/index.php?showtopic=%s',
-                     'search' : 'http://forum.tntvillage.scambioetico.org/?act=allreleases&%s',
-                     'search_page' : 'http://forum.tntvillage.scambioetico.org/?act=allreleases&st={0}&{1}',
-                     'download' : 'http://forum.tntvillage.scambioetico.org/index.php?act=Attach&type=post&id=%s'}
+        self.urls = {'base_url': 'http://forum.tntvillage.scambioetico.org',
+                     'login': 'http://forum.tntvillage.scambioetico.org/index.php?act=Login&CODE=01',
+                     'detail': 'http://forum.tntvillage.scambioetico.org/index.php?showtopic=%s',
+                     'search': 'http://forum.tntvillage.scambioetico.org/?act=allreleases&%s',
+                     'search_page': 'http://forum.tntvillage.scambioetico.org/?act=allreleases&st={0}&{1}',
+                     'download': 'http://forum.tntvillage.scambioetico.org/index.php?act=Attach&type=post&id=%s'}
 
         self.url = self.urls['base_url']
 
@@ -112,10 +113,6 @@ class TNTVillageProvider(generic.TorrentProvider):
 
         self.cache = TNTVillageCache(self)
 
-
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
@@ -135,8 +132,7 @@ class TNTVillageProvider(generic.TorrentProvider):
             logger.log(u"Unable to connect to provider", logger.WARNING)
             return False
 
-        if re.search('Sono stati riscontrati i seguenti errori', response) \
-        or re.search('<title>Connettiti</title>', response):
+        if re.search('Sono stati riscontrati i seguenti errori', response) or re.search('<title>Connettiti</title>', response):
             logger.log(u"Invalid username or password. Check your settings", logger.WARNING)
             return False
 
@@ -186,7 +182,8 @@ class TNTVillageProvider(generic.TorrentProvider):
             file_quality = (torrent_rows.find_all('td'))[1].get_text()
             logger.log(u"Episode quality: %s" % file_quality, logger.DEBUG)
 
-        checkName = lambda list, func: func([re.search(x, file_quality, re.I) for x in list])
+        def checkName(options, func):
+            return func([re.search(option, file_quality, re.I) for option in options])
 
         dvdOptions = checkName(["dvd", "dvdrip", "dvdmux", "DVD9", "DVD5"], any)
         bluRayOptions = checkName(["BD", "BDmux", "BDrip", "BRrip", "Bluray"], any)
@@ -287,7 +284,7 @@ class TNTVillageProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode == 'RSS':
+                if mode is 'RSS':
                     self.page = 2
 
                 last_page = 0
@@ -299,30 +296,30 @@ class TNTVillageProvider(generic.TorrentProvider):
                 search_string = str(search_string).replace('.', ' ')
 
                 for x in range(0, y):
-                    z = x*20
+                    z = x * 20
                     if last_page:
                         break
 
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         searchURL = (self.urls['search_page'] + '&filter={2}').format(z, self.categories, search_string)
                     else:
                         searchURL = self.urls['search_page'].format(z, self.categories)
 
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
-                    logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
+                    logger.log(u"Search URL: %s" % searchURL, logger.DEBUG)
                     data = self.getURL(searchURL)
                     if not data:
-                        logger.log("No data returned from provider", logger.DEBUG)
+                        logger.log(u"No data returned from provider", logger.DEBUG)
                         continue
 
                     try:
                         with BS4Parser(data, features=["html5lib", "permissive"]) as html:
-                            torrent_table = html.find('table', attrs={'class' : 'copyright'})
+                            torrent_table = html.find('table', attrs={'class': 'copyright'})
                             torrent_rows = torrent_table.find_all('tr') if torrent_table else []
 
-                            #Continue only if one Release is found
+                            # Continue only if one Release is found
                             if len(torrent_rows) < 3:
                                 logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                                 last_page = 1
@@ -341,7 +338,7 @@ class TNTVillageProvider(generic.TorrentProvider):
                                     leechers = int(leechers.strip('[]'))
                                     seeders = result.find_all('td')[3].find_all('td')[2].text
                                     seeders = int(seeders.strip('[]'))
-                                    #FIXME
+                                    # FIXME
                                     size = -1
                                 except (AttributeError, TypeError):
                                     continue
@@ -357,11 +354,11 @@ class TNTVillageProvider(generic.TorrentProvider):
                                     title += filename_qt
 
                                 if not self._is_italian(result) and not self.subtitle:
-                                    logger.log(u"Torrent is subtitled, skipping: %s "  % title, logger.DEBUG)
+                                    logger.log(u"Torrent is subtitled, skipping: %s " % title, logger.DEBUG)
                                     continue
 
                                 if self.engrelease and not self._is_english(result):
-                                    logger.log(u"Torrent isnt english audio/subtitled , skipping: %s "  % title, logger.DEBUG)
+                                    logger.log(u"Torrent isnt english audio/subtitled , skipping: %s " % title, logger.DEBUG)
                                     continue
 
                                 search_show = re.split(r'([Ss][\d{1,2}]+)', search_string)[0]
@@ -380,14 +377,14 @@ class TNTVillageProvider(generic.TorrentProvider):
                                 if self._is_season_pack(title):
                                     title = re.sub(r'([Ee][\d{1,2}\-?]+)', '', title)
 
-                                #Filter unseeded torrent
+                                # Filter unseeded torrent
                                 if seeders < self.minseed or leechers < self.minleech:
-                                    if mode != 'RSS':
+                                    if mode is not 'RSS':
                                         logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                     continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
@@ -395,7 +392,7 @@ class TNTVillageProvider(generic.TorrentProvider):
                     except Exception:
                         logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-                #For each search mode sort all the items by seeders if available if available
+                # For each search mode sort all the items by seeders if available if available
                 items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
                 results += items[mode]
diff --git a/sickbeard/providers/tokyotoshokan.py b/sickbeard/providers/tokyotoshokan.py
index d1d909528733182789b1585171ee954fa3d25a14..ed7acce2a9950d6992d484e8cee6acf92e6ee3fd 100644
--- a/sickbeard/providers/tokyotoshokan.py
+++ b/sickbeard/providers/tokyotoshokan.py
@@ -42,9 +42,6 @@ class TokyoToshokanProvider(generic.TorrentProvider):
         self.urls = {'base_url': 'http://tokyotosho.info/'}
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
     def seedRatio(self):
         return self.ratio
 
@@ -55,7 +52,7 @@ class TokyoToshokanProvider(generic.TorrentProvider):
         return [x.replace('.', ' ') for x in show_name_helpers.makeSceneSearchString(self.show, ep_obj)]
 
     def _doSearch(self, search_string, search_mode='eponly', epcount=0, age=0, epObj=None):
-        #FIXME ADD MODE
+        # FIXME ADD MODE
         if self.show and not self.show.is_anime:
             return []
 
@@ -63,7 +60,7 @@ class TokyoToshokanProvider(generic.TorrentProvider):
 
         params = {
             "terms": search_string.encode('utf-8'),
-            "type": 1, # get anime types
+            "type": 1,  # get anime types
         }
 
         searchURL = self.url + 'search.php?' + urllib.urlencode(params)
@@ -88,7 +85,7 @@ class TokyoToshokanProvider(generic.TorrentProvider):
                         title = top.find('td', attrs={'class': 'desc-top'}).text
                         title.lstrip()
                         download_url = top.find('td', attrs={'class': 'desc-top'}).find('a')['href']
-                        #FIXME
+                        # FIXME
                         size = -1
                         seeders = 1
                         leechers = 0
@@ -96,9 +93,9 @@ class TokyoToshokanProvider(generic.TorrentProvider):
                         if not all([title, download_url]):
                             continue
 
-                        #Filter unseeded torrent
-                        #if seeders < self.minseed or leechers < self.minleech:
-                        #    if mode != 'RSS':
+                        # Filter unseeded torrent
+                        # if seeders < self.minseed or leechers < self.minleech:
+                        #    if mode is not 'RSS':
                         #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         #    continue
 
@@ -109,7 +106,7 @@ class TokyoToshokanProvider(generic.TorrentProvider):
         except Exception, e:
             logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-        #FIXME SORTING
+        # FIXME SORTING
         return results
 
 
diff --git a/sickbeard/providers/torrentbytes.py b/sickbeard/providers/torrentbytes.py
index 48d4c5d5a333eab66582a77f7a1bd1adb67d48c8..30711eda2f6b62ddb9b4f378dc1e1e1987854f98 100644
--- a/sickbeard/providers/torrentbytes.py
+++ b/sickbeard/providers/torrentbytes.py
@@ -55,9 +55,6 @@ class TorrentBytesProvider(generic.TorrentProvider):
 
         self.cache = TorrentBytesCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
@@ -87,7 +84,7 @@ class TorrentBytesProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urls['search'] % (urllib.quote(search_string.encode('utf-8')), self.categories)
@@ -99,7 +96,7 @@ class TorrentBytesProvider(generic.TorrentProvider):
 
                 try:
                     with BS4Parser(data, features=["html5lib", "permissive"]) as html:
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         empty = html.find('Nothing found!')
                         if empty:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
@@ -116,7 +113,7 @@ class TorrentBytesProvider(generic.TorrentProvider):
                             full_id = link['href'].replace('details.php?id=', '')
                             torrent_id = full_id.split("&")[0]
 
-                            #Free leech torrents are marked with green [F L] in the title (i.e. <font color=green>[F&nbsp;L]</font>)
+                            # Free leech torrents are marked with green [F L] in the title (i.e. <font color=green>[F&nbsp;L]</font>)
                             freeleechTag = cells[1].find('font', attrs={'color': 'green'})
                             if freeleechTag and freeleechTag.text == u'[F\xa0L]':
                                 isFreeleechTorrent = True
@@ -148,14 +145,14 @@ class TorrentBytesProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
@@ -163,7 +160,7 @@ class TorrentBytesProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py
index 82b2cf235dca7cd1a2cdeb80de606b814f1ecdfd..1d84445385dd6c11e7df7f754b65aed7db1b98dd 100644
--- a/sickbeard/providers/torrentday.py
+++ b/sickbeard/providers/torrentday.py
@@ -53,9 +53,6 @@ class TorrentDayProvider(generic.TorrentProvider):
         self.categories = {'Season': {'c14': 1}, 'Episode': {'c2': 1, 'c26': 1, 'c7': 1, 'c24': 1},
                            'RSS': {'c2': 1, 'c26': 1, 'c7': 1, 'c24': 1, 'c14': 1}}
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
@@ -105,7 +102,7 @@ class TorrentDayProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 search_string = '+'.join(search_string.split())
@@ -118,7 +115,7 @@ class TorrentDayProvider(generic.TorrentProvider):
 
                 parsedJSON = self.getURL(self.urls['search'], post_data=post_data, json=True)
                 if not parsedJSON:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 try:
@@ -133,25 +130,25 @@ class TorrentDayProvider(generic.TorrentProvider):
                     download_url = self.urls['download'] % ( torrent['id'], torrent['fname'])
                     seeders = int(torrent['seed'])
                     leechers = int(torrent['leech'])
-                    #FIXME
+                    # FIXME
                     size = -1
 
                     if not all([title, download_url]):
                         continue
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
                     item = title, download_url, size, seeders, leechers
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                     items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available if available
+            # For each search mode sort all the items by seeders if available if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/torrentleech.py b/sickbeard/providers/torrentleech.py
index f08df58bb0d304302db3c63eae6265c5e03f580a..2ab8987dcaa441a6788cb59c680f8442852d3d8f 100644
--- a/sickbeard/providers/torrentleech.py
+++ b/sickbeard/providers/torrentleech.py
@@ -55,9 +55,6 @@ class TorrentLeechProvider(generic.TorrentProvider):
 
         self.cache = TorrentLeechCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         login_params = {'username': self.username,
@@ -88,7 +85,7 @@ class TorrentLeechProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode == 'RSS':
+                if mode is 'RSS':
                     searchURL = self.urls['index'] % self.categories
                 else:
                     searchURL = self.urls['search'] % (urllib.quote_plus(search_string.encode('utf-8')), self.categories)
@@ -104,7 +101,7 @@ class TorrentLeechProvider(generic.TorrentProvider):
                         torrent_table = html.find('table', attrs={'id': 'torrenttable'})
                         torrent_rows = torrent_table.find_all('tr') if torrent_table else []
 
-                        #Continue only if one Release is found
+                        # Continue only if one Release is found
                         if len(torrent_rows) < 2:
                             logger.log(u"Data returned from provider does not contain any torrents", logger.DEBUG)
                             continue
@@ -118,7 +115,7 @@ class TorrentLeechProvider(generic.TorrentProvider):
                                 download_url = self.urls['download'] % url['href']
                                 seeders = int(result.find('td', attrs={'class': 'seeders'}).string)
                                 leechers = int(result.find('td', attrs={'class': 'leechers'}).string)
-                                #FIXME
+                                # FIXME
                                 size = -1
                             except (AttributeError, TypeError):
                                 continue
@@ -126,14 +123,14 @@ class TorrentLeechProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
@@ -141,7 +138,7 @@ class TorrentLeechProvider(generic.TorrentProvider):
                 except Exception, e:
                     logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/torrentproject.py b/sickbeard/providers/torrentproject.py
index bd0db478637918329df2d81b18d2229365649496..7e53ac31459e9e05cf688e9fa2b09015596f766f 100644
--- a/sickbeard/providers/torrentproject.py
+++ b/sickbeard/providers/torrentproject.py
@@ -39,18 +39,15 @@ class TORRENTPROJECTProvider(generic.TorrentProvider):
         self.minleech = None
         self.cache = TORRENTPROJECTCache(self)
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doSearch(self, search_strings, search_mode='eponly', epcount=0, age=0, epObj=None):
 
         results = []
         items = {'Season': [], 'Episode': [], 'RSS': []}
 
-        for mode in search_strings.keys(): #Mode = RSS, Season, Episode
+        for mode in search_strings.keys():  # Mode = RSS, Season, Episode
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
 
@@ -70,38 +67,30 @@ class TORRENTPROJECTProvider(generic.TorrentProvider):
                     seeders = helpers.tryInt(torrents[i]["seeds"], 1)
                     leechers = helpers.tryInt(torrents[i]["leechs"], 0)
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
-                            logger.log("Torrent doesn't meet minimum seeds & leechers not selecting : %s" % title, logger.DEBUG)
+                        if mode is not 'RSS':
+                            logger.log(u"Torrent doesn't meet minimum seeds & leechers not selecting : %s" % title, logger.DEBUG)
                         continue
 
                     t_hash = torrents[i]["torrent_hash"]
                     size = int(torrents[i]["torrent_size"])
 
-                    if seeders < 10:
-                        if mode != 'RSS':
-                            logger.log("Torrent has less than 10 seeds getting dyn trackers: " + title, logger.DEBUG)
-                            trackerUrl = self.urls['api'] + "" + t_hash + "/trackers_json"
-                            jdata = self.getURL(trackerUrl, json=True)
-                            if jdata == "maintenance":
-                                download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
-                                logger.log("Tracker url is in " + jdata + " mode, using hardcoded one" , logger.INFO)
-                            else:
-                                download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "".join(["&tr=" + s for s in jdata])
-                                logger.log("Dyn Magnet: " + download_url, logger.DEBUG)
-                        else:
-                            download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
-                            logger.log("Result has less than 10 seeds but not using Dyn Magnet becouse its from RSS" + title, logger.DEBUG)
-                    else:
-                        #logger.log("Torrent has more than 10 seeds using hard coded trackers", logger.DEBUG)
+                    try:
+                        assert seeders < 10
+                        assert mode is not 'RSS'
+                        logger.log(u"Torrent has less than 10 seeds getting dyn trackers: " + title, logger.DEBUG)
+                        trackerUrl = self.urls['api'] + "" + t_hash + "/trackers_json"
+                        jdata = self.getURL(trackerUrl, json=True)
+                        assert jdata is not "maintenance"
+                        download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "".join(["&tr=" + s for s in jdata])
+                    except (Exception, AssertionError):
                         download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
 
-
                     if not all([title, download_url]):
                         continue
 
                     item = title, download_url, size, seeders, leechers
 
-                    if mode != 'RSS':
+                    if mode is not 'RSS':
                         logger.log(u"Found result: %s" % title, logger.DEBUG)
 
                     items[mode].append(item)
@@ -125,7 +114,7 @@ class TORRENTPROJECTCache(tvcache.TVCache):
         self.minTime = 20
 
     def _getRSSData(self):
-        
+
         search_params = {'RSS': ['0day']}
         return {'entries': self.provider._doSearch(search_params)}
 
diff --git a/sickbeard/providers/torrentz.py b/sickbeard/providers/torrentz.py
index 0f7206eec95c7f53f7c7e7e14d66e03d65adcb84..20c3ef711aa431a314c179f661f1d5c87dfaf926 100644
--- a/sickbeard/providers/torrentz.py
+++ b/sickbeard/providers/torrentz.py
@@ -21,7 +21,6 @@ import re
 import time
 import traceback
 import xmltodict
-import HTMLParser
 from six.moves import urllib
 from xml.parsers.expat import ExpatError
 
@@ -48,9 +47,6 @@ class TORRENTZProvider(generic.TorrentProvider):
                      'base': 'https://torrentz.eu/'}
         self.url = self.urls['base']
 
-    def isEnabled(self):
-        return self.enabled
-
     def seedRatio(self):
         return self.ratio
 
@@ -66,31 +62,31 @@ class TORRENTZProvider(generic.TorrentProvider):
         for mode in search_strings:
             for search_string in search_strings[mode]:
                 search_url = self.urls['verified'] if self.confirmed else self.urls['feed']
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     search_url += '?q=' + urllib.parse.quote_plus(search_string)
 
                 logger.log(search_url)
                 data = self.getURL(search_url)
                 if not data:
-                    logger.log('Seems to be down right now!')
+                    logger.log(u'Seems to be down right now!')
                     continue
 
                 if not data.startswith("<?xml"):
-                    logger.log('Wrong data returned from: ' + search_url, logger.DEBUG)
+                    logger.log(u'Wrong data returned from: ' + search_url, logger.DEBUG)
                     continue
 
                 if not data.startswith('<?xml'):
-                    logger.log(u'Expected xml but got something else, is your proxy failing?', logger.INFO)
+                    logger.log(u'Expected xml but got something else, is your mirror failing?', logger.INFO)
                     continue
 
                 try:
-                    data = xmltodict.parse(HTMLParser.HTMLParser().unescape(data.encode('utf-8')).decode('utf-8').replace('&', '&amp;'))
+                    data = xmltodict.parse(data)
                 except ExpatError:
                     logger.log(u"Failed parsing provider. Traceback: %r\n%r" % (traceback.format_exc(), data), logger.ERROR)
                     continue
 
                 if not all([data, 'rss' in data, 'channel' in data['rss'], 'item' in data['rss']['channel']]):
-                    logger.log(u"Malformed rss returned, skipping", logger.DEBUG)
+                    logger.log(u"Malformed rss returned or no results, skipping", logger.DEBUG)
                     continue
 
                 time.sleep(cpu_presets[sickbeard.CPU_PRESET])
@@ -113,15 +109,15 @@ class TORRENTZProvider(generic.TorrentProvider):
                     download_url = "magnet:?xt=urn:btih:" + t_hash + "&dn=" + title + "&tr=udp://tracker.openbittorrent.com:80&tr=udp://tracker.coppersurfer.tk:6969&tr=udp://open.demonii.com:1337&tr=udp://tracker.leechers-paradise.org:6969&tr=udp://exodus.desync.com:6969"
                     size, seeders, leechers = self._split_description(item.get('description', ''))
 
-                    #Filter unseeded torrent
+                    # Filter unseeded torrent
                     if seeders < self.minseed or leechers < self.minleech:
-                        if mode != 'RSS':
+                        if mode is not 'RSS':
                             logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                         continue
 
                     items[mode].append((title, download_url, size, seeders, leechers))
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
             results += items[mode]
 
diff --git a/sickbeard/providers/transmitthenet.py b/sickbeard/providers/transmitthenet.py
index 136cc1f54168cbe280ca67bb855b48ae3dcb74ad..e4e5b30e79f0ef4931a0115c74dedd36880a1d24 100644
--- a/sickbeard/providers/transmitthenet.py
+++ b/sickbeard/providers/transmitthenet.py
@@ -52,9 +52,6 @@ class TransmitTheNetProvider(generic.TorrentProvider):
             "active": 1
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
 
         if not self.username or not self.password:
@@ -93,7 +90,7 @@ class TransmitTheNetProvider(generic.TorrentProvider):
         for mode in search_strings.keys():
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 data = self.getURL(self.urls['index'], params=self.search_params)
@@ -101,7 +98,7 @@ class TransmitTheNetProvider(generic.TorrentProvider):
                 logger.log(u"Search URL: %s" %  searchURL, logger.DEBUG)
 
                 if not data:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 try:
@@ -128,20 +125,20 @@ class TransmitTheNetProvider(generic.TorrentProvider):
                             seeders = int(torrent_row.findAll('a', {'title': 'Click here to view peers details'})[0].text.strip())
                             leechers = int(torrent_row.findAll('a', {'title': 'Click here to view peers details'})[1].text.strip())
                             download_url = self.urls['base_url'] + download_href
-                            #FIXME
+                            # FIXME
                             size = -1
 
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
diff --git a/sickbeard/providers/tvchaosuk.py b/sickbeard/providers/tvchaosuk.py
index 30dbc2f9aaa5242598e51602e5c954949e456b76..49aab00075b0503218f75e6772d567116bda63eb 100644
--- a/sickbeard/providers/tvchaosuk.py
+++ b/sickbeard/providers/tvchaosuk.py
@@ -14,7 +14,7 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
 import re
-#from urllib import urlencode
+# from urllib import urlencode
 
 import sickbeard
 from sickbeard import logger
@@ -55,9 +55,6 @@ class TVChaosUKProvider(generic.TorrentProvider):
             'include_dead_torrents': 'no',
         }
 
-    def isEnabled(self):
-        return self.enabled
-
     def _checkAuth(self):
         if self.username and self.password:
             return True
@@ -134,15 +131,15 @@ class TVChaosUKProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_strings[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 self.search_params['keywords'] = search_string.strip()
                 data = self.getURL(self.urls['search'], params=self.search_params)
-                #url_searched = self.urls['search'] + '?' + urlencode(self.search_params)
+                # url_searched = self.urls['search'] + '?' + urlencode(self.search_params)
 
                 if not data:
-                    logger.log("No data returned from provider", logger.DEBUG)
+                    logger.log(u"No data returned from provider", logger.DEBUG)
                     continue
 
                 with BS4Parser(data) as html:
@@ -157,9 +154,9 @@ class TVChaosUKProvider(generic.TorrentProvider):
                             if not all([title, download_url]):
                                 continue
 
-                            #Filter unseeded torrent
+                            # Filter unseeded torrent
                             if seeders < self.minseed or leechers < self.minleech:
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 continue
 
@@ -175,11 +172,11 @@ class TVChaosUKProvider(generic.TorrentProvider):
                             # Strip year from the end or we can't parse it!
                             title = re.sub(r'[\. ]?\(\d{4}\)', '', title)
 
-                            #FIXME
+                            # FIXME
                             size = -1
 
                             item = title, download_url, size, seeders, leechers
-                            if mode != 'RSS':
+                            if mode is not 'RSS':
                                 logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                             items[mode].append(item)
@@ -187,7 +184,7 @@ class TVChaosUKProvider(generic.TorrentProvider):
                         except Exception:
                             continue
 
-            #For each search mode sort all the items by seeders if available
+            # For each search mode sort all the items by seeders if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/providers/womble.py b/sickbeard/providers/womble.py
index 5a93315fc619a693cda8346d1fcba0894f7220c8..136d649fc061ebb986ef2ad728c054bf5ed9772f 100644
--- a/sickbeard/providers/womble.py
+++ b/sickbeard/providers/womble.py
@@ -16,7 +16,7 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-import generic
+from sickbeard.providers import generic
 
 from sickbeard import logger
 from sickbeard import tvcache
@@ -27,12 +27,9 @@ class WombleProvider(generic.NZBProvider):
         generic.NZBProvider.__init__(self, "Womble's Index")
         self.public = True
         self.cache = WombleCache(self)
-        self.urls = {'base_url': 'https://newshost.co.za/'}
+        self.urls = {'base_url': 'http://newshost.co.za/'}
         self.url = self.urls['base_url']
 
-    def isEnabled(self):
-        return self.enabled
-
 
 class WombleCache(tvcache.TVCache):
     def __init__(self, provider_obj):
diff --git a/sickbeard/providers/xthor.py b/sickbeard/providers/xthor.py
index 0b0623c34e7cc460c06c9303f3548bfa1148b717..71cf973b5fb0310756133e72110c6c825f0b0370 100644
--- a/sickbeard/providers/xthor.py
+++ b/sickbeard/providers/xthor.py
@@ -45,9 +45,6 @@ class XthorProvider(generic.TorrentProvider):
         self.password = None
         self.ratio = None
 
-    def isEnabled(self):
-        return self.enabled
-
     def _doLogin(self):
 
         if any(requests.utils.dict_from_cookiejar(self.session.cookies).values()):
@@ -83,7 +80,7 @@ class XthorProvider(generic.TorrentProvider):
             logger.log(u"Search Mode: %s" % mode, logger.DEBUG)
             for search_string in search_params[mode]:
 
-                if mode != 'RSS':
+                if mode is not 'RSS':
                     logger.log(u"Search string: %s " % search_string, logger.DEBUG)
 
                 searchURL = self.urlsearch % (urllib.quote(search_string), self.categories)
@@ -102,7 +99,7 @@ class XthorProvider(generic.TorrentProvider):
                             if link:
                                 title = link.text
                                 download_url = self.url + '/' + row.find("a", href=re.compile("download.php"))['href']
-                                #FIXME
+                                # FIXME
                                 size = -1
                                 seeders = 1
                                 leechers = 0
@@ -110,19 +107,19 @@ class XthorProvider(generic.TorrentProvider):
                                 if not all([title, download_url]):
                                     continue
 
-                                #Filter unseeded torrent
-                                #if seeders < self.minseed or leechers < self.minleech:
-                                #    if mode != 'RSS':
+                                # Filter unseeded torrent
+                                # if seeders < self.minseed or leechers < self.minleech:
+                                #    if mode is not 'RSS':
                                 #        logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
                                 #    continue
 
                                 item = title, download_url, size, seeders, leechers
-                                if mode != 'RSS':
+                                if mode is not 'RSS':
                                     logger.log(u"Found result: %s " % title, logger.DEBUG)
 
                                 items[mode].append(item)
 
-            #For each search mode sort all the items by seeders if available if available
+            # For each search mode sort all the items by seeders if available if available
             items[mode].sort(key=lambda tup: tup[3], reverse=True)
 
             results += items[mode]
diff --git a/sickbeard/rssfeeds.py b/sickbeard/rssfeeds.py
index 5fb71ca83941057d7bdbacfd4539d2033b89ff4c..2e7fc26fcaea6db313d5951b334e93d8a72d47de 100644
--- a/sickbeard/rssfeeds.py
+++ b/sickbeard/rssfeeds.py
@@ -1,43 +1,29 @@
-
-import os
-import urllib
-
-import sickbeard
+import re
+import urlparse
+from feedparser.api import parse
+from feedparser.util import FeedParserDict
 
 from sickbeard import logger
-from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
 
-from feedcache.cache import Cache
-
-from sqliteshelf import SQLiteShelf
-
-
-class RSSFeeds:
-    def __init__(self, db_name='feeds'):
-        try:
-            db_name = ek(os.path.join, sickbeard.CACHE_DIR, 'rss', db_name) + '.db'
-            if not os.path.exists(os.path.dirname(db_name)):
-                sickbeard.helpers.makeDir(os.path.dirname(db_name))
-
-            self.rssDB = SQLiteShelf(db_name)
-        except Exception as e:
-            logger.log(u"FeedParser error: " + ex(e), logger.DEBUG)
-
-    def clearCache(self, age=None):
-        try:
-            Cache(self.rssDB).purge(age)
-        finally:
-            self.rssDB.close()
+def getFeed(url, request_headers=None, handlers=None):
+    parsed = list(urlparse.urlparse(url))
+    parsed[2] = re.sub("/{2,}", "/", parsed[2])  # replace two or more / with one
 
-    def getFeed(self, url, post_data=None, request_headers=None, items=None, handlers=[]):
+    try:
+        feed = parse(url, False, False, request_headers, handlers=handlers)
 
-        if post_data:
-            url += urllib.urlencode(post_data)
+        if feed:
+            if 'entries' in feed:
+                return feed
+            elif 'error' in feed.feed:
+                err_code = feed.feed['error']['code']
+                err_desc = feed.feed['error']['description']
+                logger.log(u'RSS ERROR:[%s] CODE:[%s]' % (err_desc, err_code), logger.DEBUG)
+        else:
+            logger.log(u'RSS error loading url: ' + url, logger.DEBUG)
 
-        try:
-            resp = Cache(self.rssDB, userAgent=sickbeard.common.USER_AGENT).fetch(url, force_update=True, request_headers=request_headers, handlers=handlers)
-        finally:
-            self.rssDB.close()
+    except Exception as e:
+        logger.log(u'RSS error: ' + ex(e), logger.DEBUG)
 
-        return resp
+    return FeedParserDict()
diff --git a/sickbeard/sab.py b/sickbeard/sab.py
index b940a18f9e916c3dffa8ec75a5f28d3cf2730b63..0dc7625aabcb4ca63e088f54847c38a8a5cb7474 100644
--- a/sickbeard/sab.py
+++ b/sickbeard/sab.py
@@ -77,7 +77,7 @@ def sendNZB(nzb):
         if nzb.provider.getID() == 'newzbin':
             id = nzb.provider.getIDFromURL(nzb.url)
             if not id:
-                logger.log("Unable to send NZB to sab, can't find ID in URL " + str(nzb.url), logger.ERROR)
+                logger.log(u"Unable to send NZB to sab, can't find ID in URL " + str(nzb.url), logger.ERROR)
                 return False
             params['mode'] = 'addid'
             params['name'] = id
diff --git a/sickbeard/sbdatetime.py b/sickbeard/sbdatetime.py
index be9e158920819e7187056db26b33bee115befd56..eae6a67458785b74b0ac9162856a6884c0a39559 100644
--- a/sickbeard/sbdatetime.py
+++ b/sickbeard/sbdatetime.py
@@ -24,69 +24,70 @@ import functools
 import sickbeard
 from sickbeard.network_timezones import sb_timezone
 
-date_presets = ('%Y-%m-%d',
-                '%a, %Y-%m-%d',
-                '%A, %Y-%m-%d',
-                '%y-%m-%d',
-                '%a, %y-%m-%d',
-                '%A, %y-%m-%d',
-                '%m/%d/%Y',
-                '%a, %m/%d/%Y',
-                '%A, %m/%d/%Y',
-                '%m/%d/%y',
-                '%a, %m/%d/%y',
-                '%A, %m/%d/%y',
-                '%m-%d-%Y',
-                '%a, %m-%d-%Y',
-                '%A, %m-%d-%Y',
-                '%m-%d-%y',
-                '%a, %m-%d-%y',
-                '%A, %m-%d-%y',
-                '%m.%d.%Y',
-                '%a, %m.%d.%Y',
-                '%A, %m.%d.%Y',
-                '%m.%d.%y',
-                '%a, %m.%d.%y',
-                '%A, %m.%d.%y',
-                '%d-%m-%Y',
-                '%a, %d-%m-%Y',
-                '%A, %d-%m-%Y',
-                '%d-%m-%y',
-                '%a, %d-%m-%y',
-                '%A, %d-%m-%y',
-                '%d/%m/%Y',
-                '%a, %d/%m/%Y',
-                '%A, %d/%m/%Y',
-                '%d/%m/%y',
-                '%a, %d/%m/%y',
-                '%A, %d/%m/%y',
-                '%d.%m.%Y',
-                '%a, %d.%m.%Y',
-                '%A, %d.%m.%Y',
-                '%d.%m.%y',
-                '%a, %d.%m.%y',
-                '%A, %d.%m.%y',
-                '%d. %b %Y',
-                '%a, %d. %b %Y',
-                '%A, %d. %b %Y',
-                '%d. %b %y',
-                '%a, %d. %b %y',
-                '%A, %d. %b %y',
-                '%d. %B %Y',
-                '%a, %d. %B %Y',
-                '%A, %d. %B %Y',
-                '%d. %B %y',
-                '%a, %d. %B %y',
-                '%A, %d. %B %y',
-                '%b %d, %Y',
-                '%a, %b %d, %Y',
-                '%A, %b %d, %Y',
-                '%B %d, %Y',
-                '%a, %B %d, %Y',
-                '%A, %B %d, %Y')
+date_presets = (
+    '%Y-%m-%d',
+    '%a, %Y-%m-%d',
+    '%A, %Y-%m-%d',
+    '%y-%m-%d',
+    '%a, %y-%m-%d',
+    '%A, %y-%m-%d',
+    '%m/%d/%Y',
+    '%a, %m/%d/%Y',
+    '%A, %m/%d/%Y',
+    '%m/%d/%y',
+    '%a, %m/%d/%y',
+    '%A, %m/%d/%y',
+    '%m-%d-%Y',
+    '%a, %m-%d-%Y',
+    '%A, %m-%d-%Y',
+    '%m-%d-%y',
+    '%a, %m-%d-%y',
+    '%A, %m-%d-%y',
+    '%m.%d.%Y',
+    '%a, %m.%d.%Y',
+    '%A, %m.%d.%Y',
+    '%m.%d.%y',
+    '%a, %m.%d.%y',
+    '%A, %m.%d.%y',
+    '%d-%m-%Y',
+    '%a, %d-%m-%Y',
+    '%A, %d-%m-%Y',
+    '%d-%m-%y',
+    '%a, %d-%m-%y',
+    '%A, %d-%m-%y',
+    '%d/%m/%Y',
+    '%a, %d/%m/%Y',
+    '%A, %d/%m/%Y',
+    '%d/%m/%y',
+    '%a, %d/%m/%y',
+    '%A, %d/%m/%y',
+    '%d.%m.%Y',
+    '%a, %d.%m.%Y',
+    '%A, %d.%m.%Y',
+    '%d.%m.%y',
+    '%a, %d.%m.%y',
+    '%A, %d.%m.%y',
+    '%d. %b %Y',
+    '%a, %d. %b %Y',
+    '%A, %d. %b %Y',
+    '%d. %b %y',
+    '%a, %d. %b %y',
+    '%A, %d. %b %y',
+    '%d. %B %Y',
+    '%a, %d. %B %Y',
+    '%A, %d. %B %Y',
+    '%d. %B %y',
+    '%a, %d. %B %y',
+    '%A, %d. %B %y',
+    '%b %d, %Y',
+    '%a, %b %d, %Y',
+    '%A, %b %d, %Y',
+    '%B %d, %Y',
+    '%a, %B %d, %Y',
+    '%A, %B %d, %Y'
+)
 
-time_presets = ('%I:%M:%S %p',
-                '%H:%M:%S')
+time_presets = ('%I:%M:%S %p', '%H:%M:%S')
 
 # helper class
 class static_or_instance(object):
@@ -164,7 +165,7 @@ class sbdatetime(datetime.datetime):
             except Exception:
                 sbdatetime.has_locale = False
 
-        return strt
+        return strt.decode(sickbeard.SYS_ENCODING)
 
     # display Date in SickRage Format
     @static_or_instance
@@ -203,7 +204,7 @@ class sbdatetime(datetime.datetime):
             except Exception:
                 pass
 
-        return strd
+        return strd.decode(sickbeard.SYS_ENCODING)
 
     # display Datetime in SickRage Format
     @static_or_instance
@@ -242,11 +243,11 @@ class sbdatetime(datetime.datetime):
                         except Exception:
                             sbdatetime.has_locale = False
                     if t_preset is not None:
-                        strd += u', ' + dt.strftime(t_preset)
+                        strd += ', ' + dt.strftime(t_preset)
                     elif show_seconds:
-                        strd += u', ' + dt.strftime(sickbeard.TIME_PRESET_W_SECONDS)
+                        strd += ', ' + dt.strftime(sickbeard.TIME_PRESET_W_SECONDS)
                     else:
-                        strd += u', ' + dt.strftime(sickbeard.TIME_PRESET)
+                        strd += ', ' + dt.strftime(sickbeard.TIME_PRESET)
             else:
                 if d_preset is not None:
                     strd = self.strftime(d_preset)
@@ -262,11 +263,11 @@ class sbdatetime(datetime.datetime):
                     except Exception:
                         sbdatetime.has_locale = False
                 if t_preset is not None:
-                    strd += u', ' + self.strftime(t_preset)
+                    strd += ', ' + self.strftime(t_preset)
                 elif show_seconds:
-                    strd += u', ' + self.strftime(sickbeard.TIME_PRESET_W_SECONDS)
+                    strd += ', ' + self.strftime(sickbeard.TIME_PRESET_W_SECONDS)
                 else:
-                    strd += u', ' + self.strftime(sickbeard.TIME_PRESET)
+                    strd += ', ' + self.strftime(sickbeard.TIME_PRESET)
         finally:
             try:
                 if sbdatetime.has_locale:
@@ -274,4 +275,4 @@ class sbdatetime(datetime.datetime):
             except Exception:
                 sbdatetime.has_locale = False
 
-        return strd
+        return strd.decode(sickbeard.SYS_ENCODING)
diff --git a/sickbeard/scene_exceptions.py b/sickbeard/scene_exceptions.py
index 1aafbd97d4c4970bfa2b0e82c64b5e771488cce8..1de1c880d291a6d677e7bede82cf43456db9a9ba 100644
--- a/sickbeard/scene_exceptions.py
+++ b/sickbeard/scene_exceptions.py
@@ -38,39 +38,39 @@ exceptionsSeasonCache = {}
 
 exceptionLock = threading.Lock()
 
-def shouldRefresh(list):
+def shouldRefresh(exList):
     """
-    Check if we should refresh cache for items in list
+    Check if we should refresh cache for items in exList
 
-    :param list: list to check
+    :param exList: exception list to check if needs a refresh
     :return: True if refresh is needed
     """
     MAX_REFRESH_AGE_SECS = 86400  # 1 day
 
     myDB = db.DBConnection('cache.db')
-    rows = myDB.select("SELECT last_refreshed FROM scene_exceptions_refresh WHERE list = ?", [list])
+    rows = myDB.select("SELECT last_refreshed FROM scene_exceptions_refresh WHERE list = ?", [exList])
     if rows:
         lastRefresh = int(rows[0]['last_refreshed'])
         return int(time.mktime(datetime.datetime.today().timetuple())) > lastRefresh + MAX_REFRESH_AGE_SECS
     else:
         return True
 
-def setLastRefresh(list):
+def setLastRefresh(exList):
     """
     Update last cache update time for shows in list
 
-    :param list: list to check
+    :param exList: exception list to set refresh time
     """
     myDB = db.DBConnection('cache.db')
     myDB.upsert("scene_exceptions_refresh",
                 {'last_refreshed': int(time.mktime(datetime.datetime.today().timetuple()))},
-                {'list': list})
+                {'list': exList})
 
 def get_scene_exceptions(indexer_id, season=-1):
     """
     Given a indexer_id, return a list of all the scene exceptions.
     """
-    global exceptionsCache
+
     exceptionsList = []
 
     if indexer_id not in exceptionsCache or season not in exceptionsCache[indexer_id]:
@@ -117,7 +117,6 @@ def get_scene_seasons(indexer_id):
     """
     return a list of season numbers that have scene exceptions
     """
-    global exceptionsSeasonCache
     exceptionsSeasonList = []
 
     if indexer_id not in exceptionsSeasonCache:
@@ -181,10 +180,7 @@ def retrieve_exceptions():
     Looks up the exceptions on github, parses them into a dict, and inserts them into the
     scene_exceptions table in cache.db. Also clears the scene name cache.
     """
-    global exception_dict, anidb_exception_dict, xem_exception_dict
 
-    # exceptions are stored in submodules in this repo, sourced from the github repos
-    # TODO: `git submodule update`
     for indexer in sickbeard.indexerApi().indexers:
         if shouldRefresh(sickbeard.indexerApi(indexer).name):
             logger.log(u"Checking for scene exception updates for " + sickbeard.indexerApi(indexer).name + "")
@@ -204,7 +200,7 @@ def retrieve_exceptions():
 
             # each exception is on one line with the format indexer_id: 'show name 1', 'show name 2', etc
             for cur_line in data.splitlines():
-                indexer_id, sep, aliases = cur_line.partition(':')  # @UnusedVariable
+                indexer_id, _, aliases = cur_line.partition(':')  # @UnusedVariable
 
                 if not aliases:
                     continue
@@ -248,8 +244,9 @@ def retrieve_exceptions():
             for ex in cur_exception_dict.iteritems():
                 cur_exception, curSeason = ex
                 if cur_exception not in existing_exceptions:
-                    queries.append(["INSERT OR IGNORE INTO scene_exceptions (indexer_id, show_name, season) VALUES (?,?,?);",
-                            [cur_indexer_id, cur_exception, curSeason]])
+                    queries.append(
+                        ["INSERT OR IGNORE INTO scene_exceptions (indexer_id, show_name, season) VALUES (?,?,?);",
+                         [cur_indexer_id, cur_exception, curSeason]])
     if queries:
         myDB.mass_action(queries)
         logger.log(u"Updated scene exceptions", logger.DEBUG)
@@ -265,12 +262,11 @@ def update_scene_exceptions(indexer_id, scene_exceptions, season=-1):
     """
     Given a indexer_id, and a list of all show scene exceptions, update the db.
     """
-    global exceptionsCache
     myDB = db.DBConnection('cache.db')
     myDB.action('DELETE FROM scene_exceptions WHERE indexer_id=? and season=?', [indexer_id, season])
 
     logger.log(u"Updating scene exceptions", logger.INFO)
-    
+
     # A change has been made to the scene exception list. Let's clear the cache, to make this visible
     if indexer_id in exceptionsCache:
         exceptionsCache[indexer_id] = {}
@@ -281,15 +277,13 @@ def update_scene_exceptions(indexer_id, scene_exceptions, season=-1):
                     [indexer_id, cur_exception, season])
 
 def _anidb_exceptions_fetcher():
-    global anidb_exception_dict
-
     if shouldRefresh('anidb'):
         logger.log(u"Checking for scene exception updates for AniDB")
         for show in sickbeard.showList:
             if show.is_anime and show.indexer == 1:
                 try:
                     anime = adba.Anime(None, name=show.name, tvdbid=show.indexerid, autoCorrectName=True)
-                except:
+                except Exception:
                     continue
                 else:
                     if anime.name and anime.name != show.name:
@@ -302,9 +296,6 @@ def _anidb_exceptions_fetcher():
 xem_session = requests.Session()
 
 def _xem_exceptions_fetcher():
-    global xem_exception_dict
-    global xem_session
-
     if shouldRefresh('xem'):
         for indexer in sickbeard.indexerApi().indexers:
             logger.log(u"Checking for XEM scene exception updates for " + sickbeard.indexerApi(indexer).name)
@@ -312,7 +303,7 @@ def _xem_exceptions_fetcher():
             url = "http://thexem.de/map/allNames?origin=%s&seasonNumbers=1" % sickbeard.indexerApi(indexer).config[
                 'xem_origin']
 
-            parsedJSON = helpers.getURL(url, session=xem_session, timeout = 90, json=True)
+            parsedJSON = helpers.getURL(url, session=xem_session, timeout=90, json=True)
             if not parsedJSON:
                 logger.log(u"Check scene exceptions update failed for " + sickbeard.indexerApi(
                     indexer).name + ", Unable to get URL: " + url, logger.DEBUG)
diff --git a/sickbeard/scene_numbering.py b/sickbeard/scene_numbering.py
index 01248aeffce2ca03be27e7a6cafd92ee8337da9e..3edf0fa53eaad52f2c29605aa83fae9637f6b5bd 100644
--- a/sickbeard/scene_numbering.py
+++ b/sickbeard/scene_numbering.py
@@ -218,7 +218,7 @@ def set_scene_numbering(indexer_id, indexer, season=None, episode=None, absolute
             "UPDATE scene_numbering SET scene_absolute_number = ? WHERE indexer = ? and indexer_id = ? and absolute_number = ?",
             [sceneAbsolute, indexer, indexer_id, absolute_number])
 
-    #Reload data from DB so that cache and db are in sync
+    # Reload data from DB so that cache and db are in sync
     show = helpers.findCertainShow(sickbeard.showList, indexer_id)
     show.flushEpisodes()
 
diff --git a/sickbeard/scheduler.py b/sickbeard/scheduler.py
index 59e8e90cc2605723816998bac587e58ffbafe79b..2b56e39bdc4cff66a8e3a3652a89b761632c8c2e 100644
--- a/sickbeard/scheduler.py
+++ b/sickbeard/scheduler.py
@@ -82,7 +82,7 @@ class Scheduler(threading.Thread):
                 if self.enable:
                     current_time = datetime.datetime.now()
                     should_run = False
-                    #Is self.force enable
+                    # Is self.force enable
                     if self.force:
                         should_run = True
                     # check if interval has passed
diff --git a/sickbeard/search.py b/sickbeard/search.py
index f4ce208c223c27bc7a839009dac055f6c1dda3f5..769ee886c964d711c0abd56fee70272c5d1d0179 100644
--- a/sickbeard/search.py
+++ b/sickbeard/search.py
@@ -132,7 +132,7 @@ def snatchEpisode(result, endStatus=SNATCHED):
             dlResult = _downloadResult(result)
         else:
             if not result.content and not result.url.startswith('magnet'):
-                result.content = result.provider.getURL(result.url)
+                result.content = result.provider.getURL(result.url, needBytes=True)
 
             if result.content or result.url.startswith('magnet'):
                 client = clients.getClientIstance(sickbeard.TORRENT_METHOD)()
@@ -141,7 +141,7 @@ def snatchEpisode(result, endStatus=SNATCHED):
                 logger.log(u"Torrent file content is empty", logger.WARNING)
                 dlResult = False
     else:
-        logger.log(u"Unknown result type, unable to download it", logger.ERROR)
+        logger.log(u"Unknown result type, unable to download it (%r)" % result.resultType, logger.ERROR)
         dlResult = False
 
     if not dlResult:
@@ -215,7 +215,7 @@ def pickBestResult(results, show):
             if not show.release_groups.is_valid(cur_result):
                 continue
 
-        logger.log("Quality of " + cur_result.name + " is " + Quality.qualityStrings[cur_result.quality])
+        logger.log(u"Quality of " + cur_result.name + " is " + Quality.qualityStrings[cur_result.quality])
 
         anyQualities, bestQualities = Quality.splitQuality(show.quality)
 
diff --git a/sickbeard/search_queue.py b/sickbeard/search_queue.py
index 91a1cf1972c1b14dba95ea7a2a845feb525a1f62..32738b930ab84c5b882b26ab1e6fd3583ed0239e 100644
--- a/sickbeard/search_queue.py
+++ b/sickbeard/search_queue.py
@@ -126,13 +126,13 @@ class SearchQueue(generic_queue.GenericQueue):
 class DailySearchQueueItem(generic_queue.QueueItem):
     def __init__(self):
         self.success = None
-        generic_queue.QueueItem.__init__(self, 'Daily Search', DAILY_SEARCH)
+        generic_queue.QueueItem.__init__(self, u'Daily Search', DAILY_SEARCH)
 
     def run(self):
         generic_queue.QueueItem.run(self)
 
         try:
-            logger.log("Beginning daily search for new episodes")
+            logger.log(u"Beginning daily search for new episodes")
             foundResults = search.searchForNeededEpisodes()
 
             if not len(foundResults):
@@ -158,7 +158,7 @@ class DailySearchQueueItem(generic_queue.QueueItem):
 
 class ManualSearchQueueItem(generic_queue.QueueItem):
     def __init__(self, show, segment, downCurQuality=False):
-        generic_queue.QueueItem.__init__(self, 'Manual Search', MANUAL_SEARCH)
+        generic_queue.QueueItem.__init__(self, u'Manual Search', MANUAL_SEARCH)
         self.priority = generic_queue.QueuePriorities.HIGH
         self.name = 'MANUAL-' + str(show.indexerid)
         self.success = None
@@ -171,7 +171,7 @@ class ManualSearchQueueItem(generic_queue.QueueItem):
         generic_queue.QueueItem.run(self)
 
         try:
-            logger.log("Beginning manual search for: [" + self.segment.prettyName() + "]")
+            logger.log(u"Beginning manual search for: [" + self.segment.prettyName() + "]")
             self.started = True
 
             searchResult = search.searchProviders(self.show, [self.segment], True, self.downCurQuality)
@@ -204,7 +204,7 @@ class ManualSearchQueueItem(generic_queue.QueueItem):
 
 class BacklogQueueItem(generic_queue.QueueItem):
     def __init__(self, show, segment):
-        generic_queue.QueueItem.__init__(self, 'Backlog', BACKLOG_SEARCH)
+        generic_queue.QueueItem.__init__(self, u'Backlog', BACKLOG_SEARCH)
         self.priority = generic_queue.QueuePriorities.LOW
         self.name = 'BACKLOG-' + str(show.indexerid)
         self.success = None
@@ -216,7 +216,7 @@ class BacklogQueueItem(generic_queue.QueueItem):
 
         if not self.show.paused:
             try:
-                logger.log("Beginning backlog search for: [" + self.show.name + "]")
+                logger.log(u"Beginning backlog search for: [" + self.show.name + "]")
                 searchResult = search.searchProviders(self.show, self.segment, False)
 
                 if searchResult:
@@ -237,7 +237,7 @@ class BacklogQueueItem(generic_queue.QueueItem):
 
 class FailedQueueItem(generic_queue.QueueItem):
     def __init__(self, show, segment, downCurQuality=False):
-        generic_queue.QueueItem.__init__(self, 'Retry', FAILED_SEARCH)
+        generic_queue.QueueItem.__init__(self, u'Retry', FAILED_SEARCH)
         self.priority = generic_queue.QueuePriorities.HIGH
         self.name = 'RETRY-' + str(show.indexerid)
         self.show = show
@@ -263,7 +263,7 @@ class FailedQueueItem(generic_queue.QueueItem):
                     history.logFailed(epObj, release, provider)
 
                 failed_history.revertEpisode(epObj)
-                logger.log("Beginning failed download search for: [" + epObj.prettyName() + "]")
+                logger.log(u"Beginning failed download search for: [" + epObj.prettyName() + "]")
 
             # If it is wanted, self.downCurQuality doesnt matter
             # if it isnt wanted, we need to make sure to not overwrite the existing ep that we reverted to!
@@ -279,7 +279,7 @@ class FailedQueueItem(generic_queue.QueueItem):
                     time.sleep(common.cpu_presets[sickbeard.CPU_PRESET])
             else:
                 pass
-                #logger.log(u"No valid episode found to retry for: [" + self.segment.prettyName() + "]")
+                # logger.log(u"No valid episode found to retry for: [" + self.segment.prettyName() + "]")
         except Exception:
             logger.log(traceback.format_exc(), logger.DEBUG)
 
diff --git a/sickbeard/showUpdater.py b/sickbeard/showUpdater.py
index b55ab3dde6ea04526c33c2c5055ea5c43f7afc76..d6befb61a793941af3876fe5be47bd63d9a08bd4 100644
--- a/sickbeard/showUpdater.py
+++ b/sickbeard/showUpdater.py
@@ -75,7 +75,7 @@ class ShowUpdater:
                     try:
                         piList.append(sickbeard.showQueueScheduler.action.updateShow(curShow, True))  # @UndefinedVariable
                     except CantUpdateShowException as e:
-                        logger.log("Unable to update show: {0}".format(str(e)),logger.DEBUG)
+                        logger.log(u"Unable to update show: {0}".format(str(e)),logger.DEBUG)
                 else:
                     logger.log(
                         u"Not updating episodes for show " + curShow.name + " because it's marked as ended and last/next episode is not within the grace period.",
diff --git a/sickbeard/show_name_helpers.py b/sickbeard/show_name_helpers.py
index 392d17af0612b7ac30b3ebbdde5a1f66ff764527..8e640b250869b481e22133cca8d40aa8bf71d4b3 100644
--- a/sickbeard/show_name_helpers.py
+++ b/sickbeard/show_name_helpers.py
@@ -34,8 +34,8 @@ from name_parser.parser import NameParser, InvalidNameException, InvalidShowExce
 
 resultFilters = [
     "sub(bed|ed|pack|s)",
-    "(dir|sample|sub|nfo)fix",
-    "sample",
+    "(dir|sub|nfo)fix",
+    "(?<!shomin.)sample",
     "(dvd)?extras",
     "dub(bed)?"
 ]
@@ -328,8 +328,8 @@ def allPossibleShowNames(show, season=-1):
                 elif curName.endswith(' (' + curCountry + ')'):
                     newShowNames.append(curName.replace(' (' + curCountry + ')', ' (' + country_list[curCountry] + ')'))
 
-            # if we have "Show Name (2013)" this will strip the (2013) show year from the show name
-            #newShowNames.append(re.sub('\(\d{4}\)','',curName))
+            # # if we have "Show Name (2013)" this will strip the (2013) show year from the show name
+            # newShowNames.append(re.sub('\(\d{4}\)', '', curName))
 
         showNames += newShowNames
 
diff --git a/sickbeard/show_queue.py b/sickbeard/show_queue.py
index 544cffa92147c86a1b875f6630aa621d436247b3..e31752e09fd3f7515e24c2c2ace2eb594024d048 100644
--- a/sickbeard/show_queue.py
+++ b/sickbeard/show_queue.py
@@ -168,7 +168,11 @@ class ShowQueue(generic_queue.GenericQueue):
 
         return queueItemObj
 
-class ShowQueueActions:
+class ShowQueueActions(object):
+
+    def __init__(self):
+        pass
+
     REFRESH = 1
     ADD = 2
     UPDATE = 3
@@ -177,13 +181,14 @@ class ShowQueueActions:
     SUBTITLE = 6
     REMOVE = 7
 
-    names = {REFRESH: 'Refresh',
-             ADD: 'Add',
-             UPDATE: 'Update',
-             FORCEUPDATE: 'Force Update',
-             RENAME: 'Rename',
-             SUBTITLE: 'Subtitle',
-             REMOVE: 'Remove Show'
+    names = {
+        REFRESH: 'Refresh',
+        ADD: 'Add',
+        UPDATE: 'Update',
+        FORCEUPDATE: 'Force Update',
+        RENAME: 'Rename',
+        SUBTITLE: 'Subtitle',
+        REMOVE: 'Remove Show'
     }
 
 
@@ -205,7 +210,7 @@ class ShowQueueItem(generic_queue.QueueItem):
 
     def isInQueue(self):
         return self in sickbeard.showQueueScheduler.action.queue + [
-            sickbeard.showQueueScheduler.action.currentItem]  #@UndefinedVariable
+            sickbeard.showQueueScheduler.action.currentItem]  # @UndefinedVariable
 
     def _getName(self):
         return str(self.show.indexerid)
@@ -305,14 +310,15 @@ class QueueItemAdd(ShowQueueItem):
                 self._finishEarly()
                 return
         except Exception, e:
-            logger.log(u"Error while loading information from indexer %s. Error: %r" % (self.indexer_id,sickbeard.indexerApi(self.indexer).name, ex(e)),logger.ERROR)
-            #logger.log(u"Show name with ID %s doesn't exist on %s anymore. If you are using trakt, it will be removed from your TRAKT watchlist. If you are adding manually, try removing the nfo and adding again" %
-            #    (self.indexer_id,sickbeard.indexerApi(self.indexer).name) , logger.WARNING)
+            logger.log(u"%s Error while loading information from indexer %s. Error: %r" % (self.indexer_id, sickbeard.indexerApi(self.indexer).name, ex(e)), logger.ERROR)
+            # logger.log(u"Show name with ID %s doesn't exist on %s anymore. If you are using trakt, it will be removed from your TRAKT watchlist. If you are adding manually, try removing the nfo and adding again" %
+            #            (self.indexer_id, sickbeard.indexerApi(self.indexer).name), logger.WARNING)
 
-            ui.notifications.error("Unable to add show",
-                                   "Unable to look up the show in " + self.showDir + " on " + str(sickbeard.indexerApi(
-                                       self.indexer).name) + " using ID " + str(
-                                       self.indexer_id) + ", not using the NFO. Delete .nfo and try adding manually again.")
+            ui.notifications.error(
+                "Unable to add show",
+                "Unable to look up the show in %s on %s using ID %s, not using the NFO. Delete .nfo and try adding manually again." %
+                (self.showDir, sickbeard.indexerApi(self.indexer).name, self.indexer_id)
+            )
 
             if sickbeard.USE_TRAKT:
 
@@ -365,13 +371,13 @@ class QueueItemAdd(ShowQueueItem):
                 if self.whitelist:
                     self.show.release_groups.set_white_keywords(self.whitelist)
 
-            # be smartish about this
-            #if self.show.genre and "talk show" in self.show.genre.lower():
-            #    self.show.air_by_date = 1
-            #if self.show.genre and "documentary" in self.show.genre.lower():
-            #    self.show.air_by_date = 0
-            #if self.show.classification and "sports" in self.show.classification.lower():
-            #    self.show.sports = 1
+            # # be smartish about this
+            # if self.show.genre and "talk show" in self.show.genre.lower():
+            #     self.show.air_by_date = 1
+            # if self.show.genre and "documentary" in self.show.genre.lower():
+            #     self.show.air_by_date = 0
+            # if self.show.classification and "sports" in self.show.classification.lower():
+            #     self.show.sports = 1
 
         except sickbeard.indexer_exception, e:
             logger.log(
@@ -516,7 +522,7 @@ class QueueItemRename(ShowQueueItem):
         logger.log(u"Performing rename on " + self.show.name)
 
         try:
-            show_loc = self.show.location
+            self.show.location
         except ShowDirectoryNotFoundException:
             logger.log(u"Can't perform rename on " + self.show.name + " when the show dir is missing.", logger.WARNING)
             return
@@ -669,6 +675,6 @@ class QueueItemRemove(ShowQueueItem):
             try:
                 sickbeard.traktCheckerScheduler.action.removeShowFromTraktLibrary(self.show)
             except Exception as e:
-                logger.log(u"Unable to delete show from Trakt: %s. Error: %s" % (self.show.name, ex(e)),logger.WARNING)
+                logger.log(u"Unable to delete show from Trakt: %s. Error: %s" % (self.show.name, ex(e)), logger.WARNING)
 
         self.finish()
diff --git a/sickbeard/subtitles.py b/sickbeard/subtitles.py
index a9e3000dc46b2f60a44a62c520a2b1ca72b9cb64..5e06e596a7e4e8d5d4ac81f72a90ed2091ac02f5 100644
--- a/sickbeard/subtitles.py
+++ b/sickbeard/subtitles.py
@@ -57,6 +57,8 @@ entry_points = {
     ]
 }
 
+# pylint: disable=W0212
+# Access to a protected member of a client class
 distribution._ep_map = pkg_resources.EntryPoint.parse_map(entry_points, distribution)
 pkg_resources.working_set.add(distribution)
 
@@ -102,7 +104,7 @@ def sortedServiceList():
 def getEnabledServiceList():
     return [x['name'] for x in sortedServiceList() if x['enabled']]
 
-#Hack around this for now.
+# Hack around this for now.
 def fromietf(language):
     return Language.fromopensubtitles(language)
 
@@ -152,13 +154,13 @@ def downloadSubtitles(subtitles_info):
         save_subtitles(video, found_subtitles, directory=subtitles_path, single=not sickbeard.SUBTITLES_MULTI)
 
         if not sickbeard.EMBEDDED_SUBTITLES_ALL and sickbeard.SUBTITLES_EXTRA_SCRIPTS and video_path.endswith(('.mkv', '.mp4')):
-            run_subs_extra_scripts(subtitles_info, found_subtitles)
+            run_subs_extra_scripts(subtitles_info, found_subtitles, video, single=not sickbeard.SUBTITLES_MULTI)
 
         current_subtitles = subtitlesLanguages(video_path)[0]
         new_subtitles = frozenset(current_subtitles).difference(existing_subtitles)
 
     except Exception:
-        logger.log("Error occurred when downloading subtitles for: %s" % video_path)
+        logger.log(u"Error occurred when downloading subtitles for: %s" % video_path)
         logger.log(traceback.format_exc(), logger.ERROR)
         return (existing_subtitles, None)
 
@@ -174,12 +176,12 @@ def save_subtitles(video, subtitles, single=False, directory=None):
     for subtitle in subtitles:
         # check content
         if subtitle.content is None:
-            logger.log("Skipping subtitle for %s: no content" % video.name, logger.DEBUG)
+            logger.log(u"Skipping subtitle for %s: no content" % video.name, logger.DEBUG)
             continue
 
         # check language
         if subtitle.language in set(s.language for s in saved_subtitles):
-            logger.log("Skipping subtitle for %s: language already saved" % video.name, logger.DEBUG)
+            logger.log(u"Skipping subtitle for %s: language already saved" % video.name, logger.DEBUG)
             continue
 
         # create subtitle path
@@ -188,7 +190,7 @@ def save_subtitles(video, subtitles, single=False, directory=None):
             subtitle_path = os.path.join(directory, os.path.split(subtitle_path)[1])
 
         # save content as is or in the specified encoding
-        logger.log("Saving subtitle for %s to %s" % (video.name, subtitle_path), logger.DEBUG)
+        logger.log(u"Saving subtitle for %s to %s" % (video.name, subtitle_path), logger.DEBUG)
         if subtitle.encoding:
             with io.open(subtitle_path, 'w', encoding=subtitle.encoding) as f:
                 f.write(subtitle.text)
@@ -300,20 +302,20 @@ def getEmbeddedLanguages(video_path):
                         try:
                             embedded_subtitle_languages.add(Language.fromalpha3b(st.language))
                         except BabelfishError:
-                            logger.log('Embedded subtitle track is not a valid language', logger.DEBUG)
+                            logger.log(u'Embedded subtitle track is not a valid language', logger.DEBUG)
                             embedded_subtitle_languages.add(Language('und'))
                     elif st.name:
                         try:
                             embedded_subtitle_languages.add(Language.fromname(st.name))
                         except BabelfishError:
-                            logger.log('Embedded subtitle track is not a valid language', logger.DEBUG)
+                            logger.log(u'Embedded subtitle track is not a valid language', logger.DEBUG)
                             embedded_subtitle_languages.add(Language('und'))
                     else:
                         embedded_subtitle_languages.add(Language('und'))
             else:
-                logger.log('MKV has no subtitle track', logger.DEBUG)
+                logger.log(u'MKV has no subtitle track', logger.DEBUG)
     except MalformedMKVError:
-        logger.log('MKV seems to be malformed ( %s ), ignoring embedded subtitles' % video_path, logger.INFO)
+        logger.log(u'MKV seems to be malformed ( %s ), ignoring embedded subtitles' % video_path, logger.INFO)
 
     return embedded_subtitle_languages
 
@@ -341,7 +343,7 @@ def subtitleLanguageFilter():
 def subtitleCodeFilter():
     return [Language.fromopensubtitles(language).opensubtitles for language in language_converters['opensubtitles'].codes if len(language) == 3]
 
-class SubtitlesFinder():
+class SubtitlesFinder(object):
     """
     The SubtitlesFinder will be executed every hour but will not necessarly search
     and download subtitles. Only if the defined rule is true
@@ -373,7 +375,8 @@ class SubtitlesFinder():
         # you have 5 minutes to understand that one. Good luck
         myDB = db.DBConnection()
 
-        sqlResults = myDB.select('SELECT s.show_name, e.showid, e.season, e.episode, e.status, e.subtitles, ' +
+        sqlResults = myDB.select(
+            'SELECT s.show_name, e.showid, e.season, e.episode, e.status, e.subtitles, ' +
             'e.subtitles_searchcount AS searchcount, e.subtitles_lastsearch AS lastsearch, e.location, (? - e.airdate) AS airdate_daydiff ' +
             'FROM tv_episodes AS e INNER JOIN tv_shows AS s ON (e.showid = s.indexer_id) ' +
             'WHERE s.subtitles = 1 AND e.subtitles NOT LIKE (?) ' +
@@ -381,7 +384,7 @@ class SubtitlesFinder():
             'AND e.location != ""', [today, wantedLanguages(True)])
 
         if len(sqlResults) == 0:
-            logger.log('No subtitles to download', logger.INFO)
+            logger.log(u'No subtitles to download', logger.INFO)
             return
 
         rules = self._getRules()
@@ -389,16 +392,17 @@ class SubtitlesFinder():
         for epToSub in sqlResults:
 
             if not ek(os.path.isfile, epToSub['location']):
-                logger.log('Episode file does not exist, cannot download subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG)
+                logger.log(u'Episode file does not exist, cannot download subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG)
                 continue
 
-            # Old shows rule
-            throwaway = datetime.datetime.strptime('20110101', '%Y%m%d')
+            # http://bugs.python.org/issue7980#msg221094
+            # I dont think this needs done here, but keeping to be safe
+            datetime.datetime.strptime('20110101', '%Y%m%d')
             if ((epToSub['airdate_daydiff'] > 7 and epToSub['searchcount'] < 2 and now - datetime.datetime.strptime(epToSub['lastsearch'], dateTimeFormat) > datetime.timedelta(hours=rules['old'][epToSub['searchcount']])) or
                 # Recent shows rule
-                    (epToSub['airdate_daydiff'] <= 7 and epToSub['searchcount'] < 7 and now - datetime.datetime.strptime(epToSub['lastsearch'], dateTimeFormat) > datetime.timedelta(hours=rules['new'][epToSub['searchcount']]))):
+                (epToSub['airdate_daydiff'] <= 7 and epToSub['searchcount'] < 7 and now - datetime.datetime.strptime(epToSub['lastsearch'], dateTimeFormat) > datetime.timedelta(hours=rules['new'][epToSub['searchcount']]))):
 
-                logger.log('Downloading subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG)
+                logger.log(u'Downloading subtitles for episode %dx%d of show %s' % (epToSub['season'], epToSub['episode'], epToSub['show_name']), logger.DEBUG)
 
                 showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(epToSub['showid']))
                 if not showObj:
@@ -425,7 +429,8 @@ class SubtitlesFinder():
 
         self.amActive = False
 
-    def _getRules(self):
+    @staticmethod
+    def _getRules():
         """
         Define the hours to wait between 2 subtitles search depending on:
         - the episode: new or old
@@ -434,31 +439,26 @@ class SubtitlesFinder():
         return {'old': [0, 24], 'new': [0, 4, 8, 4, 16, 24, 24]}
 
 
-def run_subs_extra_scripts(epObj, foundSubs):
+def run_subs_extra_scripts(epObj, found_subtitles, video, single=False):
 
     for curScriptName in sickbeard.SUBTITLES_EXTRA_SCRIPTS:
         script_cmd = [piece for piece in re.split("( |\\\".*?\\\"|'.*?')", curScriptName) if piece.strip()]
         script_cmd[0] = ek(os.path.abspath, script_cmd[0])
         logger.log(u"Absolute path to script: " + script_cmd[0], logger.DEBUG)
 
-        for video, subs in foundSubs.iteritems():
-            for sub in subs:
-                subpath = subliminal.subtitle.get_subtitle_path(video.name, sub.language)
-                if os.path.isabs(sickbeard.SUBTITLES_DIR):
-                    subpath = ek(os.path.join, sickbeard.SUBTITLES_DIR, ek(os.path.basename, subpath))
-                elif sickbeard.SUBTITLES_DIR:
-                    subpath = ek(os.path.join, ek(os.path.dirname, subpath), sickbeard.SUBTITLES_DIR, ek(os.path.basename, subpath))
+        for subtitle in found_subtitles:
+            subtitle_path = subliminal.subtitle.get_subtitle_path(video.name, None if single else subtitle.language)
 
-                inner_cmd = script_cmd + [video.name, subpath, sub.language.opensubtitles, epObj['show.name'],
-                                str(epObj['season']), str(epObj['episode']), epObj['name'], str(epObj['show.indexerid'])]
+            inner_cmd = script_cmd + [video.name, subtitle_path, subtitle.language.opensubtitles, epObj['show.name'],
+                                      str(epObj['season']), str(epObj['episode']), epObj['name'], str(epObj['show.indexerid'])]
 
-                # use subprocess to run the command and capture output
-                logger.log(u"Executing command: %s" % inner_cmd)
-                try:
-                    p = subprocess.Popen(inner_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
-                            stderr=subprocess.STDOUT, cwd=sickbeard.PROG_DIR)
-                    out, err = p.communicate()  # @UnusedVariable
-                    logger.log(u"Script result: %s" % out, logger.DEBUG)
+            # use subprocess to run the command and capture output
+            logger.log(u"Executing command: %s" % inner_cmd)
+            try:
+                p = subprocess.Popen(inner_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
+                                     stderr=subprocess.STDOUT, cwd=sickbeard.PROG_DIR)
+                out, _ = p.communicate()  # @UnusedVariable
+                logger.log(u"Script result: %s" % out, logger.DEBUG)
 
-                except Exception as e:
-                    logger.log(u"Unable to run subs_extra_script: " + ex(e))
+            except Exception as e:
+                logger.log(u"Unable to run subs_extra_script: " + ex(e))
diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py
index b0754d6a1d2d369772a4cda9ed4009513884520e..e5463eadfedb0f5b4ea34d4a8a45a62323ad364c 100644
--- a/sickbeard/traktChecker.py
+++ b/sickbeard/traktChecker.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Frank Fenton
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -19,6 +20,8 @@
 import os
 import traceback
 import datetime
+from libtrakt.exceptions import traktException
+from libtrakt import TraktAPI
 
 import sickbeard
 from sickbeard import logger
@@ -29,11 +32,9 @@ from sickbeard.common import ARCHIVED
 from sickbeard.common import SKIPPED
 from sickbeard.common import UNKNOWN
 from sickbeard.common import WANTED
+from sickbeard.common import Quality
 from sickrage.helper.encoding import ek
 from sickrage.helper.exceptions import ex
-from common import Quality
-from libtrakt import *
-from libtrakt.exceptions import traktException
 
 
 def setEpisodeToWanted(show, s, e):
@@ -47,7 +48,7 @@ def setEpisodeToWanted(show, s, e):
             if epObj.status != SKIPPED or epObj.airdate == datetime.date.fromordinal(1):
                 return
 
-            logger.log(u"Setting episode %s S%02dE%02d to wanted" %(show.name, s, e))
+            logger.log(u"Setting episode %s S%02dE%02d to wanted" % (show.name, s, e))
             # figure out what segment the episode is in and remember it so we can backlog it
 
             epObj.status = WANTED
@@ -59,8 +60,7 @@ def setEpisodeToWanted(show, s, e):
         logger.log(u"Starting backlog search for %s S%02dE%02d because some episodes were set to wanted" % (show.name, s, e))
 
 
-class TraktChecker():
-
+class TraktChecker(object):
     def __init__(self):
         self.trakt_api = TraktAPI(sickbeard.SSL_VERIFY, sickbeard.TRAKT_TIMEOUT)
         self.todoBacklog = []
@@ -71,7 +71,6 @@ class TraktChecker():
         self.amActive = False
 
     def run(self, force=False):
-
         self.amActive = True
 
         # add shows from trakt.tv watchlist
@@ -108,7 +107,7 @@ class TraktChecker():
                 logger.log(u"No shows found in your library, aborting library update", logger.DEBUG)
                 return
 
-            traktShow = filter(lambda x: int(indexerid) in [int(x['show']['ids']['tvdb'] or 0), int(x['show']['ids']['tvrage'] or 0)], library)
+            traktShow = [x for x in library if int(indexerid) in [int(x['show']['ids']['tvdb'] or 0), int(x['show']['ids']['tvrage'] or 0)]]
         except traktException as e:
             logger.log(u"Could not connect to Trakt service. Aborting library check. Error: %s" % repr(e), logger.WARNING)
 
@@ -128,6 +127,7 @@ class TraktChecker():
                     }
                 ]
             }
+
             if trakt_id == 'tvdb_id':
                 data['shows'][0]['ids']['tvdb'] = show_obj.indexerid
             else:
@@ -146,7 +146,6 @@ class TraktChecker():
 
         show_obj: The TVShow object to add to trakt
         """
-
         data = {}
 
         if not self.findShow(show_obj.indexer, show_obj.indexerid):
@@ -161,6 +160,7 @@ class TraktChecker():
                     }
                 ]
             }
+
             if trakt_id == 'tvdb_id':
                 data['shows'][0]['ids']['tvdb'] = show_obj.indexerid
             else:
@@ -189,26 +189,28 @@ class TraktChecker():
             logger.log(u"COLLECTION::REMOVE::START - Look for Episodes to Remove From Trakt Collection", logger.DEBUG)
 
             myDB = db.DBConnection()
-            sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status, tv_episodes.location from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid'
+            sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status, tv_episodes.location from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid'
             episodes = myDB.select(sql_selection)
+
             if episodes is not None:
                 trakt_data = []
+
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
-                    if self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"]), List='Collection'):
+
+                    if self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"]), List='Collection'):
                         if cur_episode["location"] == '':
                             logger.log(u"Removing Episode %s S%02dE%02d from collection" %
-                            (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
-                            trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"], cur_episode["episode"]))
-
-            if len(trakt_data):
+                                       (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
+                            trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
-                try:
-                    data = self.trakt_bulk_data_generate(trakt_data)
-                    self.trakt_api.traktRequest("sync/collection/remove", data, method='POST')
-                    self._getShowCollection()
-                except traktException as e:
-                    logger.log(u"Could not connect to Trakt service. Aborting removing episode %s S%02dE%02d from Trakt collection. Error: %s" % (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"], repr(e)), logger.WARNING)
+                if len(trakt_data):
+                    try:
+                        data = self.trakt_bulk_data_generate(trakt_data)
+                        self.trakt_api.traktRequest("sync/collection/remove", data, method='POST')
+                        self._getShowCollection()
+                    except traktException as e:
+                        logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING)
 
             logger.log(u"COLLECTION::REMOVE::FINISH - Look for Episodes to Remove From Trakt Collection", logger.DEBUG)
 
@@ -217,25 +219,27 @@ class TraktChecker():
             logger.log(u"COLLECTION::ADD::START - Look for Episodes to Add to Trakt Collection", logger.DEBUG)
 
             myDB = db.DBConnection()
-            sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in ('+','.join([str(x) for x in Quality.DOWNLOADED + [ARCHIVED]])+')'
+            sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in (' + ','.join([str(x) for x in Quality.DOWNLOADED + [ARCHIVED]]) + ')'
             episodes = myDB.select(sql_selection)
+
             if episodes is not None:
                 trakt_data = []
+
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
-                    if not self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"]), List='Collection'):
+
+                    if not self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"]), List='Collection'):
                         logger.log(u"Adding Episode %s S%02dE%02d to collection" %
-                        (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
-                        trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"], cur_episode["episode"]))
+                                   (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
+                        trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
                 if len(trakt_data):
-                    
                     try:
                         data = self.trakt_bulk_data_generate(trakt_data)
                         self.trakt_api.traktRequest("sync/collection", data, method='POST')
                         self._getShowCollection()
                     except traktException as e:
-                        logger.log(u"Could not connect to Trakt service. Aborting adding episode to Trakt collection. Error: %s" % repr(e), logger.WARNING)
+                        logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING)
 
             logger.log(u"COLLECTION::ADD::FINISH - Look for Episodes to Add to Trakt Collection", logger.DEBUG)
 
@@ -259,54 +263,58 @@ class TraktChecker():
             logger.log(u"WATCHLIST::REMOVE::START - Look for Episodes to Remove from Trakt Watchlist", logger.DEBUG)
 
             myDB = db.DBConnection()
-            sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid'
+            sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode, tv_episodes.status from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid'
             episodes = myDB.select(sql_selection)
+
             if episodes is not None:
                 trakt_data = []
+
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
-                    if self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"])):
+
+                    if self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"])):
                         if cur_episode["status"] not in Quality.SNATCHED + Quality.SNATCHED_PROPER + [UNKNOWN] + [WANTED]:
                             logger.log(u"Removing Episode %s S%02dE%02d from watchlist" %
-                            (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
-                            trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"], cur_episode["episode"]))
+                                       (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
+                            trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"], cur_episode["episode"]))
 
-            if len(trakt_data):
-                
-                try:
-                    data = self.trakt_bulk_data_generate(trakt_data)
-                    self.trakt_api.traktRequest("sync/watchlist/remove", data, method='POST')
-                    self._getEpisodeWatchlist()
-                except traktException as e:
-                    logger.log(u"Could not connect to Trakt service. Aborting removing episode %s S%02dE%02d from Trakt watchlist. Error: %s" % (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"], repr(e)), logger.WARNING)
+                if len(trakt_data):
+                    try:
+                        data = self.trakt_bulk_data_generate(trakt_data)
+                        self.trakt_api.traktRequest("sync/watchlist/remove", data, method='POST')
+                        self._getEpisodeWatchlist()
+                    except traktException as e:
+                        logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING)
 
-            logger.log(u"WATCHLIST::REMOVE::FINISH - Look for Episodes to Remove from Trakt Watchlist", logger.DEBUG)
+                logger.log(u"WATCHLIST::REMOVE::FINISH - Look for Episodes to Remove from Trakt Watchlist", logger.DEBUG)
 
     def addEpisodeToTraktWatchList(self):
         if sickbeard.TRAKT_SYNC_WATCHLIST and sickbeard.USE_TRAKT:
             logger.log(u"WATCHLIST::ADD::START - Look for Episodes to Add to Trakt Watchlist", logger.DEBUG)
 
             myDB = db.DBConnection()
-            sql_selection='select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in ('+','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER + [WANTED]])+')'
+            sql_selection = 'select tv_shows.indexer, tv_shows.startyear, showid, show_name, season, episode from tv_episodes,tv_shows where tv_shows.indexer_id = tv_episodes.showid and tv_episodes.status in (' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER + [WANTED]]) + ')'
             episodes = myDB.select(sql_selection)
+
             if episodes is not None:
                 trakt_data = []
+
                 for cur_episode in episodes:
                     trakt_id = sickbeard.indexerApi(cur_episode["indexer"]).config['trakt_id']
-                    if not self._checkInList(trakt_id,str(cur_episode["showid"]),str(cur_episode["season"]),str(cur_episode["episode"])):
+
+                    if not self._checkInList(trakt_id, str(cur_episode["showid"]), str(cur_episode["season"]), str(cur_episode["episode"])):
                         logger.log(u"Adding Episode %s S%02dE%02d to watchlist" %
-                        (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
-                        trakt_data.append((cur_episode["showid"],cur_episode["indexer"],cur_episode["show_name"],cur_episode["startyear"],cur_episode["season"],
-                        cur_episode["episode"]))
+                                   (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"]), logger.DEBUG)
+                        trakt_data.append((cur_episode["showid"], cur_episode["indexer"], cur_episode["show_name"], cur_episode["startyear"], cur_episode["season"],
+                                           cur_episode["episode"]))
 
                 if len(trakt_data):
-
                     try:
                         data = self.trakt_bulk_data_generate(trakt_data)
                         self.trakt_api.traktRequest("sync/watchlist", data, method='POST')
                         self._getEpisodeWatchlist()
                     except traktException as e:
-                        logger.log(u"Could not connect to Trakt service. Aborting adding episode %s S%02dE%02d to Trakt watchlist. Error: %s" % (cur_episode["show_name"], cur_episode["season"], cur_episode["episode"], repr(e)), logger.WARNING)
+                        logger.log(u"Could not connect to Trakt service. Error %s" % ex(e), logger.WARNING)
 
             logger.log(u"WATCHLIST::ADD::FINISH - Look for Episodes to Add to Trakt Watchlist", logger.DEBUG)
 
@@ -316,10 +324,12 @@ class TraktChecker():
 
             if sickbeard.showList is not None:
                 trakt_data = []
+
                 for show in sickbeard.showList:
                     trakt_id = sickbeard.indexerApi(show.indexer).config['trakt_id']
-                    if not self._checkInList(trakt_id,str(show.indexerid),'0','0',List='Show'):
-                        logger.log(u"Adding Show: Indexer %s %s - %s to Watchlist" % ( trakt_id,str(show.indexerid), show.name), logger.DEBUG)
+
+                    if not self._checkInList(trakt_id, str(show.indexerid), '0', '0', List='Show'):
+                        logger.log(u"Adding Show: Indexer %s %s - %s to Watchlist" % (trakt_id, str(show.indexerid), show.name), logger.DEBUG)
                         show_el = {'title': show.name, 'year': show.startyear, 'ids': {}}
                         if trakt_id == 'tvdb_id':
                             show_el['ids']['tvdb'] = show.indexerid
@@ -328,13 +338,12 @@ class TraktChecker():
                         trakt_data.append(show_el)
 
                 if len(trakt_data):
-                    
                     try:
                         data = {'shows': trakt_data}
                         self.trakt_api.traktRequest("sync/watchlist", data, method='POST')
                         self._getShowWatchlist()
                     except traktException as e:
-                        logger.log(u"Could not connect to Trakt service. Aborting adding show %s to Trakt watchlist. Error: %s" % (show.name, repr(e)), logger.WARNING)
+                        logger.log(u"Could not connect to Trakt service. Error: %s" % ex(e), logger.WARNING)
 
             logger.log(u"SHOW_WATCHLIST::ADD::FINISH - Look for Shows to Add to Trakt Watchlist", logger.DEBUG)
 
@@ -366,11 +375,12 @@ class TraktChecker():
 
         indexer = int(sickbeard.TRAKT_DEFAULT_INDEXER)
         trakt_id = sickbeard.indexerApi(indexer).config['trakt_id']
+
         for show_el in self.ShowWatchlist[trakt_id]:
             indexer_id = int(str(show_el))
             show = self.ShowWatchlist[trakt_id][show_el]
 
-            #logger.log(u"Checking Show: %s %s %s" % (trakt_id, indexer_id, show['title']),logger.DEBUG)
+            # logger.log(u"Checking Show: %s %s %s" % (trakt_id, indexer_id, show['title']),logger.DEBUG)
             if int(sickbeard.TRAKT_METHOD_ADD) != 2:
                 self.addDefaultShow(indexer, indexer_id, show['title'], SKIPPED)
             else:
@@ -378,6 +388,7 @@ class TraktChecker():
 
             if int(sickbeard.TRAKT_METHOD_ADD) == 1:
                 newShow = helpers.findCertainShow(sickbeard.showList, indexer_id)
+
                 if newShow is not None:
                     setEpisodeToWanted(newShow, 1, 1)
                 else:
@@ -403,7 +414,6 @@ class TraktChecker():
             indexer_id = int(show_el)
             show = self.EpisodeWatchlist[trakt_id][show_el]
 
-
             newShow = helpers.findCertainShow(sickbeard.showList, indexer_id)
 
             try:
@@ -411,21 +421,25 @@ class TraktChecker():
                     if indexer_id not in managed_show:
                         self.addDefaultShow(indexer, indexer_id, show['title'], SKIPPED)
                         managed_show.append(indexer_id)
+
                         for season_el in show['seasons']:
                             season = int(season_el)
+
                             for episode_el in show['seasons'][season_el]['episodes']:
                                 self.todoWanted.append((indexer_id, season, int(episode_el)))
                 else:
                     if newShow.indexer == indexer:
                         for season_el in show['seasons']:
                             season = int(season_el)
+
                             for episode_el in show['seasons'][season_el]['episodes']:
                                 setEpisodeToWanted(newShow, season, int(episode_el))
             except TypeError:
                 logger.log(u"Could not parse the output from trakt for %s " % show["title"], logger.DEBUG)
         logger.log(u"SHOW_WATCHLIST::CHECK::FINISH - Trakt Episode Watchlist", logger.DEBUG)
 
-    def addDefaultShow(self, indexer, indexer_id, name, status):
+    @staticmethod
+    def addDefaultShow(indexer, indexer_id, name, status):
         """
         Adds a new show with the default settings
         """
@@ -435,12 +449,13 @@ class TraktChecker():
 
             try:
                 location = root_dirs[int(root_dirs[0]) + 1]
-            except:
+            except Exception:
                 location = None
 
             if location:
                 showPath = ek(os.path.join, location, helpers.sanitizeFileName(name))
                 dir_exists = helpers.makeDir(showPath)
+
                 if not dir_exists:
                     logger.log(u"Unable to create the folder %s , can't add the show" % showPath, logger.WARNING)
                     return
@@ -461,43 +476,43 @@ class TraktChecker():
     def manageNewShow(self, show):
         logger.log(u"Checking if trakt watch list wants to search for episodes from new show " + show.name, logger.DEBUG)
         episodes = [i for i in self.todoWanted if i[0] == show.indexerid]
+
         for episode in episodes:
             self.todoWanted.remove(episode)
             setEpisodeToWanted(show, episode[1], episode[2])
 
-    def _checkInList(self,trakt_id, showid, season, episode, List = None):
+    def _checkInList(self, trakt_id, showid, season, episode, List=None):
         """
          Check in the Watchlist or CollectionList for Show
          Is the Show, Season and Episode in the trakt_id list (tvdb / tvrage)
         """
-        #logger.log(u"Checking Show: %s %s %s " % (trakt_id, showid, List),logger.DEBUG)
+        # logger.log(u"Checking Show: %s %s %s " % (trakt_id, showid, List),logger.DEBUG)
 
         if "Collection" == List:
             try:
                 if self.Collectionlist[trakt_id][showid]['seasons'][season]['episodes'][episode] == episode:
                     return True
-            except:
+            except Exception:
                 return False
         elif "Show" == List:
             try:
                 if self.ShowWatchlist[trakt_id][showid]['id'] == showid:
                     return True
-            except:
+            except Exception:
                 return False
         else:
             try:
                 if self.EpisodeWatchlist[trakt_id][showid]['seasons'][season]['episodes'][episode] == episode:
                     return True
-            except:
+            except Exception:
                 return False
 
     def _getShowWatchlist(self):
         """
         Get Watchlist and parse once into addressable structure
         """
-
         try:
-            self.ShowWatchlist = { 'tvdb_id' : {}, 'tvrage_id': {} }
+            self.ShowWatchlist = {'tvdb_id': {}, 'tvrage_id': {}}
             TraktShowWatchlist = self.trakt_api.traktRequest("sync/watchlist/shows")
             tvdb_id = 'tvdb'
             tvrage_id = 'tvrage'
@@ -505,8 +520,10 @@ class TraktChecker():
             for watchlist_el in TraktShowWatchlist:
                 tvdb = False
                 tvrage = False
+
                 if not watchlist_el['show']['ids']["tvdb"] is None:
                     tvdb = True
+
                 if not watchlist_el['show']['ids']["tvrage"] is None:
                     tvrage = True
 
@@ -515,24 +532,22 @@ class TraktChecker():
 
                 if tvdb:
                     showid = str(watchlist_el['show']['ids'][tvdb_id])
-                    self.ShowWatchlist[tvdb_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year }
+                    self.ShowWatchlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year}
+
                 if tvrage:
                     showid = str(watchlist_el['show']['ids'][tvrage_id])
-                    self.ShowWatchlist[tvrage_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year }
-
+                    self.ShowWatchlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year}
         except traktException as e:
             logger.log(u"Could not connect to trakt service, cannot download Show Watchlist: %s" % repr(e), logger.WARNING)
             return False
-
         return True
 
     def _getEpisodeWatchlist(self):
         """
          Get Watchlist and parse once into addressable structure
         """
-
         try:
-            self.EpisodeWatchlist = { 'tvdb_id' : {}, 'tvrage_id': {} }
+            self.EpisodeWatchlist = {'tvdb_id': {}, 'tvrage_id': {}}
             TraktEpisodeWatchlist = self.trakt_api.traktRequest("sync/watchlist/episodes")
             tvdb_id = 'tvdb'
             tvrage_id = 'tvrage'
@@ -540,8 +555,10 @@ class TraktChecker():
             for watchlist_el in TraktEpisodeWatchlist:
                 tvdb = False
                 tvrage = False
+
                 if not watchlist_el['show']['ids']["tvdb"] is None:
                     tvdb = True
+
                 if not watchlist_el['show']['ids']["tvrage"] is None:
                     tvrage = True
 
@@ -552,40 +569,38 @@ class TraktChecker():
 
                 if tvdb:
                     showid = str(watchlist_el['show']['ids'][tvdb_id])
-                    if not showid in self.EpisodeWatchlist[tvdb_id + '_id'].keys():
-                        self.EpisodeWatchlist[tvdb_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} }
 
-                    if not season in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'].keys():
-                        self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} }
+                    if showid not in self.EpisodeWatchlist[tvdb_id + '_id'].keys():
+                        self.EpisodeWatchlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
-                    if not episode in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys():
+                    if season not in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'].keys():
+                        self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
+
+                    if episode not in self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                         self.EpisodeWatchlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
 
                 if tvrage:
                     showid = str(watchlist_el['show']['ids'][tvrage_id])
-                    if not showid in self.EpisodeWatchlist[tvrage_id + '_id'].keys():
-                        self.EpisodeWatchlist[tvrage_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} }
 
-                    if not season in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'].keys():
-                        self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} }
+                    if showid not in self.EpisodeWatchlist[tvrage_id + '_id'].keys():
+                        self.EpisodeWatchlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
-                    if not episode in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
-                        self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
+                    if season not in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'].keys():
+                        self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
 
+                    if episode not in self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
+                        self.EpisodeWatchlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
         except traktException as e:
             logger.log(u"Could not connect to trakt service, cannot download Episode Watchlist: %s" % repr(e), logger.WARNING)
             return False
-
         return True
 
     def _getShowCollection(self):
         """
         Get Collection and parse once into addressable structure
         """
-
         try:
-
-            self.Collectionlist = { 'tvdb_id' : {}, 'tvrage_id': {} }
+            self.Collectionlist = {'tvdb_id': {}, 'tvrage_id': {}}
             logger.log(u"Getting Show Collection", logger.DEBUG)
             TraktCollectionList = self.trakt_api.traktRequest("sync/collection/shows")
             tvdb_id = 'tvdb'
@@ -594,8 +609,10 @@ class TraktChecker():
             for watchlist_el in TraktCollectionList:
                 tvdb = False
                 tvrage = False
+
                 if not watchlist_el['show']['ids']["tvdb"] is None:
                     tvdb = True
+
                 if not watchlist_el['show']['ids']["tvrage"] is None:
                     tvrage = True
 
@@ -610,43 +627,45 @@ class TraktChecker():
 
                             if tvdb:
                                 showid = str(watchlist_el['show']['ids'][tvdb_id])
-                                if not showid in self.Collectionlist[tvdb_id + '_id'].keys():
-                                    self.Collectionlist[tvdb_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} }
 
-                                if not season in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'].keys():
-                                    self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} }
+                                if showid not in self.Collectionlist[tvdb_id + '_id'].keys():
+                                    self.Collectionlist[tvdb_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
+
+                                if season not in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'].keys():
+                                    self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
 
-                                if not episode in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys():
+                                if episode not in self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'].keys():
                                     self.Collectionlist[tvdb_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
 
                             if tvrage:
                                 showid = str(watchlist_el['show']['ids'][tvrage_id])
-                                if not showid in self.Collectionlist[tvrage_id + '_id'].keys():
-                                    self.Collectionlist[tvrage_id + '_id'][showid] = { 'id': showid , 'title' : title , 'year': year , 'seasons' : {} }
 
-                                if not season in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'].keys():
-                                    self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season] = { 's': season , 'episodes' : {} }
+                                if showid not in self.Collectionlist[tvrage_id + '_id'].keys():
+                                    self.Collectionlist[tvrage_id + '_id'][showid] = {'id': showid, 'title': title, 'year': year, 'seasons': {}}
 
-                                if not episode in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
-                                    self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
+                                if season not in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'].keys():
+                                    self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season] = {'s': season, 'episodes': {}}
 
+                                if episode not in self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'].keys():
+                                    self.Collectionlist[tvrage_id + '_id'][showid]['seasons'][season]['episodes'][episode] = episode
         except traktException as e:
             logger.log(u"Could not connect to trakt service, cannot download Show Collection: %s" % repr(e), logger.WARNING)
             return False
-
         return True
 
-    def trakt_bulk_data_generate(self, data):
+    @staticmethod
+    def trakt_bulk_data_generate(data):
         """
         Build the JSON structure to send back to Trakt
         """
-
         uniqueShows = {}
         uniqueSeasons = {}
-        for showid,indexerid,show_name,startyear,season,episode in data:
+
+        for showid, indexerid, show_name, startyear, season, episode in data:
             if showid not in uniqueShows:
-                uniqueShows[showid] = {'title': show_name, 'year': startyear, 'ids': {},'seasons': []}
+                uniqueShows[showid] = {'title': show_name, 'year': startyear, 'ids': {}, 'seasons': []}
                 trakt_id = sickbeard.indexerApi(indexerid).config['trakt_id']
+
                 if trakt_id == 'tvdb_id':
                     uniqueShows[showid]['ids']["tvdb"] = showid
                 else:
@@ -654,18 +673,21 @@ class TraktChecker():
                 uniqueSeasons[showid] = []
 
         # Get the unique seasons per Show
-        for showid,indexerid,show_name,startyear,season,episode in data:
+        for showid, indexerid, show_name, startyear, season, episode in data:
             if season not in uniqueSeasons[showid]:
                 uniqueSeasons[showid].append(season)
 
-        #build the query
+        # build the query
         showList = []
         seasonsList = {}
+
         for searchedShow in uniqueShows:
             seasonsList[searchedShow] = []
+
             for searchedSeason in uniqueSeasons[searchedShow]:
                 episodesList = []
-                for showid,indexerid,show_name,startyear,season,episode in data:
+
+                for showid, indexerid, show_name, startyear, season, episode in data:
                     if season == searchedSeason and showid == searchedShow:
                         episodesList.append({'number': episode})
                 show = uniqueShows[searchedShow]
diff --git a/sickbeard/tv.py b/sickbeard/tv.py
index f58f3abc71e9e536716e7015c72e0ba3906573d5..1a54e45b8d049222076449d181ab68e3a4fbecc0 100644
--- a/sickbeard/tv.py
+++ b/sickbeard/tv.py
@@ -45,7 +45,6 @@ from sickbeard import notifiers
 from sickbeard import postProcessor
 from sickbeard import subtitles
 from sickbeard.blackandwhitelist import BlackAndWhiteList
-from sickbeard import sbdatetime
 from sickbeard import network_timezones
 from sickbeard.indexers.indexer_config import INDEXER_TVRAGE
 from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
@@ -261,7 +260,7 @@ class TVShow(object):
                 logger.log(
                     "Found episode by absolute_number %s which is S%02dE%02d" % (absolute_number, season or 0, episode or 0), logger.DEBUG)
             elif len(sqlResults) > 1:
-                logger.log("Multiple entries for absolute number: " + str(
+                logger.log(u"Multiple entries for absolute number: " + str(
                     absolute_number) + " in show: " + self.name + " found ", logger.ERROR)
                 return None
             else:
@@ -277,7 +276,7 @@ class TVShow(object):
             if noCreate:
                 return None
 
-            #logger.log(str(self.indexerid) + u": An object for episode S%02dE%02d didn't exist in the cache, trying to create it" % (season or 0, episode or 0), logger.DEBUG)
+            # logger.log(str(self.indexerid) + u": An object for episode S%02dE%02d didn't exist in the cache, trying to create it" % (season or 0, episode or 0), logger.DEBUG)
 
             if file:
                 ep = TVEpisode(self, season, episode, file)
@@ -453,7 +452,7 @@ class TVShow(object):
                     try:
                         curEpisode.refreshSubtitles()
                     except Exception:
-                        logger.log("%s: Could not refresh subtitles" % self.indexerid, logger.ERROR)
+                        logger.log(u"%s: Could not refresh subtitles" % self.indexerid, logger.ERROR)
                         logger.log(traceback.format_exc(), logger.DEBUG)
 
                 sql_l.append(curEpisode.get_sql())
@@ -483,8 +482,8 @@ class TVShow(object):
         if self.dvdorder != 0:
             lINDEXER_API_PARMS['dvdorder'] = True
 
-        #logger.log(u"lINDEXER_API_PARMS: " + str(lINDEXER_API_PARMS), logger.DEBUG)
-        #Spamming log
+        # logger.log(u"lINDEXER_API_PARMS: " + str(lINDEXER_API_PARMS), logger.DEBUG)
+        # Spamming log
         t = sickbeard.indexerApi(self.indexer).indexer(**lINDEXER_API_PARMS)
 
         cachedShow = t[self.indexerid]
@@ -573,7 +572,7 @@ class TVShow(object):
                     if not ep:
                         raise EpisodeNotFoundException
                 except EpisodeNotFoundException:
-                    logger.log("%s: %s object for S%02dE%02d is incomplete, skipping this episode" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0))
+                    logger.log(u"%s: %s object for S%02dE%02d is incomplete, skipping this episode" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0))
                     continue
                 else:
                     try:
@@ -583,7 +582,7 @@ class TVShow(object):
                         continue
 
                 with ep.lock:
-                    logger.log("%s: Loading info from %s for episode S%02dE%02d" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0), logger.DEBUG)
+                    logger.log(u"%s: Loading info from %s for episode S%02dE%02d" % (self.indexerid, sickbeard.indexerApi(self.indexer).name, season or 0, episode or 0), logger.DEBUG)
                     ep.loadFromIndexer(season, episode, tvapi=t)
 
                     sql_l.append(ep.get_sql())
@@ -607,7 +606,7 @@ class TVShow(object):
 
         for cur_provider in sickbeard.metadata_provider_dict.values():
 
-            #logger.log(u"Running metadata routines for " + cur_provider.name, logger.DEBUG)
+            # logger.log(u"Running metadata routines for " + cur_provider.name, logger.DEBUG)
 
             fanart_result = cur_provider.create_fanart(self) or fanart_result
             poster_result = cur_provider.create_poster(self) or poster_result
@@ -640,7 +639,7 @@ class TVShow(object):
             return None
 
         if not len(parse_result.episode_numbers):
-            logger.log("parse_result: " + str(parse_result))
+            logger.log(u"parse_result: " + str(parse_result))
             logger.log(u"No episode number found in " + file + ", ignoring it", logger.WARNING)
             return None
 
@@ -654,7 +653,7 @@ class TVShow(object):
 
             episode = int(curEpNum)
 
-            logger.log("%s: %s parsed to %s S%02dE%02d" % (self.indexerid, file, self.name, season or 0, episode or 0), logger.DEBUG)
+            logger.log(u"%s: %s parsed to %s S%02dE%02d" % (self.indexerid, file, self.name, season or 0, episode or 0), logger.DEBUG)
 
             checkQualityAgain = False
             same_file = False
@@ -1021,7 +1020,7 @@ class TVShow(object):
                 file_attribute = ek(os.stat, self.location)[0]
                 if not file_attribute & stat.S_IWRITE:
                     # File is read-only, so make it writeable
-                    logger.log('Attempting to make writeable the read only folder %s' % self._location, logger.DEBUG)
+                    logger.log(u'Attempting to make writeable the read only folder %s' % self._location, logger.DEBUG)
                     try:
                         ek(os.chmod, self.location, stat.S_IWRITE)
                     except Exception:
@@ -1125,28 +1124,28 @@ class TVShow(object):
             logger.log(str(self.indexerid) + ": Show dir doesn't exist, can't download subtitles", logger.DEBUG)
             return
 
-        logger.log("%s: Downloading subtitles" % self.indexerid, logger.DEBUG)
+        logger.log(u"%s: Downloading subtitles" % self.indexerid, logger.DEBUG)
 
         try:
             episodes = self.getAllEpisodes(has_location=True)
             if not episodes:
-                logger.log("%s: No episodes to download subtitles for %s" % (self.indexerid, self.name), logger.DEBUG)
+                logger.log(u"%s: No episodes to download subtitles for %s" % (self.indexerid, self.name), logger.DEBUG)
                 return
 
             for episode in episodes:
                 episode.downloadSubtitles(force=force)
 
         except Exception:
-            logger.log("%s: Error occurred when downloading subtitles for %s" % (self.indexerid, self.name), logger.DEBUG)
+            logger.log(u"%s: Error occurred when downloading subtitles for %s" % (self.indexerid, self.name), logger.DEBUG)
             logger.log(traceback.format_exc(), logger.ERROR)
 
     def saveToDB(self, forceSave=False):
 
         if not self.dirty and not forceSave:
-            logger.log(str(self.indexerid) + ": Not saving show to db - record is not dirty", logger.DEBUG)
+            # logger.log(str(self.indexerid) + ": Not saving show to db - record is not dirty", logger.DEBUG)
             return
 
-        logger.log(str(self.indexerid) + u": Saving show info to database", logger.DEBUG)
+        logger.log(u"%i: Saving to database: %s" % (self.indexerid, self.name), logger.DEBUG)
 
         controlValueDict = {"indexer_id": self.indexerid}
         newValueDict = {"indexer": self.indexer,
@@ -1435,10 +1434,10 @@ class TVEpisode(object):
 
         logger.log(u"%s: Downloading subtitles for S%02dE%02d" % (self.show.indexerid, self.season or 0, self.episode or 0), logger.DEBUG)
 
-        #logging.getLogger('subliminal.api').addHandler(logging.StreamHandler())
-        #logging.getLogger('subliminal.api').setLevel(logging.DEBUG)
-        #logging.getLogger('subliminal').addHandler(logging.StreamHandler())
-        #logging.getLogger('subliminal').setLevel(logging.DEBUG)
+        # logging.getLogger('subliminal.api').addHandler(logging.StreamHandler())
+        # logging.getLogger('subliminal.api').setLevel(logging.DEBUG)
+        # logging.getLogger('subliminal').addHandler(logging.StreamHandler())
+        # logging.getLogger('subliminal').setLevel(logging.DEBUG)
 
         subtitles_info = {'location': self.location, 'subtitles': self.subtitles, 'show.indexerid': self.show.indexerid, 'season': self.season,
                           'episode': self.episode, 'name': self.name, 'show.name': self.show.name, 'status': self.status}
@@ -1644,10 +1643,10 @@ class TVEpisode(object):
         if getattr(myEp, 'episodename', None) is None:
             logger.log(u"This episode %s - S%02dE%02d has no name on %s. Setting to an empty string" % (self.show.name, season or 0, episode or 0, sickbeard.indexerApi(self.indexer).name))
             setattr(myEp, 'episodename', '')
-            # if I'm incomplete on TVDB but I once was complete then just delete myself from the DB for now
-            #if self.indexerid != -1:
-            #    self.deleteEpisode()
-            #return False
+            # # if I'm incomplete on TVDB but I once was complete then just delete myself from the DB for now
+            # if self.indexerid != -1:
+            #     self.deleteEpisode()
+            # return False
 
         if getattr(myEp, 'absolute_number', None) is None:
             logger.log(u"This episode %s - S%02dE%02d has no absolute number on %s" %(self.show.name, season or 0, episode or 0, sickbeard.indexerApi(self.indexer).name), logger.DEBUG)
@@ -1816,17 +1815,17 @@ class TVEpisode(object):
 
     def __str__(self):
 
-        toReturn = ""
-        toReturn += "%s - S%02dE%02d - %s " % (self.show.name, self.season or 0, self.episode or 0, self.name) + "\n"
-        toReturn += "location: " + str(self.location) + "\n"
-        toReturn += "description: " + str(self.description) + "\n"
-        toReturn += "subtitles: " + str(",".join(self.subtitles)) + "\n"
-        toReturn += "subtitles_searchcount: " + str(self.subtitles_searchcount) + "\n"
-        toReturn += "subtitles_lastsearch: " + str(self.subtitles_lastsearch) + "\n"
-        toReturn += "airdate: " + str(self.airdate.toordinal()) + " (" + str(self.airdate) + ")\n"
-        toReturn += "hasnfo: " + str(self.hasnfo) + "\n"
-        toReturn += "hastbn: " + str(self.hastbn) + "\n"
-        toReturn += "status: " + str(self.status) + "\n"
+        toReturn = u""
+        toReturn += u"%r - S%02rE%02r - %r\n" % (self.show.name, self.season, self.episode, self.name)
+        toReturn += u"location: %r\n" % self.location
+        toReturn += u"description: %r\n" % self.description
+        toReturn += u"subtitles: %r\n" % u",".join(self.subtitles)
+        toReturn += u"subtitles_searchcount: %r\n" % self.subtitles_searchcount
+        toReturn += u"subtitles_lastsearch: %r\n" % self.subtitles_lastsearch
+        toReturn += u"airdate: %r (%r)\n" % (self.airdate.toordinal(), self.airdate)
+        toReturn += u"hasnfo: %r\n" % self.hasnfo
+        toReturn += u"hastbn: %r\n" % self.hastbn
+        toReturn += u"status: %r\n" % self.status
         return toReturn
 
     def createMetaFiles(self):
@@ -1950,13 +1949,9 @@ class TVEpisode(object):
         """
 
         if not self.dirty and not forceSave:
-            logger.log(str(self.show.indexerid) + u": Not saving episode to db - record is not dirty", logger.DEBUG)
+            # logger.log(str(self.show.indexerid) + u": Not saving episode to db - record is not dirty", logger.DEBUG)
             return
 
-        logger.log(str(self.show.indexerid) + u": Saving episode details to database", logger.DEBUG)
-
-        logger.log(u"STATUS IS " + str(self.status), logger.DEBUG)
-
         newValueDict = {"indexerid": self.indexerid,
                         "indexer": self.indexer,
                         "name": self.name,
@@ -1980,6 +1975,9 @@ class TVEpisode(object):
                             "season": self.season,
                             "episode": self.episode}
 
+        # logger.log(u"%s: Saving episode details to database %rx%r: %s" %
+        #            (self.show.indexerid, self.season, self.episode, statusStrings[self.status]), logger.DEBUG)
+
         # use a custom update/insert method to get the data into the DB
         myDB = db.DBConnection()
         myDB.upsert("tv_episodes", newValueDict, controlValueDict)
@@ -2109,23 +2107,18 @@ class TVEpisode(object):
         else:
             show_name = self.show.name
 
-        # try to get the release encoder to comply with scene naming standards
-        encoder = Quality.sceneQualityFromName(self.release_name, epQual)
-        if encoder:
-            logger.log(u"Found codec for '" + show_name + ": " + ep_name + "'.", logger.DEBUG)
-
-        #try to get the release group
+        # try to get the release group
         rel_grp = {}
         rel_grp["SiCKRAGE"] = 'SiCKRAGE'
-        if hasattr(self, 'location'): #from the location name
+        if hasattr(self, 'location'):  # from the location name
             rel_grp['location'] = release_group(self.show, self.location)
             if not rel_grp['location']:
                 del rel_grp['location']
-        if hasattr(self, '_release_group'): #from the release group field in db
+        if hasattr(self, '_release_group'):  # from the release group field in db
             rel_grp['database'] = self._release_group
             if not rel_grp['database']:
                 del rel_grp['database']
-        if hasattr(self, 'release_name'): #from the release name field in db
+        if hasattr(self, 'release_name'):  # from the release name field in db
             rel_grp['release_name'] = release_group(self.show, self.release_name)
             if not rel_grp['release_name']:
                 del rel_grp['release_name']
@@ -2139,6 +2132,11 @@ class TVEpisode(object):
             relgrp = 'location'
         else: relgrp = 'SiCKRAGE'
 
+        # try to get the release encoder to comply with scene naming standards
+        encoder = Quality.sceneQualityFromName(self.release_name.replace(rel_grp[relgrp], ""), epQual)
+        if encoder:
+            logger.log(u"Found codec for '" + show_name + ": " + ep_name + "'.", logger.DEBUG)
+
         return {
             '%SN': show_name,
             '%S.N': dot(show_name),
@@ -2237,7 +2235,7 @@ class TVEpisode(object):
                 result_name = result_name.replace('%RN', '%S.N.S%0SE%0E.%E.N-' + replace_map['%RG'])
                 result_name = result_name.replace('%rn', '%s.n.s%0se%0e.%e.n-' + replace_map['%RG'].lower())
 
-            #logger.log(u"Episode has no release name, replacing it with a generic one: " + result_name, logger.DEBUG)
+            # logger.log(u"Episode has no release name, replacing it with a generic one: " + result_name, logger.DEBUG)
 
         if not replace_map['%RT']:
             result_name = re.sub('([ _.-]*)%RT([ _.-]*)', r'\2', result_name)
@@ -2458,7 +2456,7 @@ class TVEpisode(object):
         related_files = postProcessor.PostProcessor(self.location).list_associated_files(
             self.location, base_name_only=True, subfolders=True)
 
-        #This is wrong. Cause of pp not moving subs.
+        # This is wrong. Cause of pp not moving subs.
         if self.show.subtitles and sickbeard.SUBTITLES_DIR != '':
             related_subs = postProcessor.PostProcessor(self.location).list_associated_files(sickbeard.SUBTITLES_DIR,
                                                                                             subtitles_only=True, subfolders=True)
@@ -2471,11 +2469,11 @@ class TVEpisode(object):
 
         # move related files
         for cur_related_file in related_files:
-            #We need to fix something here because related files can be in subfolders and the original code doesn't handle this (at all)
+            # We need to fix something here because related files can be in subfolders and the original code doesn't handle this (at all)
             cur_related_dir = ek(os.path.dirname, ek(os.path.abspath, cur_related_file))
             subfolder = cur_related_dir.replace(ek(os.path.dirname, ek(os.path.abspath, self.location)), '')
-            #We now have a subfolder. We need to add that to the absolute_proper_path.
-            #First get the absolute proper-path dir
+            # We now have a subfolder. We need to add that to the absolute_proper_path.
+            # First get the absolute proper-path dir
             proper_related_dir = ek(os.path.dirname, ek(os.path.abspath, absolute_proper_path + file_ext))
             proper_related_path = absolute_proper_path.replace(proper_related_dir, proper_related_dir + subfolder)
 
diff --git a/sickbeard/tvcache.py b/sickbeard/tvcache.py
index 1103353abaeeac7dbac9dbf34762c7f9ad1e9b00..6c6ce5677c29117b532d7f9dd70be46af44da64c 100644
--- a/sickbeard/tvcache.py
+++ b/sickbeard/tvcache.py
@@ -23,16 +23,15 @@ import itertools
 import urllib2
 
 import sickbeard
-
 from sickbeard import db
 from sickbeard import logger
-from sickbeard.common import Quality
 from sickbeard import helpers
-from sickbeard.rssfeeds import RSSFeeds
-from name_parser.parser import NameParser, InvalidNameException, InvalidShowException
+from sickbeard.common import Quality
+from sickbeard.rssfeeds import getFeed
 from sickbeard import show_name_helpers
 from sickrage.helper.encoding import ss
 from sickrage.helper.exceptions import AuthException, ex
+from sickbeard.name_parser.parser import NameParser, InvalidNameException, InvalidShowException
 
 
 class CacheDBConnection(db.DBConnection):
@@ -74,7 +73,7 @@ class CacheDBConnection(db.DBConnection):
                 raise
 
 
-class TVCache():
+class TVCache(object):
     def __init__(self, provider):
         self.provider = provider
         self.providerID = self.provider.getID()
@@ -134,13 +133,11 @@ class TVCache():
         except Exception, e:
             logger.log(u"Error while searching " + self.provider.name + ", skipping: " + repr(e), logger.DEBUG)
 
-    def getRSSFeed(self, url, post_data=None, items=[]):
+    def getRSSFeed(self, url):
         handlers = []
 
-        if self.provider.proxy.isEnabled():
-            self.provider.headers.update({'Referer': self.provider.proxy.getProxyURL()})
-        elif sickbeard.PROXY_SETTING:
-            logger.log("Using proxy for url: " + url, logger.DEBUG)
+        if sickbeard.PROXY_SETTING:
+            logger.log(u"Using global proxy for url: " + url, logger.DEBUG)
             scheme, address = urllib2.splittype(sickbeard.PROXY_SETTING)
             address = sickbeard.PROXY_SETTING if scheme else 'http://' + sickbeard.PROXY_SETTING
             handlers = [urllib2.ProxyHandler({'http': address, 'https': address})]
@@ -148,11 +145,9 @@ class TVCache():
         elif 'Referer' in self.provider.headers:
             self.provider.headers.pop('Referer')
 
-        return RSSFeeds(self.providerID).getFeed(
-            self.provider.proxy._buildURL(url),
-            post_data,
-            self.provider.headers,
-            items,
+        return getFeed(
+            url,
+            request_headers=self.provider.headers,
             handlers=handlers)
 
     def _translateTitle(self, title):
@@ -178,6 +173,8 @@ class TVCache():
                 u"The data returned from the " + self.provider.name + " feed is incomplete, this result is unusable",
                 logger.DEBUG)
 
+        return False
+
     def _getLastUpdate(self):
         myDB = self._getDB()
         sqlResults = myDB.select("SELECT time FROM lastUpdate WHERE provider = ?", [self.providerID])
@@ -297,14 +294,15 @@ class TVCache():
         neededEps = self.findNeededEpisodes(episode, manualSearch, downCurQuality)
         return neededEps[episode] if episode in neededEps else []
 
-    def listPropers(self, date=None, delimiter="."):
+    def listPropers(self, date=None):
         myDB = self._getDB()
         sql = "SELECT * FROM [" + self.providerID + "] WHERE name LIKE '%.PROPER.%' OR name LIKE '%.REPACK.%'"
 
         if date != None:
             sql += " AND time >= " + str(int(time.mktime(date.timetuple())))
 
-        return filter(lambda x: x['indexerid'] != 0, myDB.select(sql))
+        propers_results = myDB.select(sql)
+        return [x for x in propers_results if x['indexerid']]
 
 
     def findNeededEpisodes(self, episode, manualSearch=False, downCurQuality=False):
@@ -392,4 +390,3 @@ class TVCache():
         self.setLastSearch()
 
         return neededEps
-
diff --git a/sickbeard/ui.py b/sickbeard/ui.py
index 43044c6cf1953d8845005ff3e57904bcc19cf234..3d7c559bf934d59c1d188a2b4c6d22ca90b50dc2 100644
--- a/sickbeard/ui.py
+++ b/sickbeard/ui.py
@@ -156,7 +156,7 @@ class QueueProgressIndicator():
         return len([x for x in self.queueItemList if x.isInQueue()])
 
     def nextName(self):
-        for curItem in [sickbeard.showQueueScheduler.action.currentItem]+sickbeard.showQueueScheduler.action.queue: #@UndefinedVariable
+        for curItem in [sickbeard.showQueueScheduler.action.currentItem]+sickbeard.showQueueScheduler.action.queue:  # @UndefinedVariable
             if curItem in self.queueItemList:
                 return curItem.name
 
diff --git a/sickbeard/versionChecker.py b/sickbeard/versionChecker.py
index 7ed739835702005d4e18121eb28ce22e6c7ffc46..b3dbf50cd0bf4cac5c6032f00151a6a9bdd7e88a 100644
--- a/sickbeard/versionChecker.py
+++ b/sickbeard/versionChecker.py
@@ -105,7 +105,7 @@ class CheckVersion(object):
                 ui.notifications.message('Backup', 'Config backup failed, aborting update')
                 return False
         except Exception as e:
-            logger.log('Update: Config backup failed. Error: %s' % ex(e), logger.ERROR)
+            logger.log(u'Update: Config backup failed. Error: %s' % ex(e), logger.ERROR)
             ui.notifications.message('Backup', 'Config backup failed, aborting update')
             return False
 
@@ -621,7 +621,7 @@ class GitUpdateManager(UpdateManager):
 
         # remove untracked files and performs a hard reset on git branch to avoid update issues
         if sickbeard.GIT_RESET:
-            #self.clean() # This is removing user data and backups
+            # self.clean() # This is removing user data and backups
             self.reset()
 
         if self.branch == self._find_installed_branch():
@@ -857,7 +857,7 @@ class SourceUpdateManager(UpdateManager):
 
                     # Avoid DLL access problem on WIN32/64
                     # These files needing to be updated manually
-                    #or find a way to kill the access from memory
+                    # or find a way to kill the access from memory
                     if curfile in ('unrar.dll', 'unrar64.dll'):
                         try:
                             os.chmod(new_path, stat.S_IWRITE)
diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py
index 94490a467c7306257b8fdb4edf79fb67c8ca849a..9fbe6cfaef7b7b760382fb65d659aac3e423c814 100644
--- a/sickbeard/webapi.py
+++ b/sickbeard/webapi.py
@@ -18,11 +18,12 @@
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 # pylint: disable=W0223,E0202
 
+import io
 import os
+import re
 import time
 import urllib
 import datetime
-import re
 import traceback
 
 import sickbeard
@@ -39,7 +40,6 @@ from sickrage.show.History import History
 from sickrage.show.Show import Show
 from sickrage.system.Restart import Restart
 from sickrage.system.Shutdown import Shutdown
-
 from sickbeard.versionChecker import CheckVersion
 from sickbeard import db, logger, ui, helpers
 from sickbeard import search_queue
@@ -60,14 +60,12 @@ from sickbeard.common import UNKNOWN
 from sickbeard.common import WANTED
 from sickbeard.common import ARCHIVED
 from sickbeard.common import statusStrings
-import codecs
 
 try:
     import json
 except ImportError:
     import simplejson as json
 
-
 from tornado.web import RequestHandler
 
 indexer_ids = ["indexerid", "tvdbid"]
@@ -86,6 +84,8 @@ result_type_map = {
     RESULT_FATAL: "fatal",
     RESULT_DENIED: "denied",
 }
+
+
 # basically everything except RESULT_SUCCESS / success is bad
 
 
@@ -96,8 +96,8 @@ class ApiHandler(RequestHandler):
     def __init__(self, *args, **kwargs):
         super(ApiHandler, self).__init__(*args, **kwargs)
 
-    #def set_default_headers(self):
-        #self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
+    # def set_default_headers(self):
+    #     self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
 
     def get(self, *args, **kwargs):
         kwargs = self.request.arguments
@@ -161,7 +161,7 @@ class ApiHandler(RequestHandler):
                 out = callback + '(' + out + ');'  # wrap with JSONP call if requested
         except Exception, e:  # if we fail to generate the output fake an error
             logger.log(u"API :: " + traceback.format_exc(), logger.DEBUG)
-            out = '{"result": "%s", "message": "error while composing output: %s"}' %\
+            out = '{"result": "%s", "message": "error while composing output: %s"}' % \
                   (result_type_map[RESULT_ERROR], ex(e))
         return out
 
@@ -234,7 +234,6 @@ class ApiHandler(RequestHandler):
 
         return outDict
 
-
     def filter_params(self, cmd, args, kwargs):
         """ return only params kwargs that are for cmd
             and rename them to a clean version (remove "<cmd>_")
@@ -618,6 +617,7 @@ class IntParseError(Exception):
     A value could not be parsed into an int, but should be parsable to an int
     """
 
+
 # -------------------------------------------------------------------------------------#
 
 
@@ -754,7 +754,7 @@ class CMD_Episode(ApiCall):
         if helpers.tryInt(episode['airdate'], 1) > 693595: # 1900
             episode['airdate'] = sbdatetime.sbdatetime.sbfdate(sbdatetime.sbdatetime.convert_to_setting(
                 network_timezones.parse_date_time(int(episode['airdate']), showObj.airs, showObj.network)),
-                                                               d_preset=dateFormat)
+                d_preset=dateFormat)
         else:
             episode['airdate'] = 'Never'
 
@@ -853,7 +853,6 @@ class CMD_EpisodeSetStatus(ApiCall):
         # convert the string status to a int
         for status in statusStrings.statusStrings:
             if str(statusStrings[status]).lower() == str(self.status).lower():
-
                 self.status = status
                 break
         else:  # if we dont break out of the for loop we got here.
@@ -1213,7 +1212,7 @@ class CMD_Logs(ApiCall):
 
         data = []
         if os.path.isfile(logger.logFile):
-            with ek(codecs.open, *[logger.logFile, 'r', 'utf-8']) as f:
+            with io.open(logger.logFile, 'r', encoding='utf-8') as f:
                 data = f.readlines()
 
         regex = r"^(\d\d\d\d)\-(\d\d)\-(\d\d)\s*(\d\d)\:(\d\d):(\d\d)\s*([A-Z]+)\s*(.+?)\s*\:\:\s*(.*)$"
@@ -1292,7 +1291,7 @@ class CMD_PostProcess(ApiCall):
             self.type = 'manual'
 
         data = processTV.processDir(self.path, process_method=self.process_method, force=self.force_replace,
-                                    is_priority=self.is_priority, failed=self.failed, type=self.type)
+                                    is_priority=self.is_priority, failed=self.failed, proc_type=self.type)
 
         if not self.return_data:
             data = ""
@@ -2016,8 +2015,11 @@ class CMD_ShowAddExisting(ApiCall):
         if iqualityID or aqualityID:
             newQuality = Quality.combineQualities(iqualityID, aqualityID)
 
-        sickbeard.showQueueScheduler.action.addShow(int(indexer), int(self.indexerid), self.location, SKIPPED,
-                                                    newQuality, int(self.flatten_folders))
+        sickbeard.showQueueScheduler.action.addShow(
+            int(indexer), int(self.indexerid), self.location, default_status=sickbeard.STATUS_DEFAULT,
+            quality=newQuality, flatten_folders=int(self.flatten_folders), subtitles=self.subtitles,
+            default_status_after=sickbeard.STATUS_DEFAULT_AFTER, archive=self.archive_firstmatch
+        )
 
         return _responds(RESULT_SUCCESS, {"name": indexerName}, indexerName + " has been queued to be added")
 
@@ -2040,7 +2042,9 @@ class CMD_ShowAddNew(ApiCall):
             "anime": {"desc": "True to mark the show as an anime, False otherwise"},
             "scene": {"desc": "True if episodes search should be made by scene numbering, False otherwise"},
             "future_status": {"desc": "The status of future episodes"},
-            "archive_firstmatch": {"desc": "True if episodes should be archived when first match is downloaded, False otherwise"},
+            "archive_firstmatch": {
+                "desc": "True if episodes should be archived when first match is downloaded, False otherwise"
+            },
         }
     }
 
@@ -2184,10 +2188,11 @@ class CMD_ShowAddNew(ApiCall):
             else:
                 helpers.chmodAsParent(showPath)
 
-        sickbeard.showQueueScheduler.action.addShow(int(indexer), int(self.indexerid), showPath, newStatus,
-                                                    newQuality,
-                                                    int(self.flatten_folders), self.lang, self.subtitles, self.anime,
-                                                    self.scene, default_status_after=default_ep_status_after, archive=self.archive_firstmatch)  # @UndefinedVariable
+        sickbeard.showQueueScheduler.action.addShow(
+            int(indexer), int(self.indexerid), showPath, default_status=newStatus, quality=newQuality,
+            flatten_folders=int(self.flatten_folders), lang=self.lang, subtitles=self.subtitles, anime=self.anime,
+            scene=self.scene, default_status_after=default_ep_status_after, archive=self.archive_firstmatch
+        )
 
         return _responds(RESULT_SUCCESS, {"name": indexerName}, indexerName + " has been queued to be added")
 
@@ -2534,7 +2539,7 @@ class CMD_ShowSeasons(ApiCall):
                 status, quality = Quality.splitCompositeStatus(int(row["status"]))
                 row["status"] = _get_status_Strings(status)
                 row["quality"] = get_quality_string(quality)
-                if helpers.tryInt(row['airdate'], 1) > 693595: # 1900
+                if helpers.tryInt(row['airdate'], 1) > 693595:  # 1900
                     dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
                         network_timezones.parse_date_time(row['airdate'], showObj.airs, showObj.network))
                     row['airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat)
@@ -2561,7 +2566,7 @@ class CMD_ShowSeasons(ApiCall):
                 status, quality = Quality.splitCompositeStatus(int(row["status"]))
                 row["status"] = _get_status_Strings(status)
                 row["quality"] = get_quality_string(quality)
-                if helpers.tryInt(row['airdate'], 1) > 693595: # 1900
+                if helpers.tryInt(row['airdate'], 1) > 693595:  # 1900
                     dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
                         network_timezones.parse_date_time(row['airdate'], showObj.airs, showObj.network))
                     row['airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat)
@@ -2777,7 +2782,7 @@ class CMD_ShowUpdate(ApiCall):
             sickbeard.showQueueScheduler.action.updateShow(showObj, True)  # @UndefinedVariable
             return _responds(RESULT_SUCCESS, msg=str(showObj.name) + " has queued to be updated")
         except CantUpdateShowException as e:
-            logger.log("API::Unable to update show: {0}".format(str(e)), logger.DEBUG)
+            logger.log(u"API::Unable to update show: {0}".format(str(e)), logger.DEBUG)
             return _responds(RESULT_FAILURE, msg="Unable to update " + str(showObj.name))
 
 
@@ -2823,7 +2828,7 @@ class CMD_Shows(ApiCall):
                 "subtitles": (0, 1)[curShow.subtitles],
             }
 
-            if helpers.tryInt(curShow.nextaired, 1) > 693595: # 1900
+            if helpers.tryInt(curShow.nextaired, 1) > 693595:  # 1900
                 dtEpisodeAirs = sbdatetime.sbdatetime.convert_to_setting(
                     network_timezones.parse_date_time(curShow.nextaired, curShow.airs, showDict['network']))
                 showDict['next_ep_airdate'] = sbdatetime.sbdatetime.sbfdate(dtEpisodeAirs, d_preset=dateFormat)
@@ -2862,6 +2867,7 @@ class CMD_ShowsStats(ApiCall):
             'shows_total': stats['shows']['total'],
         })
 
+
 # WARNING: never define a cmd call string that contains a "_" (underscore)
 # this is reserved for cmd indexes used while cmd chaining
 
diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py
index dc441526a71a31e88763c8758c60991a67507bc5..b53917465e50a892f89540eadf258ad1c232334d 100644
--- a/sickbeard/webserve.py
+++ b/sickbeard/webserve.py
@@ -1,3 +1,4 @@
+# coding=utf-8
 # Author: Nic Wolfe <nic@wolfeden.ca>
 # URL: http://code.google.com/p/sickbeard/
 #
@@ -16,13 +17,13 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-import traceback
+import io
 import os
+import re
 import time
 import urllib
-import re
 import datetime
-import codecs
+import traceback
 
 import sickbeard
 from sickbeard import config, sab
@@ -88,10 +89,11 @@ mako_lookup = None
 mako_cache = None
 mako_path = None
 
+
 def get_lookup():
-    global mako_lookup # pylint: disable=W0603
-    global mako_cache # pylint: disable=W0603
-    global mako_path # pylint: disable=W0603
+    global mako_lookup  # pylint: disable=W0603
+    global mako_cache  # pylint: disable=W0603
+    global mako_path  # pylint: disable=W0603
 
     if mako_path is None:
         mako_path = os.path.join(sickbeard.PROG_DIR, "gui/" + sickbeard.GUI_NAME + "/views/")
@@ -101,8 +103,8 @@ def get_lookup():
         mako_lookup = TemplateLookup(directories=[mako_path], module_directory=mako_cache, format_exceptions=True)
     return mako_lookup
 
-class PageTemplate(MakoTemplate):
 
+class PageTemplate(MakoTemplate):
     def __init__(self, rh, filename):
         self.arguments = {}
 
@@ -116,7 +118,7 @@ class PageTemplate(MakoTemplate):
         self.arguments['sbHandleReverseProxy'] = sickbeard.HANDLE_REVERSE_PROXY
         self.arguments['sbThemeName'] = sickbeard.THEME_NAME
         self.arguments['sbDefaultPage'] = sickbeard.DEFAULT_PAGE
-        self.arguments['sbLogin'] = rh.get_current_user()
+        self.arguments['srLogin'] = rh.get_current_user()
         self.arguments['sbStartTime'] = rh.startTime
 
         if rh.request.headers['Host'][0] == '[':
@@ -139,6 +141,8 @@ class PageTemplate(MakoTemplate):
         self.arguments['title'] = "FixME"
         self.arguments['header'] = "FixME"
         self.arguments['topmenu'] = "FixME"
+        self.arguments['controller'] = "FixME"
+        self.arguments['action'] = "FixME"
 
     def render(self, *args, **kwargs):
         for key in self.arguments:
@@ -158,8 +162,8 @@ class BaseHandler(RequestHandler):
 
         super(BaseHandler, self).__init__(*args, **kwargs)
 
-    #def set_default_headers(self):
-        #self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
+    # def set_default_headers(self):
+    #     self.set_header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0')
 
     def write_error(self, status_code, **kwargs):
         # handle 404 http errors
@@ -175,8 +179,8 @@ class BaseHandler(RequestHandler):
 
         elif self.settings.get("debug") and "exc_info" in kwargs:
             exc_info = kwargs["exc_info"]
-            trace_info = ''.join(["%s<br/>" % line for line in traceback.format_exception(*exc_info)])
-            request_info = ''.join(["<strong>%s</strong>: %s<br/>" % (k, self.request.__dict__[k]) for k in
+            trace_info = ''.join(["%s<br>" % line for line in traceback.format_exception(*exc_info)])
+            request_info = ''.join(["<strong>%s</strong>: %s<br>" % (k, self.request.__dict__[k]) for k in
                                     self.request.__dict__.keys()])
             error = exc_info[1]
 
@@ -245,7 +249,7 @@ class WebHandler(BaseHandler):
             self.finish(results)
 
         except Exception:
-            logger.log('Failed doing webui request "%s": %s' % (route, traceback.format_exc()), logger.DEBUG)
+            logger.log(u'Failed doing webui request "%s": %s' % (route, traceback.format_exc()), logger.DEBUG)
             raise HTTPError(404)
 
     @run_on_executor
@@ -259,7 +263,7 @@ class WebHandler(BaseHandler):
             result = function(**kwargs)
             return result
         except Exception:
-            logger.log('Failed doing webui callback: %s' % (traceback.format_exc()), logger.ERROR)
+            logger.log(u'Failed doing webui callback: %s' % (traceback.format_exc()), logger.ERROR)
             raise
 
     # post uses get method
@@ -289,9 +293,9 @@ class LoginHandler(BaseHandler):
         if api_key:
             remember_me = int(self.get_argument('remember_me', default=0) or 0)
             self.set_secure_cookie('sickrage_user', api_key, expires_days=30 if remember_me > 0 else None)
-            logger.log('User logged into the SickRage web interface', logger.INFO)
+            logger.log(u'User logged into the SickRage web interface', logger.INFO)
         else:
-            logger.log('User attempted a failed login to the SickRage web interface from IP: ' + self.request.remote_ip, logger.WARNING)
+            logger.log(u'User attempted a failed login to the SickRage web interface from IP: ' + self.request.remote_ip, logger.WARNING)
 
         self.redirect('/' + sickbeard.DEFAULT_PAGE +'/')
 
@@ -301,6 +305,7 @@ class LogoutHandler(BaseHandler):
         self.clear_cookie("sickrage_user")
         self.redirect('/login/')
 
+
 class KeyHandler(RequestHandler):
     def __init__(self, *args, **kwargs):
         super(KeyHandler, self).__init__(*args, **kwargs)
@@ -318,7 +323,7 @@ class KeyHandler(RequestHandler):
 
             self.finish({'success': api_key is not None, 'api_key': api_key})
         except Exception:
-            logger.log('Failed doing key request: %s' % (traceback.format_exc()), logger.ERROR)
+            logger.log(u'Failed doing key request: %s' % (traceback.format_exc()), logger.ERROR)
             self.finish({'success': False, 'error': 'Failed returning results'})
 
 
@@ -393,7 +398,7 @@ class WebRoot(WebHandler):
             layout = 'poster'
 
         sickbeard.HOME_LAYOUT = layout
-        #Dont redirect to default page so user can see new layout
+        # Don't redirect to default page so user can see new layout
         return self.redirect("/home/")
 
     @staticmethod
@@ -583,6 +588,7 @@ class CalendarHandler(BaseHandler):
 
         return ical
 
+
 @route('/ui(/?.*)')
 class UI(WebRoot):
     def __init__(self, *args, **kwargs):
@@ -674,17 +680,17 @@ class Home(WebRoot):
             showlists = [["Shows", sickbeard.showList]]
 
         stats = self.show_statistics()
-        return t.render(title="Home", header="Show List", topmenu="home", showlists=showlists, show_stat=stats[0], max_download_count=stats[1])
+        return t.render(title="Home", header="Show List", topmenu="home", showlists=showlists, show_stat=stats[0], max_download_count=stats[1], controller="home", action="index")
 
     @staticmethod
     def show_statistics():
         myDB = db.DBConnection()
         today = str(datetime.date.today().toordinal())
 
-        status_quality  = '(' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER]) + ')'
+        status_quality = '(' + ','.join([str(x) for x in Quality.SNATCHED + Quality.SNATCHED_PROPER]) + ')'
         status_download = '(' + ','.join([str(x) for x in Quality.DOWNLOADED + Quality.ARCHIVED]) + ')'
 
-        sql_statement  = 'SELECT showid, '
+        sql_statement = 'SELECT showid, '
 
         sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 AND status IN ' + status_quality + ') AS ep_snatched, '
         sql_statement += '(SELECT COUNT(*) FROM tv_episodes WHERE showid=tv_eps.showid AND season > 0 AND episode > 0 AND airdate > 1 AND status IN ' + status_download + ') AS ep_downloaded, '
@@ -709,7 +715,6 @@ class Home(WebRoot):
 
         return show_stat, max_download_count
 
-
     def is_alive(self, *args, **kwargs):
         if 'callback' in kwargs and '_' in kwargs:
             callback, _ = kwargs['callback'], kwargs['_']
@@ -741,9 +746,9 @@ class Home(WebRoot):
 
     @staticmethod
     def haveTORRENT():
-        if sickbeard.USE_TORRENTS and sickbeard.TORRENT_METHOD != 'blackhole' \
-                and (sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'https'
-                     or not sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'http:'):
+        if sickbeard.USE_TORRENTS and sickbeard.TORRENT_METHOD != 'blackhole' and \
+                (sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'https' or not
+                 sickbeard.ENABLE_HTTPS and sickbeard.TORRENT_HOST[:5] == 'http:'):
             return True
         else:
             return False
@@ -810,7 +815,6 @@ class Home(WebRoot):
         else:
             return "Test prowl notice failed"
 
-
     @staticmethod
     def testBoxcar(username=None):
 
@@ -820,7 +824,6 @@ class Home(WebRoot):
         else:
             return "Error sending Boxcar notification"
 
-
     @staticmethod
     def testBoxcar2(accesstoken=None):
 
@@ -830,7 +833,6 @@ class Home(WebRoot):
         else:
             return "Error sending Boxcar2 notification"
 
-
     @staticmethod
     def testPushover(userKey=None, apiKey=None):
 
@@ -840,12 +842,10 @@ class Home(WebRoot):
         else:
             return "Error sending Pushover notification"
 
-
     @staticmethod
     def twitterStep1():
         return notifiers.twitter_notifier._get_authorization()
 
-
     @staticmethod
     def twitterStep2(key):
 
@@ -856,7 +856,6 @@ class Home(WebRoot):
         else:
             return "Unable to verify key"
 
-
     @staticmethod
     def testTwitter():
 
@@ -866,7 +865,6 @@ class Home(WebRoot):
         else:
             return "Error sending tweet"
 
-
     @staticmethod
     def testKODI(host=None, username=None, password=None):
 
@@ -878,11 +876,10 @@ class Home(WebRoot):
                 finalResult += "Test KODI notice sent successfully to " + urllib.unquote_plus(curHost)
             else:
                 finalResult += "Test KODI notice failed to " + urllib.unquote_plus(curHost)
-            finalResult += "<br />\n"
+            finalResult += "<br>\n"
 
         return finalResult
 
-
     def testPMC(self, host=None, username=None, password=None):
         self.set_header('Cache-Control', 'max-age=0,no-cache,no-store')
 
@@ -896,7 +893,7 @@ class Home(WebRoot):
                 finalResult += 'Successful test notice sent to Plex client ... ' + urllib.unquote_plus(curHost)
             else:
                 finalResult += 'Test failed for Plex client ... ' + urllib.unquote_plus(curHost)
-            finalResult += '<br />' + '\n'
+            finalResult += '<br>' + '\n'
 
         ui.notifications.message('Tested Plex client(s): ', urllib.unquote_plus(host.replace(',', ', ')))
 
@@ -916,8 +913,8 @@ class Home(WebRoot):
         elif curResult is False:
             finalResult += 'Test failed, No Plex Media Server host specified'
         else:
-            finalResult += 'Test failed for Plex server(s) ... ' + urllib.unquote_plus(curResult.replace(',', ', '))
-        finalResult += '<br />' + '\n'
+            finalResult += 'Test failed for Plex server(s) ... ' + urllib.unquote_plus(str(curResult).replace(',', ', '))
+        finalResult += '<br>' + '\n'
 
         ui.notifications.message('Tested Plex Media Server host(s): ', urllib.unquote_plus(host.replace(',', ', ')))
 
@@ -1116,7 +1113,7 @@ class Home(WebRoot):
         checkversion = CheckVersion()
         backup = checkversion._runbackup()
 
-        if backup == True:
+        if backup is True:
 
             if sickbeard.versionCheckScheduler.action.update():
                 # do a hard restart
@@ -1217,7 +1214,7 @@ class Home(WebRoot):
                 else:
                     submenu.append({'title': 'Pause', 'path': 'home/togglePause?show=%d' % showObj.indexerid, 'icon': 'ui-icon ui-icon-pause'})
 
-                submenu.append({'title': 'Remove', 'path': 'home/deleteShow?show=%d' % showObj.indexerid, 'class':'removeshow', 'confirm': True, 'icon': 'ui-icon ui-icon-trash'})
+                submenu.append({'title': 'Remove', 'path': 'home/deleteShow?show=%d' % showObj.indexerid, 'class': 'removeshow', 'confirm': True, 'icon': 'ui-icon ui-icon-trash'})
                 submenu.append({'title': 'Re-scan files', 'path': 'home/refreshShow?show=%d' % showObj.indexerid, 'icon': 'ui-icon ui-icon-refresh'})
                 submenu.append({'title': 'Force Full Update', 'path': 'home/updateShow?show=%d&amp;force=1' % showObj.indexerid, 'icon': 'ui-icon ui-icon-transfer-e-w'})
                 submenu.append({'title': 'Update show in KODI', 'path': 'home/updateKODI?show=%d' % showObj.indexerid, 'requires': self.haveKODI(), 'icon': 'submenu-icon-kodi'})
@@ -1292,7 +1289,9 @@ class Home(WebRoot):
             xem_numbering=get_xem_numbering_for_show(indexerid, indexer),
             scene_absolute_numbering=get_scene_absolute_numbering_for_show(indexerid, indexer),
             xem_absolute_numbering=get_xem_absolute_numbering_for_show(indexerid, indexer),
-            title=showObj.name
+            title=showObj.name,
+            controller="home",
+            action="displayShow"
         )
 
     @staticmethod
@@ -1314,8 +1313,7 @@ class Home(WebRoot):
             if season == -1:
                 season = "*"
             out.append("S" + str(season) + ": " + ", ".join(names))
-        return "<br/>".join(out)
-
+        return "<br>".join(out)
 
     def editShow(self, show=None, location=None, anyQualities=[], bestQualities=[], exceptions_list=[],
                  flatten_folders=None, paused=None, directCall=False, air_by_date=None, sports=None, dvdorder=None,
@@ -1360,7 +1358,7 @@ class Home(WebRoot):
                     except Exception as e:
                         anidb_failed = True
                         ui.notifications.error('Unable to retreive Fansub Groups from AniDB.')
-                        logger.log('Unable to retreive Fansub Groups from AniDB. Error is {0}'.format(str(e)), logger.DEBUG)
+                        logger.log(u'Unable to retreive Fansub Groups from AniDB. Error is {0}'.format(str(e)), logger.DEBUG)
 
             with showObj.lock:
                 show = showObj
@@ -1368,11 +1366,12 @@ class Home(WebRoot):
 
             if showObj.is_anime:
                 return t.render(show=show, scene_exceptions=scene_exceptions, groups=groups, whitelist=whitelist,
-                                blacklist=blacklist, title='Edit Show', header='Edit Show')
+                                blacklist=blacklist, title='Edit Show', header='Edit Show', controller="home", action="editShow")
             else:
-                return t.render(show=show, scene_exceptions=scene_exceptions, title='Edit Show', header='Edit Show')
+                return t.render(show=show, scene_exceptions=scene_exceptions, title='Edit Show', header='Edit Show',
+                                controller="home", action="editShow")
 
-        flatten_folders = not config.checkbox_to_value(flatten_folders) # UI inverts this value
+        flatten_folders = not config.checkbox_to_value(flatten_folders)  # UI inverts this value
         dvdorder = config.checkbox_to_value(dvdorder)
         archive_firstmatch = config.checkbox_to_value(archive_firstmatch)
         paused = config.checkbox_to_value(paused)
@@ -1601,7 +1600,6 @@ class Home(WebRoot):
 
         return self.redirect("/home/displayShow?show=" + str(showObj.indexerid))
 
-
     def updateKODI(self, show=None):
         showName = None
         showObj = None
@@ -1661,6 +1659,7 @@ class Home(WebRoot):
             else:
                 return self._genericMessage("Error", errMsg)
 
+        # Use .has_key() since it is overridden for statusStrings in common.py
         if not statusStrings.has_key(int(status)):
             errMsg = "Invalid status"
             if direct:
@@ -1716,12 +1715,12 @@ class Home(WebRoot):
                         continue
 
                     if int(status) in Quality.DOWNLOADED and epObj.status not in Quality.SNATCHED + \
-                        Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.DOWNLOADED + [IGNORED] and not ek(os.path.isfile, epObj.location):
+                            Quality.SNATCHED_PROPER + Quality.SNATCHED_BEST + Quality.DOWNLOADED + [IGNORED] and not ek(os.path.isfile, epObj.location):
                         logger.log(u"Refusing to change status of " + curEp + " to DOWNLOADED because it's not SNATCHED/DOWNLOADED", logger.WARNING)
                         continue
 
                     if int(status) == FAILED and epObj.status not in Quality.SNATCHED + Quality.SNATCHED_PROPER + \
-                        Quality.SNATCHED_BEST + Quality.DOWNLOADED + Quality.ARCHIVED:
+                            Quality.SNATCHED_BEST + Quality.DOWNLOADED + Quality.ARCHIVED:
                         logger.log(u"Refusing to change status of " + curEp + " to FAILED because it's not SNATCHED/DOWNLOADED", logger.WARNING)
                         continue
 
@@ -1754,7 +1753,7 @@ class Home(WebRoot):
                 myDB.mass_action(sql_l)
 
         if int(status) == WANTED and not showObj.paused:
-            msg = "Backlog was automatically started for the following seasons of <b>" + showObj.name + "</b>:<br />"
+            msg = "Backlog was automatically started for the following seasons of <b>" + showObj.name + "</b>:<br>"
             msg += '<ul>'
 
             for season, segment in segments.iteritems():
@@ -1773,7 +1772,7 @@ class Home(WebRoot):
             logger.log(u"Some episodes were set to wanted, but " + showObj.name + " is paused. Not adding to Backlog until show is unpaused")
 
         if int(status) == FAILED:
-            msg = "Retrying Search was automatically started for the following season of <b>" + showObj.name + "</b>:<br />"
+            msg = "Retrying Search was automatically started for the following season of <b>" + showObj.name + "</b>:<br>"
             msg += '<ul>'
 
             for season, segment in segments.iteritems():
@@ -1794,7 +1793,6 @@ class Home(WebRoot):
         else:
             return self.redirect("/home/displayShow?show=" + show)
 
-
     def testRename(self, show=None):
 
         if show is None:
@@ -1836,11 +1834,10 @@ class Home(WebRoot):
         t = PageTemplate(rh=self, filename="testRename.mako")
         submenu = [{'title': 'Edit', 'path': 'home/editShow?show=%d' % showObj.indexerid, 'icon': 'ui-icon ui-icon-pencil'}]
 
-        return t.render(submenu=submenu, ep_obj_list=ep_obj_rename_list, show=showObj, title='Preview Rename', header='Preview Rename')
-
+        return t.render(submenu=submenu, ep_obj_list=ep_obj_rename_list, show=showObj, title='Preview Rename', header='Preview Rename',
+                    controller="home", action="previewRename")
 
     def doRename(self, show=None, eps=None):
-
         if show is None or eps is None:
             errMsg = "You must specify a show and at least one episode"
             return self._genericMessage("Error", errMsg)
@@ -1915,7 +1912,7 @@ class Home(WebRoot):
             showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(searchThread.show.indexerid))
 
             if not showObj:
-                logger.log('No Show Object found for show with indexerID: ' + str(searchThread.show.indexerid), logger.ERROR)
+                logger.log(u'No Show Object found for show with indexerID: ' + str(searchThread.show.indexerid), logger.ERROR)
                 return results
 
             if isinstance(searchThread, sickbeard.search_queue.ManualSearchQueueItem):
@@ -2057,7 +2054,8 @@ class Home(WebRoot):
             show = int(show)
             indexer = int(indexer)
             forAbsolute = int(forAbsolute)
-            if sceneAbsolute is not None: sceneAbsolute = int(sceneAbsolute)
+            if sceneAbsolute is not None:
+                sceneAbsolute = int(sceneAbsolute)
 
             set_scene_numbering(show, indexer, absolute_number=forAbsolute, sceneAbsolute=sceneAbsolute)
         else:
@@ -2068,8 +2066,10 @@ class Home(WebRoot):
             indexer = int(indexer)
             forSeason = int(forSeason)
             forEpisode = int(forEpisode)
-            if sceneSeason is not None: sceneSeason = int(sceneSeason)
-            if sceneEpisode is not None: sceneEpisode = int(sceneEpisode)
+            if sceneSeason is not None:
+                sceneSeason = int(sceneSeason)
+            if sceneEpisode is not None:
+                sceneEpisode = int(sceneEpisode)
 
             set_scene_numbering(show, indexer, season=forSeason, episode=forEpisode, sceneSeason=sceneSeason,
                                 sceneEpisode=sceneEpisode)
@@ -2089,9 +2089,7 @@ class Home(WebRoot):
 
         return json.dumps(result)
 
-
     def retryEpisode(self, show, season, episode, downCurQuality):
-
         # retrieve the episode object and fail if we can't get one
         ep_obj = self._getEpisode(show, season, episode)
         if isinstance(ep_obj, str):
@@ -2120,6 +2118,7 @@ class Home(WebRoot):
 
         return json.dumps({'result': 'failure'})
 
+
 @route('/IRC(/?.*)')
 class HomeIRC(Home):
     def __init__(self, *args, **kwargs):
@@ -2128,7 +2127,8 @@ class HomeIRC(Home):
     def index(self):
 
         t = PageTemplate(rh=self, filename="IRC.mako")
-        return t.render(topmenu="system", header="IRC", title="IRC")
+        return t.render(topmenu="system", header="IRC", title="IRC", controller="IRC", action="index")
+
 
 @route('/news(/?.*)')
 class HomeNews(Home):
@@ -2140,7 +2140,7 @@ class HomeNews(Home):
             news = sickbeard.versionCheckScheduler.action.check_for_new_news(force=True)
         except Exception:
             logger.log(u'Could not load news from repo, giving a link!', logger.DEBUG)
-            news = 'Could not load news from the repo. [Click here for news.md]('+sickbeard.NEWS_URL+')'
+            news = 'Could not load news from the repo. [Click here for news.md](' + sickbeard.NEWS_URL + ')'
 
         sickbeard.NEWS_LAST_READ = sickbeard.NEWS_LATEST
         sickbeard.NEWS_UNREAD = 0
@@ -2149,7 +2149,7 @@ class HomeNews(Home):
         t = PageTemplate(rh=self, filename="markdown.mako")
         data = markdown2.markdown(news if news else "The was a problem connecting to github, please refresh and try again", extras=['header-ids'])
 
-        return t.render(title="News", header="News", topmenu="system", data=data)
+        return t.render(title="News", header="News", topmenu="system", data=data, controller="news", action="index")
 
 
 @route('/changes(/?.*)')
@@ -2167,7 +2167,7 @@ class HomeChangeLog(Home):
         t = PageTemplate(rh=self, filename="markdown.mako")
         data = markdown2.markdown(changes if changes else "The was a problem connecting to github, please refresh and try again", extras=['header-ids'])
 
-        return t.render(title="Changelog", header="Changelog", topmenu="system", data=data)
+        return t.render(title="Changelog", header="Changelog", topmenu="system", data=data, controller="changes", action="index")
 
 
 @route('/home/postprocess(/?.*)')
@@ -2177,10 +2177,10 @@ class HomePostProcess(Home):
 
     def index(self):
         t = PageTemplate(rh=self, filename="home_postprocess.mako")
-        return t.render(title='Post Processing', header='Post Processing', topmenu='home')
+        return t.render(title='Post Processing', header='Post Processing', topmenu='home', controller="postprocess", action="index")
 
-    def processEpisode(self, dir=None, nzbName=None, jobName=None, quiet=None, process_method=None, force=None,
-                       is_priority=None, delete_on="0", failed="0", type="auto", *args, **kwargs):
+    def processEpisode(self, proc_dir=None, nzbName=None, jobName=None, quiet=None, process_method=None, force=None,
+                       is_priority=None, delete_on="0", failed="0", proc_type="auto", *args, **kwargs):
 
         def argToBool(argument):
             if isinstance(argument, basestring):
@@ -2195,18 +2195,20 @@ class HomePostProcess(Home):
 
             return argument
 
-        if not dir:
+        if not proc_dir:
             return self.redirect("/home/postprocess/")
         else:
+            nzbName = ss(nzbName) if nzbName else nzbName
+
             result = processTV.processDir(
-                dir, nzbName, process_method=process_method, force=argToBool(force),
-                is_priority=argToBool(is_priority), delete_on=argToBool(delete_on), failed=argToBool(failed), type=type
+                ss(proc_dir), nzbName, process_method=process_method, force=argToBool(force),
+                is_priority=argToBool(is_priority), delete_on=argToBool(delete_on), failed=argToBool(failed), proc_type=proc_type
             )
 
             if quiet is not None and int(quiet) == 1:
                 return result
 
-            result = result.replace("\n", "<br />\n")
+            result = result.replace("\n", "<br>\n")
             return self._genericMessage("Postprocessing results", result)
 
 
@@ -2217,7 +2219,7 @@ class HomeAddShows(Home):
 
     def index(self):
         t = PageTemplate(rh=self, filename="home_addShows.mako")
-        return t.render(title='Add Shows', header='Add Shows', topmenu='home')
+        return t.render(title='Add Shows', header='Add Shows', topmenu='home', controller="home", action="addShows")
 
     @staticmethod
     def getIndexerLanguages():
@@ -2246,7 +2248,7 @@ class HomeAddShows(Home):
             lINDEXER_API_PARMS['custom_ui'] = classes.AllShowsListUI
             t = sickbeard.indexerApi(indexer).indexer(**lINDEXER_API_PARMS)
 
-            logger.log("Searching for Show with searchterm: %s on Indexer: %s" % (
+            logger.log(u"Searching for Show with searchterm: %s on Indexer: %s" % (
                 search_term, sickbeard.indexerApi(indexer).name), logger.DEBUG)
             try:
                 # add search results
@@ -2256,7 +2258,7 @@ class HomeAddShows(Home):
 
         for i, shows in results.iteritems():
             final_results.extend([[sickbeard.indexerApi(i).name, i, sickbeard.indexerApi(i).config["show_url"], int(show['id']),
-               show['seriesname'], show['firstaired']] for show in shows])
+                                   show['seriesname'], show['firstaired']] for show in shows])
 
 #        map(final_results.extend,
 #            ([[sickbeard.indexerApi(id).name, id, sickbeard.indexerApi(id).config["show_url"], int(show['id']),
@@ -2265,7 +2267,6 @@ class HomeAddShows(Home):
         lang_id = sickbeard.indexerApi().config['langabbv_to_id'][lang]
         return json.dumps({'results': final_results, 'langid': lang_id})
 
-
     def massAddTable(self, rootDir=None):
         t = PageTemplate(rh=self, filename="home_massAddTable.mako")
 
@@ -2344,11 +2345,8 @@ class HomeAddShows(Home):
 
                 if indexer_id and helpers.findCertainShow(sickbeard.showList, indexer_id):
                     cur_dir['added_already'] = True
-
-
         return t.render(dirList=dir_list)
 
-
     def newShow(self, show_to_add=None, other_shows=None, search_string=None):
         """
         Display the new show page which collects a tvdb id, folder, and extra options and
@@ -2402,7 +2400,7 @@ class HomeAddShows(Home):
         posts them to addNewShow
         """
         t = PageTemplate(rh=self, filename="home_recommendedShows.mako")
-        return t.render(title="Recommended Shows", header="Recommended Shows", enable_anime_options=False)
+        return t.render(title="Recommended Shows", header="Recommended Shows", enable_anime_options=False, controller="home", action="addShows|recommendedShows")
 
     def getRecommendedShows(self):
         t = PageTemplate(rh=self, filename="trendingShows.mako")
@@ -2423,8 +2421,7 @@ class HomeAddShows(Home):
             library_shows = trakt_api.traktRequest("sync/collection/shows?extended=full") or []
 
             for show_detail in shows:
-                show = {}
-                show['show'] = show_detail
+                show = {'show': show_detail}
                 try:
                     if not helpers.findCertainShow(sickbeard.showList, [int(show['show']['ids']['tvdb'])]):
                         if show['show']['ids']['tvdb'] not in (lshow['show']['ids']['tvdb'] for lshow in library_shows):
@@ -2501,7 +2498,6 @@ class HomeAddShows(Home):
 
         return t.render(blacklist=blacklist, trending_shows=trending_shows)
 
-
     def popularShows(self):
         """
         Fetches data from IMDB to show a list of popular shows.
@@ -2516,9 +2512,7 @@ class HomeAddShows(Home):
 
         return t.render(title="Popular Shows", header="Popular Shows", popular_shows=popular_shows, imdb_exception=e, topmenu="home")
 
-
     def addShowToBlacklist(self, indexer_id):
-
         # URL parameters
         data = {'shows': [{'ids': {'tvdb': indexer_id}}]}
 
@@ -2615,7 +2609,7 @@ class HomeAddShows(Home):
         series_pieces = whichSeries.split('|')
         if (whichSeries and rootDir) or (whichSeries and fullShowPath and len(series_pieces) > 1):
             if len(series_pieces) < 6:
-                logger.log("Unable to add show due to show selection. Not anough arguments: %s" % (repr(series_pieces)),
+                logger.log(u"Unable to add show due to show selection. Not anough arguments: %s" % (repr(series_pieces)),
                            logger.ERROR)
                 ui.notifications.error("Unknown error. Unable to add show due to problem with show selection.")
                 return self.redirect('/home/addShows/existingShows/')
@@ -2653,7 +2647,7 @@ class HomeAddShows(Home):
                 logger.log(u"Unable to create the folder " + show_dir + ", can't add the show", logger.ERROR)
                 ui.notifications.error("Unable to add show",
                                        "Unable to create the folder " + show_dir + ", can't add the show")
-                #Dont redirect to default page because user wants to see the new show
+                # Don't redirect to default page because user wants to see the new show
                 return self.redirect("/home/")
             else:
                 helpers.chmodAsParent(show_dir)
@@ -2691,26 +2685,24 @@ class HomeAddShows(Home):
     @staticmethod
     def split_extra_show(extra_show):
         if not extra_show:
-            return (None, None, None, None)
+            return None, None, None, None
         split_vals = extra_show.split('|')
         if len(split_vals) < 4:
             indexer = split_vals[0]
             show_dir = split_vals[1]
-            return (indexer, show_dir, None, None)
+            return indexer, show_dir, None, None
         indexer = split_vals[0]
         show_dir = split_vals[1]
         indexer_id = split_vals[2]
         show_name = '|'.join(split_vals[3:])
 
-        return (indexer, show_dir, indexer_id, show_name)
-
+        return indexer, show_dir, indexer_id, show_name
 
     def addExistingShows(self, shows_to_add=None, promptForSettings=None):
         """
         Receives a dir list and add them. Adds the ones with given TVDB IDs first, then forwards
         along to the newShow page.
         """
-
         # grab a list of other shows to add, if provided
         if not shows_to_add:
             shows_to_add = []
@@ -2729,7 +2721,7 @@ class HomeAddShows(Home):
                 split_vals = cur_dir.split('|')
                 if len(split_vals) < 3:
                     dirs_only.append(cur_dir)
-            if not '|' in cur_dir:
+            if '|' not in cur_dir:
                 dirs_only.append(cur_dir)
             else:
                 indexer, show_dir, indexer_id, show_name = self.split_extra_show(cur_dir)
@@ -2739,7 +2731,6 @@ class HomeAddShows(Home):
 
                 indexer_id_given.append((int(indexer), show_dir, int(indexer_id), show_name))
 
-
         # if they want me to prompt for settings then I will just carry on to the newShow page
         if promptForSettings and shows_to_add:
             return self.newShow(shows_to_add[0], shows_to_add[1:])
@@ -2779,10 +2770,9 @@ class Manage(Home, WebRoot):
     def __init__(self, *args, **kwargs):
         super(Manage, self).__init__(*args, **kwargs)
 
-
     def index(self):
         t = PageTemplate(rh=self, filename="manage.mako")
-        return t.render(title='Mass Update', header='Mass Update', topmenu='manage')
+        return t.render(title='Mass Update', header='Mass Update', topmenu='manage', controller="manage", action="index")
 
     @staticmethod
     def showEpisodeStatuses(indexer_id, whichStatus):
@@ -2807,7 +2797,6 @@ class Manage(Home, WebRoot):
 
         return json.dumps(result)
 
-
     def episodeStatuses(self, whichStatus=None):
         if whichStatus:
             status_list = [int(whichStatus)]
@@ -2822,7 +2811,7 @@ class Manage(Home, WebRoot):
         if not status_list:
             return t.render(
                 title="Episode Overview", header="Episode Overview",
-                topmenu="manage", whichStatus=whichStatus)
+                topmenu="manage", whichStatus=whichStatus, controller="manage", action="episodeStatuses")
 
         myDB = db.DBConnection()
         status_results = myDB.select(
@@ -2848,11 +2837,10 @@ class Manage(Home, WebRoot):
         return t.render(
             title="Episode Overview", header="Episode Overview",
             topmenu='manage', whichStatus=whichStatus,
-            show_names=show_names, ep_counts=ep_counts, sorted_show_ids=sorted_show_ids)
-
+            show_names=show_names, ep_counts=ep_counts, sorted_show_ids=sorted_show_ids,
+            controller="manage", action="episodeStatuses")
 
     def changeEpisodeStatuses(self, oldStatus, newStatus, *args, **kwargs):
-
         status_list = [int(oldStatus)]
         if status_list[0] == SNATCHED:
             status_list = Quality.SNATCHED + Quality.SNATCHED_PROPER
@@ -2918,13 +2906,12 @@ class Manage(Home, WebRoot):
 
         return json.dumps(result)
 
-
     def subtitleMissed(self, whichSubs=None):
-
         t = PageTemplate(rh=self, filename="manage_subtitleMissed.mako")
 
         if not whichSubs:
-            return t.render(whichSubs=whichSubs, title='Episode Overview', header='Episode Overview', topmenu='manage')
+            return t.render(whichSubs=whichSubs, title='Episode Overview', header='Episode Overview', topmenu='manage',
+                    controller="manage", action="subtitleMissed")
 
         myDB = db.DBConnection()
         status_results = myDB.select(
@@ -2954,11 +2941,10 @@ class Manage(Home, WebRoot):
                 sorted_show_ids.append(cur_indexer_id)
 
         return t.render(whichSubs=whichSubs, show_names=show_names, ep_counts=ep_counts, sorted_show_ids=sorted_show_ids,
-                        title='Missing Subtitles', header='Missing Subtitles', topmenu='manage')
-
+                        title='Missing Subtitles', header='Missing Subtitles', topmenu='manage',
+                        controller="manage", action="subtitleMissed")
 
     def downloadSubtitleMissed(self, *args, **kwargs):
-
         to_download = {}
 
         # make a list of all shows and their associated args
@@ -2991,9 +2977,7 @@ class Manage(Home, WebRoot):
 
         return self.redirect('/manage/subtitleMissed/')
 
-
     def backlogShow(self, indexer_id):
-
         show_obj = helpers.findCertainShow(sickbeard.showList, int(indexer_id))
 
         if show_obj:
@@ -3001,9 +2985,7 @@ class Manage(Home, WebRoot):
 
         return self.redirect("/manage/backlogOverview/")
 
-
     def backlogOverview(self):
-
         t = PageTemplate(rh=self, filename="manage_backlogOverview.mako")
 
         showCounts = {}
@@ -3039,9 +3021,7 @@ class Manage(Home, WebRoot):
         return t.render(showCounts=showCounts, showCats=showCats, showSQLResults=showSQLResults,
                         title='Backlog Overview', header='Backlog Overview', topmenu='manage')
 
-
     def massEdit(self, toEdit=None):
-
         t = PageTemplate(rh=self, filename="manage_massEdit.mako")
 
         if not toEdit:
@@ -3176,12 +3156,10 @@ class Manage(Home, WebRoot):
                         quality_value=quality_value, subtitles_value=subtitles_value, scene_value=scene_value, sports_value=sports_value,
                         air_by_date_value=air_by_date_value, root_dir_list=root_dir_list, title='Mass Edit', header='Mass Edit', topmenu='manage')
 
-
     def massEditSubmit(self, archive_firstmatch=None, paused=None, default_ep_status=None,
                        anime=None, sports=None, scene=None, flatten_folders=None, quality_preset=None,
                        subtitles=None, air_by_date=None, anyQualities=[], bestQualities=[], toEdit=None, *args,
                        **kwargs):
-
         dir_map = {}
         for cur_arg in kwargs:
             if not cur_arg.startswith('orig_root_dir_'):
@@ -3289,10 +3267,8 @@ class Manage(Home, WebRoot):
 
         return self.redirect("/manage/")
 
-
     def massUpdate(self, toUpdate=None, toRefresh=None, toRename=None, toDelete=None, toRemove=None, toMetadata=None,
                    toSubtitle=None):
-
         if toUpdate is not None:
             toUpdate = toUpdate.split('|')
         else:
@@ -3384,22 +3360,22 @@ class Manage(Home, WebRoot):
         messageDetail = ""
 
         if updates:
-            messageDetail += "<br /><b>Updates</b><br /><ul><li>"
+            messageDetail += "<br><b>Updates</b><br><ul><li>"
             messageDetail += "</li><li>".join(updates)
             messageDetail += "</li></ul>"
 
         if refreshes:
-            messageDetail += "<br /><b>Refreshes</b><br /><ul><li>"
+            messageDetail += "<br><b>Refreshes</b><br><ul><li>"
             messageDetail += "</li><li>".join(refreshes)
             messageDetail += "</li></ul>"
 
         if renames:
-            messageDetail += "<br /><b>Renames</b><br /><ul><li>"
+            messageDetail += "<br><b>Renames</b><br><ul><li>"
             messageDetail += "</li><li>".join(renames)
             messageDetail += "</li></ul>"
 
         if subtitles:
-            messageDetail += "<br /><b>Subtitles</b><br /><ul><li>"
+            messageDetail += "<br><b>Subtitles</b><br><ul><li>"
             messageDetail += "</li><li>".join(subtitles)
             messageDetail += "</li></ul>"
 
@@ -3409,9 +3385,7 @@ class Manage(Home, WebRoot):
 
         return self.redirect("/manage/")
 
-
     def manageTorrents(self):
-
         t = PageTemplate(rh=self, filename="manage_torrents.mako")
         info_download_station = ''
 
@@ -3428,9 +3402,9 @@ class Manage(Home, WebRoot):
             webui_url = '/'.join(s.strip('/') for s in (webui_url, 'gui/'))
         if sickbeard.TORRENT_METHOD == 'download_station':
             if helpers.check_url(webui_url + 'download/'):
-                webui_url = webui_url + 'download/'
+                webui_url += 'download/'
             else:
-                info_download_station = '<p>To have a better experience please set the Download Station alias as <code>download</code>, you can check this setting in the Synology DSM <b>Control Panel</b> > <b>Application Portal</b>. Make sure you allow DSM to be embedded with iFrames too in <b>Control Panel</b> > <b>DSM Settings</b> > <b>Security</b>.</p><br/><p>There is more information about this available <a href="https://github.com/midgetspy/Sick-Beard/pull/338">here</a>.</p><br/>'
+                info_download_station = '<p>To have a better experience please set the Download Station alias as <code>download</code>, you can check this setting in the Synology DSM <b>Control Panel</b> > <b>Application Portal</b>. Make sure you allow DSM to be embedded with iFrames too in <b>Control Panel</b> > <b>DSM Settings</b> > <b>Security</b>.</p><br><p>There is more information about this available <a href="https://github.com/midgetspy/Sick-Beard/pull/338">here</a>.</p><br>'
 
         if not sickbeard.TORRENT_PASSWORD == "" and not sickbeard.TORRENT_USERNAME == "":
             webui_url = re.sub('://', '://' + str(sickbeard.TORRENT_USERNAME) + ':' + str(sickbeard.TORRENT_PASSWORD) + '@', webui_url)
@@ -3439,9 +3413,7 @@ class Manage(Home, WebRoot):
             webui_url=webui_url, info_download_station=info_download_station,
             title='Manage Torrents', header='Manage Torrents', topmenu='manage')
 
-
     def failedDownloads(self, limit=100, toRemove=None):
-
         myDB = db.DBConnection('failed.db')
 
         if limit == "0":
@@ -3495,9 +3467,7 @@ class ManageSearches(Manage):
 
         return self.redirect("/manage/manageSearches/")
 
-
     def forceFindPropers(self):
-
         # force it to run the next time it looks
         result = sickbeard.properFinderScheduler.forceRun()
         if result:
@@ -3506,7 +3476,6 @@ class ManageSearches(Manage):
 
         return self.redirect("/manage/manageSearches/")
 
-
     def pauseBacklog(self, paused=None):
         if paused == "1":
             sickbeard.searchQueueScheduler.action.pause_backlog()
@@ -3575,8 +3544,8 @@ class History(WebRoot):
 
         t = PageTemplate(rh=self, filename="history.mako")
         submenu = [
-            {'title': 'Clear History', 'path': 'history/clearHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'clearhistory', 'confirm':True},
-            {'title': 'Trim History', 'path': 'history/trimHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'trimhistory', 'confirm':True},
+            {'title': 'Clear History', 'path': 'history/clearHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'clearhistory', 'confirm': True},
+            {'title': 'Trim History', 'path': 'history/trimHistory', 'icon': 'ui-icon ui-icon-trash', 'class': 'trimhistory', 'confirm': True},
         ]
 
         return t.render(historyResults=data, compactResults=compact, limit=limit, submenu=submenu, title='History', header='History', topmenu="history")
@@ -3630,7 +3599,8 @@ class ConfigGeneral(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_general.mako")
 
-        return t.render(title='Config - General', header='General Configuration', topmenu='config', submenu=self.ConfigMenu())
+        return t.render(title='Config - General', header='General Configuration', topmenu='config', submenu=self.ConfigMenu(),
+                controller="config", action="index")
 
     @staticmethod
     def generateApiKey():
@@ -3708,8 +3678,8 @@ class ConfigGeneral(Config):
         sickbeard.PROXY_INDEXERS = config.checkbox_to_value(proxy_indexers)
         sickbeard.GIT_USERNAME = git_username
         sickbeard.GIT_PASSWORD = git_password
-        #sickbeard.GIT_RESET = config.checkbox_to_value(git_reset)
-        #Force GIT_RESET
+        # sickbeard.GIT_RESET = config.checkbox_to_value(git_reset)
+        # Force GIT_RESET
         sickbeard.GIT_RESET = 1
         sickbeard.GIT_AUTOISSUES = config.checkbox_to_value(git_autoissues)
         sickbeard.GIT_PATH = git_path
@@ -3739,7 +3709,6 @@ class ConfigGeneral(Config):
 
         if date_preset:
             sickbeard.DATE_PRESET = date_preset
-            discarded_na_data = date_preset_na
 
         if indexer_default:
             sickbeard.INDEXER_DEFAULT = config.to_int(indexer_default)
@@ -3753,7 +3722,6 @@ class ConfigGeneral(Config):
 
         sickbeard.TIMEZONE_DISPLAY = timezone_display
 
-
         if not config.change_LOG_DIR(log_dir, web_log):
             results += ["Unable to create directory " + os.path.normpath(log_dir) + ", log directory not changed."]
 
@@ -3781,7 +3749,7 @@ class ConfigGeneral(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -3796,7 +3764,8 @@ class ConfigBackupRestore(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_backuprestore.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Backup/Restore', header='Backup/Restore', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Backup/Restore', header='Backup/Restore', topmenu='config',
+                controller="config", action="backupRestore")
 
     @staticmethod
     def backup(backupDir=None):
@@ -3804,9 +3773,9 @@ class ConfigBackupRestore(Config):
         finalResult = ''
 
         if backupDir:
-            source = [os.path.join(sickbeard.DATA_DIR, 'sickbeard.db'), sickbeard.CONFIG_FILE]
-            source.append(os.path.join(sickbeard.DATA_DIR, 'failed.db'))
-            source.append(os.path.join(sickbeard.DATA_DIR, 'cache.db'))
+            source = [os.path.join(sickbeard.DATA_DIR, 'sickbeard.db'), sickbeard.CONFIG_FILE,
+                      os.path.join(sickbeard.DATA_DIR, 'failed.db'),
+                      os.path.join(sickbeard.DATA_DIR, 'cache.db')]
             target = os.path.join(backupDir, 'sickrage-' + time.strftime('%Y%m%d%H%M%S') + '.zip')
 
             for (path, dirs, files) in os.walk(sickbeard.CACHE_DIR, topdown=True):
@@ -3823,7 +3792,7 @@ class ConfigBackupRestore(Config):
         else:
             finalResult += "You need to choose a folder to save your backup to!"
 
-        finalResult += "<br />\n"
+        finalResult += "<br>\n"
 
         return finalResult
 
@@ -3844,7 +3813,7 @@ class ConfigBackupRestore(Config):
         else:
             finalResult += "You need to select a backup file to restore!"
 
-        finalResult += "<br />\n"
+        finalResult += "<br>\n"
 
         return finalResult
 
@@ -3857,7 +3826,8 @@ class ConfigSearch(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_search.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Episode Search', header='Search Settings', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Episode Search', header='Search Settings', topmenu='config',
+                controller="config", action="search")
 
     def saveSearch(self, use_nzbs=None, use_torrents=None, nzb_dir=None, sab_username=None, sab_password=None,
                    sab_apikey=None, sab_category=None, sab_category_anime=None, sab_category_backlog=None, sab_category_anime_backlog=None, sab_host=None, nzbget_username=None,
@@ -3944,7 +3914,7 @@ class ConfigSearch(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -3959,7 +3929,8 @@ class ConfigPostProcessing(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_postProcessing.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Post Processing', header='Post Processing', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Post Processing', header='Post Processing', topmenu='config',
+                controller="config", action="postProcessing")
 
     def savePostProcessing(self, naming_pattern=None, naming_multi_ep=None,
                            kodi_data=None, kodi_12plus_data=None,
@@ -4071,7 +4042,7 @@ class ConfigPostProcessing(Config):
             for x in results:
                 logger.log(x, logger.WARNING)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -4154,7 +4125,8 @@ class ConfigProviders(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_providers.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Providers', header='Search Providers', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Providers', header='Search Providers', topmenu='config',
+                controller="config", action="providers")
 
     @staticmethod
     def canAddNewznabProvider(name):
@@ -4200,11 +4172,11 @@ class ConfigProviders(Config):
 
     @staticmethod
     def getNewznabCategories(name, url, key):
-        '''
+        """
         Retrieves a list of possible categories with category id's
         Using the default url/api?cat
         http://yournewznaburl.com/api?t=caps&apikey=yourapikey
-        '''
+        """
         error = ""
         success = False
 
@@ -4215,7 +4187,7 @@ class ConfigProviders(Config):
         if not key:
             error += "\nNo Provider Api key specified"
 
-        if error <> "":
+        if error != "":
             return json.dumps({'success': False, 'error': error})
 
         # Get list with Newznabproviders
@@ -4302,9 +4274,7 @@ class ConfigProviders(Config):
 
         return '1'
 
-
     def saveProviders(self, newznab_string='', torrentrss_string='', provider_order=None, **kwargs):
-
         results = []
 
         provider_str_list = provider_order.split()
@@ -4527,19 +4497,6 @@ class ConfigProviders(Config):
                 except Exception:
                     curTorrentProvider.sorting = 'seeders'
 
-            if hasattr(curTorrentProvider, 'proxy'):
-                try:
-                    curTorrentProvider.proxy.enabled = config.checkbox_to_value(
-                        kwargs[curTorrentProvider.getID() + '_proxy'])
-                except Exception:
-                    curTorrentProvider.proxy.enabled = 0
-
-                if hasattr(curTorrentProvider.proxy, 'url'):
-                    try:
-                        curTorrentProvider.proxy.url = str(kwargs[curTorrentProvider.getID() + '_proxy_url']).strip()
-                    except Exception:
-                        curTorrentProvider.proxy.url = None
-
             if hasattr(curTorrentProvider, 'freeleech'):
                 try:
                     curTorrentProvider.freeleech = config.checkbox_to_value(
@@ -4638,7 +4595,7 @@ class ConfigProviders(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -4653,7 +4610,8 @@ class ConfigNotifications(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_notifications.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Notifications', header='Notifications', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Notifications', header='Notifications', topmenu='config',
+                controller="config", action="notifications")
 
     def saveNotifications(self, use_kodi=None, kodi_always_on=None, kodi_notify_onsnatch=None,
                           kodi_notify_ondownload=None,
@@ -4870,7 +4828,7 @@ class ConfigNotifications(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -4885,7 +4843,8 @@ class ConfigSubtitles(Config):
     def index(self):
         t = PageTemplate(rh=self, filename="config_subtitles.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Subtitles', header='Subtitles', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Subtitles', header='Subtitles', topmenu='config',
+                controller="config", action="subtitles")
 
     def saveSubtitles(self, use_subtitles=None, subtitles_plugins=None, subtitles_languages=None, subtitles_dir=None,
                       service_order=None, subtitles_history=None, subtitles_finder_frequency=None,
@@ -4930,7 +4889,7 @@ class ConfigSubtitles(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -4946,7 +4905,8 @@ class ConfigAnime(Config):
 
         t = PageTemplate(rh=self, filename="config_anime.mako")
 
-        return t.render(submenu=self.ConfigMenu(), title='Config - Anime', header='Anime', topmenu='config')
+        return t.render(submenu=self.ConfigMenu(), title='Config - Anime', header='Anime', topmenu='config',
+                controller="config", action="anime")
 
     def saveAnime(self, use_anidb=None, anidb_username=None, anidb_password=None, anidb_use_mylist=None,
                   split_home=None):
@@ -4965,7 +4925,7 @@ class ConfigAnime(Config):
             for x in results:
                 logger.log(x, logger.ERROR)
             ui.notifications.error('Error(s) Saving Configuration',
-                                   '<br />\n'.join(results))
+                                   '<br>\n'.join(results))
         else:
             ui.notifications.message('Configuration Saved', ek(os.path.join, sickbeard.CONFIG_FILE))
 
@@ -4980,8 +4940,8 @@ class ErrorLogs(WebRoot):
     def ErrorLogsMenu(self, level):
         menu = [
             {'title': 'Clear Errors', 'path': 'errorlogs/clearerrors/', 'requires': self.haveErrors() and level == logger.ERROR, 'icon': 'ui-icon ui-icon-trash'},
-            {'title': 'Clear Warnings', 'path': 'errorlogs/clearerrors/?level='+str(logger.WARNING), 'requires': self.haveWarnings() and level == logger.WARNING, 'icon': 'ui-icon ui-icon-trash'},
-            {'title': 'Submit Errors', 'path': 'errorlogs/submit_errors/', 'requires': self.haveErrors() and level == logger.ERROR, 'class':'sumbiterrors', 'confirm': True, 'icon': 'ui-icon ui-icon-arrowreturnthick-1-n'},
+            {'title': 'Clear Warnings', 'path': 'errorlogs/clearerrors/?level=' + str(logger.WARNING), 'requires': self.haveWarnings() and level == logger.WARNING, 'icon': 'ui-icon ui-icon-trash'},
+            {'title': 'Submit Errors', 'path': 'errorlogs/submit_errors/', 'requires': self.haveErrors() and level == logger.ERROR, 'class': 'sumbiterrors', 'confirm': True, 'icon': 'ui-icon ui-icon-arrowreturnthick-1-n'},
         ]
 
         return menu
@@ -4993,7 +4953,8 @@ class ErrorLogs(WebRoot):
             level = logger.ERROR
 
         t = PageTemplate(rh=self, filename="errorlogs.mako")
-        return t.render(header="Logs &amp; Errors", title="Logs &amp; Errors", topmenu="system", submenu=self.ErrorLogsMenu(level), logLevel=level)
+        return t.render(header="Logs &amp; Errors", title="Logs &amp; Errors", topmenu="system", submenu=self.ErrorLogsMenu(level), logLevel=level,
+                controller="errorlogs", action="index")
 
     @staticmethod
     def haveErrors():
@@ -5024,7 +4985,6 @@ class ErrorLogs(WebRoot):
             finalData = []
 
             for x in reversed(data_in):
-                x = ss(x)
                 match = re.match(regex, x)
 
                 if match:
@@ -5052,8 +5012,6 @@ class ErrorLogs(WebRoot):
                     finalData.append("AA" + x)
                     numLines += 1
 
-
-
                 if numLines >= numToShow:
                     return finalData
 
@@ -5090,17 +5048,17 @@ class ErrorLogs(WebRoot):
         data = []
 
         if os.path.isfile(logger.logFile):
-            with ek(codecs.open, *[logger.logFile, 'r', 'utf-8']) as f:
+            with io.open(logger.logFile, 'r', encoding='utf-8') as f:
                 data = Get_Data(minLevel, f.readlines(), 0, regex, logFilter, logSearch, maxLines)
 
         for i in range(1, int(sickbeard.LOG_NR)):
             if os.path.isfile(logger.logFile + "." + str(i)) and (len(data) <= maxLines):
-                with ek(codecs.open, *[logger.logFile + "." + str(i), 'r', 'utf-8']) as f:
+                with io.open(logger.logFile + "." + str(i), 'r', encoding='utf-8') as f:
                     data += Get_Data(minLevel, f.readlines(), len(data), regex, logFilter, logSearch, maxLines)
 
         return t.render(
             header="Log File", title="Logs", topmenu="system",
-            logLines="".join(data), minLevel=minLevel, logNameFilters=logNameFilters,
+            logLines=u"".join(data), minLevel=minLevel, logNameFilters=logNameFilters,
             logFilter=logFilter, logSearch=logSearch)
 
     def submit_errors(self):
diff --git a/tests/common_tests.py b/tests/common_tests.py
index 024652ab38293e98ca436ac168bc34288ef8d9d2..1ba62d02d5e958dccf085fc0b2065aed7782fc1b 100644
--- a/tests/common_tests.py
+++ b/tests/common_tests.py
@@ -1,104 +1,254 @@
+# coding=utf-8
+
+"""
+Unit Tests for sickbeard/common.py
+"""
+
 import sys
 import os.path
+import unittest
 
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
-import unittest
-
 from sickbeard import common
 
+
 class QualityTests(unittest.TestCase):
+    """
+    Test Case for common.Quality
+    """
 
     # TODO: repack / proper ? air-by-date ? season rip? multi-ep?
 
     def test_SDTV(self):
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.PDTV.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.PDTV.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.HDTV.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.HDTV.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.DSR.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.DSR.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.TVRip.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.TVRip.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEB-DL.x264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEB-DL.AAC2.0.H.264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02 WEB-DL H 264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02_WEB-DL_H_264-GROUP"))
-        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test.Show.S01E02.WEB-DL.AAC2.0.H264-GROUP"))
+        """
+        Test SDTV against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.PDTV.XViD-GROUP",
+            "Test.Show.S01E02.PDTV.x264-GROUP",
+            "Test.Show.S01E02.HDTV.XViD-GROUP",
+            "Test.Show.S01E02.HDTV.x264-GROUP",
+            "Test.Show.S01E02.DSR.XViD-GROUP",
+            "Test.Show.S01E02.DSR.x264-GROUP",
+            "Test.Show.S01E02.TVRip.XViD-GROUP",
+            "Test.Show.S01E02.TVRip.x264-GROUP",
+            "Test.Show.S01E02.WEBRip.XViD-GROUP",
+            "Test.Show.S01E02.WEBRip.x264-GROUP",
+            "Test.Show.S01E02.WEB-DL.x264-GROUP",
+            "Test.Show.S01E02.WEB-DL.AAC2.0.H.264-GROUP",
+            "Test.Show.S01E02 WEB-DL H 264-GROUP",
+            "Test.Show.S01E02_WEB-DL_H_264-GROUP",
+            "Test.Show.S01E02.WEB-DL.AAC2.0.H264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality(test))
 
     def test_SDDVD(self):
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRiP.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRiP.DiVX-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRiP.x264-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRip.WS.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRip.WS.DiVX-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.DVDRip.WS.x264-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.DiVX-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.x264-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.WS.XViD-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.WS.DiVX-GROUP"))
-        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test.Show.S01E02.BDRIP.WS.x264-GROUP"))
+        """
+        Test SDDVD against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.DVDRiP.XViD-GROUP",
+            "Test.Show.S01E02.DVDRiP.DiVX-GROUP",
+            "Test.Show.S01E02.DVDRiP.x264-GROUP",
+            "Test.Show.S01E02.DVDRip.WS.XViD-GROUP",
+            "Test.Show.S01E02.DVDRip.WS.DiVX-GROUP",
+            "Test.Show.S01E02.DVDRip.WS.x264-GROUP",
+            "Test.Show.S01E02.BDRIP.XViD-GROUP",
+            "Test.Show.S01E02.BDRIP.DiVX-GROUP",
+            "Test.Show.S01E02.BDRIP.x264-GROUP",
+            "Test.Show.S01E02.BDRIP.WS.XViD-GROUP",
+            "Test.Show.S01E02.BDRIP.WS.DiVX-GROUP",
+            "Test.Show.S01E02.BDRIP.WS.x264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality(test))
 
     def test_HDTV(self):
-        self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality("Test.Show.S01E02.720p.HDTV.x264-GROUP"))
-        self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality("Test.Show.S01E02.HR.WS.PDTV.x264-GROUP"))
+        """
+        Test HDTV against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.720p.HDTV.x264-GROUP",
+            "Test.Show.S01E02.HR.WS.PDTV.x264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality(test))
 
     def test_RAWHDTV(self):
-        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.720p.HDTV.DD5.1.MPEG2-GROUP"))
-        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080i.HDTV.DD2.0.MPEG2-GROUP"))
-        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080i.HDTV.H.264.DD2.0-GROUP"))
-        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test Show - S01E02 - 1080i HDTV MPA1.0 H.264 - GROUP"))
-        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080i.HDTV.DD.5.1.h264-GROUP"))
+        """
+        Test RAWHDTV against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.720p.HDTV.DD5.1.MPEG2-GROUP",
+            "Test.Show.S01E02.1080i.HDTV.DD2.0.MPEG2-GROUP",
+            "Test.Show.S01E02.1080i.HDTV.H.264.DD2.0-GROUP",
+            "Test Show - S01E02 - 1080i HDTV MPA1.0 H.264 - GROUP",
+            "Test.Show.S01E02.1080i.HDTV.DD.5.1.h264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality(test))
 
     def test_FULLHDTV(self):
-        self.assertEqual(common.Quality.FULLHDTV, common.Quality.nameQuality("Test.Show.S01E02.1080p.HDTV.x264-GROUP"))
+        """
+        Test FULLHDTV against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.1080p.HDTV.x264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.FULLHDTV, common.Quality.nameQuality(test))
 
     def test_HDWEBDL(self):
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEB-DL-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEBRip-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.720p.H.264.AAC.2.0-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEB-DL.AAC2.0.H.264-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test Show S01E02 720p WEB-DL AAC2 0 H 264-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test_Show.S01E02_720p_WEB-DL_AAC2.0_H264-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.WEB-DL.AAC2.0.H264-GROUP"))
-        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.720p.iTunes.Rip.H264.AAC-GROUP"))
+        """
+        Test HDWEBDL against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.720p.WEB-DL-GROUP",
+            "Test.Show.S01E02.720p.WEBRip-GROUP",
+            "Test.Show.S01E02.WEBRip.720p.H.264.AAC.2.0-GROUP",
+            "Test.Show.S01E02.720p.WEB-DL.AAC2.0.H.264-GROUP",
+            "Test Show S01E02 720p WEB-DL AAC2 0 H 264-GROUP",
+            "Test_Show.S01E02_720p_WEB-DL_AAC2.0_H264-GROUP",
+            "Test.Show.S01E02.720p.WEB-DL.AAC2.0.H264-GROUP",
+            "Test.Show.S01E02.720p.iTunes.Rip.H264.AAC-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality(test))
 
     def test_FULLHDWEBDL(self):
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.1080p.WEB-DL-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.1080p.WEBRip-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.1080p.H.264.AAC.2.0-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.WEBRip.1080p.H264.AAC.2.0-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test.Show.S01E02.1080p.iTunes.H.264.AAC-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test Show S01E02 1080p iTunes H 264 AAC-GROUP"))
-        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test_Show_S01E02_1080p_iTunes_H_264_AAC-GROUP"))
+        """
+        Test FULLHDWEBDL against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.1080p.WEB-DL-GROUP",
+            "Test.Show.S01E02.1080p.WEBRip-GROUP",
+            "Test.Show.S01E02.WEBRip.1080p.H.264.AAC.2.0-GROUP",
+            "Test.Show.S01E02.WEBRip.1080p.H264.AAC.2.0-GROUP",
+            "Test.Show.S01E02.1080p.iTunes.H.264.AAC-GROUP",
+            "Test Show S01E02 1080p iTunes H 264 AAC-GROUP",
+            "Test_Show_S01E02_1080p_iTunes_H_264_AAC-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality(test))
 
     def test_HDBLURAY(self):
-        self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.720p.BluRay.x264-GROUP"))
-        self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.720p.HDDVD.x264-GROUP"))
+        """
+        Test HDBLURAY against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.720p.BluRay.x264-GROUP",
+            "Test.Show.S01E02.720p.HDDVD.x264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality(test))
 
     def test_FULLHDBLURAY(self):
-        self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.1080p.BluRay.x264-GROUP"))
-        self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality("Test.Show.S01E02.1080p.HDDVD.x264-GROUP"))
+        """
+        Test FULLHDBLURAY against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02.1080p.BluRay.x264-GROUP",
+            "Test.Show.S01E02.1080p.HDDVD.x264-GROUP",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality(test))
 
     def test_UNKNOWN(self):
-        self.assertEqual(common.Quality.UNKNOWN, common.Quality.nameQuality("Test.Show.S01E02-SiCKBEARD"))
-
-#    def test_reverse_parsing(self):
-#        self.assertEqual(common.Quality.SDTV, common.Quality.nameQuality("Test Show - S01E02 - SDTV - GROUP"))
-#        self.assertEqual(common.Quality.SDDVD, common.Quality.nameQuality("Test Show - S01E02 - SD DVD - GROUP"))
-#        self.assertEqual(common.Quality.HDTV, common.Quality.nameQuality("Test Show - S01E02 - HDTV - GROUP"))
-#        self.assertEqual(common.Quality.RAWHDTV, common.Quality.nameQuality("Test Show - S01E02 - RawHD - GROUP"))
-#        self.assertEqual(common.Quality.FULLHDTV, common.Quality.nameQuality("Test Show - S01E02 - 1080p HDTV - GROUP"))
-#        self.assertEqual(common.Quality.HDWEBDL, common.Quality.nameQuality("Test Show - S01E02 - 720p WEB-DL - GROUP"))
-#        self.assertEqual(common.Quality.FULLHDWEBDL, common.Quality.nameQuality("Test Show - S01E02 - 1080p WEB-DL - GROUP"))
-#        self.assertEqual(common.Quality.HDBLURAY, common.Quality.nameQuality("Test Show - S01E02 - 720p BluRay - GROUP"))
-#        self.assertEqual(common.Quality.FULLHDBLURAY, common.Quality.nameQuality("Test Show - S01E02 - 1080p BluRay - GROUP"))
-#        self.assertEqual(common.Quality.UNKNOWN, common.Quality.nameQuality("Test Show - S01E02 - Unknown - SiCKBEARD"))
+        """
+        Test UNKNOWN against nameQuality
+        """
+        tests = [
+            "Test.Show.S01E02-SiCKBEARD",
+        ]
+        for test in tests:
+            self.assertEqual(common.Quality.UNKNOWN, common.Quality.nameQuality(test))
+
+    @unittest.expectedFailure
+    # reverse parsing does not work
+    def test_reverse_parsing(self):
+        """
+        Test reverse parsing for all qualities
+        """
+        tests = [
+            (common.Quality.SDTV, "Test Show - S01E02 - SDTV - GROUP"),
+            (common.Quality.SDDVD, "Test Show - S01E02 - SD DVD - GROUP"),
+            (common.Quality.HDTV, "Test Show - S01E02 - HDTV - GROUP"),
+            (common.Quality.RAWHDTV, "Test Show - S01E02 - RawHD - GROUP"),
+            (common.Quality.FULLHDTV, "Test Show - S01E02 - 1080p HDTV - GROUP"),
+            (common.Quality.HDWEBDL, "Test Show - S01E02 - 720p WEB-DL - GROUP"),
+            (common.Quality.FULLHDWEBDL, "Test Show - S01E02 - 1080p WEB-DL - GROUP"),
+            (common.Quality.HDBLURAY, "Test Show - S01E02 - 720p BluRay - GROUP"),
+            (common.Quality.FULLHDBLURAY, "Test Show - S01E02 - 1080p BluRay - GROUP"),
+            (common.Quality.UNKNOWN, "Test Show - S01E02 - Unknown - SiCKBEARD"),
+        ]
+        for test in tests:
+            quality, test = test
+            self.assertEqual(quality, common.Quality.nameQuality(test),
+                             (quality, common.Quality.nameQuality(test), test))
+
+
+class StatusStringsTest(unittest.TestCase):
+    """
+    Test Case for common.StatusStrings
+    """
+    # TODO: Split tests into separate tests and add additional tests
+
+    # Until .has_key() is removed from SickRage, we will test that it still works as expected
+    # pylint disable:W0402
+    # Use of a deprecated module
+    def test_all(self):
+        """
+        Run all status strings tests
+        """
+        status_strings = common.statusStrings
+
+        valid = 1, 112, '1', '112'
+        unused = 122, 99998989899878676, '99998989899878676', None
+        invalid = 'Elephant', (4, 1), [1, 233, 4, None]
+
+        for i in valid:
+            self.assertTrue(i in status_strings)
+
+        for i in unused:
+            self.assertFalse(i in status_strings)
+            with self.assertRaises(KeyError):
+                self.assertTrue(status_strings[i])
+
+        for i in status_strings:
+            self.assertEqual(status_strings[i], status_strings[str(i)])
+            self.assertEqual(i in status_strings, str(i) in status_strings)
+            self.assertEqual(status_strings.has_key(i), status_strings.has_key(str(i)))
+            self.assertEqual(i in status_strings, status_strings.has_key(i))
+
+        for i in status_strings.qualities:
+            self.assertEqual(status_strings[i], status_strings[str(i)])
+            self.assertEqual(i in status_strings, str(i) in status_strings)
+            self.assertEqual(status_strings.has_key(i), status_strings.has_key(str(i)))
+            self.assertEqual(i in status_strings, status_strings.has_key(i))
+
+        for i in invalid:
+            with self.assertRaises(TypeError):
+                status_strings[i] = 1
+
+        for i in unused:
+            if i is None:
+                with self.assertRaises(TypeError):
+                    status_strings[str(i)] = 1  # 'None' != None
+                status_strings[i] = 1  # ...but None can still be used as a key
+            else:
+                status_strings[str(i)] = 1
+            self.assertEqual(status_strings[i], 1)
 
 if __name__ == '__main__':
+    print "======================="
+    print "STARTING - COMMON TESTS"
+    print "======================="
+
     suite = unittest.TestLoader().loadTestsFromTestCase(QualityTests)
     unittest.TextTestRunner(verbosity=2).run(suite)
+
+    suite = unittest.TestLoader().loadTestsFromTestCase(StatusStringsTest)
+    unittest.TextTestRunner(verbosity=2).run(suite)
diff --git a/tests/exceptions_helper_tests.py b/tests/exceptions_helper_tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..a1d4e4d29ff9030b41ea5968535de6c0ded513f7
--- /dev/null
+++ b/tests/exceptions_helper_tests.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+import sys, os.path
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+import unittest
+
+import test_lib as test
+from sickrage.helper.exceptions import ex
+
+class ExceptionsHelperTestCase(unittest.TestCase):
+
+    def test_none_returns_empty(self):
+        self.assertEqual(ex(None), u'')
+
+    def test_empty_args_returns_empty(self):
+        self.assertEqual(ex(Exception()), u'')
+
+    def test_args_of_none_returns_empty(self):
+        self.assertEqual(ex(Exception(None, None)), u'')
+
+    def test_Exception_returns_args_string(self):
+        self.assertEqual(ex(Exception('hi')), 'hi')
+
+# TODO why doesn't this work?
+#    def test_Exception_returns_args_ustring(self):
+#        self.assertEqual(ex(Exception('\xc3\xa4h')), u'äh')
+
+    def test_Exception_returns_concatenated_args_strings(self):
+        self.assertEqual(ex(Exception('lots', 'of', 'strings')), 'lots : of : strings')
+
+    def test_Exception_returns_stringified_args(self):
+        self.assertEqual(ex(Exception(303)), 'error 303')
+
+if __name__ == '__main__':
+    if len(sys.argv) > 1:
+        suite = unittest.TestLoader().loadTestsFromName('exceptions_helper_tests.ExceptionsHelperTestCase.test_' + sys.argv[1])
+        unittest.TextTestRunner(verbosity=2).run(suite)
+    else:
+        suite = unittest.TestLoader().loadTestsFromTestCase(ExceptionsHelperTestCase)
+        unittest.TextTestRunner(verbosity=2).run(suite)
diff --git a/tests/feedparser_tests.py b/tests/feedparser_tests.py
index 61603bbd525f6e43a572a44fb748704d907733c2..5ef68544a27c83fafc8a4ee19876544a94092613 100644
--- a/tests/feedparser_tests.py
+++ b/tests/feedparser_tests.py
@@ -4,18 +4,18 @@ sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../l
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
 
 import unittest
-import test_lib as test
 
-from sickbeard.rssfeeds import RSSFeeds
-from sickbeard.tvcache import TVCache
+from sickbeard.providers.womble import provider as womble
+
 class FeedParserTests(unittest.TestCase):
+    # pylint: disable=W0212
     def test_womble(self):
-        RSSFeeds().clearCache()
-        result = RSSFeeds().getFeed('https://newshost.co.za/rss/?sec=tv-sd&fr=false')
+        result = womble.cache.getRSSFeed('http://newshost.co.za/rss/?sec=tv-sd&fr=false')
         self.assertTrue('entries' in result)
         self.assertTrue('feed' in result)
-        for item in result['entries']:
-            self.assertTrue(TVCache._parseItem(item))
+        for item in result['entries'] or []:
+            title, url = womble._get_title_and_url(item)
+            self.assertTrue(title and url)
 
 if __name__ == "__main__":
     print "=================="
diff --git a/tests/helpers_tests.py b/tests/helpers_tests.py
new file mode 100755
index 0000000000000000000000000000000000000000..f51b3896c3ff196b6ca7e35ed4a53ede28e6d7a2
--- /dev/null
+++ b/tests/helpers_tests.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python2.7
+"""
+Author: Dustyn Gibson <miigotu@gmail.com>
+URL: http://github.com/SiCKRAGETV/SickRage
+
+This file is part of SickRage.
+
+SickRage 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 3 of the License, or
+(at your option) any later version.
+
+SickRage 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 SickRage.  If not, see <http://www.gnu.org/licenses/>.
+"""
+
+import sys
+import os.path
+
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+import unittest
+
+from sickbeard.helpers import remove_non_release_groups
+
+test_result = 'Show.Name.S01E01.HDTV.x264-RLSGROUP'
+test_cases = {
+    'removewords': [
+        test_result,
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[cttv]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP.RiPSaLoT',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[GloDLS]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[EtHD]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP-20-40',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[NO-RAR] - [ www.torrentday.com ]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[rarbg]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[Seedbox]',
+        '{ www.SceneTime.com } - Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        '].[www.tensiontorrent.com] - Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        '[ www.TorrentDay.com ] - Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[silv4]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[AndroidTwoU]',
+        '[www.newpct1.com]Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP-NZBGEEK',
+        '.www.Cpasbien.pwShow.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP [1044]',
+        '[ www.Cpasbien.pw ] Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP.[BT]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[vtv]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP.[www.usabit.com]',
+        '[www.Cpasbien.com] Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[ettv]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[rartv]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP-Siklopentan',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP-RP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[PublicHD]',
+        '[www.Cpasbien.pe] Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP[eztv]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP-[SpastikusTV]',
+        '].[ www.tensiontorrent.com ] - Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        '[ www.Cpasbien.com ] Show.Name.S01E01.HDTV.x264-RLSGROUP',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP- { www.SceneTime.com }',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP- [ www.torrentday.com ]',
+        'Show.Name.S01E01.HDTV.x264-RLSGROUP.Renc'
+    ]
+}
+
+class HelpersTests(unittest.TestCase):
+    def __init__(self, *args, **kwargs):
+        super(HelpersTests, self).__init__(*args, **kwargs)
+
+def test_generator(test_strings):
+    def _test(self):
+        for test_string in test_strings:
+            self.assertEqual(remove_non_release_groups(test_string), test_result)
+    return _test
+
+if __name__ == '__main__':
+    print "=================="
+    print "STARTING - Helpers TESTS"
+    print "=================="
+    print "######################################################################"
+    for name, test_data in test_cases.items():
+        test_name = 'test_%s' % name
+        test = test_generator(test_data)
+        setattr(HelpersTests, test_name, test)
+
+    suite = unittest.TestLoader().loadTestsFromTestCase(HelpersTests)
+    unittest.TextTestRunner(verbosity=2).run(suite)
diff --git a/tests/issue_submitter_tests.py b/tests/issue_submitter_tests.py
index cd318f404b8fadfe79c8f33ea254222345cfbf17..ea8a7a495d1ba05bfdb6dd435442a4216014ffbe 100644
--- a/tests/issue_submitter_tests.py
+++ b/tests/issue_submitter_tests.py
@@ -17,7 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-from __future__ import with_statement
 
 import sys, os.path
 
@@ -33,7 +32,7 @@ def error():
     try:
         raise Exception('FAKE EXCEPTION')
     except Exception as e:
-        logger.log("FAKE ERROR: " + ex(e), logger.ERROR)
+        logger.log(u"FAKE ERROR: " + ex(e), logger.ERROR)
         logger.submit_errors()
         raise
 
diff --git a/tests/numdict_tests.py b/tests/numdict_tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..f2ed80c7b0cbf148fc2012676761a43b036208e2
--- /dev/null
+++ b/tests/numdict_tests.py
@@ -0,0 +1,499 @@
+# coding=utf-8
+
+"""
+Unit Tests for sickbeard/numdict.py
+"""
+
+import sys
+import os.path
+import unittest
+
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
+sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
+
+from sickbeard.numdict import NumDict
+
+PY3 = sys.version_info >= (3, )
+
+if PY3:
+    from collections import UserDict
+else:
+    from UserDict import UserDict
+
+
+class NumDictTest(unittest.TestCase):
+    """
+    Test the NumDict class
+    """
+    def test_constructors(self):
+        """
+        Test NumDict constructors
+        """
+        # dicts for testing
+        d0 = {}  # Empty dictionary
+        d1 = {1: 'Elephant'}  # Single numeric key
+        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        d3 = {'3': 'Aardvark'}  # Numeric string key
+        d4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
+        d5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
+        d6 = {1: None, '2': None}  # None as values
+        d7 = {None: 'Empty'}  # None as key
+
+        # Construct NumDicts from dicts
+        n = NumDict()
+        n0 = NumDict(d0)
+        n1 = NumDict(d1)
+        n2 = NumDict(d2)
+        n3 = NumDict(d3)
+        n4 = NumDict(d4)
+        n5 = NumDict(d5)
+        n6 = NumDict(d6)
+        n7 = NumDict(d7)
+
+        # Most NumDicts from dicts should compare equal...
+        self.assertEqual(n, {})
+        self.assertEqual(n0, d0)
+        self.assertEqual(n1, d1)
+        self.assertEqual(n2, d2)
+
+        # ...however, numeric keys are not equal to numeric string keys...
+        self.assertNotEqual(n3, d3)
+        self.assertNotEqual(n4, d4)
+        self.assertNotEqual(n5, d5)
+        self.assertNotEqual(n6, d6)
+
+        # ...but None keys work just fine
+        self.assertEqual(n7, d7)
+
+        # Construct dicts from NumDicts
+        dn = dict(n)
+        dn1 = dict(n1)
+        dn2 = dict(n2)
+        dn3 = dict(n3)
+        dn4 = dict(n4)
+        dn5 = dict(n5)
+        dn6 = dict(n6)
+        dn7 = dict(n7)
+
+        # All dicts from NumDicts should compare equal
+        self.assertEqual(n, dn)
+        self.assertEqual(n1, dn1)
+        self.assertEqual(n2, dn2)
+        self.assertEqual(n3, dn3)
+        self.assertEqual(n4, dn4)
+        self.assertEqual(n5, dn5)
+        self.assertEqual(n6, dn6)
+        self.assertEqual(n7, dn7)
+
+        # Construct NumDicts from NumDicts
+        nn = NumDict(n)
+        nn0 = NumDict(n0)
+        nn1 = NumDict(n1)
+        nn2 = NumDict(n2)
+        nn3 = NumDict(n3)
+        nn4 = NumDict(n4)
+        nn5 = NumDict(n5)
+        nn6 = NumDict(n6)
+        nn7 = NumDict(n7)
+
+        # All NumDicts from NumDicts should compare equal
+        self.assertEqual(n, nn)
+        self.assertEqual(n0, nn0)
+        self.assertEqual(n1, nn1)
+        self.assertEqual(n2, nn2)
+        self.assertEqual(n3, nn3)
+        self.assertEqual(n4, nn4)
+        self.assertEqual(n5, nn5)
+        self.assertEqual(n6, nn6)
+        self.assertEqual(n7, nn7)
+
+        # keyword arg constructor should fail
+        with self.assertRaises(TypeError):
+            NumDict(one=1, two=2)  # Raise TypeError since we can't have numeric keywords
+
+        # item sequence constructors work fine...
+        self.assertEqual(NumDict([(1, 'Elephant'), (2, 'Mouse')]), dn2)
+        self.assertEqual(NumDict(dict=[(1, 'Elephant'), (2, 'Mouse')]), dn2)
+        self.assertEqual(NumDict([(1, 'Elephant'), ('2', 'Mouse')]), dn2)
+        self.assertEqual(NumDict(dict=[('1', 'Elephant'), (2, 'Mouse')]), dn2)
+
+        # ...unless you have a non-numeric key
+        with self.assertRaises(TypeError):
+            NumDict([('Rat', 11), ('Snake', 12)])
+        with self.assertRaises(TypeError):
+            NumDict(dict=[('Rat', 11), ('Snake', 12)])
+
+        # combining item sequence constructors with keyword args does not work
+        with self.assertRaises(TypeError):  # Raise TypeError since we can't have numeric keywords
+            NumDict([(1, 'one'), (2, 'two')], two=3, five=4)
+
+        # alternate constructors
+        d8 = {1: 'Echo', 2: 'Echo'}
+
+        self.assertEqual(NumDict.fromkeys('1 2'.split()), dn6)
+        self.assertEqual(NumDict().fromkeys('1 2'.split()), dn6)
+        self.assertEqual(NumDict.fromkeys('1 2'.split(), 'Echo'), d8)
+        self.assertEqual(NumDict().fromkeys('1 2'.split(), 'Echo'), d8)
+        self.assertTrue(n1.fromkeys('1 2'.split()) is not n1)
+        self.assertIsInstance(n1.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(n2.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(n3.fromkeys('1 2'.split()), NumDict)
+        self.assertIsInstance(n4.fromkeys('1 2'.split()), NumDict)
+
+    def test_repr(self):
+        # dicts for testing
+        d0 = {}  # Empty dictionary
+        d1 = {1: 'Elephant'}  # Single numeric key
+        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+        d3 = {'3': 'Aardvark'}  # Numeric string key
+        d4 = {'3': 'Aardvark', '4': 'Ant'}  # Multiple numeric string keys
+        d5 = {5: 'Cat', '6': 'Dog'}  # Mixed numeric and numeric string keys
+        d6 = {1: None, '2': None}  # None as values
+        d7 = {None: 'Empty'}  # None as key
+
+        #  Construct NumDicts from dicts
+        n = NumDict()
+        n0 = NumDict(d0)
+        n1 = NumDict(d1)
+        n2 = NumDict(d2)
+        n3 = NumDict(d3)
+        n4 = NumDict(d4)
+        n5 = NumDict(d5)
+        n6 = NumDict(d6)
+        n7 = NumDict(d7)
+
+        reps = (
+            "{}",
+            "{1: 'Elephant'}",
+            "{1: 'Elephant', 2: 'Mouse'}",
+            "'3': 'Aardvark'",
+            "{'3': 'Aardvark', '4': 'Ant'}",
+            "{5: 'Cat', '6': 'Dog'}",
+            "{1: None, '2': None}",
+            "{None: 'Empty'}",
+        )
+
+        # Most representations of NumDicts should compare equal to dicts...
+        self.assertEqual(str(n), str({}))
+        self.assertEqual(repr(n), repr({}))
+        self.assertIn(repr(n), reps)
+
+        self.assertEqual(str(n0), str(d0))
+        self.assertEqual(repr(n0), repr(d0))
+        self.assertIn(repr(n0), reps)
+
+        self.assertEqual(str(n1), str(d1))
+        self.assertEqual(repr(n1), repr(d1))
+        self.assertIn(repr(n1), reps)
+
+        self.assertEqual(str(n2), str(d2))
+        self.assertEqual(repr(n2), repr(d2))
+        self.assertIn(repr(n2), reps)
+
+        # ...however, numeric keys are not equal to numeric string keys...
+        # ...so the string representations for those are different...
+        self.assertNotEqual(str(n3), str(d3))
+        self.assertNotEqual(repr(n3), repr(d3))
+        self.assertNotIn(repr(n3), reps)
+
+        self.assertNotEqual(str(n4), str(d4))
+        self.assertNotEqual(repr(n4), repr(d4))
+        self.assertNotIn(repr(n4), reps)
+
+        self.assertNotEqual(str(n5), str(d5))
+        self.assertNotEqual(repr(n5), repr(d5))
+        self.assertNotIn(repr(n5), reps)
+
+        self.assertNotEqual(str(n6), str(d6))
+        self.assertNotEqual(repr(n6), repr(d6))
+        self.assertNotIn(repr(n6), reps)
+
+        # ...but None keys work just fine
+        self.assertEqual(str(n7), str(d7))
+        self.assertEqual(repr(n7), repr(d7))
+        self.assertIn(repr(n7), reps)
+
+    def test_rich_comparison_and_len(self):
+        # dicts for testing
+        d0 = {}  # Empty dictionary
+        d1 = {1: 'Elephant'}  # Single numeric key
+        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+
+        # Construct NumDicts from dicts
+        n = NumDict()
+        n0 = NumDict(d0)
+        n1 = NumDict(d1)
+        n2 = NumDict(d2)
+
+        # Construct NumDicts from NumDicts
+        nn = NumDict(n)
+        nn0 = NumDict(n0)
+        nn1 = NumDict(n1)
+        nn2 = NumDict(n2)
+
+        all_dicts = [d0, d1, d2, n, n0, n1, n2, nn, nn0, nn1, nn2]
+        for a in all_dicts:
+            for b in all_dicts:
+                self.assertEqual(a == b, len(a) == len(b))
+
+    def test_dict_access_and_modification(self):
+        # dicts for testing
+        d0 = {}  # Empty dictionary
+        d1 = {1: 'Elephant'}  # Single numeric key
+        d2 = {1: 'Elephant', 2: 'Mouse'}  # Multiple numeric keys
+
+        #  Construct NumDicts from dicts
+        n0 = NumDict()
+        n1 = NumDict(d1)
+        n2 = NumDict(d2)
+
+        # test __getitem__
+        self.assertEqual(n2[1], 'Elephant')
+        with self.assertRaises(KeyError):
+            n1['Mouse']  # key is not numeric
+        with self.assertRaises(KeyError):
+            n1.__getitem__('Mouse')  # key is not numeric
+        with self.assertRaises(KeyError):
+            n1[None]  # key does not exist
+        with self.assertRaises(KeyError):
+            n1.__getitem__(None)  # key does not exist
+
+        # Test __setitem__
+        n3 = NumDict(n2)
+        self.assertEqual(n2, n3)
+
+        n3[2] = 'Frog'
+        self.assertNotEqual(n2, n3)
+
+        # Check None keys and numeric key conversion
+        n3['3'] = 'Armadillo'
+        n3[None] = 'Cockroach'
+
+        # Check long ints
+        n3[12390809518259081208909880312] = 'Squid'
+        n3['12390809518259081208909880312'] = 'Octopus'
+        self.assertEqual(n3[12390809518259081208909880312], 'Octopus')
+
+        with self.assertRaises(TypeError):
+            n3.__setitem__('Gorilla', 1)  # key is not numeric
+        with self.assertRaises(TypeError):
+            n3['Chimpanzee'] = 1  # key is not numeric
+        with self.assertRaises(TypeError):
+            n3[(4, 1)] = 1  # key is not numeric
+        with self.assertRaises(TypeError):
+            n3[[1, 3, 4]] = 1  # key is not numeric and is not hashable
+
+        # Test __delitem__
+        del n3[3]
+        del n3[None]
+        with self.assertRaises(KeyError):
+            del n3[3]  # already deleted
+        with self.assertRaises(KeyError):
+            n3.__delitem__(3)  # already deleted
+        with self.assertRaises(KeyError):
+            del n3['Mouse']  # key would not exist, since it is not numeric
+
+        # Test clear
+        n3.clear()
+        self.assertEqual(n3, {})
+
+        # Test copy()
+        n2a = d2.copy()
+        self.assertEqual(n2, n2a)
+        n2b = n2.copy()
+        self.assertEqual(n2b, n2)
+        n2c = UserDict({1: 'Elephant', 2: 'Mouse'})
+        n2d = n2c.copy()  # making a copy of a UserDict is special cased
+        self.assertEqual(n2c, n2d)
+
+        class MyNumDict(NumDict):
+            """
+            subclass Numdict for testing
+            """
+            def display(self):
+                """
+                add a method to subclass to differentiate from superclass
+                """
+                print('MyNumDict:', self)
+
+        m2 = MyNumDict(n2)
+        m2a = m2.copy()
+        self.assertEqual(m2a, m2)
+
+        m2[1] = 'Frog'
+        self.assertNotEqual(m2a, m2)
+
+        # Test keys, items, values
+        self.assertEqual(sorted(n2.keys()), sorted(d2.keys()))
+        self.assertEqual(sorted(n2.items()), sorted(d2.items()))
+        self.assertEqual(sorted(n2.values()), sorted(d2.values()))
+
+        # Test "in".
+        for i in n2:
+            self.assertIn(i, n2)
+            self.assertEqual(i in n1, i in d1)
+            self.assertEqual(i in n0, i in d0)
+
+        self.assertFalse(None in n2)
+        self.assertEqual(None in n2, None in d2)
+
+        d2[None] = 'Cow'
+        n2[None] = d2[None]
+        self.assertTrue(None in n2)
+        self.assertEqual(None in n2, None in d2)
+
+        self.assertEqual(n2.has_key(None), None in d2)
+        if not PY3:
+            self.assertEqual(n2.has_key(None), d2.has_key(None))
+        self.assertFalse('Penguin' in n2)
+
+        # Test update
+        t = NumDict()
+        t.update(d2)
+        self.assertEqual(t, n2)
+
+        # Test get
+        for i in n2:
+            self.assertEqual(n2.get(i), n2[i])
+            self.assertEqual(n1.get(i), d1.get(i))
+            self.assertEqual(n0.get(i), d0.get(i))
+
+        for i in ['purple', None, 12312301924091284, 23]:
+            self.assertEqual(n2.get(i), d2.get(i), i)
+
+        with self.assertRaises(AssertionError):
+            i = '1'
+            self.assertEqual(n2.get(i), d2.get(i), i)  # d2 expects string key which does not exist
+
+        # Test "in" iteration.
+        n2b = n2
+        for i in range(20):
+            n2[i] = str(i)
+            n2b[str(i)] = str(i)
+        self.assertEqual(n2, n2b)
+
+        ikeys = []
+        for k in n2:
+            ikeys.append(k)
+        self.assertEqual(set(ikeys), set(n2.keys()))
+
+        # Test setdefault
+        x = 1
+        t = NumDict()
+        self.assertEqual(t.setdefault(x, 42), 42)
+        self.assertEqual(t.setdefault(x, '42'), 42)
+        self.assertNotEqual(t.setdefault(x, 42), '42')
+        self.assertNotEqual(t.setdefault(x, '42'), '42')
+        self.assertIn(x, t)
+
+        self.assertEqual(t.setdefault(x, 23), 42)
+        self.assertEqual(t.setdefault(x, '23'), 42)
+        self.assertNotEqual(t.setdefault(x, 23), '42')
+        self.assertNotEqual(t.setdefault(x, '23'), '42')
+        self.assertIn(x, t)
+
+        # Test pop
+        x = 1
+        t = NumDict({x: 42})
+        self.assertEqual(t.pop(x), 42)
+        self.assertRaises(KeyError, t.pop, x)
+        self.assertEqual(t.pop(x, 1), 1)
+        t[x] = 42
+        self.assertEqual(t.pop(x, 1), 42)
+
+        # Test popitem
+        x = 1
+        t = NumDict({x: 42})
+        self.assertEqual(t.popitem(), (x, 42))
+        self.assertRaises(KeyError, t.popitem)
+
+    def test_missing(self):
+        # Make sure NumDict doesn't have a __missing__ method
+        self.assertEqual(hasattr(NumDict, "__missing__"), False)
+
+        class D(NumDict):
+            """
+            subclass defines __missing__ method returning a value
+            """
+            def __missing__(self, key):
+                return 42
+
+        d = D({1: 2, 3: 4})
+        self.assertEqual(d[1], 2)
+        self.assertEqual(d[3], 4)
+        self.assertNotIn(2, d)
+        self.assertNotIn(2, d.keys())
+        self.assertEqual(d[2], 42)
+
+        class E(NumDict):
+            """
+            subclass defines __missing__ method raising RuntimeError
+            """
+            def __missing__(self, key):
+                raise RuntimeError(key)
+
+        e = E()
+        try:
+            e[42]
+        except RuntimeError as err:
+            self.assertEqual(err.args, (42,))
+        else:
+            self.fail("e[42] didn't raise RuntimeError")
+
+        class F(NumDict):
+            """
+            subclass sets __missing__ instance variable (no effect)
+            """
+            def __init__(self):
+                # An instance variable __missing__ should have no effect
+                self.__missing__ = lambda key: None
+                NumDict.__init__(self)
+        f = F()
+        try:
+            f[42]
+        except KeyError as err:
+            self.assertEqual(err.args, (42,))
+        else:
+            self.fail("f[42] didn't raise KeyError")
+
+        class G(NumDict):
+            """
+            subclass doesn't define __missing__ at a all
+            """
+            pass
+
+        g = G()
+        try:
+            g[42]
+        except KeyError as err:
+            self.assertEqual(err.args, (42,))
+        else:
+            self.fail("g[42] didn't raise KeyError")
+
+        class H(D):
+            """
+            subclass calls super classes __missing__ and modifies the value before returning it
+            """
+            def __missing__(self, key):
+                return super(H, self).__missing__(key) + 1
+
+        h = H()
+        self.assertEqual(h[None], d[None]+1)
+
+
+def test_main():
+    import logging
+    log = logging.getLogger(__name__)
+    logging.basicConfig(level=logging.DEBUG)
+
+    log.info("=======================")
+    log.info("STARTING - COMMON TESTS")
+    log.info("=======================")
+    log.info("######################################################################")
+
+    suite = unittest.TestLoader().loadTestsFromTestCase(NumDictTest)
+    unittest.TextTestRunner(verbosity=2).run(suite)
+
+
+if __name__ == "__main__":
+    test_main()
diff --git a/tests/test_lib.py b/tests/test_lib.py
index 0fc43d5b8457ca6aa8337fa53396127df93f492e..dd28942dcd379a2b6764f430f53b0e7b0df80845 100644
--- a/tests/test_lib.py
+++ b/tests/test_lib.py
@@ -17,7 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-from __future__ import with_statement
 
 import sys, os.path
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
diff --git a/tests/torrent_tests.py b/tests/torrent_tests.py
index 73b6ff289f14f8b2a436cb7c0b5a9c1ca209408a..23a60edd6b4d8a75f938510d82746e637b71c44e 100644
--- a/tests/torrent_tests.py
+++ b/tests/torrent_tests.py
@@ -17,7 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-from __future__ import with_statement
 
 import sys, os.path
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
diff --git a/tests/xem_tests.py b/tests/xem_tests.py
index 0aa22c1b4989846dff02ded21c0dfaea69e3087f..97fa2d425c1c48b176eafa6fdf5c62abead2f874 100644
--- a/tests/xem_tests.py
+++ b/tests/xem_tests.py
@@ -17,7 +17,6 @@
 # You should have received a copy of the GNU General Public License
 # along with SickRage.  If not, see <http://www.gnu.org/licenses/>.
 
-from __future__ import with_statement
 
 import sys, os.path
 sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))