diff --git a/include/class.config.php b/include/class.config.php
index cc9b497682097d0e622dbbd410b0a4f5b0fae601..c43f2e305b405b992916324ce0a3813015cf83f8 100644
--- a/include/class.config.php
+++ b/include/class.config.php
@@ -19,7 +19,6 @@ require_once(INCLUDE_DIR.'class.email.php');
 class Config {
     
     var $id=0;
-    var $mysqltzoffset=0;
     var $config=array();
 
     var $defaultDept;   //Default Department    
@@ -543,35 +542,32 @@ class Config {
         return $this->config['upload_dir'];
     }
     
-    function updateSettings($vars,&$errors) {
+    function updateSettings($vars, &$errors) {
 
         if(!$vars || $errors)
             return false;
         
         switch(strtolower($vars['t'])) {
-            case 'general':
-                return $this->updateGeneralSetting($vars,$errors);
-                break;
-            case 'dates':
-                return $this->updateDateTimeSetting($vars,$errors);
+            case 'system':
+                return $this->updateSystemSettings($vars, $errors);
                 break;
             case 'tickets':
-                return $this->updateTicketsSetting($vars,$errors);
+                return $this->updateTicketsSettings($vars, $errors);
                 break;
             case 'emails':
-                return $this->updateEmailsSetting($vars,$errors);
+                return $this->updateEmailsSettings($vars, $errors);
                 break;
            case 'attachments':
                 return $this->updateAttachmentsSetting($vars,$errors);
                 break;
-           case 'autoresponders':
-                return $this->updateAutoresponderSetting($vars,$errors);
+           case 'autoresp':
+                return $this->updateAutoresponderSettings($vars, $errors);
                 break;
             case 'alerts':
-                return $this->updateAlertsSetting($vars,$errors);
+                return $this->updateAlertsSettings($vars, $errors);
                 break;
             case 'kb':
-                return $this->updateKBSetting($vars,$errors);
+                return $this->updateKBSettings($vars, $errors);
                 break;
             default:
                 $errors['err']='Unknown setting option. Get technical support.';
@@ -580,7 +576,7 @@ class Config {
         return false;
     }
 
-    function updateGeneralSetting($vars, &$errors) {
+    function updateSystemSettings($vars, &$errors) {
 
         $f=array();
         $f['helpdesk_url']=array('type'=>'string',   'required'=>1, 'error'=>'Helpdesk URl required');
@@ -589,6 +585,13 @@ class Config {
         $f['default_template_id']=array('type'=>'int',   'required'=>1, 'error'=>'You must select template.');
         $f['staff_session_timeout']=array('type'=>'int',   'required'=>1, 'error'=>'Enter idle time in minutes');
         $f['client_session_timeout']=array('type'=>'int',   'required'=>1, 'error'=>'Enter idle time in minutes');
+        //Date & Time Options
+        $f['time_format']=array('type'=>'string',   'required'=>1, 'error'=>'Time format required');
+        $f['date_format']=array('type'=>'string',   'required'=>1, 'error'=>'Date format required');
+        $f['datetime_format']=array('type'=>'string',   'required'=>1, 'error'=>'Datetime format required');
+        $f['daydatetime_format']=array('type'=>'string',   'required'=>1, 'error'=>'Day, Datetime format required');
+        $f['default_timezone_id']=array('type'=>'int',   'required'=>1, 'error'=>'Default Timezone required');
+
 
         if(!Validator::process($f, $vars, $errors) || $errors)
             return false;
@@ -610,26 +613,6 @@ class Config {
             .',client_max_logins='.db_input($vars['client_max_logins'])
             .',client_login_timeout='.db_input($vars['client_login_timeout'])
             .',client_session_timeout='.db_input($vars['client_session_timeout'])
-            .',clickable_urls='.db_input(isset($vars['clickable_urls'])?1:0)
-            .',enable_auto_cron='.db_input(isset($vars['enable_auto_cron'])?1:0)
-            .' WHERE id='.db_input($this->getId());
-        
-        return (db_query($sql));
-    }
-
-    function updateDateTimeSetting($vars,&$errors) {
-
-        $f=array();
-        $f['time_format']=array('type'=>'string',   'required'=>1, 'error'=>'Time format required');
-        $f['date_format']=array('type'=>'string',   'required'=>1, 'error'=>'Date format required');
-        $f['datetime_format']=array('type'=>'string',   'required'=>1, 'error'=>'Datetime format required');
-        $f['daydatetime_format']=array('type'=>'string',   'required'=>1, 'error'=>'Day, Datetime format required');
-        $f['default_timezone_id']=array('type'=>'int',   'required'=>1, 'error'=>'Default Timezone required');
-             
-        if(!Validator::process($f,$vars,$errors) || $errors)
-            return false;
-
-        $sql='UPDATE '.CONFIG_TABLE.' SET updated=NOW() '
             .',time_format='.db_input($vars['time_format'])
             .',date_format='.db_input($vars['date_format'])
             .',datetime_format='.db_input($vars['datetime_format'])
@@ -641,7 +624,7 @@ class Config {
         return (db_query($sql));
     }
 
-    function updateTicketsSetting($vars,&$errors) {
+    function updateTicketsSettings($vars, &$errors) {
 
 
         $f=array();
@@ -658,7 +641,30 @@ class Config {
                 $errors['enable_captcha']='PNG support required for Image Captcha';
         }
 
-        if(!Validator::process($f,$vars,$errors) || $errors)
+        if($vars['allow_attachments']) {
+
+            if(!ini_get('file_uploads'))
+                $errors['err']='The \'file_uploads\' directive is disabled in php.ini';
+
+            if(!is_numeric($vars['max_file_size']))
+                $errors['max_file_size']='Maximum file size required';
+
+            if(!$vars['allowed_filetypes'])
+                $errors['allowed_filetypes']='Allowed file extentions required';
+
+            if(!($maxfileuploads=ini_get('max_file_uploads')))
+                $maxfileuploads=DEFAULT_MAX_FILE_UPLOADS;
+
+            if(!$vars['max_user_file_uploads'] || $vars['max_user_file_uploads']>$maxfileuploads)
+                $errors['max_user_file_uploads']='Invalid selection. Must be less than '.$maxfileuploads;
+
+            if(!$vars['max_staff_file_uploads'] || $vars['max_staff_file_uploads']>$maxfileuploads)
+                $errors['max_staff_file_uploads']='Invalid selection. Must be less than '.$maxfileuploads;
+        }
+
+
+
+        if(!Validator::process($f, $vars, $errors) || $errors)
             return false;
 
         $sql='UPDATE '.CONFIG_TABLE.' SET updated=NOW() '
@@ -676,14 +682,24 @@ class Config {
             .',show_answered_tickets='.db_input(isset($vars['show_answered_tickets'])?1:0)
             .',show_related_tickets='.db_input(isset($vars['show_related_tickets'])?1:0)
             .',show_notes_inline='.db_input(isset($vars['show_notes_inline'])?1:0)
+            .',clickable_urls='.db_input(isset($vars['clickable_urls'])?1:0)
             .',hide_staff_name='.db_input(isset($vars['hide_staff_name'])?1:0)
+            .',allow_attachments='.db_input(isset($vars['allow_attachments'])?1:0)
+            .',allowed_filetypes='.db_input(strtolower(preg_replace("/\n\r|\r\n|\n|\r/", '',trim($vars['allowed_filetypes']))))
+            .',max_file_size='.db_input($vars['max_file_size'])
+            .',max_user_file_uploads='.db_input($vars['max_user_file_uploads'])
+            .',max_staff_file_uploads='.db_input($vars['max_staff_file_uploads'])
+            .',email_attachments='.db_input(isset($vars['email_attachments'])?1:0)
+            .',allow_email_attachments='.db_input(isset($vars['allow_email_attachments'])?1:0)
+            .',allow_online_attachments='.db_input(isset($vars['allow_online_attachments'])?1:0)
+            .',allow_online_attachments_onlogin='.db_input(isset($vars['allow_online_attachments_onlogin'])?1:0)
             .' WHERE id='.db_input($this->getId());
 
         return (db_query($sql));
     }
 
 
-    function updateEmailsSetting($vars,&$errors) {
+    function updateEmailsSettings($vars, &$errors) {
 
         $f=array();
         $f['default_email_id']=array('type'=>'int',   'required'=>1, 'error'=>'Default email required');
@@ -704,6 +720,7 @@ class Config {
             .',alert_email_id='.db_input($vars['alert_email_id'])
             .',default_smtp_id='.db_input($vars['default_smtp_id'])
             .',admin_email='.db_input($vars['admin_email'])
+            .',enable_auto_cron='.db_input(isset($vars['enable_auto_cron'])?1:0)
             .',enable_mail_polling='.db_input(isset($vars['enable_mail_polling'])?1:0)
             .',enable_email_piping='.db_input(isset($vars['enable_email_piping'])?1:0)
             .',strip_quoted_reply='.db_input(isset($vars['strip_quoted_reply'])?1:0)
@@ -756,7 +773,7 @@ class Config {
         return (db_query($sql));
     }
 
-    function updateAutoresponderSetting($vars,&$errors) {
+    function updateAutoresponderSettings($vars, &$errors) {
 
         if($errors) return false;
 
@@ -771,7 +788,7 @@ class Config {
     }
 
 
-    function updateKBSetting($vars,&$errors) {
+    function updateKBSettings($vars, &$errors) {
 
         if($errors) return false;
 
@@ -784,7 +801,7 @@ class Config {
     }
 
 
-    function updateAlertsSetting($vars,&$errors) {
+    function updateAlertsSettings($vars, &$errors) {
 
 
        if($vars['ticket_alert_active']