diff --git a/Mage/Task/AbstractTask.php b/Mage/Task/AbstractTask.php
index d2f2ed8..fc1541c 100644
--- a/Mage/Task/AbstractTask.php
+++ b/Mage/Task/AbstractTask.php
@@ -51,200 +51,260 @@ abstract class AbstractTask
 	 * Configuration
 	 * @var Config;
 	 */
-    protected $config = null;
+	protected $config = null;
 
-    /**
-     * Indicates if the Task is running in a Rollback
-     * @var boolean
-     */
-    protected $inRollback = false;
+	/**
+	 * Indicates if the Task is running in a Rollback
+	 * @var boolean
+	 */
+	protected $inRollback = false;
 
-    /**
-     * Indicates the Stage the Task is running ing
-     * @var string
-     */
-    protected $stage = null;
+	/**
+	 * Indicates the Stage the Task is running ing
+	 * @var string
+	 */
+	protected $stage = null;
 
-    /**
-     * Extra parameters
-     * @var array
-     */
-    protected $parameters = array();
+	/**
+	 * Extra parameters
+	 * @var array
+	 */
+	protected $parameters = array();
 
-    /**
-     * Returns the Title of the Task
-     * @return string
-     */
-    public abstract function getName();
+	/**
+	 * Returns the Title of the Task
+	 * @return string
+	 */
+	public abstract function getName();
 
-    /**
-     * Runs the task
-     *
-     * @return boolean
-     * @throws Exception
-     * @throws ErrorWithMessageException
-     * @throws SkipException
-     */
-    public abstract function run();
+	/**
+	 * Runs the task
+	 *
+	 * @return boolean
+	 * @throws Exception
+	 * @throws ErrorWithMessageException
+	 * @throws SkipException
+	 */
+	public abstract function run();
 
-    /**
-     * Task Constructor
-     *
-     * @param Config $config
-     * @param boolean $inRollback
-     * @param string $stage
-     * @param array $parameters
-     */
-    public final function __construct(Config $config, $inRollback = false, $stage = null, $parameters = array())
-    {
-        $this->config     = $config;
-        $this->inRollback = $inRollback;
-        $this->stage      = $stage;
-        $this->parameters = $parameters;
-    }
+	/**
+	 * Task Constructor
+	 *
+	 * @param Config $config
+	 * @param boolean $inRollback
+	 * @param string $stage
+	 * @param array $parameters
+	 */
+	public final function __construct(Config $config, $inRollback = false, $stage = null, $parameters = array())
+	{
+		$this->config     = $config;
+		$this->inRollback = $inRollback;
+		$this->stage      = $stage;
+		$this->parameters = $parameters;
+	}
 
-    /**
-     * Indicates if the Task is running in a Rollback operation
-     * @return boolean
-     */
-    public function inRollback()
-    {
-        return $this->inRollback;
-    }
+	/**
+	 * Indicates if the Task is running in a Rollback operation
+	 * @return boolean
+	 */
+	public function inRollback()
+	{
+		return $this->inRollback;
+	}
 
-    /**
-     * Gets the Stage of the Deployment:
-     *     - pre-deploy
-     *     - deploy
-     *     - post-deploy
-     *     - post-release
-     * @return string
-     */
-    public function getStage()
-    {
-        return $this->stage;
-    }
+	/**
+	 * Gets the Stage of the Deployment:
+	 *     - pre-deploy
+	 *     - deploy
+	 *     - post-deploy
+	 *     - post-release
+	 * @return string
+	 */
+	public function getStage()
+	{
+		return $this->stage;
+	}
 
-    /**
-     * Gets the Configuration
-     * @return Config;
-     */
-    public function getConfig()
-    {
-        return $this->config;
-    }
+	/**
+	 * Gets the Configuration
+	 * @return Config;
+	 */
+	public function getConfig()
+	{
+		return $this->config;
+	}
 
-    /**
-     * Initializes the Task, optional to implement
-     */
-    public function init()
-    {
-    }
+	/**
+	 * Initializes the Task, optional to implement
+	 */
+	public function init()
+	{
+	}
 
-    /**
-     * Returns a Parameter, or a default if not found
-     *
-     * @param string $name
-     * @param mixed $default
-     * @return mixed
-     */
-    public function getParameter($name, $default = null)
-    {
-        return $this->getConfig()->getParameter($name, $default, $this->getParameters());
-    }
+	/**
+	 * Returns a Parameter, or a default if not found
+	 *
+	 * @param string $name
+	 * @param mixed $default
+	 * @return mixed
+	 */
+	public function getParameter($name, $default = null)
+	{
+		return $this->getConfig()->getParameter($name, $default, $this->getParameters());
+	}
 
