  We present the construction of a family of erasure correcting codes for
distributed storage that achieve low repair bandwidth and complexity at the
expense of a lower fault tolerance. The construction is based on two classes of
codes, where the primary goal of the first class of codes is to provide fault
tolerance, while the second class aims at reducing the repair bandwidth and
repair complexity. The repair procedure is a two- step procedure where parts of
the failed node are repaired in the first step using the first code. The
downloaded symbols during the first step are cached in the memory and used to
repair the remaining erased data symbols at minimal additional read cost during
the second step. The first class of codes is based on MDS codes modified using
piggybacks, while the second class is designed to reduce the number of
additional symbols that need to be downloaded to repair the remaining erased
symbols. We numerically show that the proposed codes achieve better repair
bandwidth compared to MDS codes, codes constructed using piggybacks, and local
reconstruction/Pyramid codes, while a better repair complexity is achieved when
compared to MDS, Zigzag, Pyramid codes, and codes constructed using piggybacks.
