private void prepareMidRoll() {
    final ArrayList<ISlot> mid_slots =
        adContext.getSlotsByTimePositionClass(adConstants.TIME_POSITION_CLASS_MIDROLL());

    Iterator<ISlot> iter = mid_slots.iterator();
    while (iter.hasNext()) {
      ISlot slot = iter.next();
      double tp = slot.getTimePosition();
      Log.i(CLASSTAG, "at " + tp + " has midroll");
      this.midrolls.put(tp, slot.getCustomId());
      this.midrollkeys.add(tp);
    }

    // get all overlay slots
    final ArrayList<ISlot> overlay_slots =
        adContext.getSlotsByTimePositionClass(adConstants.TIME_POSITION_CLASS_OVERLAY());

    // TODO: what if the overlay has the same time position with a mid-roll?
    iter = overlay_slots.iterator();
    while (iter.hasNext()) {
      ISlot slot = iter.next();
      double tp = slot.getTimePosition();
      Log.i(CLASSTAG, "at " + tp + " has overlay");
      this.midrolls.put(tp, slot.getCustomId());
      this.midrollkeys.add(tp);
    }

    Collections.sort(this.midrollkeys);
  }