diff --git a/cryptography/primitives/hashes.py b/cryptography/primitives/hashes.py
index e8c1f92..c4bd8ad 100644
--- a/cryptography/primitives/hashes.py
+++ b/cryptography/primitives/hashes.py
@@ -23,13 +23,17 @@
 
 
 class BaseHash(six.with_metaclass(abc.ABCMeta)):
-    def __init__(self, api=None, ctx=None):
+    def __init__(self, data=None, api=None, ctx=None):
         if api is None:
             api = _default_api
         self._api = api
         self._ctx = self._api.create_hash_context(self) if ctx is None else ctx
+        if data is not None:
+            self.update(data)
 
     def update(self, data):
+        if isinstance(data, six.text_type):
+            raise TypeError("Unicode-objects must be encoded before hashing")
         self._api.update_hash_context(self._ctx, data)
 
     def copy(self):
diff --git a/tests/primitives/test_hashes.py b/tests/primitives/test_hashes.py
index 901ddab..805d992 100644
--- a/tests/primitives/test_hashes.py
+++ b/tests/primitives/test_hashes.py
@@ -13,11 +13,22 @@
 
 from __future__ import absolute_import, division, print_function
 
+import pytest
+
+import six
+
 from cryptography.primitives import hashes
 
 from .utils import generate_base_hash_test
 
 
+class TestBaseHash(object):
+    def test_base_hash_reject_unicode(self, api):
+        m = hashes.SHA1(api=api)
+        with pytest.raises(TypeError):
+            m.update(six.u("\u00FC"))
+
+
 class TestSHA1(object):
     test_SHA1 = generate_base_hash_test(
         hashes.SHA1,
diff --git a/tests/primitives/test_utils.py b/tests/primitives/test_utils.py
index 9888309..6e19792 100644
--- a/tests/primitives/test_utils.py
+++ b/tests/primitives/test_utils.py
@@ -1,7 +1,8 @@
 import pytest
 
-from .utils import (base_hash_test, encrypt_test, hash_test,
-    long_string_hash_test)
+from .utils import (
+    base_hash_test, encrypt_test, hash_test, long_string_hash_test
+)
 
 
 class TestEncryptTest(object):
diff --git a/tests/primitives/utils.py b/tests/primitives/utils.py
index a3759b0..a15e773 100644
--- a/tests/primitives/utils.py
+++ b/tests/primitives/utils.py
@@ -67,6 +67,8 @@
     m = hash_cls(api=api)
     m.update(binascii.unhexlify(msg))
     assert m.hexdigest() == md.replace(" ", "").lower()
+    digest = hash_cls(api=api, data=binascii.unhexlify(msg)).hexdigest()
+    assert digest == md.replace(" ", "").lower()
 
 
 def generate_base_hash_test(hash_cls, digest_size, block_size,
@@ -115,6 +117,6 @@
 def long_string_hash_test(api, hash_factory, md, only_if, skip_message):
     if only_if is not None and not only_if(api):
         pytest.skip(skip_message)
-    m = hash_factory(api)
+    m = hash_factory(api=api)
     m.update(b"a" * 1000000)
     assert m.hexdigest() == md.lower()
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 3fe9e57..f96cf00 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -15,10 +15,12 @@
 
 import pytest
 
-from .utils import (load_nist_vectors, load_nist_vectors_from_file,
-    load_cryptrec_vectors, load_cryptrec_vectors_from_file,
-    load_openssl_vectors, load_openssl_vectors_from_file, load_hash_vectors,
-    load_hash_vectors_from_file)
+from .utils import (
+    load_nist_vectors, load_nist_vectors_from_file, load_cryptrec_vectors,
+    load_cryptrec_vectors_from_file, load_openssl_vectors,
+    load_openssl_vectors_from_file, load_hash_vectors,
+    load_hash_vectors_from_file
+)
 
 
 def test_load_nist_vectors_encrypt():
diff --git a/tox.ini b/tox.ini
index e72eb58..b437a7a 100644
--- a/tox.ini
+++ b/tox.ini
@@ -19,5 +19,7 @@
 
 [testenv:pep8]
 deps = flake8
-# E128 continuation line under-indented for visual indent
-commands = flake8 --ignore="E128" cryptography/ tests/ docs/
+commands = flake8 .
+
+[flake8]
+exclude = .tox,*.egg
