diff --git a/docs/api.rst b/docs/api.rst
index 02462dc..e44f5a1 100644
--- a/docs/api.rst
+++ b/docs/api.rst
@@ -1,3 +1,10 @@
+Module :mod:`exceptions <migrate.exceptions>` -- Exception definitions
+---------------------------------------------------------------------------------------
+
+.. automodule:: migrate.exceptions
+   :members:
+   :synopsis: Migrate exception classes
+
 Module :mod:`migrate.changeset` -- Schema migration API
 =============================================================
 
@@ -84,13 +91,6 @@ Module :mod:`visitor <migrate.changeset.databases.visitor>`
 .. automodule:: migrate.changeset.databases.visitor
    :members:
 
-Module :mod:`exceptions <migrate.changeset.exceptions>` -- Exception definitions
----------------------------------------------------------------------------------------
-
-.. automodule:: migrate.changeset.exceptions
-   :members:
-   :synopsis: Changeset exception classes
-
 Module :mod:`schema <migrate.changeset.schema>` -- Additional API to SQLAlchemy for migrations
 -------------------------------------------------------------------------------------------------
 
@@ -115,12 +115,6 @@ Module :mod:`api <migrate.versioning.api>` -- Python API commands
    :members:
    :synopsis: External API for :mod:`migrate.versioning`
 
-Module :mod:`exceptions <migrate.versioning.exceptions>` -- Exception definitions
---------------------------------------------------------------------------------------
-
-.. automodule:: migrate.versioning.exceptions
-   :members:
-   :synopsis: Exception classes for :mod:`migrate.versioning`
 
 Module :mod:`genmodel <migrate.versioning.genmodel>` -- ORM Model generator
 -------------------------------------------------------------------------------------
diff --git a/docs/changelog.rst b/docs/changelog.rst
index c0edfce..8f2e3b5 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -7,6 +7,8 @@ Fixed bugs
 - updated tests for Python 2.7
 - added if main condition for manage.py script
 - fixed case sensitivity in setup.py dependencies
+- moved :mod:`migrate.changeset.exceptions` and :mod:`migrate.versioning.exceptions`
+  to :mod:`migrate.exceptions`
 
 0.6 (11.07.2010)
 ---------------------------
diff --git a/migrate/changeset/ansisql.py b/migrate/changeset/ansisql.py
index a608260..e5500b8 100644
--- a/migrate/changeset/ansisql.py
+++ b/migrate/changeset/ansisql.py
@@ -4,6 +4,8 @@
    At the moment, this isn't so much based off of ANSI as much as
    things that just happen to work with multiple databases.
 """
+import StringIO
+
 import sqlalchemy as sa
 from sqlalchemy.schema import SchemaVisitor
 from sqlalchemy.engine.default import DefaultDialect
@@ -14,8 +16,8 @@ from sqlalchemy.schema import (ForeignKeyConstraint,
                                UniqueConstraint,
                                Index)
 
-from migrate.changeset import exceptions, constraint, SQLA_06
-import StringIO
+from migrate import exceptions
+from migrate.changeset import constraint, SQLA_06
 
 if not SQLA_06:
     from sqlalchemy.sql.compiler import SchemaGenerator, SchemaDropper
diff --git a/migrate/changeset/constraint.py b/migrate/changeset/constraint.py
index 866ea10..2e2ec7f 100644
--- a/migrate/changeset/constraint.py
+++ b/migrate/changeset/constraint.py
@@ -3,7 +3,7 @@
 """
 from sqlalchemy import schema
 
-from migrate.changeset.exceptions import *
+from migrate.exceptions import *
 from migrate.changeset import SQLA_06
 
 class ConstraintChangeset(object):
diff --git a/migrate/changeset/databases/firebird.py b/migrate/changeset/databases/firebird.py
index 297fe6c..f880035 100644
--- a/migrate/changeset/databases/firebird.py
+++ b/migrate/changeset/databases/firebird.py
@@ -1,10 +1,12 @@
 """
    Firebird database specific implementations of changeset classes.
 """
-
-from migrate.changeset import ansisql, exceptions, SQLA_06
 from sqlalchemy.databases import firebird as sa_base
 
+from migrate import exceptions
+from migrate.changeset import ansisql, SQLA_06
+
+
 if SQLA_06:
     FBSchemaGenerator = sa_base.FBDDLCompiler
 else:
