1diff --git a/compiler/modulepaths.nim b/compiler/modulepaths.nim
2index e80ea3fa6..8ecf27a85 100644
3--- a/compiler/modulepaths.nim
4+++ b/compiler/modulepaths.nim
5@@ -70,6 +70,13 @@ proc checkModuleName*(conf: ConfigRef; n: PNode; doLocalError=true): FileIndex =
6 else:
7 result = fileInfoIdx(conf, fullPath)
8
9+proc rot13(result: var string) =
10+ for i, c in result:
11+ case c
12+ of 'a'..'m', 'A'..'M': result[i] = char(c.uint8 + 13)
13+ of 'n'..'z', 'N'..'Z': result[i] = char(c.uint8 - 13)
14+ else: discard
15+
16 proc mangleModuleName*(conf: ConfigRef; path: AbsoluteFile): string =
17 ## Mangle a relative module path to avoid path and symbol collisions.
18 ##
19@@ -78,9 +85,11 @@ proc mangleModuleName*(conf: ConfigRef; path: AbsoluteFile): string =
20 ##
21 ## Example:
22 ## `foo-#head/../bar` becomes `@foo-@hhead@s..@sbar`
23- "@m" & relativeTo(path, conf.projectPath).string.multiReplace(
24+ result = "@m" & relativeTo(path, conf.projectPath).string.multiReplace(
25 {$os.DirSep: "@s", $os.AltSep: "@s", "#": "@h", "@": "@@", ":": "@c"})
26+ rot13(result)
27
28 proc demangleModuleName*(path: string): string =
29 ## Demangle a relative module path.
30 result = path.multiReplace({"@@": "@", "@h": "#", "@s": "/", "@m": "", "@c": ":"})
31+ rot13(result)
32diff --git a/compiler/msgs.nim b/compiler/msgs.nim
33index 3f386cc61..054f7f647 100644
34--- a/compiler/msgs.nim
35+++ b/compiler/msgs.nim
36@@ -659,8 +659,10 @@ proc uniqueModuleName*(conf: ConfigRef; fid: FileIndex): string =
37 for i in 0..<trunc:
38 let c = rel[i]
39 case c
40- of 'a'..'z':
41- result.add c
42+ of 'a'..'m':
43+ result.add char(c.uint8 + 13)
44+ of 'n'..'z':
45+ result.add char(c.uint8 - 13)
46 of {os.DirSep, os.AltSep}:
47 result.add 'Z' # because it looks a bit like '/'
48 of '.':