diff --git a/Allura/allura/tasks/repo_tasks.py b/Allura/allura/tasks/repo_tasks.py
index 369b3f9..ed1cabd 100644
--- a/Allura/allura/tasks/repo_tasks.py
+++ b/Allura/allura/tasks/repo_tasks.py
@@ -1,7 +1,7 @@
 import shutil
 import logging
 
-from pylons import c
+from pylons import c, g
 
 from allura.lib.decorators import task
 from allura.lib.repository import RepositoryApp
@@ -18,14 +18,18 @@
 @task
 def clone(cloned_from_path, cloned_from_name, cloned_from_url):
     from allura import model as M
-    c.app.repo.init_as_clone(
-        cloned_from_path,
-        cloned_from_name,
-        cloned_from_url)
-    M.Notification.post_user(
-        c.user, c.app.repo, 'created',
-        text='Repository %s/%s created' % (
-            c.project.shortname, c.app.config.options.mount_point))
+    try:
+        c.app.repo.init_as_clone(
+            cloned_from_path,
+            cloned_from_name,
+            cloned_from_url)
+        M.Notification.post_user(
+            c.user, c.app.repo, 'created',
+            text='Repository %s/%s created' % (
+                c.project.shortname, c.app.config.options.mount_point))
+    except Exception, e:
+        source_url = cloned_from_path or cloned_from_url
+        g.post_event('repo_clone_task_failed', source_url, str(e))
 
 @task
 def reclone(*args, **kwargs):
diff --git a/Allura/allura/tests/test_tasks.py b/Allura/allura/tests/test_tasks.py
index edb82f1..334d08c 100644
--- a/Allura/allura/tests/test_tasks.py
+++ b/Allura/allura/tests/test_tasks.py
@@ -23,9 +23,25 @@
 from allura.tasks import index_tasks
 from allura.tasks import mail_tasks
 from allura.tasks import notification_tasks
+from allura.tasks import repo_tasks
 from allura.tests import decorators as td
 from allura.lib.decorators import event_handler, task
 
+
+class TestRepoTasks(unittest.TestCase):
+    @mock.patch('allura.tasks.repo_tasks.c.app')
+    @mock.patch('allura.tasks.repo_tasks.g.post_event')
+    def test_clone_posts_event_on_failure(self, post_event, app):
+        fake_source_url = 'fake_source_url'
+        fake_traceback = 'fake_traceback'
+        app.repo.init_as_clone.side_effect = Exception(fake_traceback)
+        try:
+            repo_tasks.clone(None, None, fake_source_url)
+        except:
+            pass
+        post_event.assert_any_call('repo_clone_task_failed', fake_source_url, fake_traceback)
+
+
 class TestEventTasks(unittest.TestCase):
 
     def setUp(self):
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index d58b02d..56b7e80 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -108,10 +108,9 @@
             self.__dict__['_git'] = repo
             self._setup_special_files(source_url)
         except:
-            g.post_event('repo_clone_failed', source_url, traceback.format_exc())
             self._repo.status = 'ready'
             session(self._repo).flush(self._repo)
-            raise
+            raise Exception(traceback.format_exc())
         log.info('... %r cloned', self._repo)
         g.post_event('repo_cloned', source_url)
         self._repo.refresh(notify=False)
diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py
index 756a36f..e31a82d 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -174,24 +174,6 @@
         self.assertIn('exec $DIR/post-receive-user\n', c)
         shutil.rmtree(dirname)
 
-    @mock.patch('forgegit.model.git_repo.g.post_event')
-    @mock.patch('forgegit.model.git_repo.traceback')
-    def test_clone_from_posts_event_on_failure(self, traceback, post_event):
-        fake_source_url = 'fake_source_url'
-        fake_traceback = 'fake_traceback'
-        traceback.format_exc.return_value = fake_traceback
-        repo = GM.Repository(
-            name='testgit.git',
-            fs_path='/tmp/',
-            url_path = '/test/',
-            tool = 'git',
-            status = 'creating')
-        try:
-            repo._impl.clone_from(fake_source_url)
-        except:
-            pass
-        post_event.assert_any_call('repo_clone_failed', fake_source_url, fake_traceback)
-
     def test_index(self):
         i = self.repo.index()
         assert i['type_s'] == 'Git Repository', i