-    /**
-     * @return array
-     */
-    protected function getParameters()
-    {
-        return $this->parameters;
-    }
+	/**
+	 * @return array
+	 */
+	protected function getParameters()
+	{
+		return $this->parameters;
+	}
 
-    /**
-     * Runs a Shell Command Localy
-     * @param string $command
-     * @param string $output
-     * @return boolean
-     */
-    protected final function runCommandLocal($command, &$output = null)
-    {
-        return Console::executeCommand($command, $output);
-    }
+	/**
+	 * Runs a Shell Command Localy
+	 * @param string $command
+	 * @param string $output
+	 * @return boolean
+	 */
+	protected final function runCommandLocal($command, &$output = null)
+	{
+		return Console::executeCommand($command, $output);
+	}
 
-    /**
-     * Runs a Shell Command on the Remote Host
-     * @param string $command
-     * @param string $output
-     * @param boolean $cdToDirectoryFirst
-     * @return boolean
-     */
-    protected final function runCommandRemote($command, &$output = null, $cdToDirectoryFirst = true)
-    {
-        if ($this->getConfig()->release('enabled', false) == true) {
-            if ($this instanceOf IsReleaseAware) {
-                $releasesDirectory = '';
+	/**
+	 * Runs a Shell Command on the Remote Host
+	 * @param string $command
+	 * @param string $output
+	 * @param boolean $cdToDirectoryFirst
+	 * @return boolean
+	 */
+	protected final function runCommandRemote($command, &$output = null, $cdToDirectoryFirst = true)
+	{
+		if ($this->getConfig()->release('enabled', false) == true) {
+			if ($this instanceOf IsReleaseAware) {
+				$releasesDirectory = '';
 
-            } else {
-                $releasesDirectory = '/'
-                                   . $this->getConfig()->release('directory', 'releases')
-                                   . '/'
-                                   . $this->getConfig()->getReleaseId();
-            }
+			} else {
+				$releasesDirectory = '/'
+					. $this->getConfig()->release('directory', 'releases')
+					. '/'
+					. $this->getConfig()->getReleaseId();
+			}
 
-        } else {
-            $releasesDirectory = '';
-        }
+		} else {
+			$releasesDirectory = '';
+		}
 
-        // if general.yml includes "ssy_needs_tty: true", then add "-t" to the ssh command
-        $needs_tty = ($this->getConfig()->general('ssh_needs_tty',false) ? '-t' : '');
+		// if general.yml includes "ssy_needs_tty: true", then add "-t" to the ssh command
+		$needs_tty = ($this->getConfig()->general('ssh_needs_tty',false) ? '-t' : '');
 
-        $localCommand = 'ssh ' . $this->getConfig()->getHostIdentityFileOption() . $needs_tty . ' -p ' . $this->getConfig()->getHostPort() . ' '
-                      . '-q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no '
-                      . $this->getConfig()->deployment('user') . '@' . $this->getConfig()->getHostName();
+		$localCommand = 'ssh ' . $this->getConfig()->getHostIdentityFileOption() . $needs_tty . ' -p ' . $this->getConfig()->getHostPort() . ' '
+			. '-q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no '
+			. $this->getConfig()->deployment('user') . '@' . $this->getConfig()->getHostName();
 
-        $remoteCommand = str_replace('"', '\"', $command);
-        if($cdToDirectoryFirst){
-            $remoteCommand = 'cd ' . rtrim($this->getConfig()->deployment('to'), '/') . $releasesDirectory . ' && ' . $remoteCommand;
-        }
-        $localCommand .= ' ' . '"sh -c \"' .  $remoteCommand . '\""';
+		$remoteCommand = str_replace('"', '\"', $command);
+		if($cdToDirectoryFirst){
+			$remoteCommand = 'cd ' . rtrim($this->getConfig()->deployment('to'), '/') . $releasesDirectory . ' && ' . $remoteCommand;
+		}
+		$localCommand .= ' ' . '"sh -c \"' .  $remoteCommand . '\""';
 
-        Console::log('Run remote command ' . $remoteCommand);
+		Console::log('Run remote command ' . $remoteCommand);
 
-        return $this->runCommandLocal($localCommand, $output);
-    }
+		return $this->runCommandLocal($localCommand, $output);
+	}
 
