diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/command/LaunchUICommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/command/LaunchUICommand.as
index f80cec2..f72559d 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/command/LaunchUICommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/infrastructure/command/LaunchUICommand.as
@@ -7,7 +7,7 @@
     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateCygwinPathMessage;
     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateJavaPathMessage;
     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateMavenPathMessage;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
     import org.apache.flex.utilities.developerToolSuite.infrastructure.message.LaunchUIMessage;
     import org.apache.flex.utilities.developerToolSuite.presentation.graphic.settings.SettingsWindow;
     import org.spicefactory.parsley.core.context.Context;
@@ -43,28 +43,53 @@
         [CommandComplete]
         public function validateJavaPathCommandError(trigger:ValidateJavaPathMessage):void {
             _javaCompleted = true;
-            if(_antCompleted && _mavenCompleted && _cygwinCompleted)
-                launchUI();
+            checkValidationsCompleted();
+        }
+
+        [CommandError]
+        public function validateJavaPathCommand(trigger:ValidateJavaPathMessage):void {
+            _javaCompleted = true;
+            checkValidationsCompleted();
         }
 
         [CommandComplete]
+        public function validateAntPathCommand(trigger:ValidateAntPathMessage):void {
+            _antCompleted = true;
+            checkValidationsCompleted();
+        }
+
+        [CommandError]
         public function validateAntPathCommandError(trigger:ValidateAntPathMessage):void {
             _antCompleted = true;
-            if (_javaCompleted && _mavenCompleted && _cygwinCompleted)
-                launchUI();
+            checkValidationsCompleted();
         }
 
         [CommandComplete]
