diff --git a/README.md b/README.md
index 6aeaeeec5858816a5a5dd4bce91df1c50747a9f5..cb1489f88b8b348804937d1a3d459180ec6dfcec 100644
--- a/README.md
+++ b/README.md
@@ -34,5 +34,9 @@
 
 > <p> 1.나라별 변경 완료.</p>
 > <p> 2.기능 한글화.</p>
-> <p> 2.D-day 기능 구현(예정)..</p>
-> <p> 3.GPS기능 추가(예정)</p>
\ No newline at end of file
+> <p> 3.나라별 공휴일 한글화 완료.</p>
+> <p> 4.D-day 기능 구현(예정)</p>
+> <p> 5.GPS 국가 자동 변경 기능 완료</p>
+> <p> 6.가계부 기능 추가 구현(예정)</p>
+
+### ScreenShot
diff --git a/app/build.gradle b/app/build.gradle
index 947b13da87007c79f6fa37a814051964aa19b16f..86e2ed8fc96768c2b251b3454cb86c7926ba023d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -50,6 +50,14 @@ dependencies {
     implementation 'joda-time:joda-time:2.9.9'
     implementation 'com.facebook.stetho:stetho:1.5.0'
     implementation 'com.android.support:multidex:1.0.3'
+    implementation fileTree(dir: 'libs', include: ['*.jar'])
+    implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
+    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
+    implementation 'com.google.android.gms:play-services-location:11.8.0'
+    implementation 'com.google.android.gms:play-services-maps:11.8.0'
+    testImplementation 'junit:junit:4.12'
+    androidTestImplementation 'com.android.support.test:runner:1.0.1'
+    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
     debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakCanaryVersion"
     releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakCanaryVersion"
 }
diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt
index 8b6281746710d9545b848cb1d188d5d83b17296d..a68a89b4717660cf1e65543aa2e4b3237ba390dd 100644
--- a/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt
+++ b/app/src/main/kotlin/com/simplemobiletools/calendar/activities/MainActivity.kt
@@ -22,6 +22,7 @@ import com.simplemobiletools.calendar.adapters.EventListAdapter
 import com.simplemobiletools.calendar.dialogs.ExportEventsDialog
 import com.simplemobiletools.calendar.dialogs.FilterEventTypesDialog
 import com.simplemobiletools.calendar.dialogs.ImportEventsDialog
+import com.google.android.gms.maps.model.LatLng
 import com.simplemobiletools.calendar.extensions.*
 import com.simplemobiletools.calendar.fragments.*
 import com.simplemobiletools.calendar.helpers.*
@@ -43,8 +44,38 @@ import java.io.FileOutputStream
 import java.text.SimpleDateFormat
 import java.util.*
 import kotlin.collections.ArrayList
-
-class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
+import android.Manifest
+import android.annotation.SuppressLint
+import android.content.DialogInterface
+import android.content.pm.PackageManager
+import android.location.Location
+import android.location.LocationManager
+import android.os.Build
+import android.provider.Settings
+import android.location.Geocoder
+import android.support.v4.app.ActivityCompat
+import android.support.v4.content.ContextCompat
+import android.support.v7.app.AlertDialog
+import android.support.v7.app.AppCompatActivity
+import android.view.View
+import com.google.android.gms.common.api.GoogleApiClient
+import com.google.android.gms.location.LocationRequest
+import com.google.android.gms.location.LocationServices
+import kotlinx.android.synthetic.main.activity_main.*
+import android.location.Address
+import android.util.Log
+import java.io.IOException
+
+class MainActivity : SimpleActivity(), RefreshRecyclerViewListener , com.google.android.gms.location.LocationListener{
+
+    //for gps module
+    private var REQUEST_LOCATION_CODE = 101
+    private var mGoogleApiClient: GoogleApiClient? = null
+    private var mLocation: Location? = null
+    private var mLocationRequest: LocationRequest? = null
+    private val UPDATE_INTERVAL = (2 * 1000).toLong()  /* 10 secs */
+    private val FASTEST_INTERVAL: Long = 2000 /* 2 sec */
+    //for main
     private val CALDAV_SYNC_DELAY = 1000L
 
     private var showCalDAVRefreshToast = false
@@ -56,7 +87,8 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
     private var shouldGoToTodayBeVisible = false
     private var goToTodayButton: MenuItem? = null
     private var currentFragments = ArrayList<MyFragmentHolder>()
-
+    private var lat = 0.1
+    private var lng = 0.1
     private var mStoredTextColor = 0
     private var mStoredBackgroundColor = 0
     private var mStoredPrimaryColor = 0
@@ -65,8 +97,42 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
     private var mStoredUse24HourFormat = false
     private var mStoredDimPastEvents = true
 
+    override fun onLocationChanged(location: Location?) {
+        // You can now create a LatLng Object for use with maps
+        // val latLng = LatLng(location.latitude, location.longitude)
+    }
+
+    @SuppressLint("MissingPermission")
+    private fun getLocation() {
+        mLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
+
+        if (mLocation == null) {
+            startLocationUpdates();
+        }
+        if (mLocation != null) {
+            lat = mLocation!!.latitude
+            lng = mLocation!!.longitude
+        } else {
+            Toast.makeText(this, "Location not Detected", Toast.LENGTH_SHORT).show();
+        }
+    }
+    private fun startLocationUpdates() {
+        // Create the location request
+        mLocationRequest = LocationRequest.create()
+                .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
+                .setInterval(UPDATE_INTERVAL)
+                .setFastestInterval(FASTEST_INTERVAL)
+        // Request location updates
+        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+            return
+        }
+        LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this)
+    }
+
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        buildGoogleApiClient()
         setContentView(R.layout.activity_main)
         appLaunched(BuildConfig.APPLICATION_ID)
 