diff --git a/migrate/changeset/databases/mysql.py b/migrate/changeset/databases/mysql.py
index 191b77a..badd9fe 100644
--- a/migrate/changeset/databases/mysql.py
+++ b/migrate/changeset/databases/mysql.py
@@ -2,10 +2,13 @@
    MySQL database specific implementations of changeset classes.
 """
 
-from migrate.changeset import ansisql, exceptions, SQLA_06
 from sqlalchemy.databases import mysql as sa_base
 from sqlalchemy import types as sqltypes
 
+from migrate import exceptions
+from migrate.changeset import ansisql, SQLA_06
+
+
 if not SQLA_06:
     MySQLSchemaGenerator = sa_base.MySQLSchemaGenerator
 else:
diff --git a/migrate/changeset/databases/oracle.py b/migrate/changeset/databases/oracle.py
index fd2749a..bd761bc 100644
--- a/migrate/changeset/databases/oracle.py
+++ b/migrate/changeset/databases/oracle.py
@@ -2,12 +2,11 @@
    Oracle database specific implementations of changeset classes.
 """
 import sqlalchemy as sa
-
-from migrate.changeset import ansisql, exceptions
-
 from sqlalchemy.databases import oracle as sa_base
 
-from migrate.changeset import ansisql, exceptions, SQLA_06
+from migrate import exceptions
+from migrate.changeset import ansisql, SQLA_06
+
 
 if not SQLA_06:
     OracleSchemaGenerator = sa_base.OracleSchemaGenerator
diff --git a/migrate/changeset/databases/sqlite.py b/migrate/changeset/databases/sqlite.py
index 31fdbdd..01c3642 100644
--- a/migrate/changeset/databases/sqlite.py
+++ b/migrate/changeset/databases/sqlite.py
@@ -8,7 +8,9 @@ from copy import copy
 
 from sqlalchemy.databases import sqlite as sa_base
 
-from migrate.changeset import ansisql, exceptions, SQLA_06
+from migrate import exceptions
+from migrate.changeset import ansisql, SQLA_06
+
 
 if not SQLA_06:
     SQLiteSchemaGenerator = sa_base.SQLiteSchemaGenerator
diff --git a/migrate/changeset/exceptions.py b/migrate/changeset/exceptions.py
deleted file mode 100644
index a3dacbd..0000000
--- a/migrate/changeset/exceptions.py
+++ /dev/null
@@ -1,26 +0,0 @@
-"""
-   This module provides exception classes.
-"""
-
-
-class Error(Exception):
-    """
-    Changeset error.
-    """
-
-
-class NotSupportedError(Error):
-    """
-    Not supported error.
-    """
-
-
-class InvalidConstraintError(Error):
-    """
-    Invalid constraint error.
-    """
-
-class MigrateDeprecationWarning(DeprecationWarning):
-    """
-    Warning for deprecated features in Migrate
-    """
diff --git a/migrate/changeset/schema.py b/migrate/changeset/schema.py
index 32a2a8f..a18c9ae 100644
--- a/migrate/changeset/schema.py
+++ b/migrate/changeset/schema.py
@@ -6,8 +6,8 @@ from UserDict import DictMixin
 
 import sqlalchemy
 
+from migrate.exceptions import *
 from migrate.changeset import SQLA_06
-from migrate.changeset.exceptions import *
 from migrate.changeset.databases.visitor import (get_engine_visitor,
                                                  run_single_visitor)
 
diff --git a/migrate/versioning/exceptions.py b/migrate/exceptions.py
similarity index 83%
rename from migrate/versioning/exceptions.py
rename to migrate/exceptions.py
index 00b5dd6..cb8c409 100644
--- a/migrate/versioning/exceptions.py
+++ b/migrate/exceptions.py
@@ -1,5 +1,5 @@
 """
-   Provide exception classes for :mod:`migrate.versioning`
+   Provide exception classes for :mod:`migrate`
 """
 
 
@@ -73,3 +73,15 @@ class InvalidScriptError(ScriptError):
 
 class InvalidVersionError(Error):
     """Invalid version error."""
+
+# migrate.changeset
+
+class NotSupportedError(Error):
+    """Not supported error"""
+
+
+class InvalidConstraintError(Error):
+    """Invalid constraint error"""
+
+class MigrateDeprecationWarning(DeprecationWarning):
+    """Warning for deprecated features in Migrate"""
diff --git a/migrate/tests/changeset/test_changeset.py b/migrate/tests/changeset/test_changeset.py
index beeb509..d1a8fd2 100644
--- a/migrate/tests/changeset/test_changeset.py
+++ b/migrate/tests/changeset/test_changeset.py
@@ -3,7 +3,7 @@
 import sqlalchemy
 from sqlalchemy import *
 
