diff --git a/electron-projects/ucap-webmessenger-electron/src/index.ts b/electron-projects/ucap-webmessenger-electron/src/index.ts
index fbd7b806..118c3361 100644
--- a/electron-projects/ucap-webmessenger-electron/src/index.ts
+++ b/electron-projects/ucap-webmessenger-electron/src/index.ts
@@ -1,4 +1,12 @@
-import { app, ipcMain, IpcMainEvent, Tray, Menu, shell } from 'electron';
+import {
+  app,
+  ipcMain,
+  IpcMainEvent,
+  Tray,
+  Menu,
+  shell,
+  dialog
+} from 'electron';
 import path from 'path';
 import fse from 'fs-extra';
 import semver from 'semver';
@@ -22,7 +30,6 @@ import { ElectronNotificationService } from '@ucap-webmessenger/electron-notific
 import { ElectronUpdateWindowService } from '@ucap-webmessenger/electron-update-window';
 
 import { root } from './util/root';
-import { DefaultFolder } from './lib/default-folder';
 import { FileUtil } from './lib/file-util';
 
 import { IdleChecker } from './lib/idle-checker';
@@ -453,7 +460,7 @@ ipcMain.on(
       const fileName: string = args[1];
       const mimeType: string = args[2];
       let savePath: string = path.join(
-        !!args[3] ? args[3] : DefaultFolder.downloads(),
+        !!args[3] ? args[3] : app.getPath('downloads'),
         fileName
       );
       savePath = await FileUtil.uniqueFileName(savePath);
@@ -478,7 +485,7 @@ ipcMain.on(
       let folderItem: string = args[0];
       const make: boolean = args[1];
       if (!folderItem) {
-        folderItem = DefaultFolder.downloads();
+        folderItem = app.getPath('downloads');
       }
 
       let isSuccess = true;
@@ -512,6 +519,23 @@ ipcMain.on(FileChannel.GetPath, async (event: IpcMainEvent, ...args: any[]) => {
   }
 });
 
+ipcMain.on(
+  FileChannel.SelectDirectory,
+  (event: IpcMainEvent, ...args: any[]) => {
+    dialog
+      .showOpenDialog(appWindow.browserWindow, {
+        defaultPath: app.getPath('home'),
+        properties: ['openDirectory']
+      })
+      .then(value => {
+        event.returnValue = value.filePaths[0];
+      })
+      .catch(reason => {
+        event.returnValue = undefined;
+      });
+  }
+);
+
 ipcMain.on(
   IdleStateChannel.StartCheck,
   (event: IpcMainEvent, ...args: any[]) => {
diff --git a/electron-projects/ucap-webmessenger-electron/src/lib/default-folder.ts b/electron-projects/ucap-webmessenger-electron/src/lib/default-folder.ts
deleted file mode 100644
index 6a8e659d..00000000
--- a/electron-projects/ucap-webmessenger-electron/src/lib/default-folder.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import * as os from 'os';
-import { execSync } from 'child_process';
-import * as fse from 'fs-extra';
-
-export class DefaultFolder {
-  static downloads(): string {
-    switch (os.platform()) {
-      case 'win32':
-        return `${process.env.USERPROFILE}/Downloads`;
-      case 'darwin':
-        return `${process.env.HOME}/Downloads`;
-      case 'linux': {
-        let dir: Buffer;
-        try {
-          dir = execSync('xdg-user-dir DOWNLOAD', { stdio: [0, 3, 3] });
-        } catch (_) {}
-
-        if (dir) {
-          return dir.toString('utf-8');
-        }
-
-        let stat: fse.Stats;
-        const homeDownloads = `${process.env.HOME}/Downloads`;
-        try {
-          stat = fse.statSync(homeDownloads);
-        } catch (_) {}
-        if (stat) {
-          return homeDownloads;
-        }
-        return '/tmp/';
-      }
-
-      default:
-        break;
-    }
-  }
-}
diff --git a/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/settings/messenger-settings.dialog.component.html b/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/settings/messenger-settings.dialog.component.html
index 61153bf1..62bb73d3 100644
--- a/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/settings/messenger-settings.dialog.component.html
+++ b/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/settings/messenger-settings.dialog.component.html
@@ -65,7 +65,11 @@
             
             대화
           
-          
+          
         
       
 
diff --git a/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/settings/messenger-settings.dialog.component.ts b/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/settings/messenger-settings.dialog.component.ts
index f25b9c23..79fb0782 100644
--- a/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/settings/messenger-settings.dialog.component.ts
+++ b/projects/ucap-webmessenger-app/src/app/layouts/messenger/dialogs/settings/messenger-settings.dialog.component.ts
@@ -17,14 +17,19 @@ import {
 } from '@ucap-webmessenger/ui';
 import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
 import { LoginResponse } from '@ucap-webmessenger/protocol-authentication';
-import { map } from 'rxjs/operators';
+import { map, take } from 'rxjs/operators';
 import { DOCUMENT } from '@angular/common';
 import { AppUserInfo, KEY_APP_USER_INFO } from '@app/types/app-user-info.type';
+import {
+  EnvironmentsInfo,
+  KEY_ENVIRONMENTS_INFO
+} from '@app/types/environment.type';
 import { environment } from '../../../../../environments/environment';
 import {
   GeneralSetting,
   Settings,
-  NotificationSetting
+  NotificationSetting,
+  ChatSetting
 } from '@ucap-webmessenger/ui-settings';
 import { NativeService, UCAP_NATIVE_SERVICE } from '@ucap-webmessenger/native';
 import { TranslateService } from '@ngx-translate/core';
@@ -43,6 +48,7 @@ export interface MessengerSettingsDialogResult {}
 export class MessengerSettingsDialogComponent implements OnInit {
   loginRes: LoginResponse;
   sessionVerinfo: VersionInfo2Response;
+  environmentsInfo: EnvironmentsInfo;
 
   modifiedSettings: Settings;
 
@@ -76,6 +82,9 @@ export class MessengerSettingsDialogComponent implements OnInit {
     this.sessionVerinfo = this.sessionStorageService.get(
       KEY_VER_INFO
     );
+    this.environmentsInfo = this.sessionStorageService.get(
+      KEY_ENVIRONMENTS_INFO
+    );
     this.loginRes = this.sessionStorageService.get(
       KEY_LOGIN_RES_INFO
     );
@@ -84,32 +93,59 @@ export class MessengerSettingsDialogComponent implements OnInit {
   ngOnInit() {}
 
   onChangedGeneralSetting(setting: GeneralSetting) {
-    this.applySettings(this.modifiedSettings, {
+    this.modifiedSettings = this.applySettings(this.modifiedSettings, {
       ...this.appUserInfo.settings,
       general: setting
     });
   }
 
   onChangedNotificationSetting(setting: NotificationSetting) {
-    this.applySettings(this.modifiedSettings, {
+    this.modifiedSettings = this.applySettings(this.modifiedSettings, {
       ...this.appUserInfo.settings,
       notification: setting
     });
   }
 
+  onChangedChatSetting(setting: ChatSetting) {
+    this.modifiedSettings = this.applySettings(this.modifiedSettings, {
+      ...this.appUserInfo.settings,
+      chat: setting
+    });
+  }
+
   onClickChoice(choice: boolean): void {
     if (choice) {
-      if (ObjectUtil.equals(this.appUserInfo.settings, this.modifiedSettings)) {
-        // There is not modified settings.
-        return;
+      if (
+        !ObjectUtil.equals(this.appUserInfo.settings, this.modifiedSettings)
+      ) {
+        this.optionProtocolService
+          .regUpdate({
+            absenceTime: this.modifiedSettings.presence.absenceTime,
+            deviceType: this.environmentsInfo.deviceType,
+            fontFamily: this.modifiedSettings.chat.fontFamily,
+            fontSize: this.modifiedSettings.chat.fontSize,
+            hrInformationLanguage: this.modifiedSettings.general.hrInfoLocale,
+            menuLanguage: this.modifiedSettings.general.locale,
+            mobileNotification: this.modifiedSettings.notification
+              .receiveForMobile,
+            notificationExposureTime: this.modifiedSettings.notification
+              .alertExposureTime,
+            notificationMethod: this.modifiedSettings.notification.method,
+            notificationMethod0: this.modifiedSettings.notification.method,
+            receiveNotification: this.modifiedSettings.notification.use,
+            timeZone: this.modifiedSettings.general.timezone,
+            timeZoneValue: '0'
+          })
+          .pipe(take(1))
+          .subscribe(res => {
+            this.appUserInfo.settings = this.modifiedSettings;
+            this.localStorageService.encSet(
+              KEY_APP_USER_INFO,
+              this.appUserInfo,
+              environment.customConfig.appKey
+            );
+          });
       }
-
-      this.appUserInfo.settings = this.modifiedSettings;
-      this.localStorageService.encSet(
-        KEY_APP_USER_INFO,
-        this.appUserInfo,
-        environment.customConfig.appKey
-      );
     } else {
       this.applySettings(this.modifiedSettings, this.appUserInfo.settings);
     }
@@ -117,7 +153,10 @@ export class MessengerSettingsDialogComponent implements OnInit {
     this.dialogRef.close({});
   }
 
-  private applySettings(oriSettings: Settings, modSettings: Settings) {
+  private applySettings(
+    oriSettings: Settings,
+    modSettings: Settings
+  ): Settings {
     if (oriSettings.general.appTheme !== modSettings.general.appTheme) {
       this.renderer2.setAttribute(
         this.document.body,
@@ -148,6 +187,6 @@ export class MessengerSettingsDialogComponent implements OnInit {
       );
     }
 
-    oriSettings = modSettings;
+    return modSettings;
   }
 }
diff --git a/projects/ucap-webmessenger-app/src/app/services/app.service.ts b/projects/ucap-webmessenger-app/src/app/services/app.service.ts
index c5c433ba..10f1dbf2 100644
--- a/projects/ucap-webmessenger-app/src/app/services/app.service.ts
+++ b/projects/ucap-webmessenger-app/src/app/services/app.service.ts
@@ -49,12 +49,6 @@ export class AppService {
           deviceType = DeviceType.Web;
         }
 
-        this.logger.info(
-          'platform is desktop ',
-          this.enviromentsService.desktop()
-        );
-        this.logger.info('native type is ', this.nativeService.type());
-
         this.sessionStorageService.set(
           KEY_ENVIRONMENTS_INFO,
           {
diff --git a/projects/ucap-webmessenger-app/src/app/services/authentication.service.ts b/projects/ucap-webmessenger-app/src/app/services/authentication.service.ts
index 0897c805..5680d3f4 100644
--- a/projects/ucap-webmessenger-app/src/app/services/authentication.service.ts
+++ b/projects/ucap-webmessenger-app/src/app/services/authentication.service.ts
@@ -66,7 +66,7 @@ export class AppAuthenticationService {
           ...environment.productConfig.defaultSettings,
           chat: {
             ...environment.productConfig.defaultSettings.chat,
-            downloadPath: `${this.nativeService.getPath(
+            downloadPath: `${await this.nativeService.getPath(
               'documents'
             )}/LG UCAP 받은 파일`
           }
diff --git a/projects/ucap-webmessenger-app/src/app/services/notification.service.ts b/projects/ucap-webmessenger-app/src/app/services/notification.service.ts
index a92251d3..05d09839 100644
--- a/projects/ucap-webmessenger-app/src/app/services/notification.service.ts
+++ b/projects/ucap-webmessenger-app/src/app/services/notification.service.ts
@@ -99,6 +99,7 @@ import { LocalStorageService } from '@ucap-webmessenger/web-storage';
 import { AppUserInfo, KEY_APP_USER_INFO } from '@app/types/app-user-info.type';
 
 import { environment } from '../../environments/environment';
+import { NotificationMethod } from '@ucap-webmessenger/core';
 
 @Injectable()
 export class AppNotificationService {
@@ -183,12 +184,14 @@ export class AppNotificationService {
                         noti.message
                       ),
                       image: '',
-                      useSound:
-                        'SOUND' === appUserInfo.settings.notification.method ||
-                        'SOUND_ALERT' ===
-                          appUserInfo.settings.notification.method
-                          ? true
-                          : false,
+                      useSound: [
+                        NotificationMethod.Sound,
+                        NotificationMethod.SoundAndAlert
+                      ].some(
+                        n => n === appUserInfo.settings.notification.method
+                      )
+                        ? true
+                        : false,
                       displayTime:
                         appUserInfo.settings.notification.alertExposureTime *
                         1000
@@ -535,11 +538,12 @@ export class AppNotificationService {
                     title: '쪽지가 도착했습니다.',
                     contents: noti.text,
                     image: noti.senderInfo.profileImageFile,
-                    useSound:
-                      'SOUND' === appUserInfo.settings.notification.method ||
-                      'SOUND_ALERT' === appUserInfo.settings.notification.method
-                        ? true
-                        : false,
+                    useSound: [
+                      NotificationMethod.Sound,
+                      NotificationMethod.SoundAndAlert
+                    ].some(n => n === appUserInfo.settings.notification.method)
+                      ? true
+                      : false,
                     displayTime:
                       appUserInfo.settings.notification.alertExposureTime * 1000
                   };
diff --git a/projects/ucap-webmessenger-app/src/app/store/messenger/option/reducers.ts b/projects/ucap-webmessenger-app/src/app/store/messenger/option/reducers.ts
index 148e07aa..2cabd5eb 100644
--- a/projects/ucap-webmessenger-app/src/app/store/messenger/option/reducers.ts
+++ b/projects/ucap-webmessenger-app/src/app/store/messenger/option/reducers.ts
@@ -11,12 +11,7 @@ export const reducer = createReducer(
       reg: action.res
     };
   }),
-  on(regUpdateSuccess, (state, action) => {
-    return {
-      ...state,
-      reg: action.res
-    };
-  }),
+
   on(AuthenticationStore.logoutInitialize, (state, action) => {
     return {
       ...initialState
diff --git a/projects/ucap-webmessenger-app/src/environments/environment.daesang.dev.ts b/projects/ucap-webmessenger-app/src/environments/environment.daesang.dev.ts
index c6b225d8..99b02ebc 100644
--- a/projects/ucap-webmessenger-app/src/environments/environment.daesang.dev.ts
+++ b/projects/ucap-webmessenger-app/src/environments/environment.daesang.dev.ts
@@ -9,7 +9,7 @@ import {
   messageApiUrls,
   promptUrls
 } from './environment.type';
-import { DeviceType } from '@ucap-webmessenger/core';
+import { DeviceType, NotificationMethod } from '@ucap-webmessenger/core';
 
 export const environment: Environment = {
   production: false,
@@ -49,7 +49,7 @@ export const environment: Environment = {
       },
       notification: {
         use: true,
-        method: 'SOUND_ALERT',
+        method: NotificationMethod.SoundAndAlert,
         alertExposureTime: 5,
         receiveForMobile: false,
         receiveForMessage: false
@@ -58,6 +58,9 @@ export const environment: Environment = {
         fontFamily: 'Malgun Gothic',
         fontSize: 12,
         downloadPath: undefined
+      },
+      presence: {
+        absenceTime: 10
       }
     },
     CommonSetting: {
diff --git a/projects/ucap-webmessenger-app/src/environments/environment.daesang.prod.ts b/projects/ucap-webmessenger-app/src/environments/environment.daesang.prod.ts
index d07dc1c8..c2c16cfc 100644
--- a/projects/ucap-webmessenger-app/src/environments/environment.daesang.prod.ts
+++ b/projects/ucap-webmessenger-app/src/environments/environment.daesang.prod.ts
@@ -9,7 +9,7 @@ import {
   messageApiUrls,
   promptUrls
 } from './environment.type';
-import { DeviceType } from '@ucap-webmessenger/core';
+import { DeviceType, NotificationMethod } from '@ucap-webmessenger/core';
 
 export const environment: Environment = {
   production: true,
@@ -49,7 +49,7 @@ export const environment: Environment = {
       },
       notification: {
         use: true,
-        method: 'SOUND_ALERT',
+        method: NotificationMethod.SoundAndAlert,
         alertExposureTime: 5,
         receiveForMobile: false,
         receiveForMessage: false
@@ -58,6 +58,9 @@ export const environment: Environment = {
         fontFamily: 'Malgun Gothic',
         fontSize: 12,
         downloadPath: undefined
+      },
+      presence: {
+        absenceTime: 10
       }
     },
     CommonSetting: {
diff --git a/projects/ucap-webmessenger-app/src/environments/environment.dev.ts b/projects/ucap-webmessenger-app/src/environments/environment.dev.ts
index 5f74d137..9c5cfb17 100644
--- a/projects/ucap-webmessenger-app/src/environments/environment.dev.ts
+++ b/projects/ucap-webmessenger-app/src/environments/environment.dev.ts
@@ -9,7 +9,7 @@ import {
   messageApiUrls,
   promptUrls
 } from './environment.type';
-import { DeviceType } from '@ucap-webmessenger/core';
+import { DeviceType, NotificationMethod } from '@ucap-webmessenger/core';
 
 export const environment: Environment = {
   production: false,
@@ -49,7 +49,7 @@ export const environment: Environment = {
       },
       notification: {
         use: true,
-        method: 'SOUND_ALERT',
+        method: NotificationMethod.SoundAndAlert,
         alertExposureTime: 5,
         receiveForMobile: false,
         receiveForMessage: false
@@ -58,6 +58,9 @@ export const environment: Environment = {
         fontFamily: 'Malgun Gothic',
         fontSize: 12,
         downloadPath: undefined
+      },
+      presence: {
+        absenceTime: 10
       }
     },
     CommonSetting: {
diff --git a/projects/ucap-webmessenger-app/src/environments/environment.prod.ts b/projects/ucap-webmessenger-app/src/environments/environment.prod.ts
index 4d14cb42..f7df8e9c 100644
--- a/projects/ucap-webmessenger-app/src/environments/environment.prod.ts
+++ b/projects/ucap-webmessenger-app/src/environments/environment.prod.ts
@@ -9,7 +9,7 @@ import {
   messageApiUrls,
   promptUrls
 } from './environment.type';
-import { DeviceType } from '@ucap-webmessenger/core';
+import { DeviceType, NotificationMethod } from '@ucap-webmessenger/core';
 
 export const environment: Environment = {
   production: true,
@@ -49,7 +49,7 @@ export const environment: Environment = {
       },
       notification: {
         use: true,
-        method: 'SOUND_ALERT',
+        method: NotificationMethod.SoundAndAlert,
         alertExposureTime: 5,
         receiveForMobile: false,
         receiveForMessage: false
@@ -58,6 +58,9 @@ export const environment: Environment = {
         fontFamily: 'Malgun Gothic',
         fontSize: 12,
         downloadPath: undefined
+      },
+      presence: {
+        absenceTime: 10
       }
     },
     CommonSetting: {
diff --git a/projects/ucap-webmessenger-native-browser/src/lib/services/browser-native.service.ts b/projects/ucap-webmessenger-native-browser/src/lib/services/browser-native.service.ts
index 54b973b6..9edbae84 100644
--- a/projects/ucap-webmessenger-native-browser/src/lib/services/browser-native.service.ts
+++ b/projects/ucap-webmessenger-native-browser/src/lib/services/browser-native.service.ts
@@ -167,6 +167,12 @@ export class BrowserNativeService extends NativeService {
     });
   }
 
+  selectDirectory(): Promise {
+    return new Promise((resolve, reject) => {
+      resolve('');
+    });
+  }
+
   windowStateChanged(): Observable {
     return new Observable(subscriber => {
       try {
diff --git a/projects/ucap-webmessenger-native-electron/src/lib/services/electron-native.service.ts b/projects/ucap-webmessenger-native-electron/src/lib/services/electron-native.service.ts
index c6fb1922..09f78783 100644
--- a/projects/ucap-webmessenger-native-electron/src/lib/services/electron-native.service.ts
+++ b/projects/ucap-webmessenger-native-electron/src/lib/services/electron-native.service.ts
@@ -269,6 +269,16 @@ export class ElectronNativeService implements NativeService {
     });
   }
 
+  selectDirectory(): Promise {
+    return new Promise((resolve, reject) => {
+      try {
+        resolve(this.ipcRenderer.sendSync(FileChannel.SelectDirectory));
+      } catch (error) {
+        reject(error);
+      }
+    });
+  }
+
   windowStateChanged(): Observable {
     if (!this.windowStateChangedSubject) {
       this.windowStateChangedSubject = new Subject();
diff --git a/projects/ucap-webmessenger-native-electron/src/lib/types/channel.type.ts b/projects/ucap-webmessenger-native-electron/src/lib/types/channel.type.ts
index d6366a33..2381879d 100644
--- a/projects/ucap-webmessenger-native-electron/src/lib/types/channel.type.ts
+++ b/projects/ucap-webmessenger-native-electron/src/lib/types/channel.type.ts
@@ -32,7 +32,8 @@ export enum FileChannel {
   ShowImageViewer = 'UCAP::file::showImageViewer',
   SaveFile = 'UCAP::file::saveFile',
   ReadFile = 'UCAP::file::readFile',
-  GetPath = 'UCAP::file::getPath'
+  GetPath = 'UCAP::file::getPath',
+  SelectDirectory = 'UCAP::file::selectDirectory'
 }
 
 export enum WindowStateChannel {
diff --git a/projects/ucap-webmessenger-native/src/lib/services/native.service.ts b/projects/ucap-webmessenger-native/src/lib/services/native.service.ts
index c2553652..3886e046 100644
--- a/projects/ucap-webmessenger-native/src/lib/services/native.service.ts
+++ b/projects/ucap-webmessenger-native/src/lib/services/native.service.ts
@@ -54,6 +54,7 @@ export abstract class NativeService {
   ): Promise;
   abstract openTargetItem(filePath?: string): Promise;
   abstract getPath(name: NativePathName): Promise;
+  abstract selectDirectory(): Promise;
 
   abstract windowStateChanged(): Observable;
   abstract windowClose(): void;
diff --git a/projects/ucap-webmessenger-protocol-option/src/lib/protocols/reg-update.ts b/projects/ucap-webmessenger-protocol-option/src/lib/protocols/reg-update.ts
index 66e82455..e4160f89 100644
--- a/projects/ucap-webmessenger-protocol-option/src/lib/protocols/reg-update.ts
+++ b/projects/ucap-webmessenger-protocol-option/src/lib/protocols/reg-update.ts
@@ -15,27 +15,27 @@ export interface RegUpdateRequest extends ProtocolRequest {
   // 0 알림방법(n)
   notificationMethod: NotificationMethod;
   // 1 모바일알림(n)
-  mobileNotification: number;
+  mobileNotification: boolean;
   // 2 폰트종류(s)
   fontFamily: string;
   // 3 폰트크기(n)
   fontSize: number;
   // 4 알림받음/받지않음(n)
-  receiveNotification: number;
+  receiveNotification: boolean;
   // 5 알림방법(n)
   notificationMethod0: number;
   // 6 알림창 설정(n)
   notificationExposureTime: number;
   // 7 타임존(s)
   timeZone: string;
-  // 8 타임존값(s)
+  // 8 타임존(s)
   timeZoneValue: string;
   // 9 부재중시간설정(n)
   absenceTime: number;
   // 10 메뉴 언어(n)
-  menuLanguage: number;
+  menuLanguage: string;
   // 11 인사정보 언어(n)
-  hrInformationLanguage: number;
+  hrInformationLanguage: string;
   deviceType: DeviceType;
 }
 
@@ -43,13 +43,13 @@ export interface RegUpdateResponse extends ProtocolResponse {
   // 0 알림방법(n)
   notificationMethod?: NotificationMethod;
   // 1 모바일알림(n)
-  mobileNotification?: number;
+  mobileNotification?: boolean;
   // 2 폰트종류(s)
   fontFamily?: string;
   // 3 폰트크기(n)
   fontSize?: number;
   // 4 알림받음/받지않음(n)
-  receiveNotification?: number;
+  receiveNotification?: boolean;
   // 5 알림방법(n)
   notificationMethod0?: number;
   // 6 알림창 설정(n)
@@ -61,9 +61,9 @@ export interface RegUpdateResponse extends ProtocolResponse {
   // 9 부재중시간설정(n)
   absenceTime?: number;
   // 10 메뉴 언어(n)
-  menuLanguage?: number;
+  menuLanguage?: string;
   // 11 인사정보 언어(n)
-  hrInformationLanguage?: number;
+  hrInformationLanguage?: string;
   // 12 단말타입(s)
   deviceType?: DeviceType;
   // 13 번역키
@@ -81,7 +81,7 @@ export const encodeRegUpdate: ProtocolEncoder = (
   });
   bodyList.push({
     type: PacketBodyValue.Integer,
-    value: req.mobileNotification
+    value: req.mobileNotification ? 1 : 0
   });
   bodyList.push({
     type: PacketBodyValue.String,
@@ -93,7 +93,7 @@ export const encodeRegUpdate: ProtocolEncoder = (
   });
   bodyList.push({
     type: PacketBodyValue.Integer,
-    value: req.receiveNotification
+    value: req.receiveNotification ? 1 : 0
   });
   bodyList.push({
     type: PacketBodyValue.Integer,
@@ -116,11 +116,11 @@ export const encodeRegUpdate: ProtocolEncoder = (
     value: req.absenceTime
   });
   bodyList.push({
-    type: PacketBodyValue.Integer,
+    type: PacketBodyValue.String,
     value: req.menuLanguage
   });
   bodyList.push({
-    type: PacketBodyValue.Integer,
+    type: PacketBodyValue.String,
     value: req.hrInformationLanguage
   });
   bodyList.push({
@@ -136,10 +136,10 @@ export const decodeRegUpdate: ProtocolDecoder = (
 ) => {
   return decodeProtocolMessage(message, {
     notificationMethod: message.bodyList[0] as NotificationMethod,
-    mobileNotification: message.bodyList[1],
+    mobileNotification: message.bodyList[1] === 1 ? true : false,
     fontFamily: message.bodyList[2],
     fontSize: message.bodyList[3],
-    receiveNotification: message.bodyList[4],
+    receiveNotification: message.bodyList[4] === 1 ? true : false,
     notificationMethod0: message.bodyList[5],
     notificationExposureTime: message.bodyList[6],
     timeZone: message.bodyList[7],
diff --git a/projects/ucap-webmessenger-ui-message/src/lib/components/write.component.ts b/projects/ucap-webmessenger-ui-message/src/lib/components/write.component.ts
index 3b2910b2..5edf188c 100644
--- a/projects/ucap-webmessenger-ui-message/src/lib/components/write.component.ts
+++ b/projects/ucap-webmessenger-ui-message/src/lib/components/write.component.ts
@@ -167,6 +167,7 @@ export class WriteComponent implements OnInit, OnDestroy, AfterViewInit {
       }
 
       self.fileInput.nativeElement.value = '';
+      this.fileInput.nativeElement.onchange = undefined;
     };
   }
 
diff --git a/projects/ucap-webmessenger-ui-settings/src/lib/components/chat.component.html b/projects/ucap-webmessenger-ui-settings/src/lib/components/chat.component.html
index 51bf109b..6f0a84f4 100644
--- a/projects/ucap-webmessenger-ui-settings/src/lib/components/chat.component.html
+++ b/projects/ucap-webmessenger-ui-settings/src/lib/components/chat.component.html
@@ -21,14 +21,14 @@
       
         
           
             
-              fontSize
+              {{ fontSize }}
             
           
         
@@ -37,11 +37,16 @@
 
     
 
-    파일 전송
-    
+    파일 전송
+    
       
-        
-        
+        
       
     
   
diff --git a/projects/ucap-webmessenger-ui-settings/src/lib/components/chat.component.ts b/projects/ucap-webmessenger-ui-settings/src/lib/components/chat.component.ts
index c9722b75..2148c2f4 100644
--- a/projects/ucap-webmessenger-ui-settings/src/lib/components/chat.component.ts
+++ b/projects/ucap-webmessenger-ui-settings/src/lib/components/chat.component.ts
@@ -4,7 +4,10 @@ import {
   ChangeDetectorRef,
   Input,
   Output,
-  EventEmitter
+  EventEmitter,
+  ViewChild,
+  ElementRef,
+  Inject
 } from '@angular/core';
 import { NGXLogger } from 'ngx-logger';
 import { MatSelectChange } from '@angular/material';
@@ -12,6 +15,7 @@ import { MatSelectChange } from '@angular/material';
 import { EnviromentsService } from '@ucap-webmessenger/enviroments';
 
 import { ChatSetting } from '../models/settings';
+import { NativeService, UCAP_NATIVE_SERVICE } from '@ucap-webmessenger/native';
 
 @Component({
   selector: 'ucap-settings-chat',
@@ -25,14 +29,17 @@ export class ChatComponent implements OnInit {
   @Output()
   changed = new EventEmitter();
 
-  private readonly isDesktop = false;
-  private readonly isBrowser = false;
+  // tslint:disable-next-line: variable-name
+  readonly _isNodeWebkit: boolean;
 
   constructor(
     private enviromentsService: EnviromentsService,
+    @Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService,
     private changeDetectorRef: ChangeDetectorRef,
     private logger: NGXLogger
-  ) {}
+  ) {
+    this._isNodeWebkit = this.enviromentsService.nodeWebkit();
+  }
 
   ngOnInit() {}
 
@@ -44,6 +51,16 @@ export class ChatComponent implements OnInit {
     this.emit({ ...this.setting, fontSize: Number(event.value) });
   }
 
+  onClickDownloadPath() {
+    this.logger.debug('onClickDownloadPath');
+    this.nativeService
+      .selectDirectory()
+      .then(path => {
+        this.emit({ ...this.setting, downloadPath: path });
+      })
+      .catch(reason => {});
+  }
+
   private emit(setting: ChatSetting) {
     this.setting = setting;
     this.changed.emit(this.setting);
diff --git a/projects/ucap-webmessenger-ui-settings/src/lib/models/settings.ts b/projects/ucap-webmessenger-ui-settings/src/lib/models/settings.ts
index dfe309f4..11860d7b 100644
--- a/projects/ucap-webmessenger-ui-settings/src/lib/models/settings.ts
+++ b/projects/ucap-webmessenger-ui-settings/src/lib/models/settings.ts
@@ -1,3 +1,5 @@
+import { NotificationMethod } from '@ucap-webmessenger/core';
+
 export interface GeneralSetting {
   appTheme: string;
   autoLaunch: boolean;
@@ -11,7 +13,7 @@ export interface GeneralSetting {
 
 export interface NotificationSetting {
   use: boolean;
-  method: 'SOUND' | 'ALERT' | 'SOUND_ALERT';
+  method: NotificationMethod;
   alertExposureTime: number;
   receiveForMobile: boolean;
   receiveForMessage: boolean;
@@ -23,8 +25,13 @@ export interface ChatSetting {
   downloadPath: string;
 }
 
+export interface PresenceSetting {
+  absenceTime: number;
+}
+
 export interface Settings {
   general: GeneralSetting;
   notification: NotificationSetting;
   chat: ChatSetting;
+  presence: PresenceSetting;
 }
diff --git a/projects/ucap-webmessenger-web-storage/src/lib/services/local-storage.service.ts b/projects/ucap-webmessenger-web-storage/src/lib/services/local-storage.service.ts
index 66153552..eff04851 100644
--- a/projects/ucap-webmessenger-web-storage/src/lib/services/local-storage.service.ts
+++ b/projects/ucap-webmessenger-web-storage/src/lib/services/local-storage.service.ts
@@ -1,11 +1,12 @@
 import { Injectable } from '@angular/core';
 import { StorageService } from './storage.service';
+import { NGXLogger } from 'ngx-logger';
 
 @Injectable({
   providedIn: 'root'
 })
 export class LocalStorageService extends StorageService {
-  constructor() {
-    super(localStorage);
+  constructor(logger: NGXLogger) {
+    super(localStorage, logger);
   }
 }
diff --git a/projects/ucap-webmessenger-web-storage/src/lib/services/session-storage.service.ts b/projects/ucap-webmessenger-web-storage/src/lib/services/session-storage.service.ts
index 298a9d56..d0fd97be 100644
--- a/projects/ucap-webmessenger-web-storage/src/lib/services/session-storage.service.ts
+++ b/projects/ucap-webmessenger-web-storage/src/lib/services/session-storage.service.ts
@@ -1,11 +1,12 @@
 import { Injectable } from '@angular/core';
 import { StorageService } from './storage.service';
+import { NGXLogger } from 'ngx-logger';
 
 @Injectable({
   providedIn: 'root'
 })
 export class SessionStorageService extends StorageService {
-  constructor() {
-    super(sessionStorage);
+  constructor(logger: NGXLogger) {
+    super(sessionStorage, logger);
   }
 }
diff --git a/projects/ucap-webmessenger-web-storage/src/lib/services/storage.service.ts b/projects/ucap-webmessenger-web-storage/src/lib/services/storage.service.ts
index 0aff4327..c31b3af4 100644
--- a/projects/ucap-webmessenger-web-storage/src/lib/services/storage.service.ts
+++ b/projects/ucap-webmessenger-web-storage/src/lib/services/storage.service.ts
@@ -3,9 +3,10 @@ import { fromEvent, Observable } from 'rxjs';
 import { filter } from 'rxjs/operators';
 
 import CryptoJS from 'crypto-js';
+import { NGXLogger } from 'ngx-logger';
 
 export class StorageService {
-  constructor(private storage: Storage) {}
+  constructor(private storage: Storage, private logger: NGXLogger) {}
 
   get(key: string): T | null {
     return StorageUtil.get(this.storage, key);
@@ -38,6 +39,7 @@ export class StorageService {
     expiredAt: number = 0,
     expiredUnit: ExpiredUnit = 'd'
   ) {
+    this.logger.debug('encSet key:', key, ' value:', value);
     const json = JSON.stringify(value);
     const encrypted = CryptoJS.AES.encrypt(json, secretPassphrase);
     return StorageUtil.set(