diff --git a/libavcodec/vorbis_enc.c b/libavcodec/vorbis_enc.c
index a64b7473a9788f561b72d098868b12ee7420ca01..4e45c7e62847c083ec4cfb816c74f07a4dd2e21d 100644
--- a/libavcodec/vorbis_enc.c
+++ b/libavcodec/vorbis_enc.c
@@ -985,12 +985,12 @@ static void residue_encode(venc_context_t * venc, residue_t * rc, PutBitContext
                         }
                     } else {
                         for (k = 0; k < psize; k += book->ndimentions) {
-                            int dim = book->ndimentions, s = rc->begin + p * psize, l;
+                            int dim = book->ndimentions, s = rc->begin + p * psize + k, l;
                             float vec[dim], * a = vec;
-                            for (l = s + k; l < s + k + dim; l++)
+                            for (l = s; l < s + dim; l++)
                                 *a++ = coeffs[(l % real_ch) * samples + l / real_ch];
                             a = put_vector(book, pb, vec);
-                            for (l = s + k; l < s + k + dim; l++)
+                            for (l = s; l < s + dim; l++)
                                 coeffs[(l % real_ch) * samples + l / real_ch] -= *a++;
                         }
                     }