One of the most alluring aspects of NVMM technologies is that applications can directly access and modify their contents using load and store instructions, rather than going through the OS. This capability allows programmers to build complex, pointer-based data structures in NVMM and customize those structures to match the needs of the application. Building these data structures is challenging since it combines aspects of concurrency control, memory management, and failure recovery, and bugs in any of those areas can lead to data corruption which NVMM will make persistent. Given these challenges, typical programmers will be unable to build fast, reliable NVMM data structures with significant support from programming languages, libraries, and run-times. Our group built one of the first libraries that makes it easy to build these data structures, and we propose to build additional, more power tools to further simplify programming in NVMMs We are particularly interested in two areas: 1) integrating support for NVMM programming models into the compiler and developing compiler transformation and optimizations that can improve the performance of NVMM-aware programs and 2) integrating mechanisms to detect and recover from media errors (i.e., uncorrectable ECC errors) and “scribbles” from mis-behaving code. Without this support, it is unlikely that NVMM storage systems will be trusted for mission-critical data.