diff --git a/files/prefpane/checkbox.xml b/files/prefpane/checkbox.xml
index c91a598..5bc7454 100644
--- a/files/prefpane/checkbox.xml
+++ b/files/prefpane/checkbox.xml
@@ -8294,6 +8294,27 @@
       </list>
     </item>
     <item>
+      <name>For Finnish</name>
+      <list>
+	<item>
+	  <name>Command_L+Shift_L to Command_L+Shift_L (when inputmode == finnish)</name>
+	  <appendix>(+ When you type Command_L+Shift_L only, change inputmode to english)</appendix>
+	  <inputmode_only>FINNISH</inputmode_only>
+	  <identifier>remap.finnish_shiftcommandL2shiftLcommandL_english</identifier>
+	  <autogen>--KeyOverlaidModifier-- KeyCode::SHIFT_L, VK_COMMAND, KeyCode::SHIFT_L, ModifierFlag::COMMAND_L, KeyCode::VK_CHANGE_INPUTMODE_ENGLISH</autogen>
+	  <autogen>--KeyOverlaidModifier-- KeyCode::COMMAND_L, VK_SHIFT, KeyCode::COMMAND_L, ModifierFlag::SHIFT_L, KeyCode::VK_CHANGE_INPUTMODE_ENGLISH</autogen>
+	</item>
+	<item>
+	  <name>Command_L+Shift_L to Command_L+Shift_L</name>
+	  <appendix>(+ When you type Command_L+Shift_L only, change inputmode to finnish)</appendix>
+	  <!-- <inputmode_only>ENGLISH</inputmode_only> -->
+	  <identifier>remap.finnish_shiftcommandL2shiftLcommandL_finnish</identifier>
+	  <autogen>--KeyOverlaidModifier-- KeyCode::SHIFT_L, VK_COMMAND, KeyCode::SHIFT_L, ModifierFlag::COMMAND_L, KeyCode::VK_CHANGE_INPUTMODE_FINNISH</autogen>
+	  <autogen>--KeyOverlaidModifier-- KeyCode::COMMAND_L, VK_SHIFT, KeyCode::COMMAND_L, ModifierFlag::SHIFT_L, KeyCode::VK_CHANGE_INPUTMODE_FINNISH</autogen>
+	</item>
+      </list>
+    </item>
+    <item>
       <name>For French</name>
       <list>
         <item>
diff --git a/src/core/bridge/keycode/data/InputMode.data b/src/core/bridge/keycode/data/InputMode.data
index 4522888..397bb59 100644
--- a/src/core/bridge/keycode/data/InputMode.data
+++ b/src/core/bridge/keycode/data/InputMode.data
@@ -15,6 +15,7 @@ AINU                --AUTO--
 RUSSIAN             --AUTO--
 FRENCH              --AUTO--
 POLISH              --AUTO--
+FINNISH             --AUTO--
 
 // http://bepo.fr/wiki/Mac_OS_X
 BEPO                --AUTO--
diff --git a/src/core/bridge/keycode/data/InputModeDetail.data b/src/core/bridge/keycode/data/InputModeDetail.data
index 230edda..055f7cf 100644
--- a/src/core/bridge/keycode/data/InputModeDetail.data
+++ b/src/core/bridge/keycode/data/InputModeDetail.data
@@ -18,6 +18,7 @@ CANADIAN --AUTO--
 AINU --AUTO--
 RUSSIAN --AUTO--
 FRENCH --AUTO--
+FINNISH --AUTO--
 
 POLISH     --AUTO--
 POLISH_PRO --AUTO--
diff --git a/src/core/bridge/keycode/data/KeyCode.data b/src/core/bridge/keycode/data/KeyCode.data
index 8f8d5ba..15ee67e 100644
--- a/src/core/bridge/keycode/data/KeyCode.data
+++ b/src/core/bridge/keycode/data/KeyCode.data
@@ -273,6 +273,7 @@ VK_CHANGE_INPUTMODE_RUSSIAN_TYPOGRAPHIC --AUTO--
 VK_CHANGE_INPUTMODE_ENGLISH_TYPOGRAPHIC --AUTO--
 VK_CHANGE_INPUTMODE_TRADITIONAL_CHINESE_YAHOO_KEYKEY --AUTO--
 VK_CHANGE_INPUTMODE_ESTONIAN --AUTO--
+VK_CHANGE_INPUTMODE_FINNISH --AUTO--
 //
 VK_JIS_TOGGLE_EISUU_KANA --AUTO--
 VK_JIS_TEMPORARY_ROMAN --AUTO--
diff --git a/src/core/kext/VirtualKey.cpp b/src/core/kext/VirtualKey.cpp
index 26fae21..2b8ff33 100644
--- a/src/core/kext/VirtualKey.cpp
+++ b/src/core/kext/VirtualKey.cpp
@@ -198,7 +198,8 @@ namespace org_pqrs_KeyRemap4MacBook {
         params.key == KeyCode::VK_CHANGE_INPUTMODE_RUSSIAN_TYPOGRAPHIC ||
         params.key == KeyCode::VK_CHANGE_INPUTMODE_ENGLISH_TYPOGRAPHIC ||
         params.key == KeyCode::VK_CHANGE_INPUTMODE_TRADITIONAL_CHINESE_YAHOO_KEYKEY ||
-        params.key == KeyCode::VK_CHANGE_INPUTMODE_ESTONIAN) {
+        params.key == KeyCode::VK_CHANGE_INPUTMODE_ESTONIAN ||
+        params.key == KeyCode::VK_CHANGE_INPUTMODE_FINNISH) {
 
       if (params.ex_iskeydown && params.repeat == false) {
         org_pqrs_driver_KeyRemap4MacBook_UserClient_kext::send_notification_to_userspace(BRIDGE_USERCLIENT_NOTIFICATION_TYPE_CHANGE_INPUT_SOURCE, params.key.get());
diff --git a/src/core/server/Classes/WorkSpaceData+InputMode.m b/src/core/server/Classes/WorkSpaceData+InputMode.m
index 9508a32..5e2a18b 100644
--- a/src/core/server/Classes/WorkSpaceData+InputMode.m
+++ b/src/core/server/Classes/WorkSpaceData+InputMode.m
@@ -165,6 +165,8 @@ finish:
     language = kInputSourceLanguage_traditional_chinese_yahoo_keykey;
   } else if (vk_keycode == [parser keycode:@"KeyCode::VK_CHANGE_INPUTMODE_ESTONIAN"]) {
     language = @"et";
+  } else if (vk_keycode == [parser keycode:@"KeyCode::VK_CHANGE_INPUTMODE_FINNISH"]) {
+    language = @"fi";
   }
 
   if (! language) return;
@@ -240,6 +242,12 @@ finish:
     return;
   }
 
+  if ([name hasPrefix:@"org.pqrs.inputmode.fi."]) {
+    *output_inputmode       = [parser keycode:@"InputMode::FINNISH"];
+    *output_inputmodedetail = [parser keycode:@"InputModeDetail::FINNISH"];
+    return;
+  }
+
   if ([name hasPrefix:@"org.pqrs.inputmode.ca."]) {
     *output_inputmode       = [parser keycode:@"InputMode::CANADIAN"];
     *output_inputmodedetail = [parser keycode:@"InputModeDetail::CANADIAN"];
