Software Defined Network (SDN) facilitates a centralized networking system where a controller manages the global view of the network. The introduction of Software-Defined Networks and standards such as OpenFlow spawn several questions regarding scalability and reliability. One such question is the controller placement problem; i.e. given a topology, the problem of determining how many controllers are needed, and where they should be placed. This question has been well-studied relative to performance, but there has not been a focus on maximizing fault-tolerance. In this paper, we present a model for controller placement to account for fault-tolerance and compare our algorithm to existing algorithms. Our proposed solution was analyzed to determine where controllers should be placed on a wide range of topologies from the Internet Topology Zoo. We further evaluated the dependence of fault-tolerance over the range of available number of controllers.