This paper proposes a methodology for providing fault tolerance to Petri net controllers. In order to provide tolerance against faults that may compromise the functionality of the Petri net controller, we construct a redundant Petri net embedding that allows the detection and identification of place and transition faults. A place fault results in an incorrect token-load of a place, and a transition fault arises when the token-load of either the input or output place-set of a transition is not appropriately updated following the firing of a transition. The resulting Petri net controller implementations use redundant places, connections and tokens to impose invariant conditions that allow the detection and identification of faults via linear parity checks. The proposed methodology is attractive because the redundant Petri net controller makes efficient use of redundancy and allows for the systematic detection and identification of faults. More specifically, the use of d redundant places enables the detection and identification of up to d - 1 transition faults and up to [d/2] place faults.