-    /**
-     * Runs a Shell Command Localy or in the Remote Host based on the Task Stage.
-     * If the stage is "deploy" then it will be executed in the remote host.
-     * @param string $command
-     * @param string $output
-     * @return boolean
-     */
-    protected final function runCommand($command, &$output = null)
-    {
-        if ($this->getStage() == self::STAGE_DEPLOY) {
-        	return $this->runCommandRemote($command, $output);
-        } else {
-        	return $this->runCommandLocal($command, $output);
-        }
-    }
+	/**
+	 * Runs a Shell Command Localy or in the Remote Host based on the Task Stage.
+	 * If the stage is "deploy" then it will be executed in the remote host.
+	 * @param string $command
+	 * @param string $output
+	 * @return boolean
+	 */
+	protected final function runCommand($command, &$output = null)
+	{
+		if ($this->getStage() == self::STAGE_DEPLOY) {
+			return $this->runCommandRemote($command, $output);
+		} else {
+			return $this->runCommandLocal($command, $output);
+		}
+	}
 
-    /**
-     * adds a cd to the needed release if we work with releases.
-     *
-     * @param string $command
-     * @return string
-     */
-    protected function getReleasesAwareCommand($command)
-    {
-        if ($this->getConfig()->release('enabled', false) == true) {
-            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
+	/**
+	 * adds a cd to the needed release if we work with releases.
+	 *
+	 * @param string $command
+	 * @return string
+	 */
+	protected function getReleasesAwareCommand($command)
+	{
+		if ($this->getConfig()->release('enabled', false) == true) {
+			$releasesDirectory = $this->getConfig()->release('directory', 'releases');
 
-            $deployToDirectory = $releasesDirectory . '/' . $this->getConfig()->getReleaseId();
-            return 'cd ' . $deployToDirectory . ' && ' . $command;
-        }
+			$deployToDirectory = $releasesDirectory . '/' . $this->getConfig()->getReleaseId();
+			return 'cd ' . $deployToDirectory . ' && ' . $command;
+		}
 
-        return $command;
-    }
+		return $command;
+	}
+
+	/**
+	 * @param $releasesDirectory
+	 * @param $releaseId
+	 * @return bool
+	 */
+	protected function tarRelease($releaseId)
+	{
+		$result = true;
+		// for given release, check if tarred
+		$output = '';
+		$releasesDirectory = $this->getConfig()->release('directory', 'releases');
+
+		$currentReleaseDirectory = $releasesDirectory . '/' . $releaseId;
+		$currentReleaseDirectoryTemp = $currentReleaseDirectory . '_tmp/';
+		$currentRelease = $currentReleaseDirectory . '/' . $releaseId . '.tar.gz';
+
+		$command = 'test -e ' . $currentRelease . ' && echo "true" || echo ""';
+		$this->runCommandRemote($command, $output);
+
+		// if not, do so
+		if (!$output) {
+			$commands = array();
+			$commands[] = 'mv ' . $currentReleaseDirectory . ' ' . $currentReleaseDirectoryTemp;
+			$commands[] = 'mkdir ' . $currentReleaseDirectory;
+			$commands[] = 'tar cfz ' . $currentRelease . ' ' . $currentReleaseDirectoryTemp;
+			$commands[] = 'rm -rf ' . $currentReleaseDirectoryTemp;
+			$command = implode(' && ', $commands);
+			$result = $this->runCommandRemote($command, $output);
+			return $result;
+		}
+		return $result;
+	}
+
+	protected function untarRelease($releaseId)
+	{
+		$result = true;
+		// for given release, check if tarred
+		$output = '';
+		$releasesDirectory = $this->getConfig()->release('directory', 'releases');
+
+		$currentReleaseDirectory = $releasesDirectory . '/' . $releaseId;
+		$currentReleaseDirectoryTemp = $currentReleaseDirectory . '_tmp/';
+		$currentRelease = $currentReleaseDirectory . '/' . $releaseId . '.tar.gz';
+
+		$command = 'test -e ' . $currentRelease . ' && echo "true" || echo ""';
+		$this->runCommandRemote($command, $output);
+
+		// if tarred, untar now
+		if ($output) {
+			$commands = array();
+			$commands[] = 'tar xfz ' . $currentRelease;
+			$commands[] = 'rm -rf ' . $currentReleaseDirectory;
+			$commands[] = 'mv ' .$currentReleaseDirectoryTemp . ' ' . $currentReleaseDirectory;
+			$command = implode(' && ', $commands);
+			$result = $this->runCommandRemote($command, $output);
+			return $result;
+		}
+		return $result;
+	}
 }