-        public function validateMavenPathCommandError(trigger:ValidateMavenPathMessage):void {
+        public function validateMavenPathCommand(trigger:ValidateMavenPathMessage):void {
             _mavenCompleted = true;
-            if (_antCompleted && _javaCompleted && _cygwinCompleted)
-                launchUI();
+            checkValidationsCompleted();
+        }
+
+        [CommandError]
+        public function validateMavenPathCommandError(fault:Error, trigger:ValidateMavenPathMessage):void {
+            _mavenCompleted = true;
+            checkValidationsCompleted();
         }
 
         [CommandComplete]
-        public function validateCygwinPathCommandError(trigger:ValidateCygwinPathMessage):void {
+        public function validateCygwinPathCommand(trigger:ValidateCygwinPathMessage):void {
             _cygwinCompleted = true;
-            if (_antCompleted && _mavenCompleted && _javaCompleted)
+            checkValidationsCompleted();
+        }
+
+        [CommandError]
+        public function validateCygwinPathCommandError(fault:Error, trigger:ValidateCygwinPathMessage):void {
+            _cygwinCompleted = true;
+            checkValidationsCompleted();
+        }
+
+        private function checkValidationsCompleted():void {
+            if (_antCompleted && _mavenCompleted && _javaCompleted && _cygwinCompleted)
                 launchUI();
         }
 
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/presentation/graphic/settings/formItem/ToolHomeFormItem.mxml b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/presentation/graphic/settings/formItem/ToolHomeFormItem.mxml
index 70a0025..3d10df1 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/presentation/graphic/settings/formItem/ToolHomeFormItem.mxml
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.component-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/presentation/graphic/settings/formItem/ToolHomeFormItem.mxml
@@ -53,10 +53,12 @@
         </s:VGroup>
     </s:helpContent>
     <fx:Script><![CDATA[
+        import flash.filesystem.File;
+
         import mx.events.FlexEvent;
 
         import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.SaveSettingMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.nativeProcess.NativeShellHelper;
+        import org.apache.flex.utilities.developerToolSuite.executor.application.nativeProcess.NativeShellHelper;
 
         import spark.events.TextOperationEvent;
 
@@ -72,7 +74,7 @@
         [Bindable]
         public var helpLabelResourcesString:String;
         [Bindable]
-        public var helpUrlText:String
+        public var helpUrlText:String;
         [Bindable]
         public var helpUrl:String;
         [Bindable]
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/ISettingsModel.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/ISettingsModel.as
index 6f41dc5..fd811b9 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/ISettingsModel.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/ISettingsModel.as
@@ -6,6 +6,8 @@
     [Bindable]
     public interface ISettingsModel {
 
+        function get dbVersion():uint;
+
         function get appBounds():String;
 
         function get appDisplayState():String;
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/SettingModel.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/SettingModel.as
index 1842e9c..0d472d5 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/SettingModel.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/domain/SettingModel.as
@@ -23,16 +23,10 @@
 
     public class SettingModel implements ISettingsModel {
 
-        public function get availableLanguages():ArrayCollection {
-            return new ArrayCollection(LocaleUtil.AVAILABLE_LANGUAGES);
-        }
-
-        public function get currentLanguage():Object {
-            return LocaleUtil.getDefaultLanguage(_locale);
-        }
-
         private var _environmentVariables:Dictionary;
 
+        private var _dbVersion:uint;
+
         private var _locale:String;
 
         private var _JAVA_HOME:String;
@@ -51,6 +45,23 @@
         private var _appBounds:String;
         private var _appDisplayState:String;
 
+        public function get availableLanguages():ArrayCollection {
+            return new ArrayCollection(LocaleUtil.AVAILABLE_LANGUAGES);
+        }
+
+        public function get currentLanguage():Object {
+            return LocaleUtil.getDefaultLanguage(_locale);
+        }
+
+        public function get dbVersion():uint {
+            return _dbVersion;
+        }
+
+        [Bindable]
+        public function set dbVersion(value:uint):void {
+            _dbVersion = value;
+        }
+
         public function get environmentVariables():Dictionary {
             return _environmentVariables;
         }
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractDBCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractDBCommand.as
index d42a7ee..1ecfdf9 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractDBCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractDBCommand.as
@@ -18,13 +18,12 @@
     import flash.data.SQLResult;
     import flash.data.SQLStatement;
     import flash.errors.SQLError;
-    import flash.net.Responder;
 
     import mx.logging.ILogger;
     import mx.utils.ObjectUtil;
 
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.database.ApplicationDB;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.database.ApplicationDB;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
 
     public class AbstractDBCommand {
 
@@ -42,28 +41,27 @@
         protected var stmt:SQLStatement = new SQLStatement();
 
         protected function executeAsync():void {
-            if (!db.DBReady) {
-                db.connect();
-            }
-
-            prepareSql();
+            db.connect(prepareSql);
         }
 
         protected function prepareSql():void {
-            var responder:Responder = new Responder(result, error);
             stmt.text = sql;
-            db.executeSqlStatement(stmt, responder);
+            db.executeSqlStatement(stmt, result, error);
         }
 
-        protected function result(result:SQLResult):void {
+        protected function result(result:SQLResult, terminateCommand:Boolean = true):void {
             var resultMessage:String = (result.data != null) ? ObjectUtil.toString(result.data) : result.rowsAffected + " affected row(s)";
-            log.debug("Successfully executed shell: " + resultMessage);
-            callback(new CommandCallBackResult(result));
+            log.debug("Successfully executed DB Command: {0}", resultMessage);
+            if (terminateCommand) {
+                callback(new CommandCallBackResult(result));
+            }
         }
 
-        protected function error(error:SQLError):void {
-            log.error("Error executing shell: " + ObjectUtil.toString(error));
-            callback(new CommandCallBackError(error.message, error.detailID));
+        protected function error(error:SQLError, terminateCommand:Boolean = true):void {
+            log.error("Error executing DB Command: {0}", ObjectUtil.toString(error));
+            if (terminateCommand) {
+                callback(new CommandCallBackError(error.message, error.detailID));
+            }
         }
     }
 }
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractShellCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractShellCommand.as
index d4f0b25..9f84706 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractShellCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/AbstractShellCommand.as
@@ -21,8 +21,8 @@
 
     import mx.logging.ILogger;
 
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.nativeProcess.NativeShellHelper;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.nativeProcess.NativeShellHelper;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
 
     public class AbstractShellCommand {
 
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ChangeLanguageCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ChangeLanguageCommand.as
index 7c9bd93..fa653e0 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ChangeLanguageCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ChangeLanguageCommand.as
@@ -38,7 +38,7 @@
         override protected function prepareSql():void {
             ResourceManager.getInstance().localeChain = LocaleUtil.getOrderedLocalChain(_msg.locale);
             settings.locale = _msg.locale;
-            sql = "UPDATE settings SET value='" + _msg.locale + "' WHERE name='locale';";
+            sql = "UPDATE setting SET value='" + _msg.locale + "' WHERE name='locale';";
 
             super.prepareSql();
         }
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/GetSettingsFromDBCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/GetSettingsFromDBCommand.as
index 24d864d..22214a6 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/GetSettingsFromDBCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/GetSettingsFromDBCommand.as
@@ -35,11 +35,11 @@
         }
 
         override protected function prepareSql():void {
-            sql = "SELECT name, value FROM settings;";
+            sql = "SELECT name, value FROM setting;";
             super.prepareSql();
         }
 
-        override protected function result(result:SQLResult):void {
+        override protected function result(result:SQLResult, terminateCommand:Boolean = true):void {
             var row:Object;
 
             if (result.data) {
@@ -56,10 +56,11 @@
             ResourceManager.getInstance().localeChain = LocaleUtil.getOrderedLocalChain(settings.locale);
             dispatch(new ApplicationReadyMessage());
 
-            var resultMessage:String = (result.data != null) ? ObjectUtil.toString(result.data) : result.rowsAffected + " affected row(s)";
-            log.debug("Successfully executed shell: " + resultMessage);
+            log.debug("Got settings: {0}", ObjectUtil.toString(result.data));
 
-            callback(new CommandCallBackResult(settings));
+            if (terminateCommand) {
+                callback(new CommandCallBackResult(settings));
+            }
         }
     }
 }
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/InitDBCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/InitDBCommand.as
index a7ce5c0..da0346f 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/InitDBCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/InitDBCommand.as
@@ -16,6 +16,7 @@
  */
 package org.apache.flex.utilities.developerToolSuite.executor.infrastructure.command {
     import flash.data.SQLConnection;
+    import flash.data.SQLResult;
     import flash.data.SQLSchemaResult;
     import flash.data.SQLStatement;
     import flash.data.SQLTableSchema;
@@ -26,9 +27,9 @@
     import mx.utils.ObjectUtil;
 
     import org.apache.flex.utilities.developerToolSuite.LocaleUtil;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.database.ApplicationDB;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.database.ApplicationDB;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.InitApplicationMessage;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
 
     public class InitDBCommand {
 
@@ -38,8 +39,15 @@
 
         private static var _conn:SQLConnection;
 
-        private static const SETTINGS_TABLE_SQL:String = "create table if not exists settings(id integer primary key autoincrement, name text, value text);";
-        private static var settingsDataSql:String;
+        private static const DB_VERSION_SQL:String = "SELECT value FROM setting WHERE name='dbVersion'";
+
+        private static const SETTING_TABLE_SQL:String = "create table if not exists setting(id integer primary key autoincrement, name text, value text);";
+        private static var settingDataSql:String;
+
+        private static const PROJECT_TABLE_SQL:String = "create table if not exists project(id integer primary key autoincrement, name text, location text, vcsType text, flexSdkVersion text, airSdkVersion text, fpVersion text, creationDate numeric);";
+        private static var projectDataSql:String;
+
+        private var _dbVersion:uint;
 
         public function execute(msg:InitApplicationMessage):void {
             _conn = new SQLConnection();
@@ -48,17 +56,44 @@
             var folder:File = File.applicationStorageDirectory;
             var dbFile:File = folder.resolvePath(ApplicationDB.DATABASE_NAME);
 
-            LOG.debug("Connecting DB: " + ApplicationDB.DATABASE_NAME);
+            LOG.debug("Connecting DB: {0}", ApplicationDB.DATABASE_NAME);
             _conn.open(dbFile);
 
             if (!settingsTableCreated()) {
                 buildDatabaseTables();
+            } else {
+                _dbVersion = getDBVersion();
+                if (_dbVersion < ApplicationDB.DB_VERSION)
+                updateSchema();
             }
 
             _conn.close();
-            LOG.debug("Closing DB: " + ApplicationDB.DATABASE_NAME);
+            LOG.debug("Closing DB: {0}", ApplicationDB.DATABASE_NAME);
 
-            callback(true);
+            callback(CommandCallBack.DEFAULT_RESULT);
+        }
+
+        private function updateSchema():void {
+            LOG.debug("Updating DB Schema from version {0} to {1}", _dbVersion, ApplicationDB.DB_VERSION);
+        }
+
+        private function getDBVersion():uint {
+
+            LOG.debug("looking for dbVersion");
+
+            var getDbVersionStmt:SQLStatement = new SQLStatement();
+            getDbVersionStmt.sqlConnection = _conn;
+            getDbVersionStmt.text = DB_VERSION_SQL;
+            getDbVersionStmt.execute();
+
+            var dbVersionResult:SQLResult = getDbVersionStmt.getResult();
+            if (dbVersionResult.data && dbVersionResult.data.length) {
+                LOG.debug("DB version is {0}", dbVersionResult.data[0].value);
+                return parseInt(dbVersionResult.data[0].value);
+            }
+
+            // Shouldn't happen.
+            return 0;
         }
 
         private function settingsTableCreated():Boolean {
@@ -73,7 +108,7 @@
             var schema:SQLSchemaResult = _conn.getSchemaResult();
 
             for each(var currentTable:SQLTableSchema in schema.tables) {
-                if (currentTable.name == "settings") {
+                if (currentTable.name == "setting") {
                     LOG.debug("Schema was already created");
                     return true;
                 }
@@ -87,12 +122,14 @@
             try {
                 LOG.debug("Start schema creation");
                 _conn.begin();
+
                 createSettingsTable();
                 insertSettingsTable();
+
                 _conn.commit();
                 LOG.debug("Schema creation ok");
             } catch (err:SQLError) {
-                LOG.error("Error during schema creation: " + ObjectUtil.toString(err) + " : Rolling back !");
+                LOG.error("Error during schema creation: {0}\n:: Rolling back !", ObjectUtil.toString(err));
                 _conn.rollback();
             }
             ;
@@ -101,28 +138,29 @@
                 var stmtCreateSettingsTable:SQLStatement;
                 stmtCreateSettingsTable = new SQLStatement();
                 stmtCreateSettingsTable.sqlConnection = _conn;
-                stmtCreateSettingsTable.text = SETTINGS_TABLE_SQL;
+                stmtCreateSettingsTable.text = SETTING_TABLE_SQL;
                 stmtCreateSettingsTable.execute();
             }
 
             function insertSettingsTable():void {
                 LOG.debug("Inserting data");
-                prepareSettingsData();
+                prepareInsertSettingsData();
                 var stmtInsertSettingsTable:SQLStatement;
                 stmtInsertSettingsTable = new SQLStatement();
                 stmtInsertSettingsTable.sqlConnection = _conn;
-                stmtInsertSettingsTable.text = settingsDataSql;
+                stmtInsertSettingsTable.text = settingDataSql;
                 stmtInsertSettingsTable.execute();
             }
 
-            function prepareSettingsData():void {
-                settingsDataSql = "INSERT INTO 'settings' SELECT '1' AS 'id', 'locale' AS 'name', '" + LocaleUtil.getDefaultLanguage().data + "' AS 'value' ";
-                settingsDataSql += "UNION SELECT '2', 'appDisplayState', '' ";
-                settingsDataSql += "UNION SELECT '3', 'appBounds', '' ";
-                settingsDataSql += "UNION SELECT '4', 'JAVA_HOME', '' ";
-                settingsDataSql += "UNION SELECT '5', 'ANT_HOME', '' ";
-                settingsDataSql += "UNION SELECT '6', 'MAVEN_HOME', '' ";
-                settingsDataSql += "UNION SELECT '7', 'CYGWIN_HOME', '';";
+            function prepareInsertSettingsData():void {
+                settingDataSql = "INSERT INTO 'setting' SELECT '1' AS 'id', 'dbVersion' AS 'name', '1' AS 'value' ";
+                settingDataSql += "UNION SELECT '2', 'locale', '" + LocaleUtil.getDefaultLanguage().data + "' ";
+                settingDataSql += "UNION SELECT '3', 'appDisplayState', '' ";
+                settingDataSql += "UNION SELECT '4', 'appBounds', '' ";
+                settingDataSql += "UNION SELECT '5', 'JAVA_HOME', '' ";
+                settingDataSql += "UNION SELECT '6', 'ANT_HOME', '' ";
+                settingDataSql += "UNION SELECT '7', 'MAVEN_HOME', '' ";
+                settingDataSql += "UNION SELECT '8', 'CYGWIN_HOME', '';";
             }
         }
     }
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingCommand.as
index 33f0474..d3b718d 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingCommand.as
@@ -35,7 +35,7 @@
 
         override protected function prepareSql():void {
             settings[_msg.name] = _msg.value;
-            sql = "UPDATE settings SET value='" + _msg.value + "' WHERE name='" + _msg.name + "';";
+            sql = "UPDATE setting SET value='" + _msg.value + "' WHERE name='" + _msg.name + "';";
 
             super.prepareSql();
         }
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingsCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingsCommand.as
index 8e94af8..7d784fd 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingsCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/SaveSettingsCommand.as
@@ -34,9 +34,9 @@
         override protected function prepareSql():void {
             var classInfo:ClassInfo = ClassInfo.forInstance(_msg.settings);
             sql = "";
-            for (var i:uint; i < classInfo.getProperties().length; i++) {
+            for (var i:uint=0; i < classInfo.getProperties().length; i++) {
                 var property:Property = classInfo.getProperties()[i] as Property;
-                sql += "UPDATE settings SET value='" + _msg.settings[property.name] + "' WHERE name='" + property.name + "';";
+                sql += "UPDATE setting SET value='" + _msg.settings[property.name] + "' WHERE name='" + property.name + "';";
             }
 
             super.prepareSql();
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateAntPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateAntPathCommand.as
index 4e16cb6..edaba60 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateAntPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateAntPathCommand.as
@@ -23,7 +23,7 @@
 
     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;
     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateAntPathMessage;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
 
     public class ValidateAntPathCommand extends AbstractShellCommand {
 
@@ -37,14 +37,14 @@
         private var _done:Boolean;
 
         public function execute(msg:ValidateAntPathMessage):void {
-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));
+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));
             _msg = msg;
             settings.antEnabled = false;
             executeCommand();
         }
 
         override protected function executeCommand():void {
-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(_msg));
+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(_msg));
 
             var file:File;
 
@@ -66,7 +66,6 @@
                 result(CommandCallBack.DEFAULT_ERROR);
                 return;
             }
-            ;
 
             var ant:String = shell.formatPath(file.resolvePath("bin/ant.bat").nativePath);
 
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateCygwinPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateCygwinPathCommand.as
index c740a75..bc22f4f 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateCygwinPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateCygwinPathCommand.as
@@ -22,8 +22,8 @@
 
     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;
     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateCygwinPathMessage;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.nativeProcess.NativeShellHelper;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.nativeProcess.NativeShellHelper;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
 
     public class ValidateCygwinPathCommand {
 
@@ -36,17 +36,15 @@
 
         public var callback:Function;
 
-        private var _done:Boolean;
-
         public function execute(msg:ValidateCygwinPathMessage):void {
-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));
+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));
             _msg = msg;
             settings.cygwinEnabled = false;
             executeCommand();
         }
 
         protected function executeCommand():void {
-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(_msg));
+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(_msg));
 
             var file:File;
 
@@ -71,8 +69,8 @@
                 callback(CommandCallBack.DEFAULT_ERROR);
                 return;
             }
-            ;
-            LOG.debug("Ending Command with result: " + file.nativePath);
+
+            LOG.debug("Ending Command with result: {0}", file.nativePath);
             callback(CommandCallBack.DEFAULT_RESULT);
         }
     }
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateGitPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateGitPathCommand.as
index 92511ab..331b40c 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateGitPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateGitPathCommand.as
@@ -22,7 +22,7 @@
 
     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;
     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateGitPathMessage;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
 
     public class ValidateGitPathCommand extends AbstractShellCommand {
 
@@ -34,7 +34,7 @@
         private var _done:Boolean;
 
         public function execute(msg:ValidateGitPathMessage):void {
-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));
+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));
             settings.gitEnabled = false;
             executeCommand();
         }
