A semiconductor package apparatus, comprising: one or more substrates; and logic coupled to the one or more substrates, wherein the logic is at least partly implemented in one or more of configurable logic and fixed-functionality hardware logic, the logic coupled to the one or more substrates to: attempt to program data in a first block of a nonvolatile memory, wherein said nonvolatile memory is a NAND memory, store the data in a cache of the nonvolatile memory prior to the attempt, determine if the attempt was successful, if the attempt is determined to be not successful: determine if the data stored in the cache of the nonvolatile memory is valid; characterized in that the logic coupled to the one or more substrates is further configured to: move the data from the cache to a second block of the nonvolatile memory with an internal data move operation, wherein the second block is specifically reserved for program fail handling; move previously programmed valid pages up until a failed page from the first block of the nonvolatile memory to a new destination block of the nonvolatile memory with the internal data move operation; and recover failed page data comprised by the data from the second block of the nonvolatile memory to the new destination block of the nonvolatile memory with the internal data move operation. one or more substrates; and logic coupled to the one or more substrates, wherein the logic is at least partly implemented in one or more of configurable logic and fixed-functionality hardware logic, the logic coupled to the one or more substrates to: attempt to program data in a first block of a nonvolatile memory, wherein said nonvolatile memory is a NAND memory, store the data in a cache of the nonvolatile memory prior to the attempt, determine if the attempt was successful, if the attempt is determined to be not successful: determine if the data stored in the cache of the nonvolatile memory is valid; characterized in that the logic coupled to the one or more substrates is further configured to: move the data from the cache to a second block of the nonvolatile memory with an internal data move operation, wherein the second block is specifically reserved for program fail handling; move previously programmed valid pages up until a failed page from the first block of the nonvolatile memory to a new destination block of the nonvolatile memory with the internal data move operation; and recover failed page data comprised by the data from the second block of the nonvolatile memory to the new destination block of the nonvolatile memory with the internal data move operation. attempt to program data in a first block of a nonvolatile memory, wherein said nonvolatile memory is a NAND memory, store the data in a cache of the nonvolatile memory prior to the attempt, determine if the attempt was successful, if the attempt is determined to be not successful: determine if the data stored in the cache of the nonvolatile memory is valid; characterized in that the logic coupled to the one or more substrates is further configured to: move the data from the cache to a second block of the nonvolatile memory with an internal data move operation, wherein the second block is specifically reserved for program fail handling; move previously programmed valid pages up until a failed page from the first block of the nonvolatile memory to a new destination block of the nonvolatile memory with the internal data move operation; and recover failed page data comprised by the data from the second block of the nonvolatile memory to the new destination block of the nonvolatile memory with the internal data move operation. determine if the data stored in the cache of the nonvolatile memory is valid; characterized in that the logic coupled to the one or more substrates is further configured to: move the data from the cache to a second block of the nonvolatile memory with an internal data move operation, wherein the second block is specifically reserved for program fail handling; move previously programmed valid pages up until a failed page from the first block of the nonvolatile memory to a new destination block of the nonvolatile memory with the internal data move operation; and recover failed page data comprised by the data from the second block of the nonvolatile memory to the new destination block of the nonvolatile memory with the internal data move operation. move the data from the cache to a second block of the nonvolatile memory with an internal data move operation, wherein the second block is specifically reserved for program fail handling; move previously programmed valid pages up until a failed page from the first block of the nonvolatile memory to a new destination block of the nonvolatile memory with the internal data move operation; and recover failed page data comprised by the data from the second block of the nonvolatile memory to the new destination block of the nonvolatile memory with the internal data move operation.