@@ -109,7 +175,107 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
             refreshCalDAVCalendars(false)
         }
     }
+    @Synchronized
+    private fun buildGoogleApiClient() {
+        mGoogleApiClient = GoogleApiClient.Builder(this)
+                .addApi(LocationServices.API)
+                .build()
+
+        mGoogleApiClient!!.connect()
+    }
+    private fun checkGPSEnabled(): Boolean {
+        if (!isLocationEnabled())
+            showAlert()
+        return isLocationEnabled()
+    }
+
+    private fun showAlert() {
+        val dialog = AlertDialog.Builder(this)
+        dialog.setTitle("Enable Location")
+                .setMessage("Your Locations Settings is set to 'Off'.\nPlease Enable Location to " + "use this app")
+                .setPositiveButton("Location Settings") { paramDialogInterface, paramInt ->
+                    val myIntent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
+                    startActivity(myIntent)
+                }
+                .setNegativeButton("Cancel") { paramDialogInterface, paramInt -> }
+        dialog.show()
+    }
+
+    private fun isLocationEnabled(): Boolean {
+        var locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
+        return locationManager!!.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager!!.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
+    }
+
+    private fun checkLocationPermission() {
+        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
+                AlertDialog.Builder(this)
+                        .setTitle("Location Permission Needed")
+                        .setMessage("This app needs the Location permission, please accept to use location functionality")
+                        .setPositiveButton("OK", DialogInterface.OnClickListener { dialog, which ->
+                            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_LOCATION_CODE)
+                        })
+                        .create()
+                        .show()
+
+            } else ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_LOCATION_CODE)
+        }
+    }
+
+    private fun autochange(){
+        val geocoder = Geocoder(this)
+        val addresses: List<Address>?
+        var add = ""
+        val items = getHolidayRadioItemsCode()
+        if (!checkGPSEnabled()) {
+            return
+        }
+
+        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
+                //Location Permission already granted
+                getLocation();
+            } else {
+                //Request Location Permission
+                checkLocationPermission()
+            }
+        } else {
+            getLocation();
+        }
+        addresses = geocoder.getFromLocation(lat,lng,1)
 
