diff --git a/python-Genshi-0.7-disable-speedups-for-python34.patch b/python-Genshi-0.7-disable-speedups-for-python34.patch
new file mode 100644
index 0000000..73bc6b8
--- /dev/null
+++ b/python-Genshi-0.7-disable-speedups-for-python34.patch
@@ -0,0 +1,24 @@
+------------------------------------------------------------------------
+r1247 | hodgestar | 2014-02-16 19:32:21 +0100 (So, 16. Feb 2014) | 1 Zeile
+
+Disable the speedups C extension on CPython >= 3.3 since Genshi doesn't support the new Unicode C API yet.
+------------------------------------------------------------------------
+Index: setup.py
+===================================================================
+--- setup.py (Revision 1246)
++++ setup.py (Revision 1247)
+@@ -65,9 +65,13 @@
+
+
+ if Feature:
++ # Optional C extension module for speeding up Genshi:
++ # Not activated by default on:
++ # - PyPy (where it harms performance)
++ # - CPython >= 3.3 (the new Unicode C API is not supported yet)
+ speedups = Feature(
+ "optional C speed-enhancements",
+- standard = not is_pypy,
++ standard = not is_pypy and sys.version_info < (3, 3),
+ ext_modules = [
+ Extension('genshi._speedups', ['genshi/_speedups.c']),
+ ],
diff --git a/python-Genshi-0.7-isstring-helper.patch b/python-Genshi-0.7-isstring-helper.patch
new file mode 100644
index 0000000..0533b80
--- /dev/null
+++ b/python-Genshi-0.7-isstring-helper.patch
@@ -0,0 +1,30 @@
+------------------------------------------------------------------------
+r1248 | hodgestar | 2014-02-16 19:43:20 +0100 (So, 16. Feb 2014) | 1 Zeile
+
+Add isstring helper.
+------------------------------------------------------------------------
+Index: genshi/compat.py
+===================================================================
+--- genshi/compat.py (Revision 1247)
++++ genshi/compat.py (Revision 1248)
+@@ -35,6 +35,15 @@
+ 'Python 2 compatibility function. Not usable in Python 3.')
+
+
++# We need to test if an object is an instance of a string type in places
++
++if IS_PYTHON2:
++ def isstring(obj):
++ return isinstance(obj, basestring)
++else:
++ def isstring(obj):
++ return isinstance(obj, str)
++
+ # We need to differentiate between StringIO and BytesIO in places
+
+ if IS_PYTHON2:
+@@ -112,4 +121,3 @@
+ if not x:
+ return False
+ return True
+-
diff --git a/python-Genshi-0.7-python34-ast-support.patch b/python-Genshi-0.7-python34-ast-support.patch
new file mode 100644
index 0000000..4f01a59
--- /dev/null
+++ b/python-Genshi-0.7-python34-ast-support.patch
@@ -0,0 +1,142 @@
+------------------------------------------------------------------------
+r1249 | hodgestar | 2014-02-16 19:46:15 +0100 (So, 16. Feb 2014) | 1 Zeile
+
+Add support for Python 3.4 AST (support for NameConstants and changes to existing to arguments node attributes).
+------------------------------------------------------------------------
+Index: genshi/template/astutil.py
+===================================================================
+--- genshi/template/astutil.py (Revision 1248)
++++ genshi/template/astutil.py (Revision 1249)
+@@ -21,7 +21,7 @@
+ def parse(source, mode):
+ return compile(source, '', mode, _ast.PyCF_ONLY_AST)
+
+-from genshi.compat import IS_PYTHON2
++from genshi.compat import IS_PYTHON2, isstring
+
+ __docformat__ = 'restructuredtext en'
+
+@@ -103,8 +103,13 @@
+ self._new_line()
+ return self.visit(node.body)
+
++ # Python < 3.4
+ # arguments = (expr* args, identifier? vararg,
+ # identifier? kwarg, expr* defaults)
++ #
++ # Python >= 3.4
++ # arguments = (arg* args, arg? vararg, arg* kwonlyargs, expr* kw_defaults,
++ # arg? kwarg, expr* defaults)
+ def visit_arguments(self, node):
+ first = True
+ no_default_count = len(node.args) - len(node.defaults)
+@@ -122,13 +127,21 @@
+ self._write(', ')
+ else:
+ first = False
+- self._write('*' + node.vararg)
++ self._write('*')
++ if isstring(node.vararg):
++ self._write(node.vararg)
++ else:
++ self.visit(node.vararg)
+ if getattr(node, 'kwarg', None):
+ if not first:
+ self._write(', ')
+ else:
+ first = False
+- self._write('**' + node.kwarg)
++ self._write('**')
++ if isstring(node.kwarg):
++ self._write(node.kwarg)
++ else:
++ self.visit(node.kwarg)
+
+ if not IS_PYTHON2:
+ # In Python 3 arguments get a special node
+@@ -724,6 +737,17 @@
+ def visit_Name(self, node):
+ self._write(node.id)
+
++ # NameConstant(singleton value)
++ def visit_NameConstant(self, node):
++ if node.value is None:
++ self._write('None')
++ elif node.value is True:
++ self._write('True')
++ elif node.value is False:
++ self._write('False')
++ else:
++ raise Exception("Unknown NameConstant %r" % (node.value,))
++
+ # List(expr* elts, expr_context ctx)
+ def visit_List(self, node):
+ self._write('[')
+@@ -829,6 +853,7 @@
+ visit_Attribute = _clone
+ visit_Subscript = _clone
+ visit_Name = _clone
++ visit_NameConstant = _clone
+ visit_List = _clone
+ visit_Tuple = _clone
+
+Index: genshi/template/eval.py
+===================================================================
+--- genshi/template/eval.py (Revision 1248)
++++ genshi/template/eval.py (Revision 1249)
+@@ -24,7 +24,8 @@
+ from genshi.template.base import TemplateRuntimeError
+ from genshi.util import flatten
+
+-from genshi.compat import get_code_params, build_code_chunk, IS_PYTHON2
++from genshi.compat import get_code_params, build_code_chunk, isstring, \
++ IS_PYTHON2
+
+ __all__ = ['Code', 'Expression', 'Suite', 'LenientLookup', 'StrictLookup',
+ 'Undefined', 'UndefinedError']
+@@ -495,28 +496,31 @@
+ def __init__(self):
+ self.locals = [CONSTANTS]
+
++ def _process(self, names, node):
++ if not IS_PYTHON2 and isinstance(node, _ast.arg):
++ names.add(node.arg)
++ elif isstring(node):
++ names.add(node)
++ elif isinstance(node, _ast.Name):
++ names.add(node.id)
++ elif isinstance(node, _ast.alias):
++ names.add(node.asname or node.name)
++ elif isinstance(node, _ast.Tuple):
++ for elt in node.elts:
++ self._process(names, elt)
++
+ def _extract_names(self, node):
+ names = set()
+- def _process(node):
+- if not IS_PYTHON2 and isinstance(node, _ast.arg):
+- names.add(node.arg)
+- if isinstance(node, _ast.Name):
+- names.add(node.id)
+- elif isinstance(node, _ast.alias):
+- names.add(node.asname or node.name)
+- elif isinstance(node, _ast.Tuple):
+- for elt in node.elts:
+- _process(elt)
+ if hasattr(node, 'args'):
+ for arg in node.args:
+- _process(arg)
++ self._process(names, arg)
+ if hasattr(node, 'vararg'):
+- names.add(node.vararg)
++ self._process(names, node.vararg)
+ if hasattr(node, 'kwarg'):
+- names.add(node.kwarg)
++ self._process(names, node.kwarg)
+ elif hasattr(node, 'names'):
+ for elt in node.names:
+- _process(elt)
++ self._process(names, elt)
+ return names
+
+ def visit_Str(self, node):
diff --git a/python-Genshi-0.7-sanitizer-test-fixes.patch b/python-Genshi-0.7-sanitizer-test-fixes.patch
new file mode 100644
index 0000000..971630c
--- /dev/null
+++ b/python-Genshi-0.7-sanitizer-test-fixes.patch
@@ -0,0 +1,43 @@
+------------------------------------------------------------------------
+r1246 | hodgestar | 2014-02-16 19:25:17 +0100 (So, 16. Feb 2014) | 1 Zeile
+
+Also allow stripping of unsafe script tags (Python 3.4 parses the second example as a tag whose name is script&xyz).
+------------------------------------------------------------------------
+Index: genshi/filters/tests/test_html.py
+===================================================================
+--- genshi/filters/tests/test_html.py (Revision 1245)
++++ genshi/filters/tests/test_html.py (Revision 1246)
+@@ -368,12 +368,16 @@
+
+ class HTMLSanitizerTestCase(unittest.TestCase):
+
+- def assert_parse_error_or_equal(self, expected, exploit):
++ def assert_parse_error_or_equal(self, expected, exploit,
++ allow_strip=False):
+ try:
+ html = HTML(exploit)
+ except ParseError:
+ return
+- self.assertEquals(expected, (html | HTMLSanitizer()).render())
++ sanitized_html = (html | HTMLSanitizer()).render()
++ if not sanitized_html and allow_strip:
++ return
++ self.assertEquals(expected, sanitized_html)
+
+ def test_sanitize_unchanged(self):
+ html = HTML(u'fo
o')
+@@ -416,10 +420,12 @@
+ html = HTML(u'')
+ self.assertEquals('', (html | HTMLSanitizer()).render())
+ src = u'