@@ -64,8 +64,6 @@
             } else {
                 result(CommandCallBack.DEFAULT_ERROR);
             }
-
-            return;
         }
 
         override protected function outputDataHandler(event:ProgressEvent):void {
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateJavaPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateJavaPathCommand.as
index 0fe8716..139f0cc 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateJavaPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateJavaPathCommand.as
@@ -23,7 +23,7 @@
 
     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;
     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateJavaPathMessage;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
 
     public class ValidateJavaPathCommand extends AbstractShellCommand {
 
@@ -37,14 +37,14 @@
         private var _done:Boolean;
 
         public function execute(msg:ValidateJavaPathMessage):void {
-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));
+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));
             _msg = msg;
             settings.javaEnabled = false;
             executeCommand();
         }
 
         override protected function executeCommand():void {
-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(_msg));
+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(_msg));
 
             var file:File;
 
@@ -66,7 +66,6 @@
                 result(CommandCallBack.DEFAULT_ERROR);
                 return;
             }
-            ;
 
             var java:String = shell.formatPath(file.resolvePath("bin/java.exe").nativePath);
 
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateMavenPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateMavenPathCommand.as
index 9db2af1..3ca12fd 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateMavenPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateMavenPathCommand.as
@@ -23,7 +23,7 @@
 
     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;
     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateMavenPathMessage;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
 
     public class ValidateMavenPathCommand extends AbstractShellCommand {
 
@@ -37,7 +37,7 @@
         private var _done:Boolean;
 
         public function execute(msg:ValidateMavenPathMessage):void {
-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));
+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));
             _msg = msg;
             settings.mavenEnabled = false;
             executeCommand();
