diff --git a/Mage/Command/BuiltIn/DeployCommand.php b/Mage/Command/BuiltIn/DeployCommand.php
index 943a630..e4e2a78 100644
--- a/Mage/Command/BuiltIn/DeployCommand.php
+++ b/Mage/Command/BuiltIn/DeployCommand.php
@@ -59,6 +59,15 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
      */
     const IN_PROGRESS = 'in_progress';
 
+    /**
+     * Stage where possible throw Rollback Exception
+     * @var array
+     */
+    public $acceptedStagesToRollback = array(
+        AbstractTask::STAGE_POST_RELEASE,
+        AbstractTask::STAGE_POST_DEPLOY
+    );
+
     /**
      * Time the Deployment has Started
      * @var integer
@@ -430,22 +439,46 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
         }
     }
 
-    protected function runRollbackTask(){
+    protected function runRollbackTask(AbstractTask $task){
         $this->getConfig()->reload();
         $hosts = $this->getConfig()->getHosts();
 
-        if (count($hosts) == 0) {
+        Console::output("",1,2);
+        Console::output("Starting the rollback",1,1);
+
+        if(!in_array($task->getStage(), $this->acceptedStagesToRollback ) ) {
+            $stagesString = implode(', ',$this->acceptedStagesToRollback);
+            Console::output("Warning! Rollback during deployment can be called only at the stages: $stagesString ",1);
+            Console::output("Rollback: ABORTING",1,3);
+
+        } elseif (count($hosts) == 0) {
             Console::output('Warning! No hosts defined, unable to get releases.', 1, 3);
 
         } else {
             $result = true;
-            foreach ($hosts as $host) {
-                $this->getConfig()->setHost($host);
+            foreach ($hosts as $hostKey => $host) {
+                $hostConfig = null;
+                if (is_array($host)) {
+                    $hostConfig = $host;
+                    $host = $hostKey;
+                }
 
+                // Set Host and Host Specific Config
+                $this->getConfig()->setHost($host);
+                $this->getConfig()->setHostConfig($hostConfig);
                 $this->getConfig()->setReleaseId(-1);
-                $task = Factory::get('releases/rollback', $this->getConfig());
+
+                $task = Factory::get(array(
+                        'name'=>'releases/rollback',
+                        'parameters' => array('inDeploy'=>true)
+                    ),
+                    $this->getConfig(),
+                    false,
+                    $task->getStage()
+                );
                 $task->init();
                 $result = $task->run() && $result;
+
             }
             return $result;
         }
@@ -486,8 +519,8 @@ class DeployCommand extends AbstractCommand implements RequiresEnvironment
                     $result = false;
                 }
             } catch (RollbackException $e) {
-                Console::output('FAIL, Rollback started [Message: ' . $e->getMessage() . ']', 0);
-                $this->runRollbackTask();
+                Console::output('FAIL, Rollback catched [Message: ' . $e->getMessage() . ']', 0);
+                $this->runRollbackTask($task);
                 $result = false;
 
             } catch (ErrorWithMessageException $e) {
diff --git a/Mage/Task/BuiltIn/Releases/RollbackTask.php b/Mage/Task/BuiltIn/Releases/RollbackTask.php
index 7a437fd..1de9831 100644
--- a/Mage/Task/BuiltIn/Releases/RollbackTask.php
+++ b/Mage/Task/BuiltIn/Releases/RollbackTask.php
@@ -55,12 +55,18 @@ class RollbackTask extends AbstractTask implements IsReleaseAware
             $result = $this->runCommandRemote('ls -1 ' . $releasesDirectory, $output);
             $releases = ($output == '') ? array() : explode(PHP_EOL, $output);
 
+            $inDeploy = $this->getParameter('inDeploy',false);
+
             if (count($releases) == 0) {
                 Console::output('Release are not available for ' . $this->getConfig()->getHost() . ' ... FAIL');
 
             } else {
                 rsort($releases);
-                $deleteCurrent = $this->getConfig()->getParameter('deleteCurrent', false);
+                $deleteCurrent = $this->getConfig()->getParameter('deleteCurrent',
+                    $this->getConfig()->deployment('delete-on-rollback',
+                        $this->getConfig()->general('delete-on-rollback',false)
+                    )
+                );
 
                 $releaseIsAvailable = false;
                 if ($this->getReleaseId() == '') {