Merge branch '2.8-maintenance'
diff --git a/.travis.yml b/.travis.yml
index 0881b19..9cf4d86 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,12 +4,14 @@
   - "2.7"
   - "3.3"
   - "3.4"
+  - "3.5"
+  - "pypy"
 
 install:
     - pip install tox
 script:
     - tox -e \
-      $(echo py$TRAVIS_PYTHON_VERSION | tr -d . | sed -e 's/pypypy/pypy/')
+      $(echo $TRAVIS_PYTHON_VERSION | sed 's/^\([0-9]\)\.\([0-9]\).*/py\1\2/')
 
 notifications:
   email: false
diff --git a/docs/switching.rst b/docs/switching.rst
index ab94124..01a7d0d 100644
--- a/docs/switching.rst
+++ b/docs/switching.rst
@@ -116,37 +116,6 @@
 This allows you to pass variables to the method, which is not possible in
 Django. This syntax is also used for macros.
 
-Conditions
-~~~~~~~~~~
-
-In Django you can use the following constructs to check for equality::
-
-    {% ifequal foo "bar" %}
-        ...
-    {% else %}
-        ...
-    {% endifequal %}
-
-In Jinja2 you can use the normal if statement in combination with operators::
-
-    {% if foo == 'bar' %}
-        ...
-    {% else %}
-        ...
-    {% endif %}
-
-You can also have multiple elif branches in your template::
-
-    {% if something %}
-        ...
-    {% elif otherthing %}
-        ...
-    {% elif foothing %}
-        ...
-    {% else %}
-        ...
-    {% endif %}
-
 Filter Arguments
 ~~~~~~~~~~~~~~~~
 
diff --git a/jinja2/__init__.py b/jinja2/__init__.py
index f30610c..e68c285 100644
--- a/jinja2/__init__.py
+++ b/jinja2/__init__.py
@@ -27,7 +27,7 @@
     :license: BSD, see LICENSE for more details.
 """
 __docformat__ = 'restructuredtext en'
-__version__ = '2.8.1-dev'
+__version__ = '2.9.dev'
 
 # high level interface
 from jinja2.environment import Environment, Template
diff --git a/jinja2/_compat.py b/jinja2/_compat.py
index 143962f..ebe7433 100644
--- a/jinja2/_compat.py
+++ b/jinja2/_compat.py
@@ -86,23 +86,14 @@
 
 
 def with_metaclass(meta, *bases):
+    """Create a base class with a metaclass."""
     # This requires a bit of explanation: the basic idea is to make a
-    # dummy metaclass for one level of class instanciation that replaces
-    # itself with the actual metaclass.  Because of internal type checks
-    # we also need to make sure that we downgrade the custom metaclass
-    # for one level to something closer to type (that's why __call__ and
-    # __init__ comes back from type etc.).
-    #
-    # This has the advantage over six.with_metaclass in that it does not
-    # introduce dummy classes into the final MRO.
-    class metaclass(meta):
-        __call__ = type.__call__
-        __init__ = type.__init__
+    # dummy metaclass for one level of class instantiation that replaces
+    # itself with the actual metaclass.
+    class metaclass(type):
         def __new__(cls, name, this_bases, d):
-            if this_bases is None:
-                return type.__new__(cls, name, (), d)
             return meta(name, bases, d)
-    return metaclass('temporary_class', None, {})
+    return type.__new__(metaclass, 'temporary_class', (), {})
 
 
 try:
diff --git a/jinja2/sandbox.py b/jinja2/sandbox.py
index 7e40ab3..8b491e7 100644
--- a/jinja2/sandbox.py
+++ b/jinja2/sandbox.py
@@ -183,8 +183,8 @@
     attributes or functions are safe to access.
 
     If the template tries to access insecure code a :exc:`SecurityError` is
-    raised.  However also other exceptions may occour during the rendering so
-    the caller has to ensure that all exceptions are catched.
+    raised.  However also other exceptions may occur during the rendering so
+    the caller has to ensure that all exceptions are caught.
     """
     sandboxed = True
 
diff --git a/scripts/make-release.py b/scripts/make-release.py
index c28eb9f..6fd98fe 100644
--- a/scripts/make-release.py
+++ b/scripts/make-release.py
@@ -92,7 +92,7 @@
 
 
 def build_and_upload():
-    cmd = [sys.executable, 'setup.py', 'release', 'sdist', 'upload']
+    cmd = [sys.executable, 'setup.py', 'release', 'sdist', 'bdist_wheel', 'upload']
     if wheel is not None:
         cmd.insert(4, 'bdist_wheel')
     Popen(cmd).wait()
@@ -133,7 +133,7 @@
         fail('Could not parse changelog')
 
     version, release_date, codename = rv
-    dev_version = bump_version(version) + '-dev'
+    dev_version = bump_version(version) + '.dev'
 
     info('Releasing %s (codename %s, release date %s)',
          version, codename, release_date.strftime('%d/%m/%Y'))
diff --git a/setup.py b/setup.py
index 27871de..507fd07 100644
--- a/setup.py
+++ b/setup.py
@@ -40,7 +40,7 @@
 
 setup(
     name='Jinja2',
-    version='2.8.1-dev',
+    version='2.9.dev',
     url='http://jinja.pocoo.org/',
     license='BSD',
     author='Armin Ronacher',
diff --git a/tox.ini b/tox.ini
index d5079b9..0daabf7 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
 [tox]
-envlist = py26, py27, pypy, py33, py34
+envlist = py26, py27, pypy, py33, py34, py35
 
 [testenv]
 commands =