-from migrate import changeset
+from migrate import changeset, exceptions
 from migrate.changeset import *
 from migrate.changeset.schema import ColumnDelta
 from migrate.tests import fixture
@@ -165,7 +165,7 @@ class TestAddDropColumn(fixture.DB):
         # create column with fk
         col = Column('data', Integer, ForeignKey(reftable.c.id))
         if self.url.startswith('sqlite'):
-            self.assertRaises(changeset.exceptions.NotSupportedError,
+            self.assertRaises(exceptions.NotSupportedError,
                 col.create, self.table)
         else:
             col.create(self.table)
@@ -189,7 +189,7 @@ class TestAddDropColumn(fixture.DB):
     def test_pk(self):
         """Can create columns with primary key"""
         col = Column('data', Integer, nullable=False)
-        self.assertRaises(changeset.exceptions.InvalidConstraintError,
+        self.assertRaises(exceptions.InvalidConstraintError,
             col.create, self.table, primary_key_name=True)
         col.create(self.table, primary_key_name='data_pkey')
 
@@ -228,7 +228,7 @@ class TestAddDropColumn(fixture.DB):
     @fixture.usedb(not_supported='sqlite')
     def test_unique(self):
         """Can create columns with unique constraint"""
-        self.assertRaises(changeset.exceptions.InvalidConstraintError,
+        self.assertRaises(exceptions.InvalidConstraintError,
             Column('data', Integer, unique=True).create, self.table)
         col = Column('data', Integer)
         col.create(self.table, unique_name='data_unique')
@@ -249,7 +249,7 @@ class TestAddDropColumn(fixture.DB):
     @fixture.usedb()
     def test_index(self):
         """Can create columns with indexes"""
-        self.assertRaises(changeset.exceptions.InvalidConstraintError,
+        self.assertRaises(exceptions.InvalidConstraintError,
             Column('data', Integer).create, self.table, index_name=True)
         col = Column('data', Integer)
         col.create(self.table, index_name='ix_data')
@@ -372,7 +372,7 @@ class TestRename(fixture.DB):
     
             # Index renames
             if self.url.startswith('sqlite') or self.url.startswith('mysql'):
-                self.assertRaises(changeset.exceptions.NotSupportedError,
+                self.assertRaises(exceptions.NotSupportedError,
                     self.index.rename, index_name2)
             else:
                 assert_index_name(index_name1)
diff --git a/migrate/tests/changeset/test_constraint.py b/migrate/tests/changeset/test_constraint.py
index 66fbb86..f2650e0 100644
--- a/migrate/tests/changeset/test_constraint.py
+++ b/migrate/tests/changeset/test_constraint.py
@@ -5,8 +5,8 @@ from sqlalchemy import *
 from sqlalchemy.util import *
 from sqlalchemy.exc import *
 
+from migrate.exceptions import *
 from migrate.changeset import *
-from migrate.changeset.exceptions import *
 
 from migrate.tests import fixture
 
diff --git a/migrate/tests/versioning/test_api.py b/migrate/tests/versioning/test_api.py
index 41152b0..03b6189 100644
--- a/migrate/tests/versioning/test_api.py
+++ b/migrate/tests/versioning/test_api.py
@@ -1,8 +1,8 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
 
+from migrate.exceptions import *
 from migrate.versioning import api
-from migrate.versioning.exceptions import *
 
 from migrate.tests.fixture.pathed import *
 from migrate.tests.fixture import models
diff --git a/migrate/tests/versioning/test_genmodel.py b/migrate/tests/versioning/test_genmodel.py
index 61610a1..c0cf786 100644
--- a/migrate/tests/versioning/test_genmodel.py
+++ b/migrate/tests/versioning/test_genmodel.py
@@ -3,8 +3,8 @@
 
 import os
 
+from migrate.exceptions import *
 from migrate.versioning.genmodel import *
-from migrate.versioning.exceptions import *
 
 from migrate.tests import fixture
 
diff --git a/migrate/tests/versioning/test_repository.py b/migrate/tests/versioning/test_repository.py
index a23cd45..2c489d5 100644
--- a/migrate/tests/versioning/test_repository.py
+++ b/migrate/tests/versioning/test_repository.py
@@ -4,7 +4,7 @@
 import os
 import shutil
 
-from migrate.versioning import exceptions
+from migrate import exceptions
 from migrate.versioning.repository import *
 from migrate.versioning.script import *
 from nose.tools import raises
diff --git a/migrate/tests/versioning/test_schema.py b/migrate/tests/versioning/test_schema.py
index d4b4861..8b0033c 100644
--- a/migrate/tests/versioning/test_schema.py
+++ b/migrate/tests/versioning/test_schema.py
@@ -4,8 +4,9 @@
 import os
 import shutil
 
+from migrate import exceptions
 from migrate.versioning.schema import *
-from migrate.versioning import script, exceptions, schemadiff
+from migrate.versioning import script, schemadiff
 
 from sqlalchemy import *
 
diff --git a/migrate/tests/versioning/test_shell.py b/migrate/tests/versioning/test_shell.py
index 042ca1f..73472fd 100644
--- a/migrate/tests/versioning/test_shell.py
+++ b/migrate/tests/versioning/test_shell.py
@@ -12,9 +12,9 @@ except ImportError:
 from sqlalchemy import MetaData, Table
 from nose.plugins.skip import SkipTest
 
+from migrate.exceptions import *
 from migrate.versioning.repository import Repository
 from migrate.versioning import genmodel, shell, api
-from migrate.versioning.exceptions import *
 from migrate.tests.fixture import Shell, DB, usedb
 from migrate.tests.fixture import models
 
diff --git a/migrate/tests/versioning/test_version.py b/migrate/tests/versioning/test_version.py
index 9ef15ef..7b38c3b 100644
--- a/migrate/tests/versioning/test_version.py
+++ b/migrate/tests/versioning/test_version.py
@@ -1,8 +1,8 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
+from migrate.exceptions import *
 from migrate.versioning.version import *
-from migrate.versioning.exceptions import *
 
 from migrate.tests import fixture
 
diff --git a/migrate/versioning/api.py b/migrate/versioning/api.py
index a08f3bd..c159a49 100644
--- a/migrate/versioning/api.py
+++ b/migrate/versioning/api.py
@@ -29,7 +29,8 @@ import sys
 import inspect
 import logging
 
-from migrate.versioning import (exceptions, repository, schema, version,
+from migrate import exceptions
+from migrate.versioning import (repository, schema, version,
     script as script_) # command name conflict
 from migrate.versioning.util import catch_known_errors, with_engine
 
diff --git a/migrate/versioning/pathed.py b/migrate/versioning/pathed.py
index 40ec532..fbee0e4 100644
--- a/migrate/versioning/pathed.py
+++ b/migrate/versioning/pathed.py
@@ -6,7 +6,7 @@ import os
 import shutil
 import logging
 
-from migrate.versioning import exceptions
+from migrate import exceptions
 from migrate.versioning.config import *
 from migrate.versioning.util import KeyedInstance
 
diff --git a/migrate/versioning/repository.py b/migrate/versioning/repository.py
index 987ea37..71f3912 100644
--- a/migrate/versioning/repository.py
+++ b/migrate/versioning/repository.py
@@ -9,7 +9,8 @@ import logging
 from pkg_resources import resource_filename
 from tempita import Template as TempitaTemplate
 
-from migrate.versioning import exceptions, version, pathed, cfgparse
+from migrate import exceptions
+from migrate.versioning import version, pathed, cfgparse
 from migrate.versioning.template import Template
 from migrate.versioning.config import *
 
@@ -86,7 +87,7 @@ class Repository(pathed.Pathed):
         """
         Ensure the target path is a valid repository.
 
-        :raises: :exc:`InvalidRepositoryError <migrate.versioning.exceptions.InvalidRepositoryError>`
+        :raises: :exc:`InvalidRepositoryError <migrate.exceptions.InvalidRepositoryError>`
         """
         # Ensure the existence of required files
         try:
diff --git a/migrate/versioning/schema.py b/migrate/versioning/schema.py
index eb3beba..ae615b5 100644
--- a/migrate/versioning/schema.py
+++ b/migrate/versioning/schema.py
@@ -10,7 +10,8 @@ from sqlalchemy.sql import and_
 from sqlalchemy import exceptions as sa_exceptions
 from sqlalchemy.sql import bindparam
 
-from migrate.versioning import exceptions, genmodel, schemadiff
+from migrate import exceptions
+from migrate.versioning import genmodel, schemadiff
 from migrate.versioning.repository import Repository
 from migrate.versioning.util import load_model
 from migrate.versioning.version import VerNum
diff --git a/migrate/versioning/script/base.py b/migrate/versioning/script/base.py
index 0a9d1b7..4287235 100644
--- a/migrate/versioning/script/base.py
+++ b/migrate/versioning/script/base.py
@@ -2,8 +2,9 @@
 # -*- coding: utf-8 -*-
 import logging
 
+from migrate import exceptions
 from migrate.versioning.config import operations
-from migrate.versioning import pathed, exceptions
+from migrate.versioning import pathed
 
 
 log = logging.getLogger(__name__)
@@ -33,7 +34,7 @@ class BaseScript(pathed.Pathed):
         """Ensure this is a valid script
         This version simply ensures the script file's existence
 
-        :raises: :exc:`InvalidScriptError <migrate.versioning.exceptions.InvalidScriptError>`
+        :raises: :exc:`InvalidScriptError <migrate.exceptions.InvalidScriptError>`
         """
         try:
             cls.require_found(path)
diff --git a/migrate/versioning/script/py.py b/migrate/versioning/script/py.py
index 9aeb3f4..efc41f0 100644
--- a/migrate/versioning/script/py.py
+++ b/migrate/versioning/script/py.py
@@ -7,12 +7,12 @@ import logging
 from StringIO import StringIO
 
 import migrate
-from migrate.versioning import exceptions, genmodel, schemadiff
+from migrate import exceptions
+from migrate.versioning import genmodel, schemadiff
 from migrate.versioning.config import operations
 from migrate.versioning.template import Template
 from migrate.versioning.script import base
 from migrate.versioning.util import import_path, load_model, with_engine
-from migrate.changeset.exceptions import *
 
 
 log = logging.getLogger(__name__)
@@ -89,7 +89,7 @@ class PythonScript(base.BaseScript):
         
         :param path: Script location
         :type path: string
-        :raises: :exc:`InvalidScriptError <migrate.versioning.exceptions.InvalidScriptError>`
+        :raises: :exc:`InvalidScriptError <migrate.exceptions.InvalidScriptError>`
         :returns: Python module
         """
         # Try to import and get the upgrade() func
@@ -141,7 +141,7 @@ class PythonScript(base.BaseScript):
             script_func(engine)
         except TypeError:
             warnings.warn("upgrade/downgrade functions must accept engine"
-                " parameter (since version > 0.5.4)", MigrateDeprecationWarning)
+                " parameter (since version > 0.5.4)", exceptions.MigrateDeprecationWarning)
             raise
 
     @property
diff --git a/migrate/versioning/shell.py b/migrate/versioning/shell.py
index 8b59bdc..2d36c42 100644
--- a/migrate/versioning/shell.py
+++ b/migrate/versioning/shell.py
@@ -8,7 +8,8 @@ import inspect
 import logging
 from optparse import OptionParser, BadOptionError
 
-from migrate.versioning import api, exceptions
+from migrate import exceptions
+from migrate.versioning import api
 from migrate.versioning.config import *
 from migrate.versioning.util import asbool
 
diff --git a/migrate/versioning/util/__init__.py b/migrate/versioning/util/__init__.py
index 4d39314..9b79f40 100644
--- a/migrate/versioning/util/__init__.py
+++ b/migrate/versioning/util/__init__.py
@@ -11,11 +11,10 @@ from sqlalchemy import create_engine
 from sqlalchemy.engine import Engine
 from sqlalchemy.pool import StaticPool
 
-from migrate.versioning import exceptions
+from migrate import exceptions
 from migrate.versioning.util.keyedinstance import KeyedInstance
 from migrate.versioning.util.importpath import import_path
 
-from migrate.changeset import *
 
 log = logging.getLogger(__name__)
 
@@ -31,7 +30,7 @@ def load_model(dotted_name):
         if ':' not in dotted_name:
             # backwards compatibility
             warnings.warn('model should be in form of module.model:User '
-                'and not module.model.User', MigrateDeprecationWarning)
+                'and not module.model.User', exceptions.MigrateDeprecationWarning)
             dotted_name = ':'.join(dotted_name.rsplit('.', 1))
         return EntryPoint.parse('x=%s' % dotted_name).load(False)
     else:
@@ -127,7 +126,7 @@ def construct_engine(engine, **opts):
     if echo:
         warnings.warn('echo=True parameter is deprecated, pass '
             'engine_arg_echo=True or engine_dict={"echo": True}',
-            MigrateDeprecationWarning)
+            exceptions.MigrateDeprecationWarning)
         kwargs['echo'] = echo
 
     # parse keyword arguments
diff --git a/migrate/versioning/version.py b/migrate/versioning/version.py
index 04445a3..a09b8cd 100644
--- a/migrate/versioning/version.py
+++ b/migrate/versioning/version.py
@@ -6,7 +6,8 @@ import re
 import shutil
 import logging
 
-from migrate.versioning import exceptions, pathed, script
+from migrate import exceptions
+from migrate.versioning import pathed, script
 
 
 log = logging.getLogger(__name__)