diff --git a/src/lang/korean.txt b/src/lang/korean.txt
index 3dff6f80b3..f6643bf6bb 100644
--- a/src/lang/korean.txt
+++ b/src/lang/korean.txt
@@ -1,7 +1,7 @@
 ##name Korean
 ##ownname 한국어
 ##isocode ko_KR
-##plural 1
+##plural 11
 ##textdir ltr
 ##digitsep .
 ##digitsepcur .
diff --git a/src/strings.cpp b/src/strings.cpp
index edf7d88193..b113cf9154 100644
--- a/src/strings.cpp
+++ b/src/strings.cpp
@@ -430,6 +430,32 @@ static int DeterminePluralForm(int64 count)
 		 *   Czech */
 		case 10:
 			return n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2;
+
+		/* Two forms, special 'hack' for Korean; singular for numbers ending
+		 *   in a consonant and plural for numbers ending in a vowel.
+		 * Korean doesn't have the concept of plural, but depending on how a
+		 * number is pronounced it needs another version of a particle.
+		 * As such the plural system is misused to give this distinction.
+		 */
+		case 11:
+			switch (n % 10) {
+				case 0: // yeong
+				case 1: // il
+				case 3: // sam
+				case 6: // yuk
+				case 7: // chil
+				case 8: // pal
+					return 0;
+
+				case 2: // i
+				case 4: // sa
+				case 5: // o
+				case 9: // gu
+					return 1;
+
+				default:
+					NOT_REACHED();
+			}
 	}
 }
 
diff --git a/src/table/strgen_tables.h b/src/table/strgen_tables.h
index b727992b77..2af9e6a3b0 100644
--- a/src/table/strgen_tables.h
+++ b/src/table/strgen_tables.h
@@ -161,6 +161,7 @@ static const PluralForm _plural_forms[] = {
 	{ 4, "Four forms, special case for 1 and all numbers ending in 02, 03, or 04" },
 	{ 2, "Two forms, singular used for everything ending in 1 but not in 11" },
 	{ 3, "Three forms, special case for 1 and 2, 3, or 4" },
+	{ 2, "Two forms, cases for numbers ending with a consonant and with a vowel" },
 };
 
 /* Flags: