     else
       language = 'en-US'
 
-SlotCheckConfig = React.createClass
-  preProcess: ->
-    # Remove this method after some future releases
-    old = config.get 'poi.mapstartcheck'
-    if old?
-      if old.ship?
-        config.set 'poi.mapStartCheck.ship.enable', old.ship
-      if old.freeShipSlot?
-        config.set 'poi.mapStartCheck.ship.minFreeSlots', old.freeShipSlot
-      if old.item?
-        config.set 'poi.mapStartCheck.item.enable', old.item
-      if old.freeItemSlot?
-        config.set 'poi.mapStartCheck.item.minFreeSlots', old.freeItemSlot
-      config.set 'poi.mapstartcheck'
-
-  getInitialState: ->
-    @preProcess()
-
-    @cfgEntry = "poi.mapStartCheck.#{@props.type}"
-
-    showInput: false
-    enable: config.get "#{@cfgEntry}.enable", false
-    value: ''
-  CheckValid: (v) ->
-    !isNaN(v) and !isNaN(n = parseInt v) and n >= 0
-  handleToggleInput: ->
-    if @state.showInput
-      @handleDisable()
-    else
-      num = config.get "#{@cfgEntry}.minFreeSlots", -1
-      @setState
-        showInput: true
-        value: if @CheckValid(num) then num else ''
-    console.log @props.type + JSON.stringify(config.get @cfgEntry) if process.env.DEBUG?
-  handleChange: (e) ->
-    @setState
-      value: e.target.value
-  handleSubmit: (e) ->
-    e.preventDefault()
-    if @CheckValid @state.value
-      n = parseInt @state.value
-      config.set @cfgEntry, {enable: true, minFreeSlots: n}
-      @setState
-        showInput: false
-        enable: true
-        value: n
-    else
-      @handleDisable()
-    console.log @props.type + JSON.stringify(config.get @cfgEntry) if process.env.DEBUG?
-  handleDisable: ->
-    config.set "#{@cfgEntry}.enable", false
-    @setState
-      showInput: false
-      enable: false
-  selectText: ->
-    @textInput.getInputDOMNode().select()
-  render: ->
-    toggleBtnStyle = if @state.enable then 'success' else 'default'
-    toggleBtnStyle = 'danger' if @state.showInput
-    toggleBtnTxt = if @state.enable then 'ON' else 'OFF'
-    toggleBtnTxt = __ 'Disable' if @state.showInput
-    toggleBtn = <Button onClick={@handleToggleInput} bsSize='xs'
-      bsStyle={toggleBtnStyle} style={verticalAlign: 'text-bottom'}>
-      {toggleBtnTxt}</Button>
-    inputValid = @CheckValid @state.value
-    submitBtn = <Button type='submit'
-      bsStyle={if inputValid then 'success' else 'danger'}>
-      {if inputValid then __ 'Save' else __ 'Disable'}</Button>
-    <div style={margin: '5px 15px'}>
-      <form onSubmit={@handleSubmit}>
-        <div>
-          {__ "#{@props.type} slots"} {toggleBtn}
-        </div>
-        <Collapse in={@state.showInput} onEntered={@selectText}>
-          <div>
-            <Well>
-              <Input type="text" bsSize='small'
-                bsStyle={if inputValid then 'success' else 'error'}
-                label={__ "Warn if the number of free #{@props.type} slots is less than"}
-                value={@state.value}
-                ref={(r) => this.textInput = r}
-                onChange={@handleChange}
-                buttonAfter={submitBtn} />
-            </Well>
-          </div>
-        </Collapse>
-      </form>
-    </div>
-
-PoiConfig = React.createClass
-  getInitialState: ->
-    timeSettingShow: false
-    language: config.get 'poi.language', language
+EnableConfirmQuitConfig = React.createClass
+  getInitialState: ->
     enableConfirmQuit: config.get 'poi.confirm.quit', false
+  handleSetConfirmQuit: ->
+    enabled = @state.enableConfirmQuit
+    config.set 'poi.confirm.quit', !enabled
+    @setState
+      enableConfirmQuit: !enabled
+  render: ->
+    <Grid>
+      <Col xs={12}>
+        <Input type="checkbox" label={__ 'Confirm before exit'} checked={@state.enableConfirmQuit} onChange={@handleSetConfirmQuit} />
+      </Col>
+    </Grid>
+
+SetNotifyIndividualConfig = React.createClass
+  getInitialState: ->
     enableNotify: config.get 'poi.notify.enabled', true
     constructionNotify: config.get 'poi.notify.construction.enabled', 'true'
     expeditionNotify: config.get 'poi.notify.expedition.enabled', 'true'
     repairNotify: config.get 'poi.notify.repair.enabled', 'true'
     moraleNotify: config.get 'poi.notify.morale.enabled', 'true'
     othersNotify: config.get 'poi.notify.others.enabled', 'true'