@@ -45,7 +45,7 @@
 
         override protected function executeCommand():void {
 
-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(_msg));
+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(_msg));
 
             var file:File;
 
@@ -67,7 +67,6 @@
                 result(CommandCallBack.DEFAULT_ERROR);
                 return;
             }
-            ;
 
             var mvn:String = shell.formatPath(file.resolvePath("bin/mvn.bat").nativePath);
 
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateSvnPathCommand.as b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateSvnPathCommand.as
index b638362..adbc8bd 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateSvnPathCommand.as
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.executor-lib/src/main/flex/org/apache/flex/utilities/developerToolSuite/executor/infrastructure/command/ValidateSvnPathCommand.as
@@ -22,7 +22,7 @@
 
     import org.apache.flex.utilities.developerToolSuite.executor.domain.SettingModel;
     import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateSvnPathMessage;
-    import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
+    import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
 
     public class ValidateSvnPathCommand extends AbstractShellCommand {
 
@@ -34,7 +34,7 @@
         private var _done:Boolean;
 
         public function execute(msg:ValidateSvnPathMessage):void {
-            LOG.debug("Executing Command with message: " + ObjectUtil.toString(msg));
+            LOG.debug("Executing Command with message: {0}", ObjectUtil.toString(msg));
             settings.svnEnabled = false;
             executeCommand();
         }
@@ -64,8 +64,6 @@
             } else {
                 result(CommandCallBack.DEFAULT_ERROR);
             }
