diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c
index 43015b987b60a6fe3f462c6101cb00078c84eb07..fa1f8a46d73f001c5c45239e291938dd1ca4abc8 100644
--- a/vp9/decoder/vp9_decodframe.c
+++ b/vp9/decoder/vp9_decodframe.c
@@ -156,13 +156,14 @@ static int merge_index(int v, int n, int modulus) {
 }
 
 static int inv_remap_prob(int v, int m) {
-  const int n = 256;
+  const int n = 255;
 
   v = merge_index(v, n - 1, MODULUS_PARAM);
+  m--;
   if ((m << 1) <= n) {
-    return inv_recenter_nonneg(v + 1, m);
+    return 1 + inv_recenter_nonneg(v + 1, m);
   } else {
-    return n - 1 - inv_recenter_nonneg(v + 1, n - 1 - m);
+    return n - inv_recenter_nonneg(v + 1, n - 1 - m);
   }
 }
 
diff --git a/vp9/encoder/vp9_bitstream.c b/vp9/encoder/vp9_bitstream.c
index 2808571e8e931fb875396281cdc6c276099ac35e..86cd81031273d77b08dba4db1b03a275855365c8 100644
--- a/vp9/encoder/vp9_bitstream.c
+++ b/vp9/encoder/vp9_bitstream.c
@@ -265,7 +265,7 @@ int count_term_subexp(int word, int k, int num_syms) {
 
 static void compute_update_table() {
   int i;
-  for (i = 0; i < 255; i++)
+  for (i = 0; i < 254; i++)
     update_bits[i] = count_term_subexp(i, SUBEXP_PARAM, 255);
 }
 
@@ -277,9 +277,11 @@ static int split_index(int i, int n, int modulus) {
 }
 
 static int remap_prob(int v, int m) {
-  const int n = 256;
+  const int n = 255;
   const int modulus = MODULUS_PARAM;
   int i;
+  v--;
+  m--;
   if ((m << 1) <= n)
     i = recenter_nonneg(v, m) - 1;
   else