In this paper, we present Disjoint Code Layouts (DCL), a technique that complements Multi-Variant Execution and WX protection to effectively immunize programs against control flow hijacking exploits such as Return Oriented Programming (ROP) and return-to-libc attacks. DCL improves upon Address Space Partitioning (ASP), an earlier technique presented to defeat memory exploits. Unlike ASP, our solution keeps the full virtual address space available to the protected program. Additionally, our combination of DCL with Multi-Variant Execution is transparent to both the user and the programmer and incurs much less overhead than other ROP defense tools, both in terms of run time and memory footprint.