diff --git a/ForgeHg/forgehg/model/hg.py b/ForgeHg/forgehg/model/hg.py
index 7e00971..6aed90a 100644
--- a/ForgeHg/forgehg/model/hg.py
+++ b/ForgeHg/forgehg/model/hg.py
@@ -95,10 +95,9 @@
             self.__dict__['_hg'] = repo
             self._setup_special_files(source_url)
         except:
-            g.post_event('repo_clone_failed', source_url, traceback.format_exc())
-            self._repo.status = 'raise'
+            self._repo.status = 'ready'
             session(self._repo).flush(self._repo)
-            raise
+            raise Exception(traceback.format_exc())
         log.info('... %r cloned', self._repo)
         g.post_event('repo_cloned', source_url)
         self._repo.refresh(notify=False)
diff --git a/ForgeHg/forgehg/tests/model/test_repository.py b/ForgeHg/forgehg/tests/model/test_repository.py
index ddedac2..99eb814 100644
--- a/ForgeHg/forgehg/tests/model/test_repository.py
+++ b/ForgeHg/forgehg/tests/model/test_repository.py
@@ -173,24 +173,6 @@
         assert not os.path.exists('/tmp/testrepo.hg/.hg/undo.branch')
         shutil.rmtree(dirname)
 
-    @mock.patch('forgehg.model.hg.g.post_event')
-    @mock.patch('forgehg.model.hg.traceback')
-    def test_clone_from_posts_event_on_failure(self, traceback, post_event):
-        fake_source_url = 'fake_source_url'
-        fake_traceback = 'fake_traceback'
-        traceback.format_exc.return_value = fake_traceback
-        repo = HM.Repository(
-            name='testrepo.hg',
-            fs_path='/tmp/',
-            url_path = '/test/',
-            tool = 'hg',
-            status = 'creating')
-        try:
-            repo._impl.clone_from(fake_source_url)
-        except:
-            pass
-        post_event.assert_any_call('repo_clone_failed', fake_source_url, fake_traceback)
-
     def test_index(self):
         i = self.repo.index()
         assert i['type_s'] == 'Hg Repository', i
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index 85b4670..eca7229 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -169,7 +169,6 @@
             p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
             stdout, stderr = p.communicate(input='p\n')
             if p.returncode != 0:
-                g.post_event('repo_clone_failed', source_url, stderr)
                 self._repo.status = 'ready'
                 session(self._repo).flush(self._repo)
                 raise SVNCalledProcessError(cmd, p.returncode, stdout, stderr)
diff --git a/ForgeSVN/forgesvn/tests/model/test_repository.py b/ForgeSVN/forgesvn/tests/model/test_repository.py
index d317b70..d4385fc 100644
--- a/ForgeSVN/forgesvn/tests/model/test_repository.py
+++ b/ForgeSVN/forgesvn/tests/model/test_repository.py
@@ -174,26 +174,6 @@
         self.assertIn('exec $DIR/post-commit-user "$@"\n', c)
         shutil.rmtree(dirname)
 
-    @mock.patch('forgesvn.model.svn.g.post_event')
-    @mock.patch('forgesvn.model.svn.Popen')
-    def test_clone_from_posts_event_on_failure(self, popen, post_event):
-        fake_source_url = 'fake_source_url'
-        fake_traceback = 'fake_traceback'
-        popen_mock = mock.Mock(returncode=1)
-        popen_mock.communicate.return_value = '', fake_traceback
-        popen.return_value = popen_mock
-        repo = SM.Repository(
-            name='testsvn',
-            fs_path='/tmp/',
-            url_path = '/test/',
-            tool = 'svn',
-            status = 'creating')
-        try:
-            repo._impl.clone_from(fake_source_url)
-        except:
-            pass
-        post_event.assert_any_call('repo_clone_failed', fake_source_url, fake_traceback)
-
     def test_index(self):
         i = self.repo.index()
         assert i['type_s'] == 'SVN Repository', i
