diff --git a/briar-core/src/net/sf/briar/plugins/modem/CountryCodes.java b/briar-core/src/net/sf/briar/plugins/modem/CountryCodes.java
index 1029a1f93b1d3065c6668228c7159ce82614950a..c1de00b084931c95dd9747500b3536cb8db796f3 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/CountryCodes.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/CountryCodes.java
@@ -189,7 +189,7 @@ class CountryCodes {
 		new Country("RE", "Reunion", "262", "00", "0"),
 		new Country("RO", "Romania", "40", "00", "0"),
 		new Country("RS", "Serbia", "381", "99", "0"),
-		new Country("RU", "Russia", "7", " 8**10", "8"),
+		new Country("RU", "Russia", "7", "8**10", "8"),
 		new Country("RW", "Rwanda", "250", "00", "0"),
 		new Country("SA", "Saudi Arabia", "966", "00", "0"),
 		new Country("SB", "Solomon Islands", "677", "00", ""),
@@ -264,20 +264,20 @@ class CountryCodes {
 		// Strip the NDD prefix from the number if present
 		if(number.startsWith(to.ndd))
 			number = number.substring(to.ndd.length());
-		if(from == to) return from.ndd + number;
-		return from.idd + to.countryCode + number;
+		if(from == to) return from.ndd + number; // National
+		return from.idd + to.countryCode + number; // International
 	}
 
 	private static class Country {
 
-		private final String iso3166, countryCode, ndd, idd;
+		private final String iso3166, countryCode, idd, ndd;
 
 		private Country(String iso3166, String englishName, String countryCode,
-				String ndd, String idd) {
+				String idd, String ndd) {
 			this.iso3166 = iso3166;
 			this.countryCode = countryCode;
-			this.ndd = ndd;
 			this.idd = idd;
+			this.ndd = ndd;
 		}
 	}
 }
\ No newline at end of file
diff --git a/briar-tests/build.xml b/briar-tests/build.xml
index 8dacc0cd25cda89cf621bd9906691d7abd0e043f..1acfdcb3c0c10e13511d9eb2bbd8a4ba8227d8c9 100644
--- a/briar-tests/build.xml
+++ b/briar-tests/build.xml
@@ -85,6 +85,7 @@
 			<test name='net.sf.briar.plugins.file.PollingRemovableDriveMonitorTest'/>
 			<test name='net.sf.briar.plugins.file.RemovableDrivePluginTest'/>
 			<test name='net.sf.briar.plugins.file.UnixRemovableDriveMonitorTest'/>
+			<test name='net.sf.briar.plugins.modem.CountryCodesTest'/>
 			<test name='net.sf.briar.plugins.tcp.LanTcpPluginTest'/>
 			<test name='net.sf.briar.protocol.AckReaderTest'/>
 			<test name='net.sf.briar.protocol.BatchReaderTest'/>
diff --git a/briar-tests/src/net/sf/briar/plugins/modem/CountryCodesTest.java b/briar-tests/src/net/sf/briar/plugins/modem/CountryCodesTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..8c87bb50ff384661fc0fadd819488970a1f18a3e
--- /dev/null
+++ b/briar-tests/src/net/sf/briar/plugins/modem/CountryCodesTest.java
@@ -0,0 +1,34 @@
+package net.sf.briar.plugins.modem;
+
+import net.sf.briar.BriarTestCase;
+
+import org.junit.Test;
+
+public class CountryCodesTest extends BriarTestCase {
+
+	@Test
+	public void testTranslation() {
+		// Unknown country for caller
+		assertNull(CountryCodes.translate("02012345678", "ZZ", "GB"));
+		// Unknown country for callee
+		assertNull(CountryCodes.translate("02012345678", "GB", "ZZ"));
+		// GB to GB, callee has included NDD prefix
+		assertEquals("02012345678",
+				CountryCodes.translate("02012345678", "GB", "GB"));
+		// GB to GB, callee has included IDD prefix and country code
+		assertEquals("02012345678",
+				CountryCodes.translate("00442012345678", "GB", "GB"));
+		// GB to GB, callee has not included a prefix
+		assertEquals("02012345678",
+				CountryCodes.translate("2012345678", "GB", "GB"));
+		// Russia to GB, callee has included NDD prefix
+		assertEquals("8**10442012345678",
+				CountryCodes.translate("02012345678", "RU", "GB"));
+		// Russia to GB, callee has included IDD prefix and country code
+		assertEquals("8**10442012345678",
+				CountryCodes.translate("00442012345678", "RU", "GB"));
+		// Russia to GB, callee has not included a prefix
+		assertEquals("8**10442012345678",
+				CountryCodes.translate("2012345678", "RU", "GB"));
+	}
+}