diff --git a/Mage/Task/BuiltIn/Deployment/ReleaseTask.php b/Mage/Task/BuiltIn/Deployment/ReleaseTask.php
index 7bf1b38..5abcb52 100644
--- a/Mage/Task/BuiltIn/Deployment/ReleaseTask.php
+++ b/Mage/Task/BuiltIn/Deployment/ReleaseTask.php
@@ -25,73 +25,82 @@ class ReleaseTask extends AbstractTask implements IsReleaseAware, SkipOnOverride
 	 * (non-PHPdoc)
 	 * @see \Mage\Task\AbstractTask::getName()
 	 */
-    public function getName()
-    {
-        return 'Releasing [built-in]';
-    }
+	public function getName()
+	{
+		return 'Releasing [built-in]';
+	}
 
-    /**
-     * Releases a Deployment: points the current symbolic link to the release directory
-     * @see \Mage\Task\AbstractTask::run()
-     */
-    public function run()
-    {
-        if ($this->getConfig()->release('enabled', false) == true) {
-            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
-            $symlink = $this->getConfig()->release('symlink', 'current');
+	/**
+	 * Releases a Deployment: points the current symbolic link to the release directory
+	 * @see \Mage\Task\AbstractTask::run()
+	 */
+	public function run()
+	{
+		if ($this->getConfig()->release('enabled', false) == true) {
+			$releasesDirectory = $this->getConfig()->release('directory', 'releases');
+			$symlink = $this->getConfig()->release('symlink', 'current');
 
-            if (substr($symlink, 0, 1) == '/') {
-                $releasesDirectory = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $releasesDirectory;
-            }
+			if (substr($symlink, 0, 1) == '/') {
+				$releasesDirectory = rtrim($this->getConfig()->deployment('to'), '/') . '/' . $releasesDirectory;
+			}
 
-            $currentCopy = $releasesDirectory . '/' . $this->getConfig()->getReleaseId();
+			$releaseId = $this->getConfig()->getReleaseId();
 
-            //Check if target user:group is specified
-            $userGroup = $this->getConfig()->deployment('owner');
-            // Fetch the user and group from base directory; defaults usergroup to 33:33
-            if(empty($userGroup)){
-                $user = '33';
-                $group = '33';
-                $directoryInfos = '';
-                // Get raw directory info and parse it in php.
-                // "stat" command don't behave the same on different systems, ls output format also varies
-                // and awk parameters need special care depending on the executing shell
-                $resultFetch = $this->runCommandRemote("ls -ld .", $directoryInfos);
-                if(!empty($directoryInfos)){
-                    //uniformize format as it depends on the system deployed on
-                    $directoryInfos = trim(str_replace(array("  ", "\t"), ' ', $directoryInfos));
-                    $infoArray = explode(' ', $directoryInfos);
-                    if(!empty($infoArray[2])) {
-                        $user = $infoArray[2];
-                    }
-                    if(!empty($infoArray[3])) {
-                        $group = $infoArray[3];
-                    }
-                    $userGroup = $user . ':' . $group;
-                }
-            }
+			if ($this->getConfig()->release('compressreleases', false) == true) {
+				// Tar.gz releases
+				$result = $this->tarReleases() && $result;
+				// Untar new release
+				$result = $this->untarRelease($releaseId) && $result;
+			}
 
-            // Remove symlink if exists; create new symlink and change owners
-            $command = 'rm -f ' . $symlink
-                     . ' ; '
-                     . 'ln -sf ' . $currentCopy . ' ' . $symlink;
+			$currentCopy = $releasesDirectory . '/' . $releaseId;
 
-            if ($resultFetch && $userGroup != '') {
-            	$command .= ' && '
-                          . 'chown -h ' . $userGroup . ' ' . $symlink
-                          . ' && '
-                          . 'chown -R ' . $userGroup . ' ' . $currentCopy
-                          . ' && '
-                          . 'chown ' . $userGroup . ' ' . $releasesDirectory;
-            }
+			//Check if target user:group is specified
+			$userGroup = $this->getConfig()->deployment('owner');
+			// Fetch the user and group from base directory; defaults usergroup to 33:33
+			if(empty($userGroup)){
+				$user = '33';
+				$group = '33';
+				$directoryInfos = '';
+				// Get raw directory info and parse it in php.
+				// "stat" command don't behave the same on different systems, ls output format also varies
+				// and awk parameters need special care depending on the executing shell
+				$resultFetch = $this->runCommandRemote("ls -ld .", $directoryInfos);
+				if(!empty($directoryInfos)){
+					//uniformize format as it depends on the system deployed on
+					$directoryInfos = trim(str_replace(array("  ", "\t"), ' ', $directoryInfos));
+					$infoArray = explode(' ', $directoryInfos);
+					if(!empty($infoArray[2])) {
+						$user = $infoArray[2];
+					}
+					if(!empty($infoArray[3])) {
+						$group = $infoArray[3];
+					}
+					$userGroup = $user . ':' . $group;
+				}
+			}
 
-            $result = $this->runCommandRemote($command);
+			// Remove symlink if exists; create new symlink and change owners
+			$command = 'rm -f ' . $symlink
+				. ' ; '
+				. 'ln -sf ' . $currentCopy . ' ' . $symlink;
 
-            return $result;
+			if ($resultFetch && $userGroup != '') {
+				$command .= ' && '
+					. 'chown -h ' . $userGroup . ' ' . $symlink
+					. ' && '
+					. 'chown -R ' . $userGroup . ' ' . $currentCopy
+					. ' && '
+					. 'chown ' . $userGroup . ' ' . $releasesDirectory;
+			}
 
-        } else {
-            return false;
-        }
-    }
+			$result = $this->runCommandRemote($command);
+
+			return $result;
+
+		} else {
+			return false;
+		}
+	}
 
 }
