diff --git a/libsound/LiveSound.h b/libsound/LiveSound.h
index 1463bab..c1a9602 100644
--- a/libsound/LiveSound.h
+++ b/libsound/LiveSound.h
@@ -129,19 +129,22 @@ private:
         if (_consumed >= _in_point) {
             return;
         }
-        size_t inPoint = _in_point;
+        size_t inPoint = _in_point - _consumed;
 
-        for (const SimpleBuffer& buffer : _buffers) {
+        for ( int idx=_index; idx<_buffers.size(); ++idx ) {
+            const SimpleBuffer& buffer = _buffers[idx];
+            log_debug(" buffer %d has %d bytes", _index, buffer.size());
             size_t advance = std::min(inPoint, buffer.size());
+            _consumed += advance;
             if (advance == buffer.size()) {
                 ++_index;
+                _pos = 0;
                 inPoint -= advance;
             } else {
                 _pos = advance;
                 break;
             }
         }
-        _consumed = _in_point;
     }
 
     std::vector<SimpleBuffer> _buffers;
