diff --git a/RTCP/InputProc/src/SampleBufferReader.h b/RTCP/InputProc/src/SampleBufferReader.h
index 22da273eebce168194e670a3990d8cf660ad54de..83db4040d4ff1e5c4fd75a56e0d991c8e3db03f3 100644
--- a/RTCP/InputProc/src/SampleBufferReader.h
+++ b/RTCP/InputProc/src/SampleBufferReader.h
@@ -31,12 +31,35 @@ protected:
   const TimeStamp from, to;
   const size_t blockSize;
 
+  /* process() will call one of these sequences:
+   *
+   * 1. copyNothing(from, to);
+   *
+   * 2. copyStart(from, to, 0);
+   *    foreach(beamlet)
+   *      copyBeamlet(beamlet, 0, from, .., ..);
+   *    foreach(board)
+   *      copyFlags(board, ..);
+   *    copyEnd();
+   *
+   * 3. copyStart(from, to, ..);
+   *    foreach(beamlet) {
+   *      copyBeamlet(beamlet, 0, from, .., ..);
+   *      copyBeamlet(beamlet, 1, .., .., ..);
+   *    }
+   *    foreach(board)
+   *      copyFlags(board, ..);
+   *    copyEnd();
+   *
+   * Two transfers are needed per beamlet if the requested
+   * range wraps around the end of the buffer.
+   */
+
   virtual void copyNothing( const TimeStamp &from, const TimeStamp &to ) { (void)from, (void)to; }
 
-  virtual void copyBeamlet( unsigned beamlet, unsigned transfer, const TimeStamp &from_ts, const T* from, size_t nrSamples ) = 0;
   virtual void copyStart( const TimeStamp &from, const TimeStamp &to, size_t wrap ) { (void)from, (void)to, (void)wrap; }
-
-  virtual void copyFlags  ( unsigned transfer, const SparseSet<int64> &flags ) = 0;
+  virtual void copyBeamlet( unsigned beamlet, unsigned transfer, const TimeStamp &from_ts, const T* from, size_t nrSamples ) = 0;
+  virtual void copyFlags( unsigned board, const SparseSet<int64> &flags ) = 0;
   virtual void copyEnd() {}
 
   void copy( const TimeStamp &from, const TimeStamp &to );