-    notifyVolume: config.get 'poi.notify.volume', 0.8
-    enableDMMcookie: config.get 'poi.enableDMMcookie', false
-    disableNetworkAlert: config.get 'poi.disableNetworkAlert', false
-    disableHA: config.get 'poi.disableHA', false
-    screenshotPath: config.get 'poi.screenshotPath', window.screenshotPath
-    cachePath: config.get 'poi.cachePath', remote.getGlobal('DEFAULT_CACHE_PATH')
-    enableBetaPluginCheck: config.get 'enableBetaPluginCheck', false
+    timeSettingShow: false
     moraleValue: window.notify.morale
     expeditionValue: window.notify.expedition
-  handleSetTimeSettingShow: ->
-    timeSettingShow = !@state.timeSettingShow
-    @setState {timeSettingShow}
-  handleSetConfirmQuit: ->
-    enabled = @state.enableConfirmQuit
-    config.set 'poi.confirm.quit', !enabled
-    @setState
-      enableConfirmQuit: !enabled
-  handleDisableHA: ->
-    enabled = @state.disableHA
-    config.set 'poi.disableHA', !enabled
-    @setState
-      disableHA: !enabled
-  handleSetDMMcookie: ->
-    enabled = @state.enableDMMcookie
-    config.set 'poi.enableDMMcookie', !enabled
-    @setState
-      enableDMMcookie: !enabled
-  handleSetNetworkAlert: ->
-    disabled = @state.disableNetworkAlert
-    config.set 'poi.disableNetworkAlert', !disabled
-    @setState
-      disableNetworkAlert: !enabled
-  handleSetBetaPluginCheck: ->
-    enabled = @state.enableBetaPluginCheck
-    config.set 'enableBetaPluginCheck', !enabled
-    @setState
-      enableBetaPluginCheck: !enabled
-  handleSetNotify: ->
-    enabled = @state.enableNotify
-    config.set 'poi.notify.enabled', !enabled
-    @setState
-      enableNotify: !enabled
-  handleChangeNotifyVolume: (e) ->
-    volume = @refs.notifyVolume.getValue()
-    volume = parseFloat(volume)
-    return if volume is NaN
-    config.set('poi.notify.volume', volume)
-    @setState
-      notifyVolume: volume
-  handleEndChangeNotifyVolume: (e) ->
-    window.notify null
+    notifyVolume: config.get 'poi.notify.volume', 0.8
   handleSetNotifyIndividual: (type) ->
     switch type
       when 'construction'

        config.set "poi.notify.others.enabled", !enabled
        @setState
          othersNotify: !enabled
  handleSetLanguage: (language) ->
    language = @refs.language.getValue()
    return if @state.language == language
    config.set 'poi.language', language
    for namespace of window.i18n
      window.i18n[namespace].setLocale language
    window.language = language
    @setState {language}
  handleClearCookie: (e) ->
    remote.getCurrentWebContents().session.clearStorageData {storages: ['cookies']}, ->
      toggleModal __('Delete cookies'), __('Success!')
  handleClearCache: (e) ->
    remote.getCurrentWebContents().session.clearCache ->
      toggleModal __('Delete cache'), __('Success!')
  folderPickerOnDrop: (callback, e) ->
    e.preventDefault()
    droppedFiles = e.dataTransfer.files
    isDirectory = fs.statSync(droppedFiles[0].path).isDirectory()
    callback droppedFiles[0].path if isDirectory
  screenshotFolderPickerOnDrop: (e) ->
    @folderPickerOnDrop @setScreenshotPath, e
  screenshotFolderPickerOnClick: ->
    @synchronize =>
      fs.ensureDirSync @state.screenshotPath
      filenames = dialog.showOpenDialog
        title: __ 'Screenshot Folder'
        defaultPath: @state.screenshotPath
        properties: ['openDirectory', 'createDirectory']
      @setScreenshotPath filenames[0] if filenames isnt undefined
  cacheFolderPickerOnDrop: (e) ->
    @folderPickerOnDrop @setCachePath, e
  cacheFolderPickerOnClick: ->
    @synchronize =>
      fs.ensureDirSync @state.cachePath
      filenames = dialog.showOpenDialog
        title: __ 'Cache Folder'
        defaultPath: @state.cachePath
        properties: ['openDirectory', 'createDirectory']
      @setCachePath filenames[0] if filenames isnt undefined
  setScreenshotPath: (pathname) ->
    window.screenshotPath = pathname
    config.set 'poi.screenshotPath', pathname
    @setState
      screenshotPath: pathname
  setCachePath: (pathname) ->
    config.set 'poi.cachePath', pathname
    @setState
      cachePath: pathname
  handleSetMorale: (e) ->
    value = parseInt(e.target.value) || 0
    return if isNaN(value) || value < 0

          <NavigatorBar />
          {
            if process.platform isnt 'darwin'
              <EnableConfirmQuitConfig />
          }
        </div>
        <div className="form-group">
          <Divider text={__ 'Notification'} />
          <SetNotifyIndividualConfig />
        </div>
      </form>
      <div className="form-group" >
