}
 
 type ChunksReaderer interface {
-       ChunksReader(prefix string) (PieceReader, error)
+       ChunksReader(dir string) (PieceReader, error)
 }
 
 type PrefixDeleter interface {
        return ok
 }
 
-func (s piecePerResourcePiece) getChunksReader(prefix string) (PieceReader, error) {
+// Chunks are in dirs, we add the prefix ourselves.
+func (s piecePerResourcePiece) getChunksReader(dir string) (PieceReader, error) {
        if opt, ok := s.rp.(ChunksReaderer); ok {
-               return opt.ChunksReader(prefix)
+               return opt.ChunksReader(dir)
        }
-       return chunkPieceReader{s.getChunks(prefix)}, nil
+       return chunkPieceReader{s.getChunks(dir)}, nil
 }
 
 func (s piecePerResourcePiece) NewReader() (PieceReader, error) {
        defer s.mu.RUnlock()
        if s.mustIsComplete() {
                if s.hasMovePrefix() {
-                       return s.getChunksReader(s.completedDirPath() + "/")
+                       return s.getChunksReader(s.completedDirPath())
                }
                return instancePieceReader{s.completedInstance()}, nil
        }
-       return s.getChunksReader(s.incompleteDirPath() + "/")
+       return s.getChunksReader(s.incompleteDirPath())
 }
 
 type instancePieceReader struct {
 
 
 // TODO: Should the parent ReadConsecutiveChunks method take the expected number of bytes to avoid
 // trying to read discontinuous or incomplete sequences of chunks?
-func (p Provider) ChunksReader(prefix string) (ret storage.PieceReader, err error) {
+func (p Provider) ChunksReader(dir string) (ret storage.PieceReader, err error) {
+       prefix := dir + "/"
        p.Logger.Levelf(log.Critical, "ChunkReader(%q)", prefix)
        //debug.PrintStack()
        pr, err := p.Handle.NewReader()
 
        } else {
                pieceImpl = t.TorrentImpl.Piece(p)
        }
-       return Piece{pieceImpl, t, p}
+       return Piece{pieceImpl, p}
 }
 
 type Piece struct {
        PieceImpl
-       t   *Torrent
        mip metainfo.Piece
 }