diff --git a/Mage/Task/BuiltIn/Releases/RollbackTask.php b/Mage/Task/BuiltIn/Releases/RollbackTask.php
index 9115883..cfc0a54 100644
--- a/Mage/Task/BuiltIn/Releases/RollbackTask.php
+++ b/Mage/Task/BuiltIn/Releases/RollbackTask.php
@@ -27,168 +27,175 @@ class RollbackTask extends AbstractTask implements IsReleaseAware
 	 * The Relase ID to Rollback To
 	 * @var integer
 	 */
-    protected $release = null;
+	protected $release = null;
 
-    /**
-     * (non-PHPdoc)
-     * @see \Mage\Task\AbstractTask::getName()
-     */
-    public function getName()
-    {
-        return 'Rollback release [built-in]';
-    }
+	/**
+	 * (non-PHPdoc)
+	 * @see \Mage\Task\AbstractTask::getName()
+	 */
+	public function getName()
+	{
+		return 'Rollback release [built-in]';
+	}
 
-    /**
-     * Sets the Release ID to Rollback To
-     * @param integer $releaseId
-     * @return \Mage\Task\BuiltIn\Releases\RollbackTask
-     */
-    public function setRelease($releaseId)
-    {
-        $this->release = $releaseId;
-        return $this;
-    }
+	/**
+	 * Sets the Release ID to Rollback To
+	 * @param integer $releaseId
+	 * @return \Mage\Task\BuiltIn\Releases\RollbackTask
+	 */
+	public function setRelease($releaseId)
+	{
+		$this->release = $releaseId;
+		return $this;
+	}
 
-    /**
-     * Gets the Release ID to Rollback To
-     * @return integer
-     */
-    public function getRelease()
-    {
-        return $this->release;
-    }
+	/**
+	 * Gets the Release ID to Rollback To
+	 * @return integer
+	 */
+	public function getRelease()
+	{
+		return $this->release;
+	}
 
