diff --git a/.travis.yml b/.travis.yml
index 66350828..324c1529 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -14,6 +14,7 @@ before_install:
   - rm -rf ~/.gnupg
 
 before_script:
+  - sudo rm -rf /etc/mysql/
   - sudo bash -c 'echo example.com > /etc/hostname'
   - sudo service hostname restart
   - sudo apt-get -qq purge mysql* graphviz*
@@ -22,7 +23,7 @@ before_script:
 
 script:
   - unset LANG
-  - sudo echo -e "[user]\n\tname = abc\n\temail = root@localhost.com" > ~/.gitconfig
+  - sudo bash -c 'echo -e "[user]\n\tname = abc\n\temail = root@localhost.com" > /home/travis/.gitconfig'
   - sudo echo "Travis Banch = $TRAVIS_BRANCH"
   - sudo apt-get install -y --force-yes git python3-setuptools python3-dev python3-apt
   - sudo bash install $TRAVIS_BRANCH
@@ -117,3 +118,4 @@ script:
   - sudo ee stack install --mail
   - sudo ls /var/www/
   - sudo wp --allow-root --info
+  - sudo bash -c 'cat /var/log/ee/ee.log'
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index f79490ef..8991ec5e 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,11 @@
+v 3.1.2 - April 29, 2015
+- Updated PHP version from PHP 5.5 to PHP 5.6 #425
+- Added ee stack upgrade command for stack upgrade #458
+- Added support for Proxy site creation #389
+- Added extra parameters such as User, Password and EMail during site creation #453
+- Fixed timezone related warnings and errors #451
+
+
 v 3.1.1 - April 21, 2015
 - Feature: update all site at once #491
 - Tweaked import-slow-log command #322
diff --git a/config/bash_completion.d/ee_auto.rc b/config/bash_completion.d/ee_auto.rc
index 752dbe3f..208bc167 100644
--- a/config/bash_completion.d/ee_auto.rc
+++ b/config/bash_completion.d/ee_auto.rc
@@ -35,7 +35,7 @@ _ee_complete()
 
             "stack")
                 COMPREPLY=( $(compgen \
-                              -W "install purge reload remove restart start status stop migrate" \
+                              -W "upgrade install purge reload remove restart start status stop migrate" \
                               -- $cur) )
                 ;;
 
@@ -74,7 +74,12 @@ _ee_complete()
             # HANDLE EVERYTHING AFTER THE THIRD LEVEL NAMESPACE
             "install" | "purge" | "remove" )
                 COMPREPLY=( $(compgen \
-                              -W "--web --admin --mail --nginx --php --mysql --postfix --wpcli --phpmyadmin --adminer --utils --memcache --dovecot --all --mailscanner --hhvm" \
+                              -W "--web --admin --mail --nginx --php --mysql --postfix --wpcli --phpmyadmin --adminer --utils --all --mailscanner --hhvm" \
+                              -- $cur) )
+                ;;
+            "upgrade" )
+                COMPREPLY=( $(compgen \
+                              -W "--web --mail --nginx --php --mysql --postfix --all --hhvm --php56 --no-prompt" \
                               -- $cur) )
                 ;;
             "start" | "stop" | "reload" | "restart" | "status")
@@ -160,7 +165,7 @@ _ee_complete()
 
             "create")
                 COMPREPLY=( $(compgen \
-                                    -W "--html --php --mysql --wp  --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --pagespeed" \
+                                    -W "--user --pass --email --html --php --mysql --wp  --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --proxy= --pagespeed" \
                                  -- $cur) )
                 ;;
 
@@ -211,7 +216,13 @@ _ee_complete()
     case "$prev" in
         "--wp" | "--wpsubdir" | "--wpsubdomain")
             if [ ${COMP_WORDS[1]} != "debug" ]; then
-                retlist="--w3tc --wpfc --wpsc"
+                if [ ${COMP_WORDS[2]} == "create" ]; then
+                    retlist="--w3tc --wpfc --wpsc --pagespeed --hhvm --user --email --pass"
+                elif [ ${COMP_WORDS[2]} == "update" ]; then
+                    retlist="--w3tc --wpfc --wpsc --pagespeed --hhvm --pagespeed=off --hhvm=off"
+                else
+                    retlist=""
+                fi
             else
                 retlist="--wp=off --rewrite --rewrite=off -i --interactive"
             fi
@@ -222,6 +233,21 @@ _ee_complete()
                               -- $cur) )
             ;;
 
+        "--pagespeed" | "--hhvm")
+            if [ ${COMP_WORDS[2]} == "create" ]; then
+                retlist="--user --pass --email --html --php --mysql --wp  --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --pagespeed"
+            elif [ ${COMP_WORDS[2]} == "update" ]; then
+                retlist="--password --php --mysql --wp  --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --hhvm=off --pagespeed --pagespeed=off"
+            else
+                retlist=""
+            fi
+
+            ret="${retlist[@]/$prev}"
+                COMPREPLY=( $(compgen \
+                              -W "$(echo $ret)" \
+                              -- $cur) )
+            ;;
+
         "--web" | "--admin" | "--mail" | "--nginx" | "--php" | "--mysql" | "--postfix" | "--wpcli" | "--phpmyadmin" | "--adminer" | "--utils" | "--memcache" | "--dovecot")
             if [[ ${COMP_WORDS[2]} == "install" || ${COMP_WORDS[2]} == "purge" || ${COMP_WORDS[2]} == "remove" ]]; then
                 retlist="--web --admin --mail --nginx --php --mysql --postfix --wpcli --phpmyadmin --adminer --utils --memcache --dovecot"
@@ -310,6 +336,17 @@ _ee_complete()
         *)
             ;;
         esac
+        case "$mprev" in
+            "--user" | "--email" | "--pass")
+                if [ ${COMP_WORDS[2]} == "create" ]; then
+                    retlist="--user --pass --email --html --php --mysql --wp  --wpsubdir --wpsubdomain --w3tc --wpfc --wpsc --hhvm --pagespeed"
+                fi
+                ret="${retlist[@]/$prev}"
+                COMPREPLY=( $(compgen \
+                              -W "$(echo $ret)" \
+                              -- $cur) )
+                ;;
+        esac
 
     return 0
 
diff --git a/ee/cli/plugins/debug.py b/ee/cli/plugins/debug.py
index 68bc3b77..7d5f20b7 100644
--- a/ee/cli/plugins/debug.py
+++ b/ee/cli/plugins/debug.py
@@ -180,6 +180,17 @@ class EEDebugController(CementBaseController):
                                           ";zend_extension",
                                           "zend_extension")
 
+                # Fix slow log is not enabled default in PHP5.6
+                config = configparser.ConfigParser()
+                config.read('/etc/php5/fpm/pool.d/debug.conf')
+                config['debug']['slowlog'] = '/var/log/php5/slow.log'
+                config['debug']['request_slowlog_timeout'] = '10s'
+                with open('/etc/php5/fpm/pool.d/debug.conf',
+                          encoding='utf-8', mode='w') as confifile:
+                    Log.debug(self, "Writting debug.conf configuration into "
+                              "/etc/php5/fpm/pool.d/debug.conf")
+                    config.write(confifile)
+
                 self.trigger_php = True
                 self.trigger_nginx = True
             else:
