diff --git a/premailer/premailer.py b/premailer/premailer.py
index 344a6ad..37fd743 100644
--- a/premailer/premailer.py
+++ b/premailer/premailer.py
@@ -311,18 +311,18 @@ class Premailer(object):
         return rules, leftover
 
     def transform(self, html=None, pretty_print=True, **kwargs):
-        """change the self.html and return it with CSS turned into style
+        """change the html and return it with CSS turned into style
         attributes.
         """
-        if html is not None:
-            if self.html is not None:
-                raise TypeError("Can't pass html argument twice")
-            self.html = html
-        elif self.html is None:
+        if html is not None and self.html is not None:
+            raise TypeError("Can't pass html argument twice")
+        elif html is None and self.html is None:
             raise TypeError("must pass html as first argument")
-        if hasattr(self.html, "getroottree"):
+        elif html is None:
+            html = self.html
+        if hasattr(html, "getroottree"):
             # skip the next bit
-            root = self.html.getroottree()
+            root = html.getroottree()
             page = root
             tree = root
         else:
@@ -330,7 +330,7 @@ class Premailer(object):
                 parser = etree.XMLParser(ns_clean=False, resolve_entities=False)
             else:
                 parser = etree.HTMLParser()
-            stripped = self.html.strip()
+            stripped = html.strip()
             tree = etree.fromstring(stripped, parser).getroottree()
             page = tree.getroot()
             # lxml inserts a doctype if none exists, so only include it in
@@ -379,6 +379,7 @@ class Premailer(object):
                 css_body = self._load_external(href)
 
             these_rules, these_leftover = self._parse_style_rules(css_body, index)
+
             index += 1
             rules.extend(these_rules)
             parent_of_element = element.getparent()
@@ -522,7 +523,7 @@ class Premailer(object):
                         continue
                     parent.attrib[attr] = urljoin(self.base_url, url)
 
-        if hasattr(self.html, "getroottree"):
+        if hasattr(html, "getroottree"):
             return root
         else:
             kwargs.setdefault("method", self.method)

diff --git a/premailer/tests/test_premailer.py b/premailer/tests/test_premailer.py
index f0ef4ac..0ff7a37 100644
--- a/premailer/tests/test_premailer.py
+++ b/premailer/tests/test_premailer.py
@@ -215,6 +215,68 @@ class Tests(unittest.TestCase):
         p = Premailer()
         assert_raises(TypeError, p.transform)
 
+    def test_instance_reuse(self):
+        """test whether the premailer instance can be reused"""
+
+        html_1 = """<html>
+        <head>
+        <title>Title</title>
+        <style type="text/css">
+        h1, h2 { color:red; }
+        strong {
+            text-decoration:none
+            }
+        </style>
+        </head>
+        <body>
+        <h1>Hi!</h1>
+        <p><strong>Yes!</strong></p>
+        </body>
+        </html>"""
+
+        html_2 = """<html>
+        <head>
+        <title>Another Title</title>
+        <style type="text/css">
+        h1, h2 { color:blue; }
+        strong {
+            text-decoration:underline
+            }
+        </style>
+        </head>
+        <body>
+        <h1>Hello!</h1>
+        <p><strong>Nope!</strong></p>
+        </body>
+        </html>"""
+
+        expect_html_1 = """<html>
+        <head>
+        <title>Title</title>
+        </head>
+        <body>
+        <h1 style="color:red">Hi!</h1>
+        <p><strong style="text-decoration:none">Yes!</strong></p>
+        </body>
+        </html>"""
+
+        expect_html_2 = """<html>
+        <head>
+        <title>Another Title</title>
+        </head>
+        <body>
+        <h1 style="color:blue">Hello!</h1>
+        <p><strong style="text-decoration:underline">Nope!</strong></p>
+        </body>
+        </html>"""
+
+        p = Premailer()
+        result_html_1 = p.transform(html_1)
+        result_html_2 = p.transform(html_2)
+
+        compare_html(expect_html_1, result_html_1)
+        compare_html(expect_html_2, result_html_2)
+
     def test_remove_classes(self):
         """test the simplest case"""
 

Reusing premailer instances does not work
The README contains a [nice section](https://github.com/peterbe/premailer#if-execution-speed-is-on-your-mind) on speeding up premailer by reusing premailer instances. This, however, [throws an exception](https://github.com/peterbe/premailer/blob/master/premailer/premailer.py#L319) on subsequent iterations because the instance's internal `html` attribute was already set on the first iteration.

Possible solutions:
 **a)** Refactor code to allow for multiple runs
 **b)** Remove problematic section from documentation
premailer/tests/test_premailer.py::Tests::test_instance_reuse
premailer/tests/test_premailer.py::Tests::test_3_digit_color_expand premailer/tests/test_premailer.py::Tests::test_align_float_images premailer/tests/test_premailer.py::Tests::test_apple_newsletter_example premailer/tests/test_premailer.py::Tests::test_base_url_fixer premailer/tests/test_premailer.py::Tests::test_base_url_ignore_links premailer/tests/test_premailer.py::Tests::test_base_url_with_path premailer/tests/test_premailer.py::Tests::test_basic_html premailer/tests/test_premailer.py::Tests::test_basic_html_argument_wrong premailer/tests/test_premailer.py::Tests::test_basic_html_shortcut_function premailer/tests/test_premailer.py::Tests::test_basic_html_with_pseudo_selector premailer/tests/test_premailer.py::Tests::test_basic_xml premailer/tests/test_premailer.py::Tests::test_broken_xml premailer/tests/test_premailer.py::Tests::test_capture_cssutils_logging premailer/tests/test_premailer.py::Tests::test_child_selector premailer/tests/test_premailer.py::Tests::test_command_line_fileinput_from_argument premailer/tests/test_premailer.py::Tests::test_command_line_fileinput_from_stdin premailer/tests/test_premailer.py::Tests::test_command_line_preserve_style_tags premailer/tests/test_premailer.py::Tests::test_comments_in_media_queries premailer/tests/test_premailer.py::Tests::test_css_disable_basic_html_attributes premailer/tests/test_premailer.py::Tests::test_css_disable_leftover_css premailer/tests/test_premailer.py::Tests::test_css_text premailer/tests/test_premailer.py::Tests::test_css_text_with_only_body_present premailer/tests/test_premailer.py::Tests::test_css_with_html_attributes premailer/tests/test_premailer.py::Tests::test_css_with_pseudoclasses_excluded premailer/tests/test_premailer.py::Tests::test_css_with_pseudoclasses_included premailer/tests/test_premailer.py::Tests::test_disabled_validator premailer/tests/test_premailer.py::Tests::test_doctype premailer/tests/test_premailer.py::Tests::test_empty_style_tag premailer/tests/test_premailer.py::Tests::test_external_links premailer/tests/test_premailer.py::Tests::test_external_links_disallow_network premailer/tests/test_premailer.py::Tests::test_external_links_unfindable premailer/tests/test_premailer.py::Tests::test_external_styles_and_links premailer/tests/test_premailer.py::Tests::test_external_styles_on_http premailer/tests/test_premailer.py::Tests::test_external_styles_on_https premailer/tests/test_premailer.py::Tests::test_external_styles_with_base_url premailer/tests/test_premailer.py::Tests::test_favour_rule_with_class_over_generic premailer/tests/test_premailer.py::Tests::test_favour_rule_with_element_over_generic premailer/tests/test_premailer.py::Tests::test_favour_rule_with_id_over_others premailer/tests/test_premailer.py::Tests::test_favour_rule_with_important_over_others premailer/tests/test_premailer.py::Tests::test_fontface_selectors_with_no_selectortext premailer/tests/test_premailer.py::Tests::test_ignore_some_external_stylesheets premailer/tests/test_premailer.py::Tests::test_ignore_some_incorrectly premailer/tests/test_premailer.py::Tests::test_ignore_some_inline_stylesheets premailer/tests/test_premailer.py::Tests::test_ignore_style_elements_with_media_attribute premailer/tests/test_premailer.py::Tests::test_include_star_selector premailer/tests/test_premailer.py::Tests::test_inline_important premailer/tests/test_premailer.py::Tests::test_inline_wins_over_external premailer/tests/test_premailer.py::Tests::test_keyframe_selectors premailer/tests/test_premailer.py::Tests::test_kwargs_html_shortcut_function premailer/tests/test_premailer.py::Tests::test_last_child premailer/tests/test_premailer.py::Tests::test_last_child_exclude_pseudo premailer/tests/test_premailer.py::Tests::test_leftover_important premailer/tests/test_premailer.py::Tests::test_links_without_protocol premailer/tests/test_premailer.py::Tests::test_load_external_url premailer/tests/test_premailer.py::Tests::test_load_external_url_404 premailer/tests/test_premailer.py::Tests::test_mailto_url premailer/tests/test_premailer.py::Tests::test_mediaquery premailer/tests/test_premailer.py::Tests::test_merge_styles_basic premailer/tests/test_premailer.py::Tests::test_merge_styles_non_trivial premailer/tests/test_premailer.py::Tests::test_merge_styles_with_class premailer/tests/test_premailer.py::Tests::test_merge_styles_with_unset premailer/tests/test_premailer.py::Tests::test_mixed_pseudo_selectors premailer/tests/test_premailer.py::Tests::test_multiple_style_elements premailer/tests/test_premailer.py::Tests::test_multithreading premailer/tests/test_premailer.py::Tests::test_parse_style_rules premailer/tests/test_premailer.py::Tests::test_precedence_comparison premailer/tests/test_premailer.py::Tests::test_prefer_inline_to_class premailer/tests/test_premailer.py::Tests::test_pseudo_selectors_without_selector premailer/tests/test_premailer.py::Tests::test_remove_classes premailer/tests/test_premailer.py::Tests::test_remove_unset_properties premailer/tests/test_premailer.py::Tests::test_six_color premailer/tests/test_premailer.py::Tests::test_strip_important premailer/tests/test_premailer.py::Tests::test_style_attribute_specificity premailer/tests/test_premailer.py::Tests::test_style_block_with_external_urls premailer/tests/test_premailer.py::Tests::test_tel_url premailer/tests/test_premailer.py::Tests::test_turnoff_cache_works_as_expected premailer/tests/test_premailer.py::Tests::test_type_test premailer/tests/test_premailer.py::Tests::test_unknown_in_media_queries premailer/tests/test_premailer.py::Tests::test_uppercase_margin premailer/tests/test_premailer.py::Tests::test_xml_cdata