In this work, we investigate codes suitable for emerging storage devices. We consider three particular classes of codes: 1) Error-correcting codes for Flash memory 2) Deletion-correcting codes for Flash memory under the rank modulation setup and 3) Error-correcting codes for granular media. For the first problem, we present a construction of a code capable of correcting errors where most of the errors are the result of only a few bits erring within every multilevel Flash cell. For the second problem, motivated by faulty hardware mechanisms, we construct codes applicable to the problem of correcting deletions and erasures over permutations. In the third part of the talk, we present error-correcting codes that target prominent errors that arise in granular media.