@@ -505,7 +516,7 @@ class EEDebugController(CementBaseController):
                                             "'ee debug --import-slow-log'"):
                     if not cron_time == 0:
                         Log.info(self, "setting up crontab entry,"
-                                 " please wait ...")
+                                 " please wait...")
                         EEShellExec.cmd_exec(self, "/bin/bash -c \"crontab -l "
                                              "2> /dev/null | {{ cat; echo -e"
                                              " \\\"#EasyEngine start MySQL "
@@ -518,7 +529,7 @@ class EEDebugController(CementBaseController):
                 else:
                     if not cron_time == 0:
                         Log.info(self, "updating crontab entry,"
-                                 " please wait ...")
+                                 " please wait...")
                         if not EEShellExec.cmd_exec(self, "/bin/bash -c "
                                                     "\"crontab "
                                                     "-l | sed '/EasyEngine "
@@ -533,7 +544,7 @@ class EEDebugController(CementBaseController):
                             Log.error(self, "failed to update crontab entry")
                     else:
                         Log.info(self, "removing crontab entry,"
-                                 " please wait ...")
+                                 " please wait...")
                         if not EEShellExec.cmd_exec(self, "/bin/bash -c "
                                                     "\"crontab "
                                                     "-l | sed '/EasyEngine "
diff --git a/ee/cli/plugins/site.py b/ee/cli/plugins/site.py
index 2796e515..d90cefdb 100644
--- a/ee/cli/plugins/site.py
+++ b/ee/cli/plugins/site.py
@@ -144,6 +144,10 @@ class EESiteController(CementBaseController):
             ee_db_host = siteinfo.db_host
             if sitetype != "html":
                 hhvm = ("enabled" if siteinfo.is_hhvm else "disabled")
+            if sitetype == "proxy":
+                access_log = "/var/log/nginx/{0}.access.log".format(ee_domain)
+                error_log = "/var/log/nginx/{0}.error.log".format(ee_domain)
+                ee_site_webroot = ''
 
             pagespeed = ("enabled" if siteinfo.is_pagespeed else "disabled")
 
@@ -338,6 +342,15 @@ class EESiteCreateController(CementBaseController):
                 dict(help="create HHVM site", action='store_true')),
             (['--pagespeed'],
                 dict(help="create pagespeed site", action='store_true')),
+            (['--user'],
+                dict(help="provide user for wordpress site")),
+            (['--email'],
+                dict(help="provide email address for wordpress site")),
+            (['--pass'],
+                dict(help="provide password for wordpress user",
+                     dest='wppass')),
+            (['--proxy'],
+                dict(help="create proxy for site", nargs='+'))
             ]
 
     @expose(hide=True)
@@ -345,12 +358,29 @@ class EESiteCreateController(CementBaseController):
         # self.app.render((data), 'default.mustache')
         # Check domain name validation
         data = dict()
+        host, port = None, None
         try:
             stype, cache = detSitePar(vars(self.app.pargs))
         except RuntimeError as e:
             Log.debug(self, str(e))
             Log.error(self, "Please provide valid options to creating site")
 
+        if stype is None and self.app.pargs.proxy:
+            stype, cache = 'proxy', ''
+            proxyinfo = self.app.pargs.proxy[0].strip()
+            if not proxyinfo:
+                Log.error(self, "Please provide proxy server host information")
+            proxyinfo = proxyinfo.split(':')
+            host = proxyinfo[0].strip()
+            port = '80' if len(proxyinfo) < 2 else proxyinfo[1].strip()
+        elif stype is None and not self.app.pargs.proxy:
+            stype, cache = 'html', 'basic'
+        elif stype and self.app.pargs.proxy:
+            Log.error(self, "proxy should not be used with other site types")
+        if (self.app.pargs.proxy and (self.app.pargs.pagespeed
+           or self.app.pargs.hhvm)):
+            Log.error(self, "Proxy site can not run on pagespeed or hhvm")
+
         if not self.app.pargs.site_name:
             try:
                 while not self.app.pargs.site_name:
@@ -377,6 +407,14 @@ class EESiteCreateController(CementBaseController):
             Log.error(self, "Nginx configuration /etc/nginx/sites-available/"
                       "{0} already exists".format(ee_domain))
 
+        if stype == 'proxy':
+            data['site_name'] = ee_domain
+            data['www_domain'] = ee_www_domain
+            data['proxy'] = True
+            data['host'] = host
+            data['port'] = port
+            ee_site_webroot = ""
+
         if stype in ['html', 'php']:
             data = dict(site_name=ee_domain, www_domain=ee_www_domain,
                         static=True,  basic=False, wp=False, w3tc=False,
@@ -386,6 +424,7 @@ class EESiteCreateController(CementBaseController):
             if stype == 'php':
                 data['static'] = False
                 data['basic'] = True
+
         elif stype in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']:
 
             data = dict(site_name=ee_domain, www_domain=ee_www_domain,
@@ -399,10 +438,15 @@ class EESiteCreateController(CementBaseController):
                 data['wp'] = True
                 data['basic'] = False
                 data[cache] = True
+                data['wp-user'] = self.app.pargs.user
+                data['wp-email'] = self.app.pargs.email
+                data['wp-pass'] = self.app.pargs.wppass
                 if stype in ['wpsubdir', 'wpsubdomain']:
                     data['multisite'] = True
                     if stype == 'wpsubdir':
                         data['wpsubdir'] = True
+        else:
+            pass
 
         if stype == "html" and self.app.pargs.hhvm:
             Log.error(self, "Can not create HTML site with HHVM")
@@ -421,13 +465,12 @@ class EESiteCreateController(CementBaseController):
             data['pagespeed'] = False
             pagespeed = 0
 
-        if not data:
-            self.app.args.print_help()
-            self.app.close(1)
+        # if not data:
+        #     self.app.args.print_help()
+        #     self.app.close(1)
 
         # Check rerequired packages are installed or not
         ee_auth = site_package_check(self, stype)
-
         try:
             try:
                 # setup NGINX configuration, and webroot
@@ -442,12 +485,23 @@ class EESiteCreateController(CementBaseController):
                 Log.error(self, "Check logs for reason "
                           "`tail /var/log/ee/ee.log` & Try Again!!!")
 
+            if 'proxy' in data.keys() and data['proxy']:
+                addNewSite(self, ee_domain, stype, cache, ee_site_webroot)
+                # Service Nginx Reload
+                EEService.reload_service(self, 'nginx')
+                if ee_auth and len(ee_auth):
+                    for msg in ee_auth:
+                        Log.info(self, Log.ENDC + msg, log=False)
+                Log.info(self, "Successfully created site"
+                         " http://{0}".format(ee_domain))
+                return
             # Update pagespeed config
             if self.app.pargs.pagespeed:
                 operateOnPagespeed(self, data)
 
             addNewSite(self, ee_domain, stype, cache, ee_site_webroot,
                        hhvm=hhvm, pagespeed=pagespeed)
+
             # Setup database for MySQL site
             if 'ee_db_name' in data.keys() and not data['wp']:
                 try:
@@ -605,6 +659,8 @@ class EESiteUpdateController(CementBaseController):
                 dict(help='Use PageSpeed for site',
                      action='store' or 'store_const',
                      choices=('on', 'off'), const='on', nargs='?')),
+            (['--proxy'],
+                dict(help="update to prxy site", nargs='+')),
             (['--all'],
                 dict(help="update all sites", action='store_true')),
             ]
