Current hardware memory models treat all data in an address space as functionally equivalent, even though we know that in practice some data is far more important than others. In this paper we introduce Software Critical Memory (SCM), a simple modification to the current flat memory model that recognizes certain data are critical to correct program execution. We introduce the concept of critical memory, created by an operation to map an address range as critical. We add two new memory operations to the current model: verified load and verified store. These are the only operations allowed to consistently read and modify critical memory i.e. no other program store can modify the contents of critical memory with respect to subsequent verified loads. While we focus on software implementations of critical memory, hardware implementations may also be possible. SCM is a general model with a number of important uses. In this paper, we consider using SCM to provide strong atomicity semantics to a software transactional memory implementation that originally supports only weak atomicity. We show that SCM can be implemented with low overhead and the resulting program is more resilient to atomicity violations by errant threads.