diff --git a/rsa/__init__.py b/rsa/__init__.py
index b616d7a..59ff8e8 100644
--- a/rsa/__init__.py
+++ b/rsa/__init__.py
@@ -31,135 +31,14 @@
 __date__ = "2010-02-08"
 __version__ = '2.1-beta0'
 
-from rsa import common, key, transform
-from rsa.core import encrypt_int, decrypt_int
-from rsa.key import newkeys
-
-def encode64chops(chops):
-    """base64encodes chops and combines them into a ',' delimited string"""
-
-    # chips are character chops
-    chips = [transform.int2str64(chop) for chop in chops]
-
-    # delimit chops with comma
-    encoded = ','.join(chips)
-
-    return encoded
-
-def decode64chops(string):
-    """base64decodes and makes a ',' delimited string into chops"""
-
-    # split chops at commas
-    chips = string.split(',')
-
-    # make character chips into numeric chops
-    chops = [transform.str642int(chip) for chip in chips]
-
-    return chops
-
-def block_size(n):
-    '''Returns the block size in bytes, given the public key.
-
-    The block size is determined by the 'n=p*q' component of the key.
-    '''
-
-    # Set aside 2 bits so setting of safebit won't overflow modulo n.
-    nbits = common.bit_size(n) - 2
-    nbytes = nbits // 8
-
-    return nbytes
-
-
-def chopstring(message, key, n, int_op):
-    """Chops the 'message' into integers that fit into n.
-    
-    Leaves room for a safebit to be added to ensure that all messages fold
-    during exponentiation. The MSB of the number n is not independent modulo n
-    (setting it could cause overflow), so use the next lower bit for the
-    safebit. Therefore this function reserves 2 bits in the number n for
-    non-data bits.
-
-    Calls specified encryption function 'int_op' for each chop before storing.
-
-    Used by 'encrypt' and 'sign'.
-    """
-
-
-    nbytes = block_size(n)
-
-    msglen = len(message)
-    blocks = msglen // nbytes
-
-    if msglen % nbytes > 0:
-        blocks += 1
-
-    cypher = []
-    
-    for bindex in range(blocks):
-        offset = bindex * nbytes
-        block = message[offset:offset + nbytes]
-
-        value = transform.bytes2int(block)
-        to_store = int_op(value, key, n)
-
-        cypher.append(to_store)
-
-    return encode64chops(cypher)   #Encode encrypted ints to base64 strings
-
-def gluechops(string, key, n, funcref):
-    """Glues chops back together into a string.  calls
-    funcref(integer, key, n) for each chop.
-
-    Used by 'decrypt' and 'verify'.
-    """
-
-    messageparts = []
-    chops = decode64chops(string)  #Decode base64 strings into integer chops
-    
-    for chop in chops:
-        value = funcref(chop, key, n) #Decrypt each chop
-        block = transform.int2bytes(value)
-        messageparts.append(block)
-
-    # Combine decrypted strings into a msg
-    return ''.join(messageparts)
-
-def encrypt(message, pub_key):
-    """Encrypts a string 'message' with the public key 'pub_key'"""
-
-    if not isinstance(pub_key, key.PublicKey):
-        raise TypeError("You must use the public key with encrypt")
-
-    return chopstring(message, pub_key.e, pub_key.n, encrypt_int)
-
-def sign(message, priv_key):
-    """Signs a string 'message' with the private key 'priv_key'"""
-
-    if not isinstance(priv_key, key.PrivateKey):
-        raise TypeError("You must use the private key with sign")
-
-    return chopstring(message, priv_key.d, priv_key.n, encrypt_int)
-
-def decrypt(cypher, priv_key):
-    """Decrypts a string 'cypher' with the private key 'priv_key'"""
-
-    if not isinstance(priv_key, key.PrivateKey):
-        raise TypeError("You must use the private key with decrypt")
-
-    return gluechops(cypher, priv_key.d, priv_key.n, decrypt_int)
-
-def verify(cypher, pub_key):
-    """Verifies a string 'cypher' with the public key 'pub_key'"""
-
-    if not isinstance(pub_key, key.PublicKey):
-        raise TypeError("You must use the public pub_key with verify")
-
-    return gluechops(cypher, pub_key.e, pub_key.n, decrypt_int)
+from rsa.key import newkeys, PrivateKey, PublicKey
+from rsa.pkcs1 import encrypt, decrypt, sign, verify
 
 # Do doctest if we're run directly
 if __name__ == "__main__":
     import doctest
     doctest.testmod()
 
-__all__ = ["newkeys", "encrypt", "decrypt", "sign", "verify"]
+__all__ = ["newkeys", "encrypt", "decrypt", "sign", "verify", 'PublicKey',
+    'PrivateKey']
 
diff --git a/tests/test_integers.py b/tests/test_integers.py
index 1e318ab..111f8ab 100644
--- a/tests/test_integers.py
+++ b/tests/test_integers.py
@@ -2,7 +2,7 @@
 
 import unittest
 
-import rsa
+import rsa.core
 
 class IntegerTest(unittest.TestCase):
 
@@ -14,10 +14,10 @@
         message = 42
         print "\tMessage:   %d" % message
 
-        encrypted = rsa.encrypt_int(message, self.pub['e'], self.pub['n'])
+        encrypted = rsa.core.encrypt_int(message, self.pub.e, self.pub.n)
         print "\tEncrypted: %d" % encrypted
 
-        decrypted = rsa.decrypt_int(encrypted, self.priv['d'], self.pub['n'])
+        decrypted = rsa.core.decrypt_int(encrypted, self.priv.d, self.pub.n)
         print "\tDecrypted: %d" % decrypted
 
         self.assertEqual(message, decrypted)
@@ -26,10 +26,10 @@
 
         message = 42
 
-        signed = rsa.encrypt_int(message,self.priv['d'], self.pub['n'])
+        signed = rsa.core.encrypt_int(message,self.priv.d, self.pub.n)
         print "\tSigned:    %d" % signed
 
-        verified = rsa.decrypt_int(signed, self.pub['e'],self.pub['n'])
+        verified = rsa.core.decrypt_int(signed, self.pub.e,self.pub.n)
         print "\tVerified:  %d" % verified
 
         self.assertEqual(message, verified)
diff --git a/tests/test_strings.py b/tests/test_strings.py
index 8baa63d..38fae06 100644
--- a/tests/test_strings.py
+++ b/tests/test_strings.py
@@ -7,7 +7,7 @@
 class StringTest(unittest.TestCase):
 
     def setUp(self):
-        (self.pub, self.priv) = rsa.newkeys(64)
+        (self.pub, self.priv) = rsa.newkeys(384)
 
     def test_enc_dec(self):
 
@@ -22,16 +22,3 @@
 
         self.assertEqual(message, decrypted)
 
-    def test_sign_verify(self):
-
-        message = u"Euro=\u20ac ABCDEFGHIJKLMNOPQRSTUVWXYZ".encode('utf-8')
-        print "\tMessage:   %s" % message
-
-        signed = rsa.sign(message, self.priv)
-        print "\tSigned:    %s" % signed
-
-        verified = rsa.verify(signed, self.pub)
-        print "\tVerified:  %s" % verified
-
-        self.assertEqual(message, verified)
-