-    /**
-     * Performs a Rollback Operation
-     * @see \Mage\Task\AbstractTask::run()
-     */
-    public function run()
-    {
-        if ($this->getConfig()->release('enabled', false) == true) {
-            $releasesDirectory = $this->getConfig()->release('directory', 'releases');
-            $symlink = $this->getConfig()->release('symlink', 'current');
+	/**
+	 * Performs a Rollback Operation
+	 * @see \Mage\Task\AbstractTask::run()
+	 */
+	public function run()
+	{
+		if ($this->getConfig()->release('enabled', false) == true) {
+			$releasesDirectory = $this->getConfig()->release('directory', 'releases');
+			$symlink = $this->getConfig()->release('symlink', 'current');
 
-            $output = '';
-            $result = $this->runCommandRemote('ls -1 ' . $releasesDirectory, $output);
-            $releases = ($output == '') ? array() : explode(PHP_EOL, $output);
+			$output = '';
+			$result = $this->runCommandRemote('ls -1 ' . $releasesDirectory, $output);
+			$releases = ($output == '') ? array() : explode(PHP_EOL, $output);
 
-            if (count($releases) == 0) {
-                Console::output('Release are not available for ' . $this->getConfig()->getHost() . ' ... FAIL');
+			if (count($releases) == 0) {
+				Console::output('Release are not available for ' . $this->getConfig()->getHost() . ' ... FAIL');
 
-            } else {
-                rsort($releases);
+			} else {
+				rsort($releases);
 
-                $releaseIsAvailable = false;
-                if ($this->getRelease() == '') {
-                    $releaseId = $releases[0];
-                    $releaseIsAvailable = true;
+				$releaseIsAvailable = false;
+				if ($this->getRelease() == '') {
+					$releaseId = $releases[0];
+					$releaseIsAvailable = true;
 
-                } else if ($this->getRelease() <= 0) {
-                    $index = $this->getRelease() * -1;
-                    if (isset($releases[$index])) {
-                        $releaseId = $releases[$index];
-                        $releaseIsAvailable = true;
-                    }
-                } else {
-                    if (in_array($this->getRelease(), $releases)) {
-                        $releaseId = $this->getRelease();
-                        $releaseIsAvailable = true;
-                    }
-                }
+				} else if ($this->getRelease() <= 0) {
+					$index = $this->getRelease() * -1;
+					if (isset($releases[$index])) {
+						$releaseId = $releases[$index];
+						$releaseIsAvailable = true;
+					}
+				} else {
+					if (in_array($this->getRelease(), $releases)) {
+						$releaseId = $this->getRelease();
+						$releaseIsAvailable = true;
+					}
+				}
 
-                if (!$releaseIsAvailable) {
-                    Console::output('Release ' . $this->getRelease() . ' is invalid or unavailable for ' . $this->getConfig()->getHost() . ' ... FAIL');
+				if (!$releaseIsAvailable) {
+					Console::output('Release ' . $this->getRelease() . ' is invalid or unavailable for ' . $this->getConfig()->getHost() . ' ... FAIL');
 
-                } else {
-                    Console::output('Rollback release on ' . $this->getConfig()->getHost() . '');
-                    $rollbackTo = $releasesDirectory . '/' . $releaseId;
+				} else {
+					Console::output('Rollback release on ' . $this->getConfig()->getHost() . '');
+					$rollbackTo = $releasesDirectory . '/' . $releaseId;
 
-                    // Tasks
-                    $tasks = 1;
-                    $completedTasks = 0;
-                    $tasksToRun = $this->getConfig()->getTasks();
-                    $this->getConfig()->setReleaseId($releaseId);
+					// Tasks
+					$tasks = 1;
+					$completedTasks = 0;
+					$tasksToRun = $this->getConfig()->getTasks();
+					$this->getConfig()->setReleaseId($releaseId);
 
-                    // Run Deploy Tasks
-                    foreach ($tasksToRun as $taskData) {
-                        $task = Factory::get($taskData, $this->getConfig(), true, self::STAGE_DEPLOY);
-                        $task->init();
-                        Console::output('Running ' . $task->getName() . ' ... ', 2, false);
+					// Run Deploy Tasks
+					foreach ($tasksToRun as $taskData) {
+						$task = Factory::get($taskData, $this->getConfig(), true, self::STAGE_DEPLOY);
+						$task->init();
+						Console::output('Running ' . $task->getName() . ' ... ', 2, false);
 
-                        if ($task instanceOf RollbackAware) {
-                            $tasks++;
-                            $result = $task->run();
-
-                            if ($result == true) {
-                                Console::output('OK', 0);
-                                $completedTasks++;
-                            } else {
-                                Console::output('FAIL', 0);
-                            }
-                        } else {
-                            Console::output('SKIPPED', 0);
-                        }
-                    }
+						if ($task instanceOf RollbackAware) {
+							$tasks++;
+							$result = $task->run();
 
-                    // Changing Release
-                    Console::output('Running Rollback Release [id=' . $releaseId . '] ... ', 2, false);
+							if ($result == true) {
+								Console::output('OK', 0);
+								$completedTasks++;
+							} else {
+								Console::output('FAIL', 0);
+							}
+						} else {
+							Console::output('SKIPPED', 0);
+						}
+					}
 
-                    $userGroup = '';
-                    $resultFetch = $this->runCommandRemote('ls -ld ' . $rollbackTo . ' | awk \'{print \$3":"\$4}\'', $userGroup);
-                    $command = 'rm -f ' . $symlink
-                             . ' && '
-                             . 'ln -sf ' . $rollbackTo . ' ' . $symlink;
+					if ($this->getConfig()->release('compressreleases', false) == true) {
+						// Tar the current
+						$result = $this->tarReleases() && $result;
+						// Untar the rollbackto
+						$result = $this->untarRelease($releaseId) && $result;
+					}
 
-                    if ($resultFetch) {
-                	    $command .= ' && chown -h ' . $userGroup . ' ' . $symlink;
-                    }
+					// Changing Release
+					Console::output('Running Rollback Release [id=' . $releaseId . '] ... ', 2, false);
 
-                    $result = $this->runCommandRemote($command);
+					$userGroup = '';
+					$resultFetch = $this->runCommandRemote('ls -ld ' . $rollbackTo . ' | awk \'{print \$3":"\$4}\'', $userGroup);
+					$command = 'rm -f ' . $symlink
+						. ' && '
+						. 'ln -sf ' . $rollbackTo . ' ' . $symlink;
 
-                    if ($result) {
-                        Console::output('OK', 0);
-                        $completedTasks++;
-                    } else {
-                        Console::output('FAIL', 0);
-                    }
+					if ($resultFetch) {
+						$command .= ' && chown -h ' . $userGroup . ' ' . $symlink;
+					}
 
-                    // Run Post Release Tasks
-                    $tasksToRun = $this->getConfig()->getTasks(AbstractTask::STAGE_POST_DEPLOY);
-                    foreach ($tasksToRun as $taskData) {
-                    	$task = Factory::get($taskData, $this->getConfig(), true, self::STAGE_POST_DEPLOY);
-                    	$task->init();
-                    	Console::output('Running ' . $task->getName() . ' ... ', 2, false);
+					$result = $this->runCommandRemote($command);
 
-                    	if ($task instanceOf RollbackAware) {
-                    		$tasks++;
-                    		$result = $task->run();
+					if ($result) {
+						Console::output('OK', 0);
+						$completedTasks++;
+					} else {
+						Console::output('FAIL', 0);
+					}
 
-                    		if ($result == true) {
-                    			Console::output('OK', 0);
-                    			$completedTasks++;
-                    		} else {
-                    			Console::output('FAIL', 0);
-                    		}
-                    	} else {
-                    		Console::output('SKIPPED', 0);
-                    	}
-                	}
+					// Run Post Release Tasks
+					$tasksToRun = $this->getConfig()->getTasks(AbstractTask::STAGE_POST_DEPLOY);
+					foreach ($tasksToRun as $taskData) {
+						$task = Factory::get($taskData, $this->getConfig(), true, self::STAGE_POST_DEPLOY);
+						$task->init();
+						Console::output('Running ' . $task->getName() . ' ... ', 2, false);
 
-                    if ($completedTasks == $tasks) {
-                        $tasksColor = 'green';
-                    } else {
-                        $tasksColor = 'red';
-                    }
-
-                    Console::output('Release rollback on ' . $this->getConfig()->getHost() . ' compted: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . '' . $tasksColor . '> tasks done.', 1, 3);
-                }
-            }
+						if ($task instanceOf RollbackAware) {
+							$tasks++;
+							$result = $task->run();
 
-            return $result;
+							if ($result == true) {
+								Console::output('OK', 0);
+								$completedTasks++;
+							} else {
+								Console::output('FAIL', 0);
+							}
+						} else {
+							Console::output('SKIPPED', 0);
+						}
+					}
 
-        } else {
-            return false;
-        }
-    }
+					if ($completedTasks == $tasks) {
+						$tasksColor = 'green';
+					} else {
+						$tasksColor = 'red';
+					}
+
+					Console::output('Release rollback on ' . $this->getConfig()->getHost() . ' compted: <' . $tasksColor . '>' . $completedTasks . '/' . $tasks . '' . $tasksColor . '> tasks done.', 1, 3);
+				}
+			}
+
+			return $result;
+
+		} else {
+			return false;
+		}
+	}
 
 }
\ No newline at end of file