-
-            return;
         }
 
         override protected function outputDataHandler(event:ProgressEvent):void {
diff --git a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.host-swf/src/main/flex/org/apache/flex/utilities/developerToolSuite/MainApplication.mxml b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.host-swf/src/main/flex/org/apache/flex/utilities/developerToolSuite/MainApplication.mxml
index 11d8f33..393be72 100644
--- a/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.host-swf/src/main/flex/org/apache/flex/utilities/developerToolSuite/MainApplication.mxml
+++ b/fthomas/developerToolSuite/trunk/org.apache.flex.utilities.developerToolSuite.host-swf/src/main/flex/org/apache/flex/utilities/developerToolSuite/MainApplication.mxml
@@ -17,10 +17,10 @@
 -->
 <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                        xmlns:s="library://ns.adobe.com/flex/spark"
-                       xmlns:mx="library://ns.adobe.com/flex/mx"
                        xmlns:parsley="http://www.spicefactory.org/parsley"
                        title="Apache Flex Developer Tool Suite"
                        width="800" height="550"
+                       displayStateChange="displayStateChangeHandler(event)"
                        closing="closingHandler(event)">
 
     <fx:Declarations>
@@ -49,19 +49,16 @@
         import mx.logging.targets.TraceTarget;
         import mx.managers.PopUpManager;
 
+        import org.apache.flex.utilities.developerToolSuite.application.config.SettingsContext;
+        import org.apache.flex.utilities.developerToolSuite.executor.application.config.ExecutorContext;
+        import org.apache.flex.utilities.developerToolSuite.executor.application.util.LogUtil;
         import org.apache.flex.utilities.developerToolSuite.executor.domain.ISettingsModel;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.config.ExecutorContext;
         import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ApplicationReadyMessage;
         import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.InitApplicationMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.SaveSettingMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateAntPathMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateCygwinPathMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateJavaPathMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.message.ValidateMavenPathMessage;
-        import org.apache.flex.utilities.developerToolSuite.executor.infrastructure.util.LogUtil;
         import org.apache.flex.utilities.developerToolSuite.infrastructure.event.ModalWindowEvent;
+        import org.apache.flex.utilities.developerToolSuite.infrastructure.message.ApplicationExitReadyMessage;
         import org.apache.flex.utilities.developerToolSuite.infrastructure.message.LaunchUIMessage;
-        import org.apache.flex.utilities.developerToolSuite.presentation.config.SettingsContext;
+        import org.apache.flex.utilities.developerToolSuite.infrastructure.message.RequestExitApplicationMessage;
         import org.apache.flex.utilities.developerToolSuite.presentation.graphic.menu.ApplicationMenu;
 
         [Inject]
@@ -75,10 +72,11 @@
         public var dispatch:Function;
 
         private var alert:Alert;
+        private var appBounds:Rectangle;
 
         [Init]
         public function init():void {
-            addLog();
+            addLogTargets();
             LogUtil.getLogger(this).info('Application initialization');
 
             dispatch(new InitApplicationMessage());
@@ -92,18 +90,18 @@
             PopUpManager.removePopUp(alert);
             menu = applicationMenu;
 
-            if (applicationSettings.appDisplayState) {
-                if (applicationSettings.appDisplayState == NativeWindowDisplayState.MAXIMIZED) {
-                    nativeWindow.maximize();
-                } else {
-                    nativeWindow.restore();
-                    if (applicationSettings.appBounds) {
-                        var bounds:Array = applicationSettings.appBounds.split(",");
-                        nativeWindow.bounds = new Rectangle(bounds[0], bounds[1], bounds[2], bounds[3]);
-                    }
-                }
+            if (applicationSettings.appBounds) {
+                var bounds:Array = applicationSettings.appBounds.split(",");
+                appBounds = nativeWindow.bounds = new Rectangle(bounds[0], bounds[1], bounds[2], bounds[3]);
             } else {
-                nativeWindow.bounds = new Rectangle(120, 120, 1200, 825);
+                appBounds = nativeWindow.bounds = new Rectangle(120, 120, 1200, 825);
+            }
+
+            if (applicationSettings.appDisplayState) {
+                (applicationSettings.appDisplayState == NativeWindowDisplayState.MAXIMIZED) ? nativeWindow.maximize() : nativeWindow.restore();
+                if (applicationSettings.appDisplayState == NativeWindowDisplayState.NORMAL) {
+                    addMoveAndResizeListeners();
+                }
             }
 
             LogUtil.getLogger(this).info('Application ready');
@@ -121,12 +119,48 @@
             menu = applicationMenu;
         }
 
-        private function closingHandler(event:Event):void {
-            dispatch(new SaveSettingMessage("appBounds", nativeWindow.x + "," + nativeWindow.y + "," + nativeWindow.width + "," + nativeWindow.height));
-            dispatch(new SaveSettingMessage("appDisplayState", nativeWindow.displayState));
+        private function displayStateChangeHandler(event:NativeWindowDisplayStateEvent):void {
+            if (event.afterDisplayState == NativeWindowDisplayState.NORMAL) {
+                addMoveAndResizeListeners();
+            } else {
+                removeMoveAndResizeListeners();
+            }
         }
 
-        private function addLog():void {
+        private function addMoveAndResizeListeners():void {
+            nativeWindow.addEventListener(NativeWindowBoundsEvent.RESIZE, moveAndResizeHandler);
+            nativeWindow.addEventListener(NativeWindowBoundsEvent.MOVE, moveAndResizeHandler);
+
+        }
+
+        private function removeMoveAndResizeListeners():void {
+            nativeWindow.removeEventListener(NativeWindowBoundsEvent.RESIZE, moveAndResizeHandler);
+            nativeWindow.removeEventListener(NativeWindowBoundsEvent.MOVE, moveAndResizeHandler);
+
+        }
+
+        private function moveAndResizeHandler(event:NativeWindowBoundsEvent):void {
+            appBounds = event.afterBounds;
+        }
+
+        private function closingHandler(event:Event):void {
+            LogUtil.getLogger(this).info('Application Exit requested');
+            event.preventDefault();
+
+            var settingsToSave:Object = {};
+            settingsToSave.appBounds = appBounds.x + "," + appBounds.y + "," + appBounds.width + "," + appBounds.height;
+            settingsToSave.appDisplayState = nativeWindow.displayState;
+
+            dispatch(new RequestExitApplicationMessage(settingsToSave));
+        }
+
+        [MessageHandler]
+        public function applicationExitReady(msg:ApplicationExitReadyMessage):void {
+            LogUtil.getLogger(this).info('Application Exiting');
+            this.exit();
+        }
+
+        private static function addLogTargets():void {
             var parsleyLogger:TraceTarget = new TraceTarget();
             parsleyLogger.filters = ["org.spicefactory.*", "mx.*"];
             parsleyLogger.level = LogEventLevel.ERROR;
diff --git a/fthomas/developerToolSuite/trunk/pom.xml b/fthomas/developerToolSuite/trunk/pom.xml
index acf3aa2..bcaf0c0 100644
--- a/fthomas/developerToolSuite/trunk/pom.xml
+++ b/fthomas/developerToolSuite/trunk/pom.xml
@@ -27,7 +27,7 @@
 
     <properties>
         <flexmojos.version>6.0-SNAPSHOT</flexmojos.version>
-        <flex.version>4.8.0.1359417</flex.version>
+        <flex.version>4.10.0-SNAPSHOT</flex.version>
         <flex.debug>true</flex.debug>
     </properties>
 
@@ -74,7 +74,7 @@
                             <value>'${project.version}'</value>
                         </property>
                     </defines>
-                    <adlCommand>D://SDKsSources/air/3.5/bin/adl.exe</adlCommand>
+                    <adlCommand>D://SDKsSources/air/3.4/bin/adl.exe</adlCommand>
                 </configuration>
                 <dependencies>
                     <dependency>
@@ -83,6 +83,12 @@
                         <version>${flex.version}</version>
                         <type>pom</type>
                     </dependency>
+                    <dependency>
+                        <groupId>com.adobe.air.compiler</groupId>
+                        <artifactId>adt</artifactId>
+                        <version>3.4</version>
+                        <type>jar</type>
+                    </dependency>
                 </dependencies>
             </plugin>
         </plugins>