@@ -633,7 +689,7 @@ class EESiteUpdateController(CementBaseController):
                 for site in sites:
                     pargs.site_name = site.sitename
                     Log.info(self, Log.ENDC + Log.BOLD + "Updating site {0},"
-                             " please wait ..."
+                             " please wait..."
                              .format(pargs.site_name))
                     self.doupdatesite(pargs)
                     print("\n")
@@ -652,6 +708,21 @@ class EESiteUpdateController(CementBaseController):
             Log.error(self, "Please provide valid options combination for"
                       " site update")
 
+        if stype is None and pargs.proxy:
+            stype, cache = 'proxy', ''
+            proxyinfo = pargs.proxy[0].strip()
+            if not proxyinfo:
+                Log.error(self, "Please provide proxy server host information")
+            proxyinfo = proxyinfo.split(':')
+            host = proxyinfo[0].strip()
+            port = '80' if len(proxyinfo) < 2 else proxyinfo[1].strip()
+        elif stype is None and not pargs.proxy:
+            stype, cache = 'html', 'basic'
+        elif stype and pargs.proxy:
+            Log.error(self, "--proxy can not be used with other site types")
+        if (pargs.proxy and (pargs.pagespeed or pargs.hhvm)):
+            Log.error(self, "Proxy site can not run on pagespeed or hhvm")
+
         if not pargs.site_name:
             try:
                 while not pargs.site_name:
@@ -685,14 +756,21 @@ class EESiteUpdateController(CementBaseController):
                 Log.info(self, "Password Unchanged.")
             return 0
 
+        if ((stype == "proxy" and stype == oldsitetype and self.app.pargs.hhvm)
+            or (stype == "proxy" and
+                stype == oldsitetype and self.app.pargs.pagespeed)):
+                Log.info(self, Log.FAIL +
+                         "Can not update proxy site to HHVM or Pagespeed")
+                return 1
         if stype == "html" and stype == oldsitetype and self.app.pargs.hhvm:
             Log.info(self, Log.FAIL + "Can not update HTML site to HHVM")
             return 1
 
-        if ((stype == 'php' and oldsitetype != 'html') or
-            (stype == 'mysql' and oldsitetype not in ['html', 'php']) or
+        if ((stype == 'php' and oldsitetype not in ['html', 'proxy']) or
+            (stype == 'mysql' and oldsitetype not in ['html', 'php',
+                                                      'proxy']) or
             (stype == 'wp' and oldsitetype not in ['html', 'php', 'mysql',
-                                                   'wp']) or
+                                                   'proxy', 'wp']) or
             (stype == 'wpsubdir' and oldsitetype in ['wpsubdomain']) or
             (stype == 'wpsubdomain' and oldsitetype in ['wpsubdir']) or
            (stype == oldsitetype and cache == oldcachetype) and
@@ -701,6 +779,18 @@ class EESiteUpdateController(CementBaseController):
                      format(oldsitetype, oldcachetype, stype, cache))
             return 1
 
+        if stype == 'proxy':
+            data['site_name'] = ee_domain
+            data['www_domain'] = ee_www_domain
+            data['proxy'] = True
+            data['host'] = host
+            data['port'] = port
+            pagespeed = False
+            hhvm = False
+            data['webroot'] = ee_site_webroot
+            data['currsitetype'] = oldsitetype
+            data['currcachetype'] = oldcachetype
+
         if stype == 'php':
             data = dict(site_name=ee_domain, www_domain=ee_www_domain,
                         static=False,  basic=True, wp=False, w3tc=False,
@@ -736,8 +826,7 @@ class EESiteUpdateController(CementBaseController):
 
                 stype = oldsitetype
                 cache = oldcachetype
-
-                if oldsitetype == 'html':
+                if oldsitetype == 'html' or oldsitetype == 'proxy':
                     data['static'] = True
                     data['wp'] = False
                     data['multisite'] = False
@@ -871,6 +960,13 @@ class EESiteUpdateController(CementBaseController):
                      "`tail /var/log/ee/ee.log` & Try Again!!!")
             return 1
 
+        if 'proxy' in data.keys() and data['proxy']:
+            updateSiteInfo(self, ee_domain, stype=stype, cache=cache,
+                           hhvm=hhvm, pagespeed=pagespeed)
+            Log.info(self, "Successfully updated site"
+                     " http://{0}".format(ee_domain))
+            return 0
+
         # Update pagespeed config
         if pargs.pagespeed:
             operateOnPagespeed(self, data)
@@ -917,7 +1013,7 @@ class EESiteUpdateController(CementBaseController):
                 return 1
 
         # Setup WordPress if old sites are html/php/mysql sites
-        if data['wp'] and oldsitetype in ['html', 'php', 'mysql']:
+        if data['wp'] and oldsitetype in ['html', 'proxy', 'php', 'mysql']:
             try:
                 ee_wp_creds = setupwordpress(self, data)
             except SiteError as e:
diff --git a/ee/cli/plugins/site_functions.py b/ee/cli/plugins/site_functions.py
index 7c860662..f51cdcb8 100644
--- a/ee/cli/plugins/site_functions.py
+++ b/ee/cli/plugins/site_functions.py
@@ -31,7 +31,7 @@ class SiteError(Exception):
 def pre_run_checks(self):
 
     # Check nginx configuration
-    Log.info(self, "Running pre-update checks, please wait ...")
+    Log.info(self, "Running pre-update checks, please wait...")
     try:
         Log.debug(self, "checking NGINX configuration ...")
         FNULL = open('/dev/null', 'w')
@@ -52,7 +52,7 @@ def check_domain_exists(self, domain):
 def setupdomain(self, data):
 
     ee_domain_name = data['site_name']
-    ee_site_webroot = data['webroot']
+    ee_site_webroot = data['webroot'] if 'webroot' in data.keys() else ''
 
     # Check if nginx configuration already exists
     # if os.path.isfile('/etc/nginx/sites-available/{0}'
@@ -78,7 +78,7 @@ def setupdomain(self, data):
     finally:
         # Check nginx -t and return status over it
         try:
-            Log.debug(self, "Checking generated nginx conf, please wait ...")
+            Log.debug(self, "Checking generated nginx conf, please wait...")
             FNULL = open('/dev/null', 'w')
             ret = subprocess.check_call(["nginx", "-t"], stdout=FNULL,
                                         stderr=subprocess.STDOUT)
@@ -90,6 +90,9 @@ def setupdomain(self, data):
             raise SiteError("created nginx configuration failed for site."
                             " check with `nginx -t`")
 