+        toast(R.string.importing)
+
+        Thread {
+            var country = ""
+            for((num,code,file) in items){
+                if(code == addresses.get(0).countryCode){
+                    country = file.toString()
+                    break
+                }
+            }
+
+            val holidays = getString(R.string.holidays)
+            var eventTypeId = dbHelper.getEventTypeIdWithTitle(holidays)
+            deleteHolidays()
+//                dbHelper.deleteEventsWithType(eventTypeId)
+            if (eventTypeId == -1) {
+                val eventType = EventType(0, holidays, resources.getColor(R.color.default_holidays_color))
+                eventTypeId = dbHelper.insertEventType(eventType)
+            }
+
+            val result = IcsImporter(this).importEvents(country, eventTypeId, 0, false)
+            handleParseResult(result)
+            if (result != IcsImporter.ImportResult.IMPORT_FAIL) {
+                runOnUiThread {
+                    updateViewPager()
+                }
+            }
+        }.start()
+        toast(addresses.get(0).countryCode)
+
+
+    }
     override fun onResume() {
         super.onResume()
         if (mStoredTextColor != config.textColor || mStoredBackgroundColor != config.backgroundColor || mStoredPrimaryColor != config.primaryColor
@@ -142,9 +308,15 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
         super.onPause()
         storeStateVariables()
     }
-
+    override fun onStart() {
+        super.onStart()
+        mGoogleApiClient?.connect()
+    }
     override fun onStop() {
         super.onStop()
+        if (mGoogleApiClient!!.isConnected()) {
+            mGoogleApiClient!!.disconnect()
+        }
         mCalDAVSyncHandler.removeCallbacksAndMessages(null)
         contentResolver.unregisterContentObserver(calDAVSyncObserver)
         closeSearch()
@@ -177,6 +349,7 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
             R.id.filter -> showFilterDialog()
             R.id.refresh_caldav_calendars -> refreshCalDAVCalendars(true)
             R.id.add_holidays -> addHolidays()
+            R.id.auto_countryChange -> autochange()
             R.id.add_birthdays -> tryAddBirthdays()
             R.id.add_anniversaries -> tryAddAnniversaries()
             R.id.import_events -> tryImportEvents()
@@ -819,6 +992,70 @@ class MainActivity : SimpleActivity(), RefreshRecyclerViewListener {
 
 
 
+            var i = 0
+            for ((country, file) in this) {
+                items.add(RadioItem(i++, country, file))
+            }
+        }
+
+        return items
+    }
+    private fun getHolidayRadioItemsCode(): ArrayList<RadioItem> {
+        val items = ArrayList<RadioItem>()
+
+        LinkedHashMap<String, String>().apply {
+            put("GR", "greece.ics")
+            put("ZA", "southafrica.ics")
+            put("NO", "norway.ics")
+            put("NL", "netherlands.ics")
+            put("KR", "southkorea.ics")
+            put("DK", "denmark.ics")
+            put("DE", "germany.ics")
+            put("LV", "latvia.ics")
+            put("RU", "russia.ics")
+            put("RO", "romania.ics")
+            put("LT", "lithuania.ics")
+            put("LU", "luxembourg.ics")
+            put("MK", "macedonia.ics")
+            put("MX", "mexico.ics")
+            put("BO", "bolivia.ics")
+            put("US", "unitedstates.ics")
+            put("BE", "belgium.ics")
+            put("BR", "brazil.ics")
+            put("RS", "serbia.ics")
+            put("CH", "switzerland.ics")
+            put("SE", "sweden.ics")
+            put("ES", "spain.ics")
+            put("SK", "slovakia.ics")
+            put("SI", "slovenia.ics")
+            put("AR", "argentina.ics")
+            put("IS", "iceland.ics")
+            put("IE", "ireland.ics")
+            put("DZ", "algeria.ics")
+            put("EE", "estonia.ics")
+            put("GB", "unitedkingdom.ics")
+            put("AT", "austria.ics")
+            put("UA", "ukraine.ics")
+            put("IT", "italy.ics")
+            put("IN", "india.ics")
+            put("ID", "indonesia.ics")
+            put("JP", "japan.ics")
+            put("CN", "china.ics")
+            put("CZ", "czech.ics")
+            put("CA", "canada.ics")
+            put("HR", "croatia.ics")
+            put("PK", "pakistan.ics")
+            put("PT", "portugal.ics")
+            put("PL", "poland.ics")
+            put("FR", "france.ics")
+            put("FI", "finland.ics")
+            put("AU", "australia.ics")
+            put("HU", "hungary.ics")
+
+
+
+
+
             var i = 0
             for ((country, file) in this) {
                 items.add(RadioItem(i++, country, file))
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
index bd7261da2b823c5833d104430fcb9d831e5bb4da..eb73adae40fa4dfe526fb8b090839327ea483011 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -31,6 +31,10 @@
         android:id="@+id/add_holidays"
         android:title="@string/add_holidays"
         app:showAsAction="never"/>
+    <item
+        android:id="@+id/auto_countryChange"
+        android:title="@string/auto_countryChange"
+        app:showAsAction="never"/>
     <item
         android:id="@+id/add_birthdays"
         android:title="@string/add_birthdays"
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 87c8f7fead96599b72c34371ddec24df96a0274f..1073e0783d73820b2abf4ec1d775b8074a83682c 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -131,10 +131,10 @@
 
     <!-- Holidays -->
     <string name="holidays">공휴일</string>
-    <string name="add_holidays">공휴일 추가</string>
+    <string name="add_holidays">국가 변경</string>
     <string name="national_holidays">국경일</string>
     <string name="religious_holidays">종교 휴일</string>
-    <string name="holidays_imported_successfully">Holidays have been successfully imported into the \"Holidays\" event type</string>
+    <string name="holidays_imported_successfully">국가 변경 성공</string>
     <string name="importing_some_holidays_failed">일부 이벤트를 가져오지 못했습니다</string>
     <string name="importing_holidays_failed">공휴일을 가져오는데 실패했습니다</string>
 
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2d935e25d18e155be1928853438eed0d2152c135..ad533e1f6d5ac375cbc3f570d70f5ace4a74426a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -10,7 +10,7 @@
     <string name="simple_event_list">간단한 이벤트 목록</string>
     <string name="no_upcoming_events">다가올 이벤트가 없는 것 같습니다.</string>
     <string name="go_to_today">오늘로 이동</string>
-
+    <string name="auto_countryChange">국가 자동변경</string>
     <!-- Widget titles -->
     <string name="widget_monthly">월별 달력</string>
     <string name="widget_list">일정 목록 달력</string>