+    if 'proxy' in data.keys() and data['proxy']:
+        return
+
     # create symbolic link for
     EEFileUtils.create_symlink(self, ['/etc/nginx/sites-available/{0}'
                                       .format(ee_domain_name),
@@ -235,6 +238,13 @@ def setupwordpress(self, data):
     # ee_wp_user = ''
     # ee_wp_pass = ''
 
+    if 'wp-user' in data.keys() and data['wp-user']:
+        ee_wp_user = data['wp-user']
+    if 'wp-email' in data.keys() and data['wp-email']:
+        ee_wp_email = data['wp-email']
+    if 'wp-pass' in data.keys() and data['wp-pass']:
+        ee_wp_pass = data['wp-pass']
+
     Log.info(self, "Downloading Wordpress \t\t", end='')
     EEFileUtils.chdir(self, '{0}/htdocs/'.format(ee_site_webroot))
     try:
@@ -456,7 +466,7 @@ def setupwordpressnetwork(self, data):
 
 def installwp_plugin(self, plugin_name, data):
     ee_site_webroot = data['webroot']
-    Log.info(self, "Installing plugin {0}, please wait ..."
+    Log.info(self, "Installing plugin {0}, please wait..."
              .format(plugin_name))
     EEFileUtils.chdir(self, '{0}/htdocs/'.format(ee_site_webroot))
     try:
@@ -480,7 +490,7 @@ def installwp_plugin(self, plugin_name, data):
 
 def uninstallwp_plugin(self, plugin_name, data):
     ee_site_webroot = data['webroot']
-    Log.debug(self, "Uninstalling plugin {0}, please wait ..."
+    Log.debug(self, "Uninstalling plugin {0}, please wait..."
               .format(plugin_name))
     EEFileUtils.chdir(self, '{0}/htdocs/'.format(ee_site_webroot))
     try:
@@ -510,7 +520,7 @@ def sitebackup(self, data):
     EEFileUtils.copyfile(self, '/etc/nginx/sites-available/{0}'
                          .format(data['site_name']), backup_path)
 
-    if data['currsitetype'] in ['html', 'php', 'mysql']:
+    if data['currsitetype'] in ['html', 'php', 'proxy', 'mysql']:
         Log.info(self, "Backing up Webroot \t\t", end='')
         EEFileUtils.mvfile(self, ee_site_webroot + '/htdocs', backup_path)
         Log.info(self, "[" + Log.ENDC + "Done" + Log.OKBLUE + "]")
@@ -534,7 +544,7 @@ def sitebackup(self, data):
             raise SiteError("mysqldump failed to backup database")
         Log.info(self, "[" + Log.ENDC + "Done" + Log.OKBLUE + "]")
         # move wp-config.php/ee-config.php to backup
-        if data['currsitetype'] in ['mysql']:
+        if data['currsitetype'] in ['mysql', 'proxy']:
             EEFileUtils.mvfile(self, configfiles[0], backup_path)
         else:
             EEFileUtils.copyfile(self, configfiles[0], backup_path)
@@ -545,7 +555,8 @@ def site_package_check(self, stype):
     packages = []
     stack = EEStackController()
     stack.app = self.app
-    if stype in ['html', 'php', 'mysql', 'wp', 'wpsubdir', 'wpsubdomain']:
+    if stype in ['html', 'proxy', 'php', 'mysql', 'wp', 'wpsubdir',
+                 'wpsubdomain']:
         Log.debug(self, "Setting apt_packages variable for Nginx")
 
         if EEVariables.ee_platform_distro == 'debian':
@@ -790,8 +801,8 @@ def detSitePar(opts):
         raise RuntimeError("could not determine site and cache type")
     else:
         if not typelist and not cachelist:
-            sitetype = 'html'
-            cachetype = 'basic'
+            sitetype = None
+            cachetype = None
         elif (not typelist) and cachelist:
             sitetype = 'wp'
             cachetype = cachelist[0]
diff --git a/ee/cli/plugins/stack.py b/ee/cli/plugins/stack.py
index f13d33a0..cd0d624f 100644
--- a/ee/cli/plugins/stack.py
+++ b/ee/cli/plugins/stack.py
@@ -27,6 +27,7 @@ import grp
 import codecs
 from ee.cli.plugins.stack_services import EEStackStatusController
 from ee.cli.plugins.stack_migrate import EEStackMigrateController
+from ee.cli.plugins.stack_upgrade import EEStackUpgradeController
 from ee.core.logging import Log
 
 
@@ -95,7 +96,7 @@ class EEStackController(CementBaseController):
                 Log.error(self, "Failed to intialize postfix package")
 
         if set(EEVariables.ee_mysql).issubset(set(apt_packages)):
-            Log.info(self, "Adding repository for MySQL, please wait ...")
+            Log.info(self, "Adding repository for MySQL, please wait...")
             mysql_pref = ("Package: *\nPin: origin mirror.aarnet.edu.au"
                           "\nPin-Priority: 1000\n")
             with open('/etc/apt/preferences.d/'
@@ -149,7 +150,7 @@ class EEStackController(CementBaseController):
                 config.write(configfile)
 
         if set(EEVariables.ee_nginx).issubset(set(apt_packages)):
-            Log.info(self, "Adding repository for NGINX, please wait ...")
+            Log.info(self, "Adding repository for NGINX, please wait...")
             if EEVariables.ee_platform_distro == 'debian':
                 Log.debug(self, 'Adding Dotdeb/nginx GPG key')
                 EERepo.add(self, repo_url=EEVariables.ee_nginx_repo)
@@ -158,7 +159,7 @@ class EEStackController(CementBaseController):
                 Log.debug(self, 'Adding ppa of Nginx')
 
         if set(EEVariables.ee_php).issubset(set(apt_packages)):
-            Log.info(self, "Adding repository for PHP, please wait ...")
+            Log.info(self, "Adding repository for PHP, please wait...")
             if EEVariables.ee_platform_distro == 'debian':
                 Log.debug(self, 'Adding repo_url of php for debian')
                 EERepo.add(self, repo_url=EEVariables.ee_php_repo)
@@ -169,7 +170,7 @@ class EEStackController(CementBaseController):
                 EERepo.add(self, ppa=EEVariables.ee_php_repo)
 
         if set(EEVariables.ee_hhvm).issubset(set(apt_packages)):
-            Log.info(self, "Adding repository for HHVM, please wait ...")
+            Log.info(self, "Adding repository for HHVM, please wait...")
             if EEVariables.ee_platform_codename == 'precise':
                 Log.debug(self, 'Adding PPA for Boost')
                 EERepo.add(self, ppa=EEVariables.ee_boost_repo)
@@ -469,6 +470,21 @@ class EEStackController(CementBaseController):
                     Log.debug(self, 'Creating directory /var/log/php5/')
                     os.makedirs('/var/log/php5/')
 
+                # For debian install xdebug
+
+                if EEVariables.ee_platform_distro == "debian":
+                    EEShellExec.cmd_exec(self, "pecl install xdebug")
+
+                    with open("/etc/php5/mods-available/xdebug.ini",
+                              encoding='utf-8', mode='a') as myfile:
+                        myfile.write("zend_extension=/usr/lib/php5/20131226/"
+                                     "xdebug.so\n")
+
+                    EEFileUtils.create_symlink(self, ["/etc/php5/"
+                                               "mods-available/xdebug.ini",
+                                                      "/etc/php5/fpm/conf.d"
+                                                      "/20-xedbug.ini"])
+
                 # Parse etc/php5/fpm/php.ini
                 config = configparser.ConfigParser()
                 Log.debug(self, "configuring php file /etc/php5/fpm/php.ini")
@@ -477,7 +493,7 @@ class EEStackController(CementBaseController):
                 config['PHP']['post_max_size'] = '100M'
                 config['PHP']['upload_max_filesize'] = '100M'
                 config['PHP']['max_execution_time'] = '300'
-                config['PHP']['date.timezone'] = time.tzname[time.daylight]
+                config['PHP']['date.timezone'] = EEVariables.ee_timezone
                 with open('/etc/php5/fpm/php.ini',
                           encoding='utf-8', mode='w') as configfile:
                     Log.debug(self, "Writting php configuration into "
@@ -529,6 +545,8 @@ class EEStackController(CementBaseController):
                 config.read('/etc/php5/fpm/pool.d/debug.conf')
                 config['debug']['listen'] = '127.0.0.1:9001'
                 config['debug']['rlimit_core'] = 'unlimited'
+                config['debug']['slowlog'] = '/var/log/php5/slow.log'
+                config['debug']['request_slowlog_timeout'] = '10s'
                 with open('/etc/php5/fpm/pool.d/debug.conf',
                           encoding='utf-8', mode='w') as confifile:
                     Log.debug(self, "writting PHP5 configuration into "
@@ -590,7 +608,7 @@ class EEStackController(CementBaseController):
             if set(EEVariables.ee_hhvm).issubset(set(apt_packages)):
 
                 EEShellExec.cmd_exec(self, "update-rc.d hhvm defaults")
-                
+
                 EEFileUtils.searchreplace(self, "/etc/hhvm/server.ini",
                                                 "9000", "8000")
                 EEFileUtils.searchreplace(self, "/etc/nginx/hhvm.conf",
@@ -1008,10 +1026,22 @@ class EEStackController(CementBaseController):
                 shutil.move('/tmp/webgrind-master/',
                             '{0}22222/htdocs/php/webgrind'
                             .format(EEVariables.ee_webroot))
-                EEShellExec.cmd_exec(self, "sed -i \"s\'/usr/local/bin/dot\'"
-                                     "/usr/bin/dot\'\" {0}22222/htdocs/"
-                                     "php/webgrind/config.php"
-                                     .format(EEVariables.ee_webroot))
+
+                EEFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/"
+                                          "config.php"
+                                          .format(EEVariables.ee_webroot),
+                                          "/usr/local/bin/dot", "/usr/bin/dot")
+                EEFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/"
+                                          "config.php"
+                                          .format(EEVariables.ee_webroot),
+                                          "Europe/Copenhagen",
+                                          EEVariables.ee_timezone)
+
+                EEFileUtils.searchreplace(self, "{0}22222/htdocs/php/webgrind/"
+                                          "config.php"
+                                          .format(EEVariables.ee_webroot),
+                                          "90", "100")
+
                 Log.debug(self, "Setting Privileges of webroot permission to "
                           "{0}22222/htdocs/php/webgrind/ file "
                           .format(EEVariables.ee_webroot))
@@ -1552,9 +1582,9 @@ class EEStackController(CementBaseController):
             self.pre_pref(apt_packages)
             if len(apt_packages):
                 EESwap.add(self)
-                Log.info(self, "Updating apt-cache, please wait ...")
+                Log.info(self, "Updating apt-cache, please wait...")
                 EEAptGet.update(self)
-                Log.info(self, "Installing packages, please wait ...")
+                Log.info(self, "Installing packages, please wait...")
                 EEAptGet.install(self, apt_packages)
             if len(packages):
                 Log.debug(self, "Downloading following: {0}".format(packages))
@@ -1672,7 +1702,7 @@ class EEStackController(CementBaseController):
         if len(apt_packages):
             if ee_prompt == 'YES' or ee_prompt == 'yes':
                 Log.debug(self, "Removing apt_packages")
-                Log.info(self, "Removing packages, please wait ...")
+                Log.info(self, "Removing packages, please wait...")
                 EEAptGet.remove(self, apt_packages)
                 EEAptGet.auto_remove(self)
 
@@ -1785,7 +1815,7 @@ class EEStackController(CementBaseController):
 
         if len(apt_packages):
             if ee_prompt == 'YES' or ee_prompt == 'yes':
-                Log.info(self, "Purging packages, please wait ...")
+                Log.info(self, "Purging packages, please wait...")
                 EEAptGet.remove(self, apt_packages, purge=True)
                 EEAptGet.auto_remove(self)
 
@@ -1803,6 +1833,7 @@ def load(app):
     handler.register(EEStackController)
     handler.register(EEStackStatusController)
     handler.register(EEStackMigrateController)
+    handler.register(EEStackUpgradeController)
 
     # register a hook (function) to run after arguments are parsed.
     hook.register('post_argument_parsing', ee_stack_hook)
diff --git a/ee/cli/plugins/stack_migrate.py b/ee/cli/plugins/stack_migrate.py
index e5cfa38c..e200036b 100644
--- a/ee/cli/plugins/stack_migrate.py
+++ b/ee/cli/plugins/stack_migrate.py
@@ -31,7 +31,7 @@ class EEStackMigrateController(CementBaseController):
         EEMysql.backupAll(self)
 
         # Add MariaDB repo
-        Log.info(self, "Adding repository for MariaDB, please wait ...")
+        Log.info(self, "Adding repository for MariaDB, please wait...")
 
         mysql_pref = ("Package: *\nPin: origin mirror.aarnet.edu.au"
                       "\nPin-Priority: 1000\n")
@@ -87,9 +87,9 @@ class EEStackMigrateController(CementBaseController):
             apt_packages = apt_packages + ["dovecot-mysql", "postfix-mysql",
                                            "libclass-dbi-mysql-perl"]
 
-        Log.info(self, "Updating apt-cache, please wait ...")
+        Log.info(self, "Updating apt-cache, please wait...")
         EEAptGet.update(self)
-        Log.info(self, "Installing MariaDB, please wait ...")
+        Log.info(self, "Installing MariaDB, please wait...")
         EEAptGet.remove(self, ["mysql-common", "libmysqlclient18"])
         EEAptGet.auto_remove(self)
         EEAptGet.install(self, apt_packages)
diff --git a/ee/cli/plugins/stack_upgrade.py b/ee/cli/plugins/stack_upgrade.py
new file mode 100644
index 00000000..1bfe07e3
--- /dev/null
+++ b/ee/cli/plugins/stack_upgrade.py
@@ -0,0 +1,195 @@
+from cement.core.controller import CementBaseController, expose
+from cement.core import handler, hook
+from ee.core.logging import Log
+from ee.core.variables import EEVariables
+from ee.core.aptget import EEAptGet
+from ee.core.apt_repo import EERepo
+from ee.core.services import EEService
+from ee.core.fileutils import EEFileUtils
+from ee.core.shellexec import EEShellExec
+import configparser
+import os
+
+
+class EEStackUpgradeController(CementBaseController):
+    class Meta:
+        label = 'upgrade'
+        stacked_on = 'stack'
+        stacked_type = 'nested'
+        description = ('Upgrade stack safely')
+        arguments = [
+            (['--all'],
+                dict(help='Upgrade all stack', action='store_true')),
+            (['--web'],
+                dict(help='Upgrade web stack', action='store_true')),
+            (['--admin'],
+                dict(help='Upgrade admin tools stack', action='store_true')),
+            (['--mail'],
+                dict(help='Upgrade mail server stack', action='store_true')),
+            (['--mailscanner'],
+                dict(help='Upgrade mail scanner stack', action='store_true')),
+            (['--nginx'],
+                dict(help='Upgrade Nginx stack', action='store_true')),
+            (['--php'],
+                dict(help='Upgrade PHP stack', action='store_true')),
+            (['--mysql'],
+                dict(help='Upgrade MySQL stack', action='store_true')),
+            (['--hhvm'],
+                dict(help='Upgrade HHVM stack', action='store_true')),
+            (['--postfix'],
+                dict(help='Upgrade Postfix stack', action='store_true')),
+            (['--php56'],
+                dict(help="Upgrade to PHP5.6 from PHP5.5",
+                     action='store_true')),
+            (['--no-prompt'],
+                dict(help="Upgrade Packages without any prompt",
+                     action='store_true')),
+            ]
+
+    @expose(hide=True)
+    def upgrade_php56(self):
+        if EEVariables.ee_platform_distro == "Ubuntu":
+            if os.path.isfile("/etc/apt/sources.list.d/ondrej-php5-5_6-{0}."
+                              "list".format(EEVariables.ee_platform_codename)):
+                Log.error(self, "Unable to find PHP 5.5")
+        else:
+            if not(os.path.isfile(EEVariables.ee_repo_file_path) and
+                   EEFileUtils.grep(self, EEVariables.ee_repo_file_path,
+                                    "php55")):
+                Log.error(self, "Unable to find PHP 5.5")
+
+        Log.info(self, "During PHP update process non nginx-cached"
+                 " parts of your site may remain down")
+
+        # Check prompt
+        if (not self.app.pargs.no_prompt):
+            start_upgrade = input("Do you want to continue:[y/N]")
+            if start_upgrade != "Y" and start_upgrade != "y":
+                Log.error(self, "Not starting PHP package update")
+
+        if EEVariables.ee_platform_distro == "Ubuntu":
+            EERepo.remove(self, ppa="ppa:ondrej/php5")
+            EERepo.add(self, ppa=EEVariables.ee_php_repo)
+        else:
+            EEAptGet.remove(self, ["php5-xdebug"])
+            EEFileUtils.searchreplace(self, EEVariables.ee_repo_file_path,
+                                      "php55", "php56")
+
+        Log.info(self, "Updating apt-cache, please wait...")
+        EEAptGet.update(self)
+        Log.info(self, "Installing packages, please wait ...")
+        EEAptGet.install(self, EEVariables.ee_php)
+
+        if EEVariables.ee_platform_distro == "debian":
+            EEShellExec.cmd_exec(self, "pecl install xdebug")
+
+            with open("/etc/php5/mods-available/xdebug.ini",
+                      encoding='utf-8', mode='a') as myfile:
+                myfile.write(";zend_extension=/usr/lib/php5/20131226/"
+                             "xdebug.so\n")
+
+            EEFileUtils.create_symlink(self, ["/etc/php5/mods-available/"
+                                       "xdebug.ini", "/etc/php5/fpm/conf.d"
+                                                     "/20-xedbug.ini"])
+
+        Log.info(self, "Successfully upgraded from PHP 5.5 to PHP 5.6")
+
+    @expose(hide=True)
+    def default(self):
+        # All package update
+        if ((not self.app.pargs.php56)):
+
+            apt_packages = []
+
+            Log.info(self, "During package update process non nginx-cached"
+                     " parts of your site may remain down")
+            # Check prompt
+            if (not self.app.pargs.no_prompt):
+                start_upgrade = input("Do you want to continue:[y/N]")
+                if start_upgrade != "Y" and start_upgrade != "y":
+                    Log.error(self, "Not starting package update")
+
+            if ((not self.app.pargs.web) and (not self.app.pargs.nginx) and
+               (not self.app.pargs.php) and (not self.app.pargs.mysql) and
+               (not self.app.pargs.postfix) and (not self.app.pargs.hhvm) and
+               (not self.app.pargs.mailscanner) and (not self.app.pargs.all)):
+                self.app.pargs.web = True
+
+            if self.app.pargs.all:
+                self.app.pargs.web = True
+                self.app.pargs.mail = True
+
+            if self.app.pargs.web:
+                self.app.pargs.nginx = True
+                self.app.pargs.php = True
+                self.app.pargs.mysql = True
+                self.app.pargs.postfix = True
+                self.app.pargs.hhvm = True
+
+            if self.app.pargs.mail:
+                self.app.pargs.nginx = True
+                self.app.pargs.php = True
+                self.app.pargs.mysql = True
+                self.app.pargs.postfix = True
+
+                if EEAptGet.is_installed(self, 'dovecot-core'):
+                    apt_packages = apt_packages + EEVariables.ee_mail
+                    self.app.pargs.mailscanner = True
+                else:
+                    Log.info(self, "Mail server is not installed")
+
+            if self.app.pargs.nginx:
+                if EEVariables.ee_platform_distro == 'debian':
+                    check_nginx = 'nginx-extras'
+                else:
+                    check_nginx = 'nginx-custom'
+
+                if EEAptGet.is_installed(self, check_nginx):
+                    apt_packages = apt_packages + EEVariables.ee_nginx
+                else:
+                    Log.info(self, "Nginx is not already installed")
+
+            if self.app.pargs.php:
+                if EEAptGet.is_installed(self, 'php5-fpm'):
+                    apt_packages = apt_packages + EEVariables.ee_php
+                else:
+                    Log.info(self, "PHP is not installed")
+
+            if self.app.pargs.hhvm:
+                if EEAptGet.is_installed(self, 'hhvm'):
+                    apt_packages = apt_packages + EEVariables.ee_hhvm
+                else:
+                    Log.info(self, "HHVM is not installed")
+
+            if self.app.pargs.mysql:
+                if EEAptGet.is_installed(self, 'mariadb-server'):
+                    apt_packages = apt_packages + EEVariables.ee_mysql
+                else:
+                    Log.info(self, "MySQL is not installed")
+
+            if self.app.pargs.postfix:
+                if EEAptGet.is_installed(self, 'postfix'):
+                    apt_packages = apt_packages + EEVariables.ee_postfix
+                else:
+                    Log.info(self, "Postfix is not installed")
+
+            if self.app.pargs.mailscanner:
+                if EEAptGet.is_installed(self, 'amavisd-new'):
+                    apt_packages = (apt_packages + EEVariables.ee_mailscanner)
+                else:
+                    Log.info(self, "MailScanner is not installed")
+
+            if len(apt_packages):
+                # apt-get update
+                EEAptGet.update(self)
+
+                # Update packages
+                Log.info(self, "Updating packages, please wait...")
+                EEAptGet.install(self, apt_packages)
+                Log.info(self, "Successfully updated packages")
+
+        # PHP 5.6 to 5.6
+        elif (self.app.pargs.php56):
+            self.upgrade_php56()
+        else:
+            self.app.args.print_help()
diff --git a/ee/cli/plugins/sync.py b/ee/cli/plugins/sync.py
index 2b8d6dd1..c260402f 100644
--- a/ee/cli/plugins/sync.py
+++ b/ee/cli/plugins/sync.py
@@ -28,7 +28,7 @@ class EESyncController(CementBaseController):
         1. reads database information from wp/ee-config.php
         2. updates records into ee database accordingly.
         """
-        Log.info(self, "Synchronizing ee database, please wait ....")
+        Log.info(self, "Synchronizing ee database, please wait...")
         sites = getAllsites(self)
         if not sites:
             pass
diff --git a/ee/cli/plugins/update.py b/ee/cli/plugins/update.py
index 28d383e0..8680d68e 100644
--- a/ee/cli/plugins/update.py
+++ b/ee/cli/plugins/update.py
@@ -28,7 +28,7 @@ class EEUpdateController(CementBaseController):
                                     "/tmp/{0}".format(filename),
                                     "update script"]])
         try:
-            Log.info(self, "updating EasyEngine, please wait ...")
+            Log.info(self, "updating EasyEngine, please wait...")
             os.system("bash /tmp/{0}".format(filename))
         except OSError as e:
             Log.debug(self, str(e))
diff --git a/ee/cli/templates/siteinfo.mustache b/ee/cli/templates/siteinfo.mustache
index 0381a3f0..7875709d 100644
--- a/ee/cli/templates/siteinfo.mustache
+++ b/ee/cli/templates/siteinfo.mustache
@@ -5,7 +5,7 @@ Nginx configuration	 {{type}} {{enable}}
 {{#hhvm}}HHVM			 {{hhvm}}{{/hhvm}}
 access_log		 {{accesslog}}
 error_log		 {{errorlog}}
-Webroot			 {{webroot}}
+{{#webroot}}Webroot			 {{webroot}}{{/webroot}}
 {{#dbname}}DB_NAME			 {{dbname}}{{/dbname}}
 {{#dbname}}DB_USER			 {{dbuser}}{{/dbname}}
 {{#dbname}}DB_PASS			 {{dbpass}}{{/dbname}}
diff --git a/ee/cli/templates/virtualconf.mustache b/ee/cli/templates/virtualconf.mustache
index 2fa0a0d1..7553d46e 100644
--- a/ee/cli/templates/virtualconf.mustache
+++ b/ee/cli/templates/virtualconf.mustache
@@ -15,11 +15,24 @@ server {
 
     access_log /var/log/nginx/{{site_name}}.access.log {{^static}}rt_cache{{/static}};
     error_log /var/log/nginx/{{site_name}}.error.log;
+
+    {{#proxy}}
+    add_header X-Proxy-Cache $upstream_cache_status;
+    location / {
+        proxy_pass http://{{host}}:{{port}};
+        proxy_redirect      off;
+        proxy_set_header    Host            $host;
+        proxy_set_header    X-Real-IP       $remote_addr;
+        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
+    }
+    {{/proxy}}
+
+    {{^proxy}}
     {{^vma}}{{^rc}}root {{webroot}}/htdocs;{{/rc}}{{/vma}}
     {{#vma}}root /var/www/22222/htdocs/vimbadmin/public;{{/vma}}
     {{#rc}}root /var/www/roundcubemail/htdocs/;{{/rc}}
 
-    index {{^static}}index.php{{/static}} index.html index.htm;
+    {{^proxy}}index {{^static}}index.php{{/static}} index.html index.htm;{{/proxy}}
 
     {{#static}}
     location / {
@@ -30,6 +43,7 @@ server {
     {{^static}}include {{^hhvm}}{{#basic}}common/php.conf;{{/basic}}{{#w3tc}}common/w3tc.conf;{{/w3tc}}{{#wpfc}}common/wpfc.conf;{{/wpfc}} {{#wpsc}}common/wpsc.conf;{{/wpsc}} {{/hhvm}}{{#hhvm}}{{#basic}}common/php-hhvm.conf;{{/basic}}{{#w3tc}}common/w3tc-hhvm.conf;{{/w3tc}}{{#wpfc}}common/wpfc-hhvm.conf;{{/wpfc}} {{#wpsc}}common/wpsc-hhvm.conf;{{/wpsc}} {{/hhvm}}
     {{#wpsubdir}}include common/wpsubdir.conf;{{/wpsubdir}}{{/static}}
     {{#wp}}include common/wpcommon.conf;{{/wp}}
-    include common/locations.conf;
+    {{^proxy}}include common/locations.conf;{{/proxy}}
     {{^vma}}{{^rc}}include {{webroot}}/conf/nginx/*.conf;{{/rc}}{{/vma}}
+    {{/proxy}}
 }
diff --git a/ee/core/apt_repo.py b/ee/core/apt_repo.py
index a32794b5..ecfd4cfc 100644
--- a/ee/core/apt_repo.py
+++ b/ee/core/apt_repo.py
@@ -1,6 +1,7 @@
 """EasyEngine packages repository operations"""
 from ee.core.shellexec import EEShellExec
 from ee.core.variables import EEVariables
+from ee.core.logging import Log
 import os
 
 
@@ -54,16 +55,31 @@ class EERepo():
                                            "'{ppa_name}'"
                                      .format(ppa_name=ppa))
 
-    def remove(self, ppa=None):
+    def remove(self, ppa=None, repo_url=None):
         """
         This function used to remove ppa's
         If ppa is provided adds repo file to
             /etc/apt/sources.list.d/
         command.
         """
-        EEShellExec.cmd_exec(self, "add-apt-repository -y "
-                             "--remove '{ppa_name}'"
-                             .format(ppa_name=repo_url))
+        if ppa:
+            EEShellExec.cmd_exec(self, "add-apt-repository -y "
+                                 "--remove '{ppa_name}'"
+                                 .format(ppa_name=ppa))
+        elif repo_url:
+            repo_file_path = ("/etc/apt/sources.list.d/"
+                              + EEVariables().ee_repo_file)
+
+            try:
+                repofile = open(repo_file_path, "w+")
+                repofile.write(repofile.read().replace(repo_url, ""))
+                repofile.close()
+            except IOError as e:
+                Log.debug(self, "{0}".format(e))
+                Log.error(self, "File I/O error.")
+            except Exception as e:
+                Log.debug(self, "{0}".format(e))
+                Log.error(self, "Unable to remove repo")
 
     def add_key(self, keyids, keyserver=None):
         """
diff --git a/ee/core/aptget.py b/ee/core/aptget.py
index 5eff0cf7..a4071a4a 100644
--- a/ee/core/aptget.py
+++ b/ee/core/aptget.py
@@ -32,32 +32,60 @@ class EEAptGet():
             Log.error(self, "Error while installing packages, "
                       "apt-get exited with error")
 
-    def dist_upgrade():
+    def check_upgrade(self):
         """
         Similar to `apt-get upgrade`
         """
         try:
-            apt_cache = apt.cache.Cache()
-            apt_cache.update()
-            apt_cache.open(None)
-            apt_cache.upgrade(True)
-            success = (apt_cache.commit(
-                       apt.progress.text.AcquireProgress(),
-                       apt.progress.base.InstallProgress()))
-            # apt_cache.close()
-            return success
-        except AttributeError as e:
-            Log.error(self, 'AttributeError: ' + str(e))
-        except FetchFailedException as e:
-            Log.debug(self, 'SystemError:  ' + str(e))
-            Log.error(self, 'Unable to Fetch update')
+            check_update = subprocess.Popen(['apt-get upgrade -s | grep '
+                                            '\"^Inst\" | wc -l'],
+                                            stdout=subprocess.PIPE,
+                                            shell=True).communicate()[0]
+            if check_update == b'0\n':
+                Log.error(self, "No package updates available")
+            Log.info(self, "Following package updates are available:")
+            subprocess.Popen("apt-get -s dist-upgrade | grep \"^Inst\"",
+                             shell=True, executable="/bin/bash",
+                             stdout=sys.stdout).communicate()
+
+        except Exception as e:
+            Log.error(self, "Unable to check for packages upgrades")
+
+    def dist_upgrade(self):
+        """
+        Similar to `apt-get upgrade`
+        """
+        try:
+            with open('/var/log/ee/ee.log', 'a') as f:
+                proc = subprocess.Popen("DEBIAN_FRONTEND=noninteractive "
+                                        "apt-get dist-upgrade -o "
+                                        "Dpkg::Options::=\"--force-confdef\""
+                                        " -o "
+                                        "Dpkg::Options::=\"--force-confold\""
+                                        " -y ",
+                                        shell=True, stdin=None,
+                                        stdout=f, stderr=f,
+                                        executable="/bin/bash")
+                proc.wait()
+
+            if proc.returncode == 0:
+                return True
+            else:
+                Log.error(self, "Unable to run apt-get dist_upgrade")
+        except Exception as e:
+            Log.error(self, "Error while installing packages, "
+                      "apt-get exited with error")
 
     def install(self, packages):
         all_packages = ' '.join(packages)
         try:
             with open('/var/log/ee/ee.log', 'a') as f:
-                proc = subprocess.Popen("apt-get install -o Dpkg::Options::=--"
-                                        "force-confold -y {0}"
+                proc = subprocess.Popen("DEBIAN_FRONTEND=noninteractive "
+                                        "apt-get install -o "
+                                        "Dpkg::Options::=\"--force-confdef\""
+                                        " -o "
+                                        "Dpkg::Options::=\"--force-confold\""
+                                        " -y {0}"
                                         .format(all_packages), shell=True,
                                         stdin=None, stdout=f, stderr=f,
                                         executable="/bin/bash")
diff --git a/ee/core/variables.py b/ee/core/variables.py
index ac2e51ab..8cbea03d 100644
--- a/ee/core/variables.py
+++ b/ee/core/variables.py
@@ -12,10 +12,10 @@ class EEVariables():
     """Intialization of core variables"""
 
     # EasyEngine version
-    ee_version = "3.1.1"
+    ee_version = "3.1.2"
 
     # EasyEngine packages versions
-    ee_wp_cli = "0.18.0"
+    ee_wp_cli = "0.19.0"
     ee_adminer = "4.2.1"
     ee_roundcube = "1.1.1"
     ee_vimbadmin = "3.0.11"
@@ -28,6 +28,15 @@ class EEVariables():
     ee_platform_version = platform.linux_distribution()[1]
     ee_platform_codename = os.popen("lsb_release -sc | tr -d \'\\n\'").read()
 
+    # Get timezone of system
+    if os.path.isfile('/etc/timezone'):
+        with open("/etc/timezone", "r") as tzfile:
+            ee_timezone = tzfile.read().replace('\n', '')
+            if ee_timezone == "Etc/UTC":
+                ee_timezone = "UTC"
+    else:
+        ee_timezone = "UTC"
+
     # Get FQDN of system
     ee_fqdn = socket.getfqdn()
 
@@ -77,14 +86,17 @@ class EEVariables():
 
     # PHP repo and packages
     if ee_platform_distro == 'Ubuntu':
-        ee_php_repo = "ppa:ondrej/php5"
+        ee_php_repo = "ppa:ondrej/php5-5.6"
     elif ee_platform_codename == 'wheezy':
-        ee_php_repo = ("deb http://packages.dotdeb.org {codename}-php55 all"
+        ee_php_repo = ("deb http://packages.dotdeb.org {codename}-php56 all"
                        .format(codename=ee_platform_codename))
     ee_php = ["php5-fpm", "php5-curl", "php5-gd", "php5-imap",
-              "php5-mcrypt", "php5-xdebug", "php5-common", "php5-readline",
+              "php5-mcrypt", "php5-common", "php5-readline",
               "php5-mysql", "php5-cli", "php5-memcache", "php5-imagick",
-              "memcached", "graphviz"]
+              "memcached", "graphviz", "php-pear", "php5-dev"]
+
+    if ee_platform_distro == 'Ubuntu':
+        ee_php = ee_php + ["php5-xdebug"]
 
     # MySQL repo and packages
     if ee_platform_distro == 'Ubuntu':
diff --git a/install b/install
index 81c862b5..5041992f 100644
--- a/install
+++ b/install
@@ -48,7 +48,7 @@ fi
 # Define variables for later use
 ee_branch=$1
 readonly ee_version_old="2.2.3"
-readonly ee_version_new="3.1.1"
+readonly ee_version_new="3.1.2"
 readonly ee_log_dir=/var/log/ee/
 readonly ee_install_log=/var/log/ee/install.log
 readonly ee_linux_distro=$(lsb_release -i | awk '{print $3}')
@@ -301,9 +301,9 @@ function ee_update_latest()
     fi
 
     # Fix HHVM autostart on reboot
-    dpkg -l | grep hhvm &>> /dev/null
+    dpkg --get-selections | grep -v deinstall | grep hhvm &>> /dev/null
     if [ $? -eq 0 ]; then
-        sudo update-rc.d hhvm defaults &>> /dev/null
+        update-rc.d hhvm defaults &>> /dev/null
     fi
 }
 
@@ -372,3 +372,11 @@ else
     fi
 fi
 ee sync | tee -ai $EE_INSTALL_LOG
+
+echo
+ee_lib_echo "For EasyEngine (ee) auto completion, run the following command"
+echo
+ee_lib_echo_info "source /etc/bash_completion.d/ee_auto.rc"
+echo
+ee_lib_echo "EasyEngine (ee) installed successfully"
+ee_lib_echo "EasyEngine (ee) help: http://docs.rtcamp.com/easyengine/"
diff --git a/setup.py b/setup.py
index 9c58ca4b..082ffa24 100644
--- a/setup.py
+++ b/setup.py
@@ -54,7 +54,7 @@ except Exception as e:
     os.system("git config --global user.email {0}".format(ee_email))
 
 setup(name='ee',
-      version='3.1.1',
+      version='3.1.2',
       description=long_description,
       long_description=long_description,
       classifiers=[],
@@ -97,13 +97,3 @@ setup(name='ee',
       """,
       namespace_packages=[],
       )
-
-print("""\033[94m
-For EasyEngine (ee) auto completion, run the following command
-\033[92m
-source /etc/bash_completion.d/ee_auto.rc
-\033[94m
-EasyEngine (ee) installed successfully
-EasyEngine (ee) help: http://docs.rtcamp.com/easyengine/
-\033[0m
-""")