diff --git a/aom_dsp/aom_dsp.mk b/aom_dsp/aom_dsp.mk
index b7943a1..87504c2 100644
--- a/aom_dsp/aom_dsp.mk
+++ b/aom_dsp/aom_dsp.mk
@@ -27,14 +27,11 @@
 DSP_SRCS-yes += answriter.h
 DSP_SRCS-yes += buf_ans.h
 DSP_SRCS-yes += buf_ans.c
-else ifeq ($(CONFIG_DAALA_EC),yes)
+else
 DSP_SRCS-yes += entenc.c
 DSP_SRCS-yes += entenc.h
 DSP_SRCS-yes += daalaboolwriter.c
 DSP_SRCS-yes += daalaboolwriter.h
-else
-DSP_SRCS-yes += dkboolwriter.h
-DSP_SRCS-yes += dkboolwriter.c
 endif
 DSP_SRCS-yes += bitwriter.h
 DSP_SRCS-yes += bitwriter_buffer.c
@@ -52,14 +49,11 @@
 ifeq ($(CONFIG_AV1_DECODER),yes)
 ifeq ($(CONFIG_ANS),yes)
 DSP_SRCS-yes += ansreader.h
-else ifeq ($(CONFIG_DAALA_EC),yes)
+else
 DSP_SRCS-yes += entdec.c
 DSP_SRCS-yes += entdec.h
 DSP_SRCS-yes += daalaboolreader.c
 DSP_SRCS-yes += daalaboolreader.h
-else
-DSP_SRCS-yes += dkboolreader.h
-DSP_SRCS-yes += dkboolreader.c
 endif
 DSP_SRCS-yes += bitreader.h
 DSP_SRCS-yes += bitreader_buffer.c
@@ -71,7 +65,7 @@
 # intra predictions
 DSP_SRCS-yes += intrapred.c
 
-ifeq ($(CONFIG_DAALA_EC),yes)
+ifneq ($(CONFIG_ANS),yes)
 DSP_SRCS-yes += entcode.c
 DSP_SRCS-yes += entcode.h
 endif
diff --git a/aom_dsp/bitreader.h b/aom_dsp/bitreader.h
index 67e723d..5bad70c 100644
--- a/aom_dsp/bitreader.h
+++ b/aom_dsp/bitreader.h
@@ -16,19 +16,13 @@
 #include <limits.h>
 
 #include "./aom_config.h"
-#if CONFIG_EC_ADAPT && !(CONFIG_DAALA_EC || CONFIG_ANS)
-#error \
-    "CONFIG_EC_ADAPT is enabled without either CONFIG_DAALA_EC or CONFIG_ANS."
-#endif
 
 #include "aom/aomdx.h"
 #include "aom/aom_integer.h"
 #if CONFIG_ANS
 #include "aom_dsp/ansreader.h"
-#elif CONFIG_DAALA_EC
-#include "aom_dsp/daalaboolreader.h"
 #else
-#include "aom_dsp/dkboolreader.h"
+#include "aom_dsp/daalaboolreader.h"
 #endif
 #include "aom_dsp/prob.h"
 #include "av1/common/odintrin.h"
@@ -62,26 +56,20 @@
 
 #if CONFIG_ANS
 typedef struct AnsDecoder aom_reader;
-#elif CONFIG_DAALA_EC
-typedef struct daala_reader aom_reader;
 #else
-typedef struct aom_dk_reader aom_reader;
+typedef struct daala_reader aom_reader;
 #endif
 
 static INLINE int aom_reader_init(aom_reader *r, const uint8_t *buffer,
                                   size_t size, aom_decrypt_cb decrypt_cb,
                                   void *decrypt_state) {
-#if CONFIG_ANS
   (void)decrypt_cb;
   (void)decrypt_state;
+#if CONFIG_ANS
   if (size > INT_MAX) return 1;
   return ans_read_init(r, buffer, (int)size);
-#elif CONFIG_DAALA_EC
-  (void)decrypt_cb;
-  (void)decrypt_state;
-  return aom_daala_reader_init(r, buffer, (int)size);
 #else
-  return aom_dk_reader_init(r, buffer, size, decrypt_cb, decrypt_state);
+  return aom_daala_reader_init(r, buffer, (int)size);
 #endif
 }
 
@@ -90,20 +78,16 @@
   (void)r;
   assert(0 && "Use the raw buffer size with ANS");
   return NULL;
-#elif CONFIG_DAALA_EC
-  return aom_daala_reader_find_end(r);
 #else
-  return aom_dk_reader_find_end(r);
+  return aom_daala_reader_find_end(r);
 #endif
 }
 
 static INLINE int aom_reader_has_error(aom_reader *r) {
 #if CONFIG_ANS
   return ans_reader_has_error(r);
-#elif CONFIG_DAALA_EC
-  return aom_daala_reader_has_error(r);
 #else
-  return aom_dk_reader_has_error(r);
+  return aom_daala_reader_has_error(r);
 #endif
 }
 
@@ -113,10 +97,8 @@
   (void)r;
   assert(0 && "aom_reader_tell() is unimplemented for ANS");
   return 0;
-#elif CONFIG_DAALA_EC
-  return aom_daala_reader_tell(r);
 #else
-  return aom_dk_reader_tell(r);
+  return aom_daala_reader_tell(r);
 #endif
 }
 
@@ -126,10 +108,8 @@
   (void)r;
   assert(0 && "aom_reader_tell_frac() is unimplemented for ANS");
   return 0;
-#elif CONFIG_DAALA_EC
-  return aom_daala_reader_tell_frac(r);
 #else
-  return aom_dk_reader_tell_frac(r);
+  return aom_daala_reader_tell_frac(r);
 #endif
 }
 
@@ -156,10 +136,8 @@
   int ret;
 #if CONFIG_ANS
   ret = rabs_read(r, prob);
-#elif CONFIG_DAALA_EC
-  ret = aom_daala_read(r, prob);
 #else
-  ret = aom_dk_read(r, prob);
+  ret = aom_daala_read(r, prob);
 #endif
 #if CONFIG_ACCOUNTING
   if (ACCT_STR_NAME) aom_process_accounting(r, ACCT_STR_NAME);
@@ -172,7 +150,7 @@
   int ret;
 #if CONFIG_ANS
   ret = rabs_read_bit(r);  // Non trivial optimization at half probability
-#elif CONFIG_DAALA_EC && CONFIG_RAWBITS
+#elif CONFIG_RAWBITS
   // Note this uses raw bits and is not the same as aom_daala_read(r, 128);
   // Calls to this function are omitted from raw symbol accounting.
   ret = aom_daala_read_bit(r);
@@ -195,16 +173,6 @@
   return literal;
 }
 
-static INLINE int aom_read_tree_as_bits(aom_reader *r,
-                                        const aom_tree_index *tree,
-                                        const aom_prob *probs) {
-  aom_tree_index i = 0;
-
-  while ((i = tree[i + aom_read(r, probs[i >> 1], NULL)]) > 0) continue;
-  return -i;
-}
-
-#if CONFIG_DAALA_EC || CONFIG_ANS
 static INLINE int aom_read_cdf_(aom_reader *r, const aom_cdf_prob *cdf,
                                 int nsymbs ACCT_STR_PARAM) {
   int ret;
@@ -250,16 +218,11 @@
   } while (i > 0);
   return -i;
 }
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 static INLINE int aom_read_tree_(aom_reader *r, const aom_tree_index *tree,
                                  const aom_prob *probs ACCT_STR_PARAM) {
   int ret;
-#if CONFIG_DAALA_EC || CONFIG_ANS
   ret = aom_read_tree_as_cdf(r, tree, probs);
-#else
-  ret = aom_read_tree_as_bits(r, tree, probs);
-#endif
 #if CONFIG_ACCOUNTING
   if (ACCT_STR_NAME) aom_process_accounting(r, ACCT_STR_NAME);
 #endif
diff --git a/aom_dsp/bitwriter.h b/aom_dsp/bitwriter.h
index af34615..588e47b 100644
--- a/aom_dsp/bitwriter.h
+++ b/aom_dsp/bitwriter.h
@@ -14,17 +14,11 @@
 
 #include <assert.h>
 #include "./aom_config.h"
-#if CONFIG_EC_ADAPT && !(CONFIG_DAALA_EC || CONFIG_ANS)
-#error \
-    "CONFIG_EC_ADAPT is enabled without either CONFIG_DAALA_EC of CONFIG_ANS."
-#endif
 
 #if CONFIG_ANS
 #include "aom_dsp/buf_ans.h"
-#elif CONFIG_DAALA_EC
-#include "aom_dsp/daalaboolwriter.h"
 #else
-#include "aom_dsp/dkboolwriter.h"
+#include "aom_dsp/daalaboolwriter.h"
 #endif
 #include "aom_dsp/prob.h"
 
@@ -39,10 +33,8 @@
 
 #if CONFIG_ANS
 typedef struct BufAnsCoder aom_writer;
-#elif CONFIG_DAALA_EC
-typedef struct daala_writer aom_writer;
 #else
-typedef struct aom_dk_writer aom_writer;
+typedef struct daala_writer aom_writer;
 #endif
 
 typedef struct TOKEN_STATS {
@@ -73,10 +65,8 @@
   (void)bc;
   (void)buffer;
   assert(0 && "buf_ans requires a more complicated startup procedure");
-#elif CONFIG_DAALA_EC
-  aom_daala_start_encode(bc, buffer);
 #else
-  aom_dk_start_encode(bc, buffer);
+  aom_daala_start_encode(bc, buffer);
 #endif
 }
 
@@ -84,20 +74,16 @@
 #if CONFIG_ANS
   (void)bc;
   assert(0 && "buf_ans requires a more complicated shutdown procedure");
-#elif CONFIG_DAALA_EC
-  aom_daala_stop_encode(bc);
 #else
-  aom_dk_stop_encode(bc);
+  aom_daala_stop_encode(bc);
 #endif
 }
 
 static INLINE void aom_write(aom_writer *br, int bit, int probability) {
 #if CONFIG_ANS
   buf_rabs_write(br, bit, probability);
-#elif CONFIG_DAALA_EC
-  aom_daala_write(br, bit, probability);
 #else
-  aom_dk_write(br, bit, probability);
+  aom_daala_write(br, bit, probability);
 #endif
 }
 
@@ -114,7 +100,7 @@
 static INLINE void aom_write_bit(aom_writer *w, int bit) {
 #if CONFIG_ANS
   buf_rabs_write_bit(w, bit);
-#elif CONFIG_DAALA_EC && CONFIG_RAWBITS
+#elif CONFIG_RAWBITS
   // Note this uses raw bits and is not the same as aom_daala_write(r, 128);
   aom_daala_write_bit(w, bit);
 #else
@@ -138,28 +124,6 @@
   for (bit = bits - 1; bit >= 0; bit--) aom_write_bit(w, 1 & (data >> bit));
 }
 
-static INLINE void aom_write_tree_as_bits(aom_writer *w,
-                                          const aom_tree_index *tr,
-                                          const aom_prob *probs, int bits,
-                                          int len, aom_tree_index i) {
-  do {
-    const int bit = (bits >> --len) & 1;
-    aom_write(w, bit, probs[i >> 1]);
-    i = tr[i + bit];
-  } while (len);
-}
-
-static INLINE void aom_write_tree_as_bits_record(
-    aom_writer *w, const aom_tree_index *tr, const aom_prob *probs, int bits,
-    int len, aom_tree_index i, TOKEN_STATS *token_stats) {
-  do {
-    const int bit = (bits >> --len) & 1;
-    aom_write_record(w, bit, probs[i >> 1], token_stats);
-    i = tr[i + bit];
-  } while (len);
-}
-
-#if CONFIG_DAALA_EC || CONFIG_ANS
 static INLINE void aom_write_cdf(aom_writer *w, int symb,
                                  const aom_cdf_prob *cdf, int nsymbs) {
 #if CONFIG_ANS
@@ -220,16 +184,10 @@
   } while (len);
 }
 
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
-
 static INLINE void aom_write_tree(aom_writer *w, const aom_tree_index *tree,
                                   const aom_prob *probs, int bits, int len,
                                   aom_tree_index i) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_write_tree_as_cdf(w, tree, probs, bits, len, i);
-#else
-  aom_write_tree_as_bits(w, tree, probs, bits, len, i);
-#endif
 }
 
 static INLINE void aom_write_tree_record(aom_writer *w,
@@ -237,12 +195,8 @@
                                          const aom_prob *probs, int bits,
                                          int len, aom_tree_index i,
                                          TOKEN_STATS *token_stats) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
   (void)token_stats;
   aom_write_tree_as_cdf(w, tree, probs, bits, len, i);
-#else
-  aom_write_tree_as_bits_record(w, tree, probs, bits, len, i, token_stats);
-#endif
 }
 
 #ifdef __cplusplus
diff --git a/aom_dsp/dkboolreader.c b/aom_dsp/dkboolreader.c
deleted file mode 100644
index 288d5f1..0000000
--- a/aom_dsp/dkboolreader.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <stdlib.h>
-
-#include "./aom_config.h"
-
-#include "aom_dsp/dkboolreader.h"
-#include "aom_dsp/prob.h"
-#include "aom_dsp/aom_dsp_common.h"
-#include "aom_ports/mem.h"
-#include "aom_mem/aom_mem.h"
-#include "aom_util/endian_inl.h"
-
-static INLINE int aom_dk_read_bit(struct aom_dk_reader *r) {
-  return aom_dk_read(r, 128);  // aom_prob_half
-}
-
-int aom_dk_reader_init(struct aom_dk_reader *r, const uint8_t *buffer,
-                       size_t size, aom_decrypt_cb decrypt_cb,
-                       void *decrypt_state) {
-  if (size && !buffer) {
-    return 1;
-  } else {
-    r->buffer_end = buffer + size;
-    r->buffer_start = r->buffer = buffer;
-    r->value = 0;
-    r->count = -8;
-    r->range = 255;
-    r->decrypt_cb = decrypt_cb;
-    r->decrypt_state = decrypt_state;
-    aom_dk_reader_fill(r);
-#if CONFIG_ACCOUNTING
-    r->accounting = NULL;
-#endif
-    return aom_dk_read_bit(r) != 0;  // marker bit
-  }
-}
-
-void aom_dk_reader_fill(struct aom_dk_reader *r) {
-  const uint8_t *const buffer_end = r->buffer_end;
-  const uint8_t *buffer = r->buffer;
-  const uint8_t *buffer_start = buffer;
-  BD_VALUE value = r->value;
-  int count = r->count;
-  const size_t bytes_left = buffer_end - buffer;
-  const size_t bits_left = bytes_left * CHAR_BIT;
-  int shift = BD_VALUE_SIZE - CHAR_BIT - (count + CHAR_BIT);
-
-  if (r->decrypt_cb) {
-    size_t n = AOMMIN(sizeof(r->clear_buffer), bytes_left);
-    r->decrypt_cb(r->decrypt_state, buffer, r->clear_buffer, (int)n);
-    buffer = r->clear_buffer;
-    buffer_start = r->clear_buffer;
-  }
-  if (bits_left > BD_VALUE_SIZE) {
-    const int bits = (shift & 0xfffffff8) + CHAR_BIT;
-    BD_VALUE nv;
-    BD_VALUE big_endian_values;
-    memcpy(&big_endian_values, buffer, sizeof(BD_VALUE));
-#if SIZE_MAX == 0xffffffffffffffffULL
-    big_endian_values = HToBE64(big_endian_values);
-#else
-    big_endian_values = HToBE32(big_endian_values);
-#endif
-    nv = big_endian_values >> (BD_VALUE_SIZE - bits);
-    count += bits;
-    buffer += (bits >> 3);
-    value = r->value | (nv << (shift & 0x7));
-  } else {
-    const int bits_over = (int)(shift + CHAR_BIT - (int)bits_left);
-    int loop_end = 0;
-    if (bits_over >= 0) {
-      count += LOTS_OF_BITS;
-      loop_end = bits_over;
-    }
-
-    if (bits_over < 0 || bits_left) {
-      while (shift >= loop_end) {
-        count += CHAR_BIT;
-        value |= (BD_VALUE)*buffer++ << shift;
-        shift -= CHAR_BIT;
-      }
-    }
-  }
-
-  // NOTE: Variable 'buffer' may not relate to 'r->buffer' after decryption,
-  // so we increase 'r->buffer' by the amount that 'buffer' moved, rather than
-  // assign 'buffer' to 'r->buffer'.
-  r->buffer += buffer - buffer_start;
-  r->value = value;
-  r->count = count;
-}
-
-const uint8_t *aom_dk_reader_find_end(struct aom_dk_reader *r) {
-  // Find the end of the coded buffer
-  while (r->count > CHAR_BIT && r->count < BD_VALUE_SIZE) {
-    r->count -= CHAR_BIT;
-    r->buffer--;
-  }
-  return r->buffer;
-}
diff --git a/aom_dsp/dkboolreader.h b/aom_dsp/dkboolreader.h
deleted file mode 100644
index f0bc843..0000000
--- a/aom_dsp/dkboolreader.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_DSP_DKBOOLREADER_H_
-#define AOM_DSP_DKBOOLREADER_H_
-
-#include <assert.h>
-#include <stddef.h>
-#include <limits.h>
-
-#include "./aom_config.h"
-#if CONFIG_BITSTREAM_DEBUG
-#include <assert.h>
-#include <stdio.h>
-#include "aom_util/debug_util.h"
-#endif  // CONFIG_BITSTREAM_DEBUG
-
-#include "aom_ports/mem.h"
-#include "aom/aomdx.h"
-#include "aom/aom_integer.h"
-#include "aom_dsp/prob.h"
-#if CONFIG_ACCOUNTING
-#include "av1/decoder/accounting.h"
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef size_t BD_VALUE;
-
-#define BD_VALUE_SIZE ((int)sizeof(BD_VALUE) * CHAR_BIT)
-
-// This is meant to be a large, positive constant that can still be efficiently
-// loaded as an immediate (on platforms like ARM, for example).
-// Even relatively modest values like 100 would work fine.
-#define LOTS_OF_BITS 0x40000000
-
-struct aom_dk_reader {
-  // Be careful when reordering this struct, it may impact the cache negatively.
-  BD_VALUE value;
-  unsigned int range;
-  int count;
-  const uint8_t *buffer_start;
-  const uint8_t *buffer_end;
-  const uint8_t *buffer;
-  aom_decrypt_cb decrypt_cb;
-  void *decrypt_state;
-  uint8_t clear_buffer[sizeof(BD_VALUE) + 1];
-#if CONFIG_ACCOUNTING
-  Accounting *accounting;
-#endif
-};
-
-int aom_dk_reader_init(struct aom_dk_reader *r, const uint8_t *buffer,
-                       size_t size, aom_decrypt_cb decrypt_cb,
-                       void *decrypt_state);
-
-void aom_dk_reader_fill(struct aom_dk_reader *r);
-
-const uint8_t *aom_dk_reader_find_end(struct aom_dk_reader *r);
-
-static INLINE uint32_t aom_dk_reader_tell(const struct aom_dk_reader *r) {
-  const uint32_t bits_read =
-      (uint32_t)((r->buffer - r->buffer_start) * CHAR_BIT);
-  const int count =
-      (r->count < LOTS_OF_BITS) ? r->count : r->count - LOTS_OF_BITS;
-  assert(r->buffer >= r->buffer_start);
-  return bits_read - (count + CHAR_BIT);
-}
-
-/*The resolution of fractional-precision bit usage measurements, i.e.,
-   3 => 1/8th bits.*/
-#define DK_BITRES (3)
-
-static INLINE uint32_t aom_dk_reader_tell_frac(const struct aom_dk_reader *r) {
-  uint32_t num_bits;
-  uint32_t range;
-  int l;
-  int i;
-  num_bits = aom_dk_reader_tell(r) << DK_BITRES;
-  range = r->range;
-  l = 0;
-  for (i = DK_BITRES; i-- > 0;) {
-    int b;
-    range = range * range >> 7;
-    b = (int)(range >> 8);
-    l = l << 1 | b;
-    range >>= b;
-  }
-  return num_bits - l;
-}
-
-static INLINE int aom_dk_reader_has_error(struct aom_dk_reader *r) {
-  // Check if we have reached the end of the buffer.
-  //
-  // Variable 'count' stores the number of bits in the 'value' buffer, minus
-  // 8. The top byte is part of the algorithm, and the remainder is buffered
-  // to be shifted into it. So if count == 8, the top 16 bits of 'value' are
-  // occupied, 8 for the algorithm and 8 in the buffer.
-  //
-  // When reading a byte from the user's buffer, count is filled with 8 and
-  // one byte is filled into the value buffer. When we reach the end of the
-  // data, count is additionally filled with LOTS_OF_BITS. So when
-  // count == LOTS_OF_BITS - 1, the user's data has been exhausted.
-  //
-  // 1 if we have tried to decode bits after the end of stream was encountered.
-  // 0 No error.
-  return r->count > BD_VALUE_SIZE && r->count < LOTS_OF_BITS;
-}
-
-static INLINE int aom_dk_read(struct aom_dk_reader *r, int prob) {
-  unsigned int bit = 0;
-  BD_VALUE value;
-  BD_VALUE bigsplit;
-  int count;
-  unsigned int range;
-  unsigned int split = (r->range * prob + (256 - prob)) >> CHAR_BIT;
-
-  if (r->count < 0) aom_dk_reader_fill(r);
-
-  value = r->value;
-  count = r->count;
-
-  bigsplit = (BD_VALUE)split << (BD_VALUE_SIZE - CHAR_BIT);
-
-  range = split;
-
-  if (value >= bigsplit) {
-    range = r->range - split;
-    value = value - bigsplit;
-    bit = 1;
-  }
-
-  {
-    register int shift = aom_norm[range];
-    range <<= shift;
-    value <<= shift;
-    count -= shift;
-  }
-  r->value = value;
-  r->count = count;
-  r->range = range;
-
-#if CONFIG_BITSTREAM_DEBUG
-  {
-    int ref_bit, ref_prob;
-    const int queue_r = bitstream_queue_get_read();
-    const int frame_idx = bitstream_queue_get_frame_read();
-    bitstream_queue_pop(&ref_bit, &ref_prob);
-    if (prob != ref_prob) {
-      fprintf(
-          stderr,
-          "\n *** prob error, frame_idx_r %d prob %d ref_prob %d queue_r %d\n",
-          frame_idx, prob, ref_prob, queue_r);
-      assert(0);
-    }
-    if ((int)bit != ref_bit) {
-      fprintf(stderr, "\n *** bit error, frame_idx_r %d bit %d ref_bit %d\n",
-              frame_idx, bit, ref_bit);
-      assert(0);
-    }
-  }
-#endif  // CONFIG_BITSTREAM_DEBUG
-
-  return bit;
-}
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif  // AOM_DSP_DKBOOLREADER_H_
diff --git a/aom_dsp/dkboolwriter.c b/aom_dsp/dkboolwriter.c
deleted file mode 100644
index fc98e7c..0000000
--- a/aom_dsp/dkboolwriter.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#include <assert.h>
-
-#include "./dkboolwriter.h"
-
-static INLINE void aom_dk_write_bit(aom_dk_writer *w, int bit) {
-  aom_dk_write(w, bit, 128);  // aom_prob_half
-}
-
-void aom_dk_start_encode(aom_dk_writer *br, uint8_t *source) {
-  br->lowvalue = 0;
-  br->range = 255;
-  br->count = -24;
-  br->buffer = source;
-  br->pos = 0;
-  aom_dk_write_bit(br, 0);
-}
-
-void aom_dk_stop_encode(aom_dk_writer *br) {
-  int i;
-
-#if CONFIG_BITSTREAM_DEBUG
-  bitstream_queue_set_skip_write(1);
-#endif  // CONFIG_BITSTREAM_DEBUG
-
-  for (i = 0; i < 32; i++) aom_dk_write_bit(br, 0);
-
-#if CONFIG_BITSTREAM_DEBUG
-  bitstream_queue_set_skip_write(0);
-#endif  // CONFIG_BITSTREAM_DEBUG
-
-  // Ensure there's no ambigous collision with any index marker bytes
-  if ((br->buffer[br->pos - 1] & 0xe0) == 0xc0) br->buffer[br->pos++] = 0;
-}
diff --git a/aom_dsp/dkboolwriter.h b/aom_dsp/dkboolwriter.h
deleted file mode 100644
index 8354368..0000000
--- a/aom_dsp/dkboolwriter.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2016, Alliance for Open Media. All rights reserved
- *
- * This source code is subject to the terms of the BSD 2 Clause License and
- * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
- * was not distributed with this source code in the LICENSE file, you can
- * obtain it at www.aomedia.org/license/software. If the Alliance for Open
- * Media Patent License 1.0 was not distributed with this source code in the
- * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
- */
-
-#ifndef AOM_DSP_DKBOOLWRITER_H_
-#define AOM_DSP_DKBOOLWRITER_H_
-
-#include "./aom_config.h"
-
-#if CONFIG_BITSTREAM_DEBUG
-#include <stdio.h>
-#include "aom_util/debug_util.h"
-#endif  // CONFIG_BITSTREAM_DEBUG
-
-#include "aom_dsp/prob.h"
-#include "aom_ports/mem.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct aom_dk_writer {
-  unsigned int lowvalue;
-  unsigned int range;
-  int count;
-  unsigned int pos;
-  uint8_t *buffer;
-} aom_dk_writer;
-
-void aom_dk_start_encode(aom_dk_writer *bc, uint8_t *buffer);
-void aom_dk_stop_encode(aom_dk_writer *bc);
-
-static INLINE void aom_dk_write(aom_dk_writer *br, int bit, int probability) {
-  unsigned int split;
-  int count = br->count;
-  unsigned int range = br->range;
-  unsigned int lowvalue = br->lowvalue;
-  register int shift;
-
-#if CONFIG_BITSTREAM_DEBUG
-  // int queue_r = 0;
-  // int frame_idx_r = 0;
-  // int queue_w = bitstream_queue_get_write();
-  // int frame_idx_w = bitstream_queue_get_frame_write();
-  // if (frame_idx_w == frame_idx_r && queue_w == queue_r) {
-  //   fprintf(stderr, "\n *** bitstream queue at frame_idx_w %d queue_w %d\n",
-  //   frame_idx_w, queue_w);
-  // }
-  bitstream_queue_push(bit, probability);
-#endif  // CONFIG_BITSTREAM_DEBUG
-
-  split = 1 + (((range - 1) * probability) >> 8);
-
-  range = split;
-
-  if (bit) {
-    lowvalue += split;
-    range = br->range - split;
-  }
-
-  shift = aom_norm[range];
-
-  range <<= shift;
-  count += shift;
-
-  if (count >= 0) {
-    int offset = shift - count;
-
-    if ((lowvalue << (offset - 1)) & 0x80000000) {
-      int x = br->pos - 1;
-
-      while (x >= 0 && br->buffer[x] == 0xff) {
-        br->buffer[x] = 0;
-        x--;
-      }
-
-      br->buffer[x] += 1;
-    }
-
-    br->buffer[br->pos++] = (lowvalue >> (24 - offset));
-    lowvalue <<= offset;
-    shift = count;
-    lowvalue &= 0xffffff;
-    count -= 8;
-  }
-
-  lowvalue <<= shift;
-  br->count = count;
-  br->lowvalue = lowvalue;
-  br->range = range;
-}
-
-#ifdef __cplusplus
-}  // extern "C"
-#endif
-
-#endif  // AOM_DSP_DKBOOLWRITER_H_
diff --git a/aom_dsp/prob.c b/aom_dsp/prob.c
index 913742a..eefe752 100644
--- a/aom_dsp/prob.c
+++ b/aom_dsp/prob.c
@@ -11,25 +11,10 @@
 
 #include "./aom_config.h"
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
 #include <string.h>
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 #include "aom_dsp/prob.h"
 
-const uint8_t aom_norm[256] = {
-  0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-  3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
 static unsigned int tree_merge_probs_impl(unsigned int i,
                                           const aom_tree_index *tree,
                                           const aom_prob *pre_probs,
@@ -53,7 +38,6 @@
   tree_merge_probs_impl(0, tree, pre_probs, counts, probs);
 }
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
 typedef struct tree_node tree_node;
 
 struct tree_node {
@@ -233,4 +217,3 @@
   int stack_index = 0;
   tree_to_index(&stack_index, ind, inv, tree, 0, 0);
 }
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
diff --git a/aom_dsp/prob.h b/aom_dsp/prob.h
index 8201e42..ec6654a 100644
--- a/aom_dsp/prob.h
+++ b/aom_dsp/prob.h
@@ -20,7 +20,7 @@
 #include "aom_ports/bitops.h"
 #include "aom_ports/mem.h"
 
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
 #include "aom_dsp/entcode.h"
 #endif
 
@@ -33,14 +33,12 @@
 // TODO(negge): Rename this aom_prob once we remove vpxbool.
 typedef uint16_t aom_cdf_prob;
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
 #define CDF_SIZE(x) ((x) + 1)
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 #define CDF_PROB_BITS 15
 #define CDF_PROB_TOP (1 << CDF_PROB_BITS)
 
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
 #define AOM_ICDF OD_ICDF
 #else
 #define AOM_ICDF(x) (x)
@@ -117,7 +115,6 @@
 void aom_tree_merge_probs(const aom_tree_index *tree, const aom_prob *pre_probs,
                           const unsigned int *counts, aom_prob *probs);
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
 int tree_to_cdf(const aom_tree_index *tree, const aom_prob *probs,
                 aom_tree_index root, aom_cdf_prob *cdf, aom_tree_index *ind,
                 int *pth, int *len);
@@ -150,9 +147,6 @@
   } while (0)
 
 void av1_indices_from_tree(int *ind, int *inv, const aom_tree_index *tree);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
-
-DECLARE_ALIGNED(16, extern const uint8_t, aom_norm[256]);
 
 #if CONFIG_EC_ADAPT
 static INLINE void update_cdf(aom_cdf_prob *cdf, int val, int nsymbs) {
@@ -165,7 +159,7 @@
   tmp = AOM_ICDF(tmp0);
   diff = ((CDF_PROB_TOP - (nsymbs << rate2)) >> rate) << rate;
 // Single loop (faster)
-#if CONFIG_DAALA_EC && CONFIG_EC_SMALLMUL
+#if !CONFIG_ANS && CONFIG_EC_SMALLMUL
   for (i = 0; i < nsymbs - 1; ++i, tmp -= tmp0) {
     tmp -= (i == val ? diff : 0);
     cdf[i] += ((tmp - cdf[i]) >> rate);
diff --git a/aom_util/debug_util.c b/aom_util/debug_util.c
index 071d669..ea73df8 100644
--- a/aom_util/debug_util.c
+++ b/aom_util/debug_util.c
@@ -16,12 +16,8 @@
 
 #define QUEUE_MAX_SIZE 2000000
 static int result_queue[QUEUE_MAX_SIZE];
-#if CONFIG_DAALA_EC
 static int nsymbs_queue[QUEUE_MAX_SIZE];
 static aom_cdf_prob cdf_queue[QUEUE_MAX_SIZE][16];
-#else
-static int prob_queue[QUEUE_MAX_SIZE];
-#endif
 
 static int queue_r = 0;
 static int queue_w = 0;
@@ -53,42 +49,24 @@
 
 int bitstream_queue_get_read(void) { return queue_r; }
 
-void bitstream_queue_pop(int *result,
-#if CONFIG_DAALA_EC
-                         aom_cdf_prob *cdf, int *nsymbs) {
-#else
-                         int *prob) {
-#endif  // CONFIG_DAALA_EC
+void bitstream_queue_pop(int *result, aom_cdf_prob *cdf, int *nsymbs) {
   if (!skip_r) {
     if (queue_w == queue_r) {
       printf("buffer underflow queue_w %d queue_r %d\n", queue_w, queue_r);
       assert(0);
     }
     *result = result_queue[queue_r];
-#if CONFIG_DAALA_EC
     *nsymbs = nsymbs_queue[queue_r];
     memcpy(cdf, cdf_queue[queue_r], *nsymbs * sizeof(*cdf));
-#else
-    *prob = prob_queue[queue_r];
-#endif  // CONFIG_DAALA_EC
     queue_r = (queue_r + 1) % QUEUE_MAX_SIZE;
   }
 }
 
-void bitstream_queue_push(int result,
-#if CONFIG_DAALA_EC
-                          const aom_cdf_prob *cdf, int nsymbs) {
-#else
-                          int prob) {
-#endif  // CONFIG_DAALA_EC
+void bitstream_queue_push(int result, const aom_cdf_prob *cdf, int nsymbs) {
   if (!skip_w) {
     result_queue[queue_w] = result;
-#if CONFIG_DAALA_EC
     nsymbs_queue[queue_w] = nsymbs;
     memcpy(cdf_queue[queue_w], cdf, nsymbs * sizeof(*cdf));
-#else
-    prob_queue[queue_w] = prob;
-#endif  // CONFIG_DAALA_EC
     queue_w = (queue_w + 1) % QUEUE_MAX_SIZE;
     if (queue_w == queue_r) {
       printf("buffer overflow queue_w %d queue_r %d\n", queue_w, queue_r);
diff --git a/aom_util/debug_util.h b/aom_util/debug_util.h
index 2ed56ea..3740620 100644
--- a/aom_util/debug_util.h
+++ b/aom_util/debug_util.h
@@ -13,9 +13,7 @@
 #define AOM_UTIL_DEBUG_UTIL_H_
 
 #include "./aom_config.h"
-#if CONFIG_DAALA_EC
 #include "aom_dsp/prob.h"
-#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -33,13 +31,8 @@
 int bitstream_queue_get_read(void);
 void bitstream_queue_record_write(void);
 void bitstream_queue_reset_write(void);
-#if CONFIG_DAALA_EC
 void bitstream_queue_pop(int *result, aom_cdf_prob *cdf, int *nsymbs);
 void bitstream_queue_push(int result, const aom_cdf_prob *cdf, int nsymbs);
-#else
-void bitstream_queue_pop(int *result, int *prob);
-void bitstream_queue_push(int result, int prob);
-#endif
 void bitstream_queue_set_skip_write(int skip);
 void bitstream_queue_set_skip_read(int skip);
 void bitstream_queue_set_frame_write(int frame_idx);
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index 0f2c396..0f03634 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -627,7 +627,6 @@
 // The full source code of the generating program is available in:
 // tools/gen_constrained_tokenset.py
 //
-#if CONFIG_DAALA_EC || CONFIG_ANS
 // Values for tokens TWO_TOKEN through CATEGORY6_TOKEN included
 // in the table here : the ONE_TOKEN probability is
 // removed and the probabilities rescaled.
@@ -891,7 +890,6 @@
   { 31131, 1448, 152, 31, 2, 1, 1, 1, 1 },
   { 31486, 1150, 107, 20, 1, 1, 1, 1, 1 },
 };
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 /* clang-format off */
 #if CONFIG_Q_ADAPT_PROBS
@@ -3563,7 +3561,6 @@
     },
 };
 #else
-#if CONFIG_DAALA_EC || CONFIG_ANS
 static const av1_coeff_probs_model default_coef_probs_4x4[PLANE_TYPES] = {
   { // Y plane
     { // Intra
@@ -3988,343 +3985,6 @@
     }
   }
 };
-#else  // CONFIG_DAALA_EC || CONFIG_ANS
-static const av1_coeff_probs_model default_coef_probs_4x4[PLANE_TYPES] = {
-  {  // Y plane
-    {  // Intra
-      {  // Band 0
-        { 195,  29, 183 }, {  84,  49, 136 }, {   8,  42,  71 }
-      }, {  // Band 1
-        {  31, 107, 169 }, {  35,  99, 159 }, {  17,  82, 140 },
-        {   8,  66, 114 }, {   2,  44,  76 }, {   1,  19,  32 }
-      }, {  // Band 2
-        {  40, 132, 201 }, {  29, 114, 187 }, {  13,  91, 157 },
-        {   7,  75, 127 }, {   3,  58,  95 }, {   1,  28,  47 }
-      }, {  // Band 3
-        {  69, 142, 221 }, {  42, 122, 201 }, {  15,  91, 159 },
-        {   6,  67, 121 }, {   1,  42,  77 }, {   1,  17,  31 }
-      }, {  // Band 4
-        { 102, 148, 228 }, {  67, 117, 204 }, {  17,  82, 154 },
-        {   6,  59, 114 }, {   2,  39,  75 }, {   1,  15,  29 }
-      }, {  // Band 5
-        { 156,  57, 233 }, { 119,  57, 212 }, {  58,  48, 163 },
-        {  29,  40, 124 }, {  12,  30,  81 }, {   3,  12,  31 }
-      }
-    }, {  // Inter
-      {  // Band 0
-        { 191, 107, 226 }, { 124, 117, 204 }, {  25,  99, 155 }
-      }, {  // Band 1
-        {  29, 148, 210 }, {  37, 126, 194 }, {   8,  93, 157 },
-        {   2,  68, 118 }, {   1,  39,  69 }, {   1,  17,  33 }
-      }, {  // Band 2
-        {  41, 151, 213 }, {  27, 123, 193 }, {   3,  82, 144 },
-        {   1,  58, 105 }, {   1,  32,  60 }, {   1,  13,  26 }
-      }, {  // Band 3
-        {  59, 159, 220 }, {  23, 126, 198 }, {   4,  88, 151 },
-        {   1,  66, 114 }, {   1,  38,  71 }, {   1,  18,  34 }
-      }, {  // Band 4
-        { 114, 136, 232 }, {  51, 114, 207 }, {  11,  83, 155 },
-        {   3,  56, 105 }, {   1,  33,  65 }, {   1,  17,  34 }
-      }, {  // Band 5
-        { 149,  65, 234 }, { 121,  57, 215 }, {  61,  49, 166 },
-        {  28,  36, 114 }, {  12,  25,  76 }, {   3,  16,  42 }
-      }
-    }
-  }, {  // UV plane
-    {  // Intra
-      {  // Band 0
-        { 214,  49, 220 }, { 132,  63, 188 }, {  42,  65, 137 }
-      }, {  // Band 1
-        {  85, 137, 221 }, { 104, 131, 216 }, {  49, 111, 192 },
-        {  21,  87, 155 }, {   2,  49,  87 }, {   1,  16,  28 }
-      }, {  // Band 2
-        {  89, 163, 230 }, {  90, 137, 220 }, {  29, 100, 183 },
-        {  10,  70, 135 }, {   2,  42,  81 }, {   1,  17,  33 }
-      }, {  // Band 3
-        { 108, 167, 237 }, {  55, 133, 222 }, {  15,  97, 179 },
-        {   4,  72, 135 }, {   1,  45,  85 }, {   1,  19,  38 }
-      }, {  // Band 4
-        { 124, 146, 240 }, {  66, 124, 224 }, {  17,  88, 175 },
-        {   4,  58, 122 }, {   1,  36,  75 }, {   1,  18,  37 }
-      }, {  //  Band 5
-        { 141,  79, 241 }, { 126,  70, 227 }, {  66,  58, 182 },
-        {  30,  44, 136 }, {  12,  34,  96 }, {   2,  20,  47 }
-      }
-    }, {  // Inter
-      {  // Band 0
-        { 229,  99, 249 }, { 143, 111, 235 }, {  46, 109, 192 }
-      }, {  // Band 1
-        {  82, 158, 236 }, {  94, 146, 224 }, {  25, 117, 191 },
-        {   9,  87, 149 }, {   3,  56,  99 }, {   1,  33,  57 }
-      }, {  // Band 2
-        {  83, 167, 237 }, {  68, 145, 222 }, {  10, 103, 177 },
-        {   2,  72, 131 }, {   1,  41,  79 }, {   1,  20,  39 }
-      }, {  // Band 3
-        {  99, 167, 239 }, {  47, 141, 224 }, {  10, 104, 178 },
-        {   2,  73, 133 }, {   1,  44,  85 }, {   1,  22,  47 }
-      }, {  // Band 4
-        { 127, 145, 243 }, {  71, 129, 228 }, {  17,  93, 177 },
-        {   3,  61, 124 }, {   1,  41,  84 }, {   1,  21,  52 }
-      }, {  // Band 5
-        { 157,  78, 244 }, { 140,  72, 231 }, {  69,  58, 184 },
-        {  31,  44, 137 }, {  14,  38, 105 }, {   8,  23,  61 }
-      }
-    }
-  }
-};
-
-static const av1_coeff_probs_model default_coef_probs_8x8[PLANE_TYPES] = {
-  {  // Y plane
-    {  // Intra
-      {  // Band 0
-        { 125,  34, 187 }, {  52,  41, 133 }, {   6,  31,  56 }
-      }, {  // Band 1
-        {  37, 109, 153 }, {  51, 102, 147 }, {  23,  87, 128 },
-        {   8,  67, 101 }, {   1,  41,  63 }, {   1,  19,  29 }
-      }, {  // Band 2
-        {  31, 154, 185 }, {  17, 127, 175 }, {   6,  96, 145 },
-        {   2,  73, 114 }, {   1,  51,  82 }, {   1,  28,  45 }
-      }, {  // Band 3
-        {  23, 163, 200 }, {  10, 131, 185 }, {   2,  93, 148 },
-        {   1,  67, 111 }, {   1,  41,  69 }, {   1,  14,  24 }
-      }, {  // Band 4
-        {  29, 176, 217 }, {  12, 145, 201 }, {   3, 101, 156 },
-        {   1,  69, 111 }, {   1,  39,  63 }, {   1,  14,  23 }
-      }, {  // Band 5
-        {  57, 192, 233 }, {  25, 154, 215 }, {   6, 109, 167 },
-        {   3,  78, 118 }, {   1,  48,  69 }, {   1,  21,  29 }
-      }
-    }, {  // Inter
-      {  // Band 0
-        { 202, 105, 245 }, { 108, 106, 216 }, {  18,  90, 144 }
-      }, {  // Band 1
-        {  33, 172, 219 }, {  64, 149, 206 }, {  14, 117, 177 },
-        {   5,  90, 141 }, {   2,  61,  95 }, {   1,  37,  57 }
-      }, {  // Band 2
-        {  33, 179, 220 }, {  11, 140, 198 }, {   1,  89, 148 },
-        {   1,  60, 104 }, {   1,  33,  57 }, {   1,  12,  21 }
-      }, {  // Band 3
-        {  30, 181, 221 }, {   8, 141, 198 }, {   1,  87, 145 },
-        {   1,  58, 100 }, {   1,  31,  55 }, {   1,  12,  20 }
-      }, {  // Band 4
-        {  32, 186, 224 }, {   7, 142, 198 }, {   1,  86, 143 },
-        {   1,  58, 100 }, {   1,  31,  55 }, {   1,  12,  22 }
-      }, {  // Band 5
-        {  57, 192, 227 }, {  20, 143, 204 }, {   3,  96, 154 },
-        {   1,  68, 112 }, {   1,  42,  69 }, {   1,  19,  32 }
-      }
-    }
-  }, {  // UV plane
-    {  // Intra
-      {  // Band 0
-        { 212,  35, 215 }, { 113,  47, 169 }, {  29,  48, 105 }
-      }, {  // Band 1
-        {  74, 129, 203 }, { 106, 120, 203 }, {  49, 107, 178 },
-        {  19,  84, 144 }, {   4,  50,  84 }, {   1,  15,  25 }
-      }, {  // Band 2
-        {  71, 172, 217 }, {  44, 141, 209 }, {  15, 102, 173 },
-        {   6,  76, 133 }, {   2,  51,  89 }, {   1,  24,  42 }
-      }, {  // Band 3
-        {  64, 185, 231 }, {  31, 148, 216 }, {   8, 103, 175 },
-        {   3,  74, 131 }, {   1,  46,  81 }, {   1,  18,  30 }
-      }, {  // Band 4
-        {  65, 196, 235 }, {  25, 157, 221 }, {   5, 105, 174 },
-        {   1,  67, 120 }, {   1,  38,  69 }, {   1,  15,  30 }
-      }, {  // Band 5
-        {  65, 204, 238 }, {  30, 156, 224 }, {   7, 107, 177 },
-        {   2,  70, 124 }, {   1,  42,  73 }, {   1,  18,  34 }
-      }
-    }, {  // Inter
-      {  // Band 0
-        { 225,  86, 251 }, { 144, 104, 235 }, {  42,  99, 181 }
-      }, {  // Band 1
-        {  85, 175, 239 }, { 112, 165, 229 }, {  29, 136, 200 },
-        {  12, 103, 162 }, {   6,  77, 123 }, {   2,  53,  84 }
-      }, {  // Band 2
-        {  75, 183, 239 }, {  30, 155, 221 }, {   3, 106, 171 },
-        {   1,  74, 128 }, {   1,  44,  76 }, {   1,  17,  28 }
-      }, {  // Band 3
-        {  73, 185, 240 }, {  27, 159, 222 }, {   2, 107, 172 },
-        {   1,  75, 127 }, {   1,  42,  73 }, {   1,  17,  29 }
-      }, {  // Band 4
-        {  62, 190, 238 }, {  21, 159, 222 }, {   2, 107, 172 },
-        {   1,  72, 122 }, {   1,  40,  71 }, {   1,  18,  32 }
-      }, {  // Band 5
-        {  61, 199, 240 }, {  27, 161, 226 }, {   4, 113, 180 },
-        {   1,  76, 129 }, {   1,  46,  80 }, {   1,  23,  41 }
-      }
-    }
-  }
-};
-
-static const av1_coeff_probs_model default_coef_probs_16x16[PLANE_TYPES] = {
-  {  // Y plane
-    {  // Intra
-      {  // Band 0
-        {   7,  27, 153 }, {   5,  30,  95 }, {   1,  16,  30 }
-      }, {  // Band 1
-        {  50,  75, 127 }, {  57,  75, 124 }, {  27,  67, 108 },
-        {  10,  54,  86 }, {   1,  33,  52 }, {   1,  12,  18 }
-      }, {  // Band 2
-        {  43, 125, 151 }, {  26, 108, 148 }, {   7,  83, 122 },
-        {   2,  59,  89 }, {   1,  38,  60 }, {   1,  17,  27 }
-      }, {  // Band 3
-        {  23, 144, 163 }, {  13, 112, 154 }, {   2,  75, 117 },
-        {   1,  50,  81 }, {   1,  31,  51 }, {   1,  14,  23 }
-      }, {  // Band 4
-        {  18, 162, 185 }, {   6, 123, 171 }, {   1,  78, 125 },
-        {   1,  51,  86 }, {   1,  31,  54 }, {   1,  14,  23 }
-      }, {  // Band 5
-        {  15, 199, 227 }, {   3, 150, 204 }, {   1,  91, 146 },
-        {   1,  55,  95 }, {   1,  30,  53 }, {   1,  11,  20 }
-      }
-    }, {  // Inter
-      {  // Band 0
-        {  19,  55, 240 }, {  19,  59, 196 }, {   3,  52, 105 }
-      }, {  // Band 1
-        {  41, 166, 207 }, { 104, 153, 199 }, {  31, 123, 181 },
-        {  14, 101, 152 }, {   5,  72, 106 }, {   1,  36,  52 }
-      }, {  // Band 2
-        {  35, 176, 211 }, {  12, 131, 190 }, {   2,  88, 144 },
-        {   1,  60, 101 }, {   1,  36,  60 }, {   1,  16,  28 }
-      }, {  // Band 3
-        {  28, 183, 213 }, {   8, 134, 191 }, {   1,  86, 142 },
-        {   1,  56,  96 }, {   1,  30,  53 }, {   1,  12,  20 }
-      }, {  // Band 4
-        {  20, 190, 215 }, {   4, 135, 192 }, {   1,  84, 139 },
-        {   1,  53,  91 }, {   1,  28,  49 }, {   1,  11,  20 }
-      }, {  // Band 5
-        {  13, 196, 216 }, {   2, 137, 192 }, {   1,  86, 143 },
-        {   1,  57,  99 }, {   1,  32,  56 }, {   1,  13,  24 }
-      }
-    }
-  }, {  // UV plane
-    {  // Intra
-      {  // Band 0
-        { 211,  29, 217 }, {  96,  47, 156 }, {  22,  43,  87 }
-      }, {  // Band 1
-        {  78, 120, 193 }, { 111, 116, 186 }, {  46, 102, 164 },
-        {  15,  80, 128 }, {   2,  49,  76 }, {   1,  18,  28 }
-      }, {  // Band 2
-        {  71, 161, 203 }, {  42, 132, 192 }, {  10,  98, 150 },
-        {   3,  69, 109 }, {   1,  44,  70 }, {   1,  18,  29 }
-      }, {  // Band 3
-        {  57, 186, 211 }, {  30, 140, 196 }, {   4,  93, 146 },
-        {   1,  62, 102 }, {   1,  38,  65 }, {   1,  16,  27 }
-      }, {  // Band 4
-        {  47, 199, 217 }, {  14, 145, 196 }, {   1,  88, 142 },
-        {   1,  57,  98 }, {   1,  36,  62 }, {   1,  15,  26 }
-      }, {  // Band 5
-        {  26, 219, 229 }, {   5, 155, 207 }, {   1,  94, 151 },
-        {   1,  60, 104 }, {   1,  36,  62 }, {   1,  16,  28 }
-      }
-    }, {  // Inter
-      {  // Band 0
-        { 233,  29, 248 }, { 146,  47, 220 }, {  43,  52, 140 }
-      }, {  // Band 1
-        { 100, 163, 232 }, { 179, 161, 222 }, {  63, 142, 204 },
-        {  37, 113, 174 }, {  26,  89, 137 }, {  18,  68,  97 }
-      }, {  // Band 2
-        {  85, 181, 230 }, {  32, 146, 209 }, {   7, 100, 164 },
-        {   3,  71, 121 }, {   1,  45,  77 }, {   1,  18,  30 }
-      }, {  // Band 3
-        {  65, 187, 230 }, {  20, 148, 207 }, {   2,  97, 159 },
-        {   1,  68, 116 }, {   1,  40,  70 }, {   1,  14,  29 }
-      }, {  // Band 4
-        {  40, 194, 227 }, {   8, 147, 204 }, {   1,  94, 155 },
-        {   1,  65, 112 }, {   1,  39,  66 }, {   1,  14,  26 }
-      }, {  // Band 5
-        {  16, 208, 228 }, {   3, 151, 207 }, {   1,  98, 160 },
-        {   1,  67, 117 }, {   1,  41,  74 }, {   1,  17,  31 }
-      }
-    }
-  }
-};
-
-static const av1_coeff_probs_model default_coef_probs_32x32[PLANE_TYPES] = {
-  {  // Y plane
-    {  // Intra
-      {  // Band 0
-        {  17,  38, 140 }, {   7,  34,  80 }, {   1,  17,  29 }
-      }, {  // Band 1
-        {  37,  75, 128 }, {  41,  76, 128 }, {  26,  66, 116 },
-        {  12,  52,  94 }, {   2,  32,  55 }, {   1,  10,  16 }
-      }, {  // Band 2
-        {  50, 127, 154 }, {  37, 109, 152 }, {  16,  82, 121 },
-        {   5,  59,  85 }, {   1,  35,  54 }, {   1,  13,  20 }
-      }, {  // Band 3
-        {  40, 142, 167 }, {  17, 110, 157 }, {   2,  71, 112 },
-        {   1,  44,  72 }, {   1,  27,  45 }, {   1,  11,  17 }
-      }, {  // Band 4
-        {  30, 175, 188 }, {   9, 124, 169 }, {   1,  74, 116 },
-        {   1,  48,  78 }, {   1,  30,  49 }, {   1,  11,  18 }
-      }, {  // Band 5
-        {  10, 222, 223 }, {   2, 150, 194 }, {   1,  83, 128 },
-        {   1,  48,  79 }, {   1,  27,  45 }, {   1,  11,  17 }
-      }
-    }, {  // Inter
-      {  // Band 0
-        {  36,  41, 235 }, {  29,  36, 193 }, {  10,  27, 111 }
-      }, {  // Band 1
-        {  85, 165, 222 }, { 177, 162, 215 }, { 110, 135, 195 },
-        {  57, 113, 168 }, {  23,  83, 120 }, {  10,  49,  61 }
-      }, {  // Band 2
-        {  85, 190, 223 }, {  36, 139, 200 }, {   5,  90, 146 },
-        {   1,  60, 103 }, {   1,  38,  65 }, {   1,  18,  30 }
-      }, {  // Band 3
-        {  72, 202, 223 }, {  23, 141, 199 }, {   2,  86, 140 },
-        {   1,  56,  97 }, {   1,  36,  61 }, {   1,  16,  27 }
-      }, {  // Band 4
-        {  55, 218, 225 }, {  13, 145, 200 }, {   1,  86, 141 },
-        {   1,  57,  99 }, {   1,  35,  61 }, {   1,  13,  22 }
-      }, {  // Band 5
-        {  15, 235, 212 }, {   1, 132, 184 }, {   1,  84, 139 },
-        {   1,  57,  97 }, {   1,  34,  56 }, {   1,  14,  23 }
-      }
-    }
-  }, {  // UV plane
-    {  // Intra
-      {  // Band 0
-        { 181,  21, 201 }, {  61,  37, 123 }, {  10,  38,  71 }
-      }, {  // Band 1
-        {  47, 106, 172 }, {  95, 104, 173 }, {  42,  93, 159 },
-        {  18,  77, 131 }, {   4,  50,  81 }, {   1,  17,  23 }
-      }, {  // Band 2
-        {  62, 147, 199 }, {  44, 130, 189 }, {  28, 102, 154 },
-        {  18,  75, 115 }, {   2,  44,  65 }, {   1,  12,  19 }
-      }, {  // Band 3
-        {  55, 153, 210 }, {  24, 130, 194 }, {   3,  93, 146 },
-        {   1,  61,  97 }, {   1,  31,  50 }, {   1,  10,  16 }
-      }, {  // Band 4
-        {  49, 186, 223 }, {  17, 148, 204 }, {   1,  96, 142 },
-        {   1,  53,  83 }, {   1,  26,  44 }, {   1,  11,  17 }
-      }, {  // Band 5
-        {  13, 217, 212 }, {   2, 136, 180 }, {   1,  78, 124 },
-        {   1,  50,  83 }, {   1,  29,  49 }, {   1,  14,  23 }
-      }
-    }, {  // Inter
-      {  // Band 0
-        { 197,  13, 247 }, {  82,  17, 222 }, {  25,  17, 162 }
-      }, {  // Band 1
-        { 126, 186, 247 }, { 234, 191, 243 }, { 176, 177, 234 },
-        { 104, 158, 220 }, {  66, 128, 186 }, {  55,  90, 137 }
-      }, {  // Band 2
-        { 111, 197, 242 }, {  46, 158, 219 }, {   9, 104, 171 },
-        {   2,  65, 125 }, {   1,  44,  80 }, {   1,  17,  91 }
-      }, {  // Band 3
-        { 104, 208, 245 }, {  39, 168, 224 }, {   3, 109, 162 },
-        {   1,  79, 124 }, {   1,  50, 102 }, {   1,  43, 102 }
-      }, {  // Band 4
-        {  84, 220, 246 }, {  31, 177, 231 }, {   2, 115, 180 },
-        {   1,  79, 134 }, {   1,  55,  77 }, {   1,  60,  79 }
-      }, {  // Band 5
-        {  43, 243, 240 }, {   8, 180, 217 }, {   1, 115, 166 },
-        {   1,  84, 121 }, {   1,  51,  67 }, {   1,  16,   6 }
-      }
-    }
-  }
-};
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 #if CONFIG_TX64X64
 // FIXME. Optimize for EC_MULTISYMBOL
@@ -4413,7 +4073,6 @@
 };
 #endif  // CONFIG_TX64X64
 #endif  // CONFIG_Q_ADAPT_PROBS
-#if CONFIG_DAALA_EC || CONFIG_ANS
 static const aom_prob av1_default_blockzero_probs[TX_SIZES][PLANE_TYPES]
                                            [REF_TYPES][BLOCKZ_CONTEXTS] = {
 #if CONFIG_CB4X4
@@ -5666,7 +5325,6 @@
         {AOM_ICDF(3009), AOM_ICDF(3246), AOM_ICDF(10158), AOM_ICDF(10533),
          AOM_ICDF(32768) } } } }
 };
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 /* clang-format on */
 
@@ -5681,8 +5339,6 @@
   extend_to_full_distribution(&full[UNCONSTRAINED_NODES], model[PIVOT_NODE]);
 }
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
-
 static void build_tail_cdfs(aom_cdf_prob cdf_tail[CDF_SIZE(ENTROPY_TOKENS)],
                             aom_cdf_prob cdf_head[CDF_SIZE(ENTROPY_TOKENS)],
                             int band_zero) {
@@ -5837,7 +5493,6 @@
             build_tail_cdfs(fc->coef_tail_cdfs[t][i][j][k][l],
                             fc->coef_head_cdfs[t][i][j][k][l], k == 0);
 }
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 void av1_default_coef_probs(AV1_COMMON *cm) {
 #if CONFIG_Q_ADAPT_PROBS
@@ -5856,12 +5511,10 @@
   av1_copy(cm->fc->coef_probs[TX_64X64], default_coef_probs_64x64);
 #endif  // CONFIG_TX64X64
 #endif  // CONFIG_Q_ADAPT_PROBS
-#if CONFIG_DAALA_EC || CONFIG_ANS
   av1_copy(cm->fc->blockzero_probs, av1_default_blockzero_probs);
   /* Load the head tokens */
   av1_default_coef_cdfs(cm->fc);
   av1_coef_pareto_cdfs(cm->fc);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 }
 
 #if !CONFIG_LV_MAP
@@ -5876,13 +5529,11 @@
   const unsigned int(*eob_counts)[REF_TYPES][COEF_BANDS][COEFF_CONTEXTS] =
       (const unsigned int(*)[REF_TYPES][COEF_BANDS][COEFF_CONTEXTS])
           cm->counts.eob_branch[tx_size];
-#if CONFIG_DAALA_EC || CONFIG_ANS
   const av1_blockz_probs_model *const pre_blockz_probs =
       pre_fc->blockzero_probs[tx_size];
   av1_blockz_probs_model *const blockz_probs = cm->fc->blockzero_probs[tx_size];
   const av1_blockz_count_model *const blockz_counts =
       (const av1_blockz_count_model *)&cm->counts.blockz_count[tx_size][0];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   int i, j, k, l, m;
 #if CONFIG_RECT_TX
   assert(!is_rect_tx(tx_size));
@@ -5905,7 +5556,6 @@
                                 count_sat, update_factor);
         }
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
   for (i = 0; i < PLANE_TYPES; ++i) {
     for (j = 0; j < REF_TYPES; ++j) {
       for (k = 0; k < BLOCKZ_CONTEXTS; ++k) {
@@ -5917,7 +5567,6 @@
       }
     }
   }
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 }
 #endif  // !CONFIG_LV_MAP
 
@@ -5975,10 +5624,8 @@
 
   aom_cdf_prob *fc_cdf_ptr;
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
   AVERAGE_TILE_CDFS(coef_head_cdfs)
   AVERAGE_TILE_CDFS(coef_tail_cdfs)
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 }
 
 void av1_average_tile_mv_cdfs(FRAME_CONTEXT *fc, FRAME_CONTEXT *ec_ctxs[],
diff --git a/av1/common/entropy.h b/av1/common/entropy.h
index 30fd5a5..dac4003 100644
--- a/av1/common/entropy.h
+++ b/av1/common/entropy.h
@@ -45,18 +45,16 @@
 #define CATEGORY5_TOKEN 9   // 35-66 Extra Bits 5+1
 #define CATEGORY6_TOKEN 10  // 67+   Extra Bits 14+1
 #define EOB_TOKEN 11        // EOB   Extra Bits 0+0
-#if CONFIG_DAALA_EC || CONFIG_ANS
-#define NO_EOB 0           // Not an end-of-block
-#define EARLY_EOB 1        // End of block before the last position
-#define LAST_EOB 2         // End of block in the last position (implicit)
-#define BLOCK_Z_TOKEN 255  // block zero
+#define NO_EOB 0            // Not an end-of-block
+#define EARLY_EOB 1         // End of block before the last position
+#define LAST_EOB 2          // End of block in the last position (implicit)
+#define BLOCK_Z_TOKEN 255   // block zero
 #define HEAD_TOKENS 5
 #define TAIL_TOKENS 9
 #define ONE_TOKEN_EOB 1
 #define ONE_TOKEN_NEOB 2
 #define TWO_TOKEN_PLUS_EOB 3
 #define TWO_TOKEN_PLUS_NEOB 4
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #define ENTROPY_TOKENS 12
 
 #define ENTROPY_NODES 11
@@ -171,9 +169,7 @@
    distinct bands). */
 
 #define COEFF_CONTEXTS 6
-#if CONFIG_DAALA_EC || CONFIG_ANS
 #define BLOCKZ_CONTEXTS 3
-#endif                     // CONFIG_DAALA_EC || CONFIG_ANS
 #define COEFF_CONTEXTS0 3  // for band 0
 #define BAND_COEFF_CONTEXTS(band) \
   ((band) == 0 ? COEFF_CONTEXTS0 : COEFF_CONTEXTS)
@@ -243,7 +239,6 @@
 
 void av1_model_to_full_probs(const aom_prob *model, aom_prob *full);
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
 typedef aom_cdf_prob coeff_cdf_model[REF_TYPES][COEF_BANDS][COEFF_CONTEXTS]
                                     [CDF_SIZE(ENTROPY_TOKENS)];
 typedef aom_prob av1_blockz_probs_model[REF_TYPES][BLOCKZ_CONTEXTS];
@@ -256,7 +251,6 @@
 
 void av1_coef_head_cdfs(struct frame_contexts *fc);
 void av1_coef_pareto_cdfs(struct frame_contexts *fc);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 typedef char ENTROPY_CONTEXT;
 
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 199c954..f703bc6 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -1173,22 +1173,17 @@
 
 #if CONFIG_DELTA_Q
 static const aom_prob default_delta_q_probs[DELTA_Q_PROBS] = { 220, 220, 220 };
-#if CONFIG_DAALA_EC || CONFIG_ANS
 static const aom_cdf_prob default_delta_q_cdf[CDF_SIZE(DELTA_Q_PROBS + 1)] = {
   AOM_ICDF(28160), AOM_ICDF(32120), AOM_ICDF(32677), AOM_ICDF(32768), 0
 };
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #if CONFIG_EXT_DELTA_Q
 static const aom_prob default_delta_lf_probs[DELTA_LF_PROBS] = { 220, 220,
                                                                  220 };
-#if CONFIG_DAALA_EC || CONFIG_ANS
 static const aom_cdf_prob default_delta_lf_cdf[CDF_SIZE(DELTA_LF_PROBS + 1)] = {
   AOM_ICDF(28160), AOM_ICDF(32120), AOM_ICDF(32677), AOM_ICDF(32768), 0
 };
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #endif
 #endif
-#if CONFIG_DAALA_EC || CONFIG_ANS
 int av1_intra_mode_ind[INTRA_MODES];
 int av1_intra_mode_inv[INTRA_MODES];
 int av1_inter_mode_ind[INTER_MODES];
@@ -1199,7 +1194,6 @@
 int av1_ext_tx_inter_ind[EXT_TX_SETS_INTER][TX_TYPES];
 int av1_ext_tx_inter_inv[EXT_TX_SETS_INTER][TX_TYPES];
 #endif
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 #if CONFIG_ALT_INTRA
 #if CONFIG_SMOOTH_HV
@@ -2198,10 +2192,8 @@
   -INTRA_FILTER_LINEAR,      2, -INTRA_FILTER_8TAP, 4, -INTRA_FILTER_8TAP_SHARP,
   -INTRA_FILTER_8TAP_SMOOTH,
 };
-#if CONFIG_DAALA_EC || CONFIG_ANS
 int av1_intra_filter_ind[INTRA_FILTERS];
 int av1_intra_filter_inv[INTRA_FILTERS];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #endif  // CONFIG_EXT_INTRA && CONFIG_INTRA_INTERP
 
 #if CONFIG_FILTER_INTRA
@@ -2237,7 +2229,6 @@
 };
 // clang-format on
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
 #if CONFIG_DUAL_FILTER
 static const aom_cdf_prob
     default_switchable_interp_cdf[SWITCHABLE_FILTER_CONTEXTS][CDF_SIZE(
@@ -4447,7 +4438,6 @@
           AOM_ICDF(30393), AOM_ICDF(32768), 0 } },
 #endif  // CONFIG_ALT_INTRA
     };
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 static void init_mode_probs(FRAME_CONTEXT *fc) {
   av1_copy(fc->uv_mode_prob, default_uv_probs);
@@ -4522,7 +4512,6 @@
 #if CONFIG_LOOP_RESTORATION
   av1_copy(fc->switchable_restore_prob, default_switchable_restore_prob);
 #endif  // CONFIG_LOOP_RESTORATION
-#if CONFIG_DAALA_EC || CONFIG_ANS
   av1_copy(fc->y_mode_cdf, default_if_y_mode_cdf);
   av1_copy(fc->uv_mode_cdf, default_uv_mode_cdf);
   av1_copy(fc->switchable_interp_cdf, default_switchable_interp_cdf);
@@ -4535,17 +4524,12 @@
 #endif  // CONFIG_EXT_INTRA && CONFIG_INTRA_INTERP
   av1_copy(fc->seg.tree_cdf, default_seg_tree_cdf);
   av1_copy(fc->tx_size_cdf, default_tx_size_cdf);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #if CONFIG_DELTA_Q
   av1_copy(fc->delta_q_prob, default_delta_q_probs);
-#if CONFIG_DAALA_EC || CONFIG_ANS
   av1_copy(fc->delta_q_cdf, default_delta_q_cdf);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #if CONFIG_EXT_DELTA_Q
   av1_copy(fc->delta_lf_prob, default_delta_lf_probs);
-#if CONFIG_DAALA_EC || CONFIG_ANS
   av1_copy(fc->delta_lf_cdf, default_delta_lf_cdf);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #endif
 #endif  // CONFIG_DELTA_Q
 #if CONFIG_CFL
@@ -4553,7 +4537,6 @@
 #endif
 }
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
 int av1_switchable_interp_ind[SWITCHABLE_FILTERS];
 int av1_switchable_interp_inv[SWITCHABLE_FILTERS];
 
@@ -4654,7 +4637,6 @@
 #endif  // CONFIG_EXT_INTRA && CONFIG_INTRA_INTERP
 }
 #endif  // !CONFIG_EC_ADAPT
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 #if CONFIG_DUAL_FILTER
 const aom_tree_index av1_switchable_interp_tree[TREE_SIZE(SWITCHABLE_FILTERS)] =
diff --git a/av1/common/entropymode.h b/av1/common/entropymode.h
index f65db70..97e0f3b 100644
--- a/av1/common/entropymode.h
+++ b/av1/common/entropymode.h
@@ -99,11 +99,9 @@
   aom_prob partition_prob[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
 #endif
   av1_coeff_probs_model coef_probs[TX_SIZES][PLANE_TYPES];
-#if CONFIG_DAALA_EC || CONFIG_ANS
   coeff_cdf_model coef_tail_cdfs[TX_SIZES][PLANE_TYPES];
   coeff_cdf_model coef_head_cdfs[TX_SIZES][PLANE_TYPES];
   aom_prob blockzero_probs[TX_SIZES][PLANE_TYPES][REF_TYPES][BLOCKZ_CONTEXTS];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   aom_prob switchable_interp_prob[SWITCHABLE_FILTER_CONTEXTS]
                                  [SWITCHABLE_FILTERS - 1];
 #if CONFIG_ADAPT_SCAN
@@ -260,7 +258,6 @@
 #if CONFIG_LOOP_RESTORATION
   aom_prob switchable_restore_prob[RESTORE_SWITCHABLE_TYPES - 1];
 #endif  // CONFIG_LOOP_RESTORATION
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_cdf_prob y_mode_cdf[BLOCK_SIZE_GROUPS][CDF_SIZE(INTRA_MODES)];
   aom_cdf_prob uv_mode_cdf[INTRA_MODES][CDF_SIZE(INTRA_MODES)];
 #if CONFIG_EXT_PARTITION_TYPES
@@ -294,7 +291,6 @@
 #if CONFIG_EXT_INTRA && CONFIG_INTRA_INTERP
   aom_cdf_prob intra_filter_cdf[INTRA_FILTERS + 1][CDF_SIZE(INTRA_FILTERS)];
 #endif  // CONFIG_EXT_INTRA && CONFIG_INTRA_INTERP
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #if CONFIG_DELTA_Q
   aom_prob delta_q_prob[DELTA_Q_PROBS];
 #if CONFIG_EXT_DELTA_Q
@@ -356,9 +352,7 @@
   unsigned int coeff_lps[TX_SIZES][PLANE_TYPES][LEVEL_CONTEXTS][2];
 #endif  // CONFIG_LV_MAP
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
   av1_blockz_count_model blockz_count[TX_SIZES][PLANE_TYPES];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
   unsigned int newmv_mode[NEWMV_MODE_CONTEXTS][2];
   unsigned int zeromv_mode[ZEROMV_MODE_CONTEXTS][2];
@@ -450,11 +444,9 @@
 // Contexts used: Intra mode (Y plane) of 'above' and 'left' blocks.
 extern const aom_prob av1_kf_y_mode_prob[INTRA_MODES][INTRA_MODES]
                                         [INTRA_MODES - 1];
-#if CONFIG_DAALA_EC || CONFIG_ANS
 // CDF version of 'av1_kf_y_mode_prob'.
 extern const aom_cdf_prob av1_kf_y_mode_cdf[INTRA_MODES][INTRA_MODES]
                                            [CDF_SIZE(INTRA_MODES)];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 #if CONFIG_PALETTE
 extern const aom_prob av1_default_palette_y_mode_prob[PALETTE_BLOCK_SIZES]
@@ -473,7 +465,6 @@
 
 extern const aom_tree_index av1_intra_mode_tree[TREE_SIZE(INTRA_MODES)];
 extern const aom_tree_index av1_inter_mode_tree[TREE_SIZE(INTER_MODES)];
-#if CONFIG_DAALA_EC || CONFIG_ANS
 extern int av1_intra_mode_ind[INTRA_MODES];
 extern int av1_intra_mode_inv[INTRA_MODES];
 extern int av1_inter_mode_ind[INTER_MODES];
@@ -484,7 +475,6 @@
 extern int av1_ext_tx_inter_ind[EXT_TX_SETS_INTER][TX_TYPES];
 extern int av1_ext_tx_inter_inv[EXT_TX_SETS_INTER][TX_TYPES];
 #endif
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 #if CONFIG_EXT_INTER
 #if CONFIG_INTERINTRA
@@ -535,20 +525,18 @@
 extern const aom_tree_index
     av1_switchable_restore_tree[TREE_SIZE(RESTORE_SWITCHABLE_TYPES)];
 #endif  // CONFIG_LOOP_RESTORATION
-#if CONFIG_DAALA_EC || CONFIG_ANS
 extern int av1_switchable_interp_ind[SWITCHABLE_FILTERS];
 extern int av1_switchable_interp_inv[SWITCHABLE_FILTERS];
 
 #if !CONFIG_EC_ADAPT
 void av1_set_mode_cdfs(struct AV1Common *cm);
 #endif
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 void av1_setup_past_independence(struct AV1Common *cm);
 
 void av1_adapt_intra_frame_probs(struct AV1Common *cm);
 void av1_adapt_inter_frame_probs(struct AV1Common *cm);
-#if (CONFIG_DAALA_EC || CONFIG_ANS) && !CONFIG_EXT_TX
+#if !CONFIG_EXT_TX
 extern int av1_ext_tx_ind[TX_TYPES];
 extern int av1_ext_tx_inv[TX_TYPES];
 #endif
diff --git a/av1/common/entropymv.c b/av1/common/entropymv.c
index 14a58b3..954bfec 100644
--- a/av1/common/entropymv.c
+++ b/av1/common/entropymv.c
@@ -43,31 +43,25 @@
 
 static const nmv_context default_nmv_context = {
   { 32, 64, 96 },  // joints
-#if CONFIG_DAALA_EC || CONFIG_ANS
   { AOM_ICDF(4096), AOM_ICDF(11264), AOM_ICDF(19328), AOM_ICDF(32768),
     0 },  // joint_cdf
-#endif    // CONFIG_DAALA_EC || CONFIG_ANS
   { {
         // Vertical component
         128,                                                   // sign
         { 224, 144, 192, 168, 192, 176, 192, 198, 198, 245 },  // class
-#if CONFIG_DAALA_EC || CONFIG_ANS
         { AOM_ICDF(28672), AOM_ICDF(30976), AOM_ICDF(31858), AOM_ICDF(32320),
           AOM_ICDF(32551), AOM_ICDF(32656), AOM_ICDF(32740), AOM_ICDF(32757),
           AOM_ICDF(32762), AOM_ICDF(32767), AOM_ICDF(32768), 0 },  // class_cdf
-#endif            // CONFIG_DAALA_EC || CONFIG_ANS
-        { 216 },  // class0
-        { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240 },  // bits
-        { { 128, 128, 64 }, { 96, 112, 64 } },                 // class0_fp
-        { 64, 96, 64 },                                        // fp
-#if CONFIG_DAALA_EC || CONFIG_ANS
+        { 216 },                                                   // class0
+        { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240 },      // bits
+        { { 128, 128, 64 }, { 96, 112, 64 } },                     // class0_fp
+        { 64, 96, 64 },                                            // fp
         { { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(26624), AOM_ICDF(32768),
             0 },
           { AOM_ICDF(12288), AOM_ICDF(21248), AOM_ICDF(24128), AOM_ICDF(32768),
             0 } },  // class0_fp_cdf
         { AOM_ICDF(8192), AOM_ICDF(17408), AOM_ICDF(21248), AOM_ICDF(32768),
           0 },  // fp_cdf
-#endif          // CONFIG_DAALA_EC || CONFIG_ANS
         160,    // class0_hp bit
         128,    // hp
     },
@@ -75,23 +69,19 @@
         // Horizontal component
         128,                                                   // sign
         { 216, 128, 176, 160, 176, 176, 192, 198, 198, 208 },  // class
-#if CONFIG_DAALA_EC || CONFIG_ANS
         { AOM_ICDF(28672), AOM_ICDF(30976), AOM_ICDF(31858), AOM_ICDF(32320),
           AOM_ICDF(32551), AOM_ICDF(32656), AOM_ICDF(32740), AOM_ICDF(32757),
           AOM_ICDF(32762), AOM_ICDF(32767), AOM_ICDF(32768), 0 },  // class_cdf
-#endif            // CONFIG_DAALA_EC || CONFIG_ANS
-        { 208 },  // class0
-        { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240 },  // bits
-        { { 128, 128, 64 }, { 96, 112, 64 } },                 // class0_fp
-        { 64, 96, 64 },                                        // fp
-#if CONFIG_DAALA_EC || CONFIG_ANS
+        { 208 },                                                   // class0
+        { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240 },      // bits
+        { { 128, 128, 64 }, { 96, 112, 64 } },                     // class0_fp
+        { 64, 96, 64 },                                            // fp
         { { AOM_ICDF(16384), AOM_ICDF(24576), AOM_ICDF(26624), AOM_ICDF(32768),
             0 },
           { AOM_ICDF(12288), AOM_ICDF(21248), AOM_ICDF(24128), AOM_ICDF(32768),
             0 } },  // class0_fp_cdf
         { AOM_ICDF(8192), AOM_ICDF(17408), AOM_ICDF(21248), AOM_ICDF(32768),
           0 },  // fp_cdf
-#endif          // CONFIG_DAALA_EC || CONFIG_ANS
         160,    // class0_hp bit
         128,    // hp
     } },
@@ -268,7 +258,7 @@
   }
 }
 
-#if (CONFIG_DAALA_EC || CONFIG_ANS) && !CONFIG_EC_ADAPT
+#if !CONFIG_EC_ADAPT
 void av1_set_mv_cdfs(nmv_context *ctx) {
   int i;
   int j;
diff --git a/av1/common/entropymv.h b/av1/common/entropymv.h
index 91f16a2..61bbbe3 100644
--- a/av1/common/entropymv.h
+++ b/av1/common/entropymv.h
@@ -84,26 +84,20 @@
 typedef struct {
   aom_prob sign;
   aom_prob classes[MV_CLASSES - 1];
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_cdf_prob class_cdf[CDF_SIZE(MV_CLASSES)];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   aom_prob class0[CLASS0_SIZE - 1];
   aom_prob bits[MV_OFFSET_BITS];
   aom_prob class0_fp[CLASS0_SIZE][MV_FP_SIZE - 1];
   aom_prob fp[MV_FP_SIZE - 1];
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_cdf_prob class0_fp_cdf[CLASS0_SIZE][CDF_SIZE(MV_FP_SIZE)];
   aom_cdf_prob fp_cdf[CDF_SIZE(MV_FP_SIZE)];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   aom_prob class0_hp;
   aom_prob hp;
 } nmv_component;
 
 typedef struct {
   aom_prob joints[MV_JOINTS - 1];
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_cdf_prob joint_cdf[CDF_SIZE(MV_JOINTS)];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   nmv_component comps[2];
 } nmv_context;
 
@@ -138,7 +132,7 @@
 extern const aom_tree_index
     av1_global_motion_types_tree[TREE_SIZE(GLOBAL_TRANS_TYPES)];
 #endif  // CONFIG_GLOBAL_MOTION
-#if (CONFIG_DAALA_EC || CONFIG_ANS) && !CONFIG_EC_ADAPT
+#if !CONFIG_EC_ADAPT
 void av1_set_mv_cdfs(nmv_context *ctx);
 #endif
 
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index e55755b..80a3b0a 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -674,7 +674,6 @@
   return cm->kf_y_prob[above][left];
 }
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
 static INLINE aom_cdf_prob *get_y_mode_cdf(FRAME_CONTEXT *tile_ctx,
                                            const MODE_INFO *mi,
                                            const MODE_INFO *above_mi,
@@ -684,7 +683,6 @@
   const PREDICTION_MODE left = av1_left_block_mode(mi, left_mi, block);
   return tile_ctx->kf_y_cdf[above][left];
 }
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 static INLINE void update_partition_context(MACROBLOCKD *xd, int mi_row,
                                             int mi_col, BLOCK_SIZE subsize,
diff --git a/av1/common/seg_common.h b/av1/common/seg_common.h
index 4dfdd30..69a6387 100644
--- a/av1/common/seg_common.h
+++ b/av1/common/seg_common.h
@@ -48,9 +48,7 @@
 
 struct segmentation_probs {
   aom_prob tree_probs[SEG_TREE_PROBS];
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_cdf_prob tree_cdf[CDF_SIZE(MAX_SEGMENTS)];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   aom_prob pred_probs[PREDICTION_PROBS];
 };
 
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index e377970..0b39bc7 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -2094,38 +2094,23 @@
 #if CONFIG_EC_ADAPT
   FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
   (void)cm;
-#elif CONFIG_DAALA_EC || CONFIG_ANS
+#else
   FRAME_CONTEXT *ec_ctx = cm->fc;
 #endif
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_cdf_prob *partition_cdf = (ctx >= 0) ? ec_ctx->partition_cdf[ctx] : NULL;
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
   if (has_rows && has_cols)
 #if CONFIG_EXT_PARTITION_TYPES
     if (bsize <= BLOCK_8X8)
-#if CONFIG_DAALA_EC || CONFIG_ANS
       p = (PARTITION_TYPE)aom_read_symbol(r, partition_cdf, PARTITION_TYPES,
                                           ACCT_STR);
-#else
-      p = (PARTITION_TYPE)aom_read_tree(r, av1_partition_tree, probs, ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
     else
-#if CONFIG_DAALA_EC || CONFIG_ANS
       p = (PARTITION_TYPE)aom_read_symbol(r, partition_cdf, EXT_PARTITION_TYPES,
                                           ACCT_STR);
 #else
-      p = (PARTITION_TYPE)aom_read_tree(r, av1_ext_partition_tree, probs,
-                                        ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
-#else
-#if CONFIG_DAALA_EC || CONFIG_ANS
     p = (PARTITION_TYPE)aom_read_symbol(r, partition_cdf, PARTITION_TYPES,
                                         ACCT_STR);
-#else
-    p = (PARTITION_TYPE)aom_read_tree(r, av1_partition_tree, probs, ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #endif  // CONFIG_EXT_PARTITION_TYPES
   else if (!has_rows && has_cols)
     p = aom_read(r, probs[1], ACCT_STR) ? PARTITION_SPLIT : PARTITION_HORZ;
@@ -4764,9 +4749,7 @@
 
   if (frame_is_intra_only(cm)) {
     av1_copy(cm->kf_y_prob, av1_kf_y_mode_prob);
-#if CONFIG_DAALA_EC || CONFIG_ANS
     av1_copy(cm->fc->kf_y_cdf, av1_kf_y_mode_cdf);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #if !CONFIG_EC_ADAPT
     for (k = 0; k < INTRA_MODES; k++)
       for (j = 0; j < INTRA_MODES; j++)
@@ -4846,15 +4829,15 @@
 #endif
 #if CONFIG_GLOBAL_MOTION
     read_global_motion(cm, &r);
-#endif  // EC_ADAPT, DAALA_EC
+#endif
   }
-#if (CONFIG_DAALA_EC || CONFIG_ANS) && !CONFIG_EC_ADAPT
+#if !CONFIG_EC_ADAPT
   av1_coef_head_cdfs(fc);
   /* Make tail distribution from head */
   av1_coef_pareto_cdfs(fc);
   for (i = 0; i < NMV_CONTEXTS; ++i) av1_set_mv_cdfs(&fc->nmvc[i]);
   av1_set_mode_cdfs(cm);
-#endif  // (CONFIG_DAALA_EC || CONFIG_ANS) && !CONFIG_EC_ADAPT
+#endif  // !CONFIG_EC_ADAPT
 
   return aom_reader_has_error(&r);
 }
@@ -4878,10 +4861,8 @@
   assert(!memcmp(cm->counts.coef, zero_counts.coef, sizeof(cm->counts.coef)));
   assert(!memcmp(cm->counts.eob_branch, zero_counts.eob_branch,
                  sizeof(cm->counts.eob_branch)));
-#if CONFIG_DAALA_EC || CONFIG_ANS
   assert(!memcmp(cm->counts.blockz_count, zero_counts.blockz_count,
                  sizeof(cm->counts.blockz_count)));
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   assert(!memcmp(cm->counts.switchable_interp, zero_counts.switchable_interp,
                  sizeof(cm->counts.switchable_interp)));
   assert(!memcmp(cm->counts.inter_mode, zero_counts.inter_mode,
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 35ebc6c..e23925f 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -45,16 +45,10 @@
 }
 #endif  // CONFIG_EXT_INTRA || CONFIG_FILTER_INTRA || CONFIG_PALETTE
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
 static PREDICTION_MODE read_intra_mode(aom_reader *r, aom_cdf_prob *cdf) {
   return (PREDICTION_MODE)
       av1_intra_mode_inv[aom_read_symbol(r, cdf, INTRA_MODES, ACCT_STR)];
 }
-#else
-static PREDICTION_MODE read_intra_mode(aom_reader *r, const aom_prob *p) {
-  return (PREDICTION_MODE)aom_read_tree(r, av1_intra_mode_tree, p, ACCT_STR);
-}
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 #if CONFIG_DELTA_Q
 static int read_delta_qindex(AV1_COMMON *cm, MACROBLOCKD *xd, aom_reader *r,
@@ -75,16 +69,7 @@
 #endif
 
   if ((bsize != BLOCK_LARGEST || mbmi->skip == 0) && read_delta_q_flag) {
-#if !(CONFIG_DAALA_EC || CONFIG_ANS)
-    int bit = 1;
-    abs = 0;
-    while (abs < DELTA_Q_SMALL && bit) {
-      bit = aom_read(r, ec_ctx->delta_q_prob[abs], ACCT_STR);
-      abs += bit;
-    }
-#else
     abs = aom_read_symbol(r, ec_ctx->delta_q_cdf, DELTA_Q_PROBS + 1, ACCT_STR);
-#endif  // !(CONFIG_DAALA_EC || CONFIG_ANS)
     smallval = (abs < DELTA_Q_SMALL);
     if (counts) {
       for (i = 0; i < abs; ++i) counts->delta_q[i][1]++;
@@ -127,17 +112,8 @@
 #endif
 
   if ((bsize != BLOCK_64X64 || mbmi->skip == 0) && read_delta_lf_flag) {
-#if !(CONFIG_DAALA_EC || CONFIG_ANS)
-    int bit = 1;
-    abs = 0;
-    while (abs < DELTA_LF_SMALL && bit) {
-      bit = aom_read(r, ec_ctx->delta_lf_prob[abs], ACCT_STR);
-      abs += bit;
-    }
-#else
     abs =
         aom_read_symbol(r, ec_ctx->delta_lf_cdf, DELTA_LF_PROBS + 1, ACCT_STR);
-#endif  // !(CONFIG_DAALA_EC || CONFIG_ANS)
     smallval = (abs < DELTA_LF_SMALL);
     if (counts) {
       for (i = 0; i < abs; ++i) counts->delta_lf[i][1]++;
@@ -166,16 +142,12 @@
                                          aom_reader *r, int size_group) {
 #if CONFIG_EC_ADAPT
   FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
-#elif CONFIG_DAALA_EC || CONFIG_ANS
+#else
   FRAME_CONTEXT *ec_ctx = cm->fc;
 #endif
 
   const PREDICTION_MODE y_mode =
-#if CONFIG_DAALA_EC || CONFIG_ANS
       read_intra_mode(r, ec_ctx->y_mode_cdf[size_group]);
-#else
-      read_intra_mode(r, cm->fc->y_mode_prob[size_group]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   FRAME_COUNTS *counts = xd->counts;
 #if CONFIG_EC_ADAPT
   (void)cm;
@@ -189,16 +161,12 @@
                                           PREDICTION_MODE y_mode) {
 #if CONFIG_EC_ADAPT
   FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
-#elif CONFIG_DAALA_EC || CONFIG_ANS
+#else
   FRAME_CONTEXT *ec_ctx = cm->fc;
 #endif
 
   const PREDICTION_MODE uv_mode =
-#if CONFIG_DAALA_EC || CONFIG_ANS
       read_intra_mode(r, ec_ctx->uv_mode_cdf[y_mode]);
-#else
-      read_intra_mode(r, cm->fc->uv_mode_prob[y_mode]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   FRAME_COUNTS *counts = xd->counts;
 #if CONFIG_EC_ADAPT
   (void)cm;
@@ -382,11 +350,7 @@
 #endif  // CONFIG_EXT_INTER
 
 static int read_segment_id(aom_reader *r, struct segmentation_probs *segp) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
   return aom_read_symbol(r, segp->tree_cdf, MAX_SEGMENTS, ACCT_STR);
-#else
-  return aom_read_tree(r, av1_segment_tree, segp->tree_probs, ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 }
 
 #if CONFIG_VAR_TX
@@ -476,14 +440,8 @@
   FRAME_CONTEXT *ec_ctx = cm->fc;
 #endif
 
-  const int depth =
-#if CONFIG_DAALA_EC || CONFIG_ANS
-      aom_read_symbol(r, ec_ctx->tx_size_cdf[tx_size_cat][ctx], tx_size_cat + 2,
-                      ACCT_STR);
-#else
-      aom_read_tree(r, av1_tx_size_tree[tx_size_cat],
-                    ec_ctx->tx_size_probs[tx_size_cat][ctx], ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
+  const int depth = aom_read_symbol(r, ec_ctx->tx_size_cdf[tx_size_cat][ctx],
+                                    tx_size_cat + 2, ACCT_STR);
   const TX_SIZE tx_size = depth_to_tx_size(depth);
 #if CONFIG_RECT_TX
   assert(!is_rect_tx(tx_size));
@@ -879,13 +837,8 @@
     p_angle = mode_to_angle_map[mbmi->mode] + mbmi->angle_delta[0] * ANGLE_STEP;
     if (av1_is_intra_filter_switchable(p_angle)) {
       FRAME_COUNTS *counts = xd->counts;
-#if CONFIG_DAALA_EC || CONFIG_ANS
       mbmi->intra_filter = aom_read_symbol(r, ec_ctx->intra_filter_cdf[ctx],
                                            INTRA_FILTERS, ACCT_STR);
-#else
-      mbmi->intra_filter = aom_read_tree(
-          r, av1_intra_filter_tree, ec_ctx->intra_filter_probs[ctx], ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
       if (counts) ++counts->intra_filter[ctx][mbmi->intra_filter];
     } else {
       mbmi->intra_filter = INTRA_FILTER_LINEAR;
@@ -947,29 +900,16 @@
 
       if (inter_block) {
         if (eset > 0) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
           *tx_type = av1_ext_tx_inter_inv[eset][aom_read_symbol(
               r, ec_ctx->inter_ext_tx_cdf[eset][square_tx_size],
               ext_tx_cnt_inter[eset], ACCT_STR)];
-#else
-          *tx_type = aom_read_tree(
-              r, av1_ext_tx_inter_tree[eset],
-              ec_ctx->inter_ext_tx_prob[eset][square_tx_size], ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
           if (counts) ++counts->inter_ext_tx[eset][square_tx_size][*tx_type];
         }
       } else if (ALLOW_INTRA_EXT_TX) {
         if (eset > 0) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
           *tx_type = av1_ext_tx_intra_inv[eset][aom_read_symbol(
               r, ec_ctx->intra_ext_tx_cdf[eset][square_tx_size][mbmi->mode],
               ext_tx_cnt_intra[eset], ACCT_STR)];
-#else
-          *tx_type = aom_read_tree(
-              r, av1_ext_tx_intra_tree[eset],
-              ec_ctx->intra_ext_tx_prob[eset][square_tx_size][mbmi->mode],
-              ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
           if (counts)
             ++counts->intra_ext_tx[eset][square_tx_size][mbmi->mode][*tx_type];
         }
@@ -990,25 +930,14 @@
       FRAME_COUNTS *counts = xd->counts;
 
       if (inter_block) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
         *tx_type = av1_ext_tx_inv[aom_read_symbol(
             r, ec_ctx->inter_ext_tx_cdf[tx_size], TX_TYPES, ACCT_STR)];
-#else
-        *tx_type = aom_read_tree(r, av1_ext_tx_tree,
-                                 ec_ctx->inter_ext_tx_prob[tx_size], ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
         if (counts) ++counts->inter_ext_tx[tx_size][*tx_type];
       } else {
         const TX_TYPE tx_type_nom = intra_mode_to_tx_type_context[mbmi->mode];
-#if CONFIG_DAALA_EC || CONFIG_ANS
         *tx_type = av1_ext_tx_inv[aom_read_symbol(
             r, ec_ctx->intra_ext_tx_cdf[tx_size][tx_type_nom], TX_TYPES,
             ACCT_STR)];
-#else
-        *tx_type = aom_read_tree(
-            r, av1_ext_tx_tree, ec_ctx->intra_ext_tx_prob[tx_size][tx_type_nom],
-            ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
         if (counts) ++counts->intra_ext_tx[tx_size][tx_type_nom][*tx_type];
       }
     } else {
@@ -1061,7 +990,7 @@
   const int y_mis = AOMMIN(cm->mi_rows - mi_row, bh);
 #if CONFIG_EC_ADAPT
   FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
-#elif CONFIG_DAALA_EC || CONFIG_ANS
+#else
   FRAME_CONTEXT *ec_ctx = cm->fc;
 #endif
 
@@ -1146,59 +1075,30 @@
 #if CONFIG_CB4X4
   (void)i;
   mbmi->mode =
-#if CONFIG_DAALA_EC || CONFIG_ANS
       read_intra_mode(r, get_y_mode_cdf(ec_ctx, mi, above_mi, left_mi, 0));
 #else
-      read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 0));
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
-#else
   switch (bsize) {
     case BLOCK_4X4:
       for (i = 0; i < 4; ++i)
-        mi->bmi[i].as_mode =
-#if CONFIG_DAALA_EC || CONFIG_ANS
-            read_intra_mode(r,
-                            get_y_mode_cdf(ec_ctx, mi, above_mi, left_mi, i));
-#else
-            read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, i));
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
+        mi->bmi[i].as_mode = read_intra_mode(
+            r, get_y_mode_cdf(ec_ctx, mi, above_mi, left_mi, i));
       mbmi->mode = mi->bmi[3].as_mode;
       break;
     case BLOCK_4X8:
       mi->bmi[0].as_mode = mi->bmi[2].as_mode =
-#if CONFIG_DAALA_EC || CONFIG_ANS
           read_intra_mode(r, get_y_mode_cdf(ec_ctx, mi, above_mi, left_mi, 0));
-#else
-          read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 0));
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
       mi->bmi[1].as_mode = mi->bmi[3].as_mode = mbmi->mode =
-#if CONFIG_DAALA_EC || CONFIG_ANS
           read_intra_mode(r, get_y_mode_cdf(ec_ctx, mi, above_mi, left_mi, 1));
-#else
-          read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 1));
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
       break;
     case BLOCK_8X4:
       mi->bmi[0].as_mode = mi->bmi[1].as_mode =
-#if CONFIG_DAALA_EC || CONFIG_ANS
           read_intra_mode(r, get_y_mode_cdf(ec_ctx, mi, above_mi, left_mi, 0));
-#else
-          read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 0));
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
       mi->bmi[2].as_mode = mi->bmi[3].as_mode = mbmi->mode =
-#if CONFIG_DAALA_EC || CONFIG_ANS
           read_intra_mode(r, get_y_mode_cdf(ec_ctx, mi, above_mi, left_mi, 2));
-#else
-          read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 2));
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
       break;
     default:
       mbmi->mode =
-#if CONFIG_DAALA_EC || CONFIG_ANS
           read_intra_mode(r, get_y_mode_cdf(ec_ctx, mi, above_mi, left_mi, 0));
-#else
-          read_intra_mode(r, get_y_mode_probs(cm, mi, above_mi, left_mi, 0));
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   }
 #endif
 
@@ -1256,11 +1156,7 @@
   int mag, d, fr, hp;
   const int sign = aom_read(r, mvcomp->sign, ACCT_STR);
   const int mv_class =
-#if CONFIG_DAALA_EC || CONFIG_ANS
       aom_read_symbol(r, mvcomp->class_cdf, MV_CLASSES, ACCT_STR);
-#else
-      aom_read_tree(r, av1_mv_class_tree, mvcomp->classes, ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   const int class0 = mv_class == MV_CLASS_0;
 
   // Integer part
@@ -1276,14 +1172,9 @@
     mag = CLASS0_SIZE << (mv_class + 2);
   }
 
-// Fractional part
-#if CONFIG_DAALA_EC || CONFIG_ANS
+  // Fractional part
   fr = aom_read_symbol(r, class0 ? mvcomp->class0_fp_cdf[d] : mvcomp->fp_cdf,
                        MV_FP_SIZE, ACCT_STR);
-#else
-  fr = aom_read_tree(r, av1_mv_fp_tree,
-                     class0 ? mvcomp->class0_fp[d] : mvcomp->fp, ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
   // High precision part (if hp is not used, the default value of the hp is 1)
   hp = usehp ? aom_read(r, class0 ? mvcomp->class0_hp : mvcomp->hp, ACCT_STR)
@@ -1300,11 +1191,7 @@
   MV_JOINT_TYPE joint_type;
   MV diff = { 0, 0 };
   joint_type =
-#if CONFIG_DAALA_EC || CONFIG_ANS
       (MV_JOINT_TYPE)aom_read_symbol(r, ctx->joint_cdf, MV_JOINTS, ACCT_STR);
-#else
-      (MV_JOINT_TYPE)aom_read_tree(r, av1_mv_joint_tree, ctx->joints, ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
   if (mv_joint_vertical(joint_type))
     diff.row = read_mv_component(r, &ctx->comps[0], allow_hp);
@@ -1471,16 +1358,10 @@
       if (has_subpel_mv_component(xd->mi[0], xd, dir) ||
           (mbmi->ref_frame[1] > INTRA_FRAME &&
            has_subpel_mv_component(xd->mi[0], xd, dir + 2))) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
         mbmi->interp_filter[dir] =
             (InterpFilter)av1_switchable_interp_inv[aom_read_symbol(
                 r, ec_ctx->switchable_interp_cdf[ctx], SWITCHABLE_FILTERS,
                 ACCT_STR)];
-#else
-        mbmi->interp_filter[dir] = (InterpFilter)aom_read_tree(
-            r, av1_switchable_interp_tree, ec_ctx->switchable_interp_prob[ctx],
-            ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
         if (counts) ++counts->switchable_interp[ctx][mbmi->interp_filter[dir]];
       }
     }
@@ -1490,21 +1371,15 @@
     mbmi->interp_filter[2] = mbmi->interp_filter[0];
     mbmi->interp_filter[3] = mbmi->interp_filter[1];
   }
-#else  // CONFIG_DUAL_FILTER
+#else   // CONFIG_DUAL_FILTER
   if (cm->interp_filter != SWITCHABLE) {
     mbmi->interp_filter = cm->interp_filter;
   } else {
     const int ctx = av1_get_pred_context_switchable_interp(xd);
-#if CONFIG_DAALA_EC || CONFIG_ANS
     mbmi->interp_filter =
         (InterpFilter)av1_switchable_interp_inv[aom_read_symbol(
             r, ec_ctx->switchable_interp_cdf[ctx], SWITCHABLE_FILTERS,
             ACCT_STR)];
-#else
-    mbmi->interp_filter = (InterpFilter)aom_read_tree(
-        r, av1_switchable_interp_tree, ec_ctx->switchable_interp_prob[ctx],
-        ACCT_STR);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
     if (counts) ++counts->switchable_interp[ctx][mbmi->interp_filter];
   }
 #endif  // CONFIG_DUAL_FILTER
diff --git a/av1/decoder/decoder.c b/av1/decoder/decoder.c
index f347963..b4f37d4 100644
--- a/av1/decoder/decoder.c
+++ b/av1/decoder/decoder.c
@@ -50,7 +50,6 @@
     av1_init_wedge_masks();
 #endif  // CONFIG_EXT_INTER
     init_done = 1;
-#if CONFIG_DAALA_EC || CONFIG_ANS
     av1_indices_from_tree(av1_intra_mode_ind, av1_intra_mode_inv,
                           av1_intra_mode_tree);
     av1_indices_from_tree(av1_switchable_interp_ind, av1_switchable_interp_inv,
@@ -68,7 +67,6 @@
 #endif
     av1_indices_from_tree(av1_inter_mode_ind, av1_inter_mode_inv,
                           av1_inter_mode_tree);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   }
 }
 
diff --git a/av1/decoder/detokenize.c b/av1/decoder/detokenize.c
index 522fe5d..2e3309c 100644
--- a/av1/decoder/detokenize.c
+++ b/av1/decoder/detokenize.c
@@ -123,7 +123,6 @@
 #endif  // CONFIG_AOM_QM
   int band, c = 0;
   const int tx_size_ctx = txsize_sqr_map[tx_size];
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_cdf_prob(*coef_head_cdfs)[COEFF_CONTEXTS][CDF_SIZE(ENTROPY_TOKENS)] =
       ec_ctx->coef_head_cdfs[tx_size_ctx][type][ref];
   aom_cdf_prob(*coef_tail_cdfs)[COEFF_CONTEXTS][CDF_SIZE(ENTROPY_TOKENS)] =
@@ -135,13 +134,6 @@
   unsigned int(*coef_counts)[COEFF_CONTEXTS][UNCONSTRAINED_NODES + 1] = NULL;
   unsigned int(*eob_branch_count)[COEFF_CONTEXTS] = NULL;
 #endif
-#else
-  aom_prob(*coef_probs)[COEFF_CONTEXTS][UNCONSTRAINED_NODES] =
-      ec_ctx->coef_probs[tx_size_ctx][type][ref];
-  const aom_prob *prob;
-  unsigned int(*coef_counts)[COEFF_CONTEXTS][UNCONSTRAINED_NODES + 1] = NULL;
-  unsigned int(*eob_branch_count)[COEFF_CONTEXTS] = NULL;
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   uint8_t token_cache[MAX_TX_SQUARE];
   const uint8_t *band_translate = get_band_translate(tx_size);
   int dq_shift;
@@ -153,18 +145,15 @@
   (void)tx_type;
 
   if (counts) {
-#if !(CONFIG_DAALA_EC || CONFIG_ANS) || !CONFIG_EC_ADAPT
+#if !CONFIG_EC_ADAPT
     coef_counts = counts->coef[tx_size_ctx][type][ref];
     eob_branch_count = counts->eob_branch[tx_size_ctx][type][ref];
-#endif
-#if (CONFIG_DAALA_EC || CONFIG_ANS) && !CONFIG_EC_ADAPT
     blockz_count = counts->blockz_count[tx_size_ctx][type][ref][ctx];
 #endif
   }
 
   dq_shift = av1_get_tx_scale(tx_size);
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
   band = *band_translate++;
 
   int more_data = 1;
@@ -256,71 +245,6 @@
     dqv = dq[1];
     ctx = get_coef_context(nb, token_cache, c);
     band = *band_translate++;
-
-#else  // CONFIG_DAALA_EC || CONFIG_ANS
-  while (c < max_eob) {
-    int val = -1;
-    band = *band_translate++;
-    prob = coef_probs[band][ctx];
-    if (counts) ++eob_branch_count[band][ctx];
-    if (!aom_read(r, prob[EOB_CONTEXT_NODE], ACCT_STR)) {
-      INCREMENT_COUNT(EOB_MODEL_TOKEN);
-      break;
-    }
-
-#if CONFIG_NEW_QUANT
-    dqv_val = &dq_val[band][0];
-#endif  // CONFIG_NEW_QUANT
-
-    while (!aom_read(r, prob[ZERO_CONTEXT_NODE], ACCT_STR)) {
-      INCREMENT_COUNT(ZERO_TOKEN);
-      dqv = dq[1];
-      token_cache[scan[c]] = 0;
-      ++c;
-      if (c >= max_eob) return c;  // zero tokens at the end (no eob token)
-      ctx = get_coef_context(nb, token_cache, c);
-      band = *band_translate++;
-      prob = coef_probs[band][ctx];
-#if CONFIG_NEW_QUANT
-      dqv_val = &dq_val[band][0];
-#endif  // CONFIG_NEW_QUANT
-    }
-
-    *max_scan_line = AOMMAX(*max_scan_line, scan[c]);
-
-    if (!aom_read(r, prob[ONE_CONTEXT_NODE], ACCT_STR)) {
-      INCREMENT_COUNT(ONE_TOKEN);
-      token = ONE_TOKEN;
-      val = 1;
-    } else {
-      INCREMENT_COUNT(TWO_TOKEN);
-      token = aom_read_tree(r, av1_coef_con_tree,
-                            av1_pareto8_full[prob[PIVOT_NODE] - 1], ACCT_STR);
-      assert(token != ZERO_TOKEN && token != ONE_TOKEN);
-      val = token_to_value(r, token, tx_size, xd->bd);
-    }
-#if CONFIG_NEW_QUANT
-    v = av1_dequant_abscoeff_nuq(val, dqv, dqv_val);
-    v = dq_shift ? ROUND_POWER_OF_TWO(v, dq_shift) : v;
-#else
-#if CONFIG_AOM_QM
-    dqv = ((iqmatrix[scan[c]] * (int)dqv) + (1 << (AOM_QM_BITS - 1))) >>
-          AOM_QM_BITS;
-#endif
-    v = (val * dqv) >> dq_shift;
-#endif  // CONFIG_NEW_QUANT
-
-#if CONFIG_COEFFICIENT_RANGE_CHECKING
-    dqcoeff[scan[c]] =
-        check_range((aom_read_bit(r, ACCT_STR) ? -v : v), xd->bd);
-#else
-    dqcoeff[scan[c]] = aom_read_bit(r, ACCT_STR) ? -v : v;
-#endif  // CONFIG_COEFFICIENT_RANGE_CHECKING
-    token_cache[scan[c]] = av1_pt_energy_class[token];
-    ++c;
-    ctx = get_coef_context(nb, token_cache, c);
-    dqv = dq[1];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   }
 
   return c;
diff --git a/av1/decoder/laplace_decoder.c b/av1/decoder/laplace_decoder.c
index b6cf50b..5cc080e 100644
--- a/av1/decoder/laplace_decoder.c
+++ b/av1/decoder/laplace_decoder.c
@@ -39,10 +39,10 @@
   count += msbs << shift;
   if (count > sum) {
     count = sum;
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
     r->ec.error = 1;
 #else
-# error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+# error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
   }
   return count;
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index a012cb0..ea0136c 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -63,12 +63,6 @@
 
 static struct av1_token intra_mode_encodings[INTRA_MODES];
 static struct av1_token switchable_interp_encodings[SWITCHABLE_FILTERS];
-#if CONFIG_EXT_PARTITION_TYPES && !(CONFIG_DAALA_EC || CONFIG_ANS)
-static const struct av1_token ext_partition_encodings[EXT_PARTITION_TYPES] = {
-  { 0, 1 },  { 4, 3 },  { 12, 4 }, { 7, 3 },
-  { 10, 4 }, { 11, 4 }, { 26, 5 }, { 27, 5 }
-};
-#endif
 static struct av1_token partition_encodings[PARTITION_TYPES];
 #if CONFIG_EXT_INTER
 static const struct av1_token
@@ -82,16 +76,6 @@
 static struct av1_token palette_color_index_encodings[PALETTE_SIZES]
                                                      [PALETTE_COLORS];
 #endif  // CONFIG_PALETTE
-#if !(CONFIG_DAALA_EC || CONFIG_ANS)
-static const struct av1_token tx_size_encodings[MAX_TX_DEPTH][TX_SIZES] = {
-  { { 0, 1 }, { 1, 1 } },                      // Max tx_size is 8X8
-  { { 0, 1 }, { 2, 2 }, { 3, 2 } },            // Max tx_size is 16X16
-  { { 0, 1 }, { 2, 2 }, { 6, 3 }, { 7, 3 } },  // Max tx_size is 32X32
-#if CONFIG_TX64X64
-  { { 0, 1 }, { 2, 2 }, { 6, 3 }, { 14, 4 }, { 15, 4 } },  // Max tx_size 64X64
-#endif                                                     // CONFIG_TX64X64
-};
-#endif  // !(CONFIG_DAALA_EC || CONFIG_ANS)
 
 #if CONFIG_EXT_INTRA || CONFIG_FILTER_INTRA || CONFIG_PALETTE
 static INLINE void write_uniform(aom_writer *w, int n, int v) {
@@ -193,7 +177,6 @@
                        av1_switchable_restore_tree);
 #endif  // CONFIG_LOOP_RESTORATION
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
   /* This hack is necessary when CONFIG_DUAL_FILTER is enabled because the five
       SWITCHABLE_FILTERS are not consecutive, e.g., 0, 1, 2, 3, 4, when doing
       an in-order traversal of the av1_switchable_interp_tree structure. */
@@ -216,7 +199,6 @@
                         av1_intra_mode_tree);
   av1_indices_from_tree(av1_inter_mode_ind, av1_inter_mode_inv,
                         av1_inter_mode_tree);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 }
 
 static void write_intra_mode_kf(const AV1_COMMON *cm, FRAME_CONTEXT *frame_ctx,
@@ -226,17 +208,10 @@
 #if CONFIG_INTRABC
   assert(!is_intrabc_block(&mi->mbmi));
 #endif  // CONFIG_INTRABC
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_write_symbol(w, av1_intra_mode_ind[mode],
                    get_y_mode_cdf(frame_ctx, mi, above_mi, left_mi, block),
                    INTRA_MODES);
   (void)cm;
-#else
-  av1_write_token(w, av1_intra_mode_tree,
-                  get_y_mode_probs(cm, mi, above_mi, left_mi, block),
-                  &intra_mode_encodings[mode]);
-  (void)frame_ctx;
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 }
 
 #if CONFIG_EXT_INTER && CONFIG_INTERINTRA
@@ -462,14 +437,8 @@
     assert(IMPLIES(is_rect_tx(tx_size), is_rect_tx_allowed(xd, mbmi)));
 #endif  // CONFIG_EXT_TX && CONFIG_RECT_TX
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
     aom_write_symbol(w, depth, ec_ctx->tx_size_cdf[tx_size_cat][tx_size_ctx],
                      tx_size_cat + 2);
-#else
-    av1_write_token(w, av1_tx_size_tree[tx_size_cat],
-                    ec_ctx->tx_size_probs[tx_size_cat][tx_size_ctx],
-                    &tx_size_encodings[tx_size_cat][depth]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #if CONFIG_EXT_TX && CONFIG_RECT_TX && CONFIG_RECT_TX_EXT
     if (is_quarter_tx_allowed(xd, mbmi, is_inter) && tx_size != coded_tx_size)
       aom_write(w, tx_size == quarter_txsize_lookup[bsize],
@@ -577,17 +546,8 @@
   (void)xd;
 #endif
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_write_symbol(w, AOMMIN(abs, DELTA_Q_SMALL), ec_ctx->delta_q_cdf,
                    DELTA_Q_PROBS + 1);
-#else
-  int i = 0;
-  while (i < DELTA_Q_SMALL && i <= abs) {
-    int bit = (i < abs);
-    aom_write(w, bit, ec_ctx->delta_q_prob[i]);
-    i++;
-  }
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
   if (!smallval) {
     rem_bits = OD_ILOG_NZ(abs - 1) - 1;
@@ -634,17 +594,8 @@
   (void)xd;
 #endif
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_write_symbol(w, AOMMIN(abs, DELTA_LF_SMALL), ec_ctx->delta_lf_cdf,
                    DELTA_LF_PROBS + 1);
-#else
-  int i = 0;
-  while (i < DELTA_LF_SMALL && i <= abs) {
-    int bit = (i < abs);
-    aom_write(w, bit, ec_ctx->delta_lf_prob[i]);
-    i++;
-  }
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
   if (!smallval) {
     rem_bits = OD_ILOG_NZ(abs - 1) - 1;
@@ -887,7 +838,7 @@
 }
 #endif
 
-#if (CONFIG_DAALA_EC || CONFIG_ANS) && !CONFIG_LV_MAP
+#if !CONFIG_LV_MAP
 static void pack_mb_tokens(aom_writer *w, const TOKENEXTRA **tp,
                            const TOKENEXTRA *const stop,
                            aom_bit_depth_t bit_depth, const TX_SIZE tx_size,
@@ -952,98 +903,7 @@
 
   *tp = p;
 }
-#else  // (CONFIG_DAALA_EC || CONFIG_ANS) && !CONFIG_LV_MAP
-#if !CONFIG_LV_MAP
-static void pack_mb_tokens(aom_writer *w, const TOKENEXTRA **tp,
-                           const TOKENEXTRA *const stop,
-                           aom_bit_depth_t bit_depth, const TX_SIZE tx_size,
-                           TOKEN_STATS *token_stats) {
-  const TOKENEXTRA *p = *tp;
-#if CONFIG_VAR_TX
-  int count = 0;
-  const int seg_eob = tx_size_2d[tx_size];
-#endif
-
-  while (p < stop && p->token != EOSB_TOKEN) {
-    const int token = p->token;
-#if !(CONFIG_DAALA_EC || CONFIG_ANS)
-    const struct av1_token *const coef_encoding = &av1_coef_encodings[token];
-    int coef_value = coef_encoding->value;
-    int coef_length = coef_encoding->len;
-#endif  // !(CONFIG_DAALA_EC || CONFIG_ANS)
-    const av1_extra_bit *const extra_bits = &av1_extra_bits[token];
-
-#if CONFIG_DAALA_EC || CONFIG_ANS
-    /* skip one or two nodes */
-    if (!p->skip_eob_node)
-      aom_write_record(w, token != EOB_TOKEN, p->context_tree[0], token_stats);
-    if (token != EOB_TOKEN) {
-      aom_write_record(w, token != ZERO_TOKEN, p->context_tree[1], token_stats);
-      if (token != ZERO_TOKEN) {
-        aom_write_symbol(w, token - ONE_TOKEN, *p->token_cdf,
-                         CATEGORY6_TOKEN - ONE_TOKEN + 1);
-      }
-    }
-#else
-    /* skip one or two nodes */
-    if (p->skip_eob_node)
-      coef_length -= p->skip_eob_node;
-    else
-      aom_write_record(w, token != EOB_TOKEN, p->context_tree[0], token_stats);
-
-    if (token != EOB_TOKEN) {
-      aom_write_record(w, token != ZERO_TOKEN, p->context_tree[1], token_stats);
-
-      if (token != ZERO_TOKEN) {
-        aom_write_record(w, token != ONE_TOKEN, p->context_tree[2],
-                         token_stats);
-
-        if (token != ONE_TOKEN) {
-          const int unconstrained_len = UNCONSTRAINED_NODES - p->skip_eob_node;
-          aom_write_tree_record(
-              w, av1_coef_con_tree,
-              av1_pareto8_full[p->context_tree[PIVOT_NODE] - 1], coef_value,
-              coef_length - unconstrained_len, 0, token_stats);
-        }
-      }
-    }
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
-
-    if (extra_bits->base_val) {
-      const int bit_string = p->extra;
-      const int bit_string_length = extra_bits->len;  // Length of extra bits to
-      // be written excluding
-      // the sign bit.
-      int skip_bits = (extra_bits->base_val == CAT6_MIN_VAL)
-                          ? (int)sizeof(av1_cat6_prob) -
-                                av1_get_cat6_extrabits_size(tx_size, bit_depth)
-                          : 0;
-
-      assert(!(bit_string >> (bit_string_length - skip_bits + 1)));
-      if (bit_string_length > 0) {
-#if CONFIG_NEW_MULTISYMBOL
-        skip_bits &= ~3;
-        write_coeff_extra(extra_bits->cdf, bit_string >> 1,
-                          bit_string_length - skip_bits, w);
-#else
-        write_coeff_extra(extra_bits->prob, bit_string >> 1, bit_string_length,
-                          skip_bits, w, token_stats);
-#endif
-      }
-      aom_write_bit_record(w, bit_string & 1, token_stats);
-    }
-    ++p;
-
-#if CONFIG_VAR_TX
-    ++count;
-    if (token == EOB_TOKEN || count == seg_eob) break;
-#endif
-  }
-
-  *tp = p;
-}
 #endif  // !CONFIG_LV_MAP
-#endif  // (CONFIG_DAALA_EC || CONFIG_ANS) !CONFIG_LV_MAP
 #else   // !CONFIG_PVQ
 static PVQ_INFO *get_pvq_block(PVQ_QUEUE *pvq_q) {
   PVQ_INFO *pvq;
@@ -1269,11 +1129,7 @@
 static void write_segment_id(aom_writer *w, const struct segmentation *seg,
                              struct segmentation_probs *segp, int segment_id) {
   if (seg->enabled && seg->update_map) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
     aom_write_symbol(w, segment_id, segp->tree_cdf, MAX_SEGMENTS);
-#else
-    aom_write_tree(w, av1_segment_tree, segp->tree_probs, segment_id, 3, 0);
-#endif
   }
 }
 
@@ -1413,15 +1269,9 @@
 #if CONFIG_INTRA_INTERP
     p_angle = mode_to_angle_map[mbmi->mode] + mbmi->angle_delta[0] * ANGLE_STEP;
     if (av1_is_intra_filter_switchable(p_angle)) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
       aom_write_symbol(w, mbmi->intra_filter,
                        ec_ctx->intra_filter_cdf[intra_filter_ctx],
                        INTRA_FILTERS);
-#else
-      av1_write_token(w, av1_intra_filter_tree,
-                      ec_ctx->intra_filter_probs[intra_filter_ctx],
-                      &intra_filter_encodings[mbmi->intra_filter]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
     }
 #endif  // CONFIG_INTRA_INTERP
   }
@@ -1464,15 +1314,9 @@
           (mbmi->ref_frame[1] > INTRA_FRAME &&
            has_subpel_mv_component(xd->mi[0], xd, dir + 2))) {
         const int ctx = av1_get_pred_context_switchable_interp(xd, dir);
-#if CONFIG_DAALA_EC || CONFIG_ANS
         aom_write_symbol(w, av1_switchable_interp_ind[mbmi->interp_filter[dir]],
                          ec_ctx->switchable_interp_cdf[ctx],
                          SWITCHABLE_FILTERS);
-#else
-        av1_write_token(w, av1_switchable_interp_tree,
-                        ec_ctx->switchable_interp_prob[ctx],
-                        &switchable_interp_encodings[mbmi->interp_filter[dir]]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
         ++cpi->interp_filter_selected[0][mbmi->interp_filter[dir]];
       } else {
         assert(mbmi->interp_filter[dir] == EIGHTTAP_REGULAR);
@@ -1481,14 +1325,8 @@
 #else
     {
       const int ctx = av1_get_pred_context_switchable_interp(xd);
-#if CONFIG_DAALA_EC || CONFIG_ANS
       aom_write_symbol(w, av1_switchable_interp_ind[mbmi->interp_filter],
                        ec_ctx->switchable_interp_cdf[ctx], SWITCHABLE_FILTERS);
-#else
-      av1_write_token(w, av1_switchable_interp_tree,
-                      ec_ctx->switchable_interp_prob[ctx],
-                      &switchable_interp_encodings[mbmi->interp_filter]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
       ++cpi->interp_filter_selected[0][mbmi->interp_filter];
     }
 #endif  // CONFIG_DUAL_FILTER
@@ -1732,30 +1570,17 @@
       if (is_inter) {
         assert(ext_tx_used_inter[eset][tx_type]);
         if (eset > 0) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
           aom_write_symbol(w, av1_ext_tx_inter_ind[eset][tx_type],
                            ec_ctx->inter_ext_tx_cdf[eset][square_tx_size],
                            ext_tx_cnt_inter[eset]);
-#else
-          av1_write_token(w, av1_ext_tx_inter_tree[eset],
-                          ec_ctx->inter_ext_tx_prob[eset][square_tx_size],
-                          &ext_tx_inter_encodings[eset][tx_type]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
         }
       } else if (ALLOW_INTRA_EXT_TX) {
         assert(ext_tx_used_intra[eset][tx_type]);
         if (eset > 0) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
           aom_write_symbol(
               w, av1_ext_tx_intra_ind[eset][tx_type],
               ec_ctx->intra_ext_tx_cdf[eset][square_tx_size][mbmi->mode],
               ext_tx_cnt_intra[eset]);
-#else
-          av1_write_token(
-              w, av1_ext_tx_intra_tree[eset],
-              ec_ctx->intra_ext_tx_prob[eset][square_tx_size][mbmi->mode],
-              &ext_tx_intra_encodings[eset][tx_type]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
         }
       }
     }
@@ -1769,28 +1594,14 @@
 #endif  // CONFIG_SUPERTX
         !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
       if (is_inter) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
         aom_write_symbol(w, av1_ext_tx_ind[tx_type],
                          ec_ctx->inter_ext_tx_cdf[tx_size], TX_TYPES);
-#else
-        av1_write_token(w, av1_ext_tx_tree, ec_ctx->inter_ext_tx_prob[tx_size],
-                        &ext_tx_encodings[tx_type]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
       } else {
-#if CONFIG_DAALA_EC || CONFIG_ANS
         aom_write_symbol(
             w, av1_ext_tx_ind[tx_type],
             ec_ctx->intra_ext_tx_cdf[tx_size]
                                     [intra_mode_to_tx_type_context[mbmi->mode]],
             TX_TYPES);
-#else
-        av1_write_token(
-            w, av1_ext_tx_tree,
-            ec_ctx
-                ->intra_ext_tx_prob[tx_size]
-                                   [intra_mode_to_tx_type_context[mbmi->mode]],
-            &ext_tx_encodings[tx_type]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
       }
     }
 #endif  // CONFIG_EXT_TX
@@ -1799,27 +1610,16 @@
 
 static void write_intra_mode(FRAME_CONTEXT *frame_ctx, BLOCK_SIZE bsize,
                              PREDICTION_MODE mode, aom_writer *w) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_write_symbol(w, av1_intra_mode_ind[mode],
                    frame_ctx->y_mode_cdf[size_group_lookup[bsize]],
                    INTRA_MODES);
-#else
-  av1_write_token(w, av1_intra_mode_tree,
-                  frame_ctx->y_mode_prob[size_group_lookup[bsize]],
-                  &intra_mode_encodings[mode]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 }
 
 static void write_intra_uv_mode(FRAME_CONTEXT *frame_ctx,
                                 PREDICTION_MODE uv_mode, PREDICTION_MODE y_mode,
                                 aom_writer *w) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_write_symbol(w, av1_intra_mode_ind[uv_mode],
                    frame_ctx->uv_mode_cdf[y_mode], INTRA_MODES);
-#else
-  av1_write_token(w, av1_intra_mode_tree, frame_ctx->uv_mode_prob[y_mode],
-                  &intra_mode_encodings[uv_mode]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 }
 
 #if CONFIG_CFL
@@ -2875,7 +2675,7 @@
 #if CONFIG_EC_ADAPT
   FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
   (void)cm;
-#elif CONFIG_DAALA_EC || CONFIG_ANS
+#else
   FRAME_CONTEXT *ec_ctx = cm->fc;
 #endif
 
@@ -2884,24 +2684,11 @@
   if (has_rows && has_cols) {
 #if CONFIG_EXT_PARTITION_TYPES
     if (bsize <= BLOCK_8X8)
-#if CONFIG_DAALA_EC || CONFIG_ANS
       aom_write_symbol(w, p, ec_ctx->partition_cdf[ctx], PARTITION_TYPES);
-#else
-      av1_write_token(w, av1_partition_tree, probs, &partition_encodings[p]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
     else
-#if CONFIG_DAALA_EC || CONFIG_ANS
       aom_write_symbol(w, p, ec_ctx->partition_cdf[ctx], EXT_PARTITION_TYPES);
 #else
-      av1_write_token(w, av1_ext_partition_tree, probs,
-                      &ext_partition_encodings[p]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
-#else
-#if CONFIG_DAALA_EC || CONFIG_ANS
     aom_write_symbol(w, p, ec_ctx->partition_cdf[ctx], PARTITION_TYPES);
-#else
-    av1_write_token(w, av1_partition_tree, probs, &partition_encodings[p]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #endif  // CONFIG_EXT_PARTITION_TYPES
   } else if (!has_rows && has_cols) {
     assert(p == PARTITION_SPLIT || p == PARTITION_HORZ);
@@ -3068,7 +2855,6 @@
       const int eset =
           get_ext_tx_set(supertx_size, bsize, 1, cm->reduced_tx_set_used);
       if (eset > 0) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
 #if CONFIG_EC_ADAPT
         FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
 #else
@@ -3077,11 +2863,6 @@
         aom_write_symbol(w, av1_ext_tx_inter_ind[eset][mbmi->tx_type],
                          ec_ctx->inter_ext_tx_cdf[eset][supertx_size],
                          ext_tx_cnt_inter[eset]);
-#else
-        av1_write_token(w, av1_ext_tx_inter_tree[eset],
-                        cm->fc->inter_ext_tx_prob[eset][supertx_size],
-                        &ext_tx_inter_encodings[eset][mbmi->tx_type]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
       }
     }
 #else
@@ -4887,9 +4668,7 @@
 
   if (frame_is_intra_only(cm)) {
     av1_copy(cm->kf_y_prob, av1_kf_y_mode_prob);
-#if CONFIG_DAALA_EC || CONFIG_ANS
     av1_copy(cm->fc->kf_y_cdf, av1_kf_y_mode_cdf);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 #if !CONFIG_EC_ADAPT
     for (i = 0; i < INTRA_MODES; ++i)
@@ -5004,12 +4783,12 @@
     write_global_motion(cpi, header_bc);
 #endif  // CONFIG_GLOBAL_MOTION
   }
-#if (CONFIG_DAALA_EC || CONFIG_ANS) && !CONFIG_EC_ADAPT
+#if !CONFIG_EC_ADAPT
   av1_coef_head_cdfs(fc);
   av1_coef_pareto_cdfs(fc);
   for (i = 0; i < NMV_CONTEXTS; ++i) av1_set_mv_cdfs(&fc->nmvc[i]);
   av1_set_mode_cdfs(cm);
-#endif  // (CONFIG_DAALA_EC || CONFIG_ANS) && !CONFIG_EC_ADAPT
+#endif  // !CONFIG_EC_ADAPT
 #if CONFIG_ANS
   aom_buf_ans_flush(header_bc);
   header_size = buf_ans_write_end(header_bc);
diff --git a/av1/encoder/daala_compat_enc.c b/av1/encoder/daala_compat_enc.c
index 3df424c..c60e2d3 100644
--- a/av1/encoder/daala_compat_enc.c
+++ b/av1/encoder/daala_compat_enc.c
@@ -12,19 +12,19 @@
 #include "encint.h"
 
 void od_encode_checkpoint(const daala_enc_ctx *enc, od_rollback_buffer *rbuf) {
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
   od_ec_enc_checkpoint(&rbuf->ec, &enc->w.ec);
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
   OD_COPY(&rbuf->adapt, enc->state.adapt, 1);
 }
 
 void od_encode_rollback(daala_enc_ctx *enc, const od_rollback_buffer *rbuf) {
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
   od_ec_enc_rollback(&enc->w.ec, &rbuf->ec);
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
   OD_COPY(enc->state.adapt, &rbuf->adapt, 1);
 }
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index b64365e..fabfa05 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -4988,16 +4988,11 @@
     }
   }
 
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
   od_ec_enc_init(&td->mb.daala_enc.w.ec, 65025);
-#else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
-#endif
-
-#if CONFIG_DAALA_EC
   od_ec_enc_reset(&td->mb.daala_enc.w.ec);
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
 #endif  // #if CONFIG_PVQ
 
@@ -5026,10 +5021,10 @@
       (unsigned int)(tok - cpi->tile_tok[tile_row][tile_col]);
   assert(cpi->tok_count[tile_row][tile_col] <= allocated_tokens(*tile_info));
 #if CONFIG_PVQ
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
   od_ec_enc_clear(&td->mb.daala_enc.w.ec);
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
 
   td->mb.pvq_q->last_pos = td->mb.pvq_q->curr_pos;
diff --git a/av1/encoder/encodemb.c b/av1/encoder/encodemb.c
index b4d19ff..4199906 100644
--- a/av1/encoder/encodemb.c
+++ b/av1/encoder/encodemb.c
@@ -128,12 +128,8 @@
 static INLINE unsigned int get_token_bit_costs(
     unsigned int token_costs[2][COEFF_CONTEXTS][ENTROPY_TOKENS], int skip_eob,
     int ctx, int token) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
   (void)skip_eob;
   return token_costs[token == ZERO_TOKEN || token == EOB_TOKEN][ctx][token];
-#else
-  return token_costs[skip_eob][ctx][token];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 }
 
 #define USE_GREEDY_OPTIMIZE_B 0
@@ -2039,10 +2035,10 @@
 
   *eob = 0;
 
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
   tell = od_ec_enc_tell_frac(&daala_enc->w.ec);
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
 
   // Change coefficient ordering for pvq encoding.
@@ -2111,11 +2107,11 @@
 
   *eob = tx_blk_size * tx_blk_size;
 
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
   *rate = (od_ec_enc_tell_frac(&daala_enc->w.ec) - tell)
           << (AV1_PROB_COST_SHIFT - OD_BITRES);
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
   assert(*rate >= 0);
 
diff --git a/av1/encoder/encodemv.c b/av1/encoder/encodemv.c
index 3a2ea78..eb0ff88 100644
--- a/av1/encoder/encodemv.c
+++ b/av1/encoder/encodemv.c
@@ -45,13 +45,8 @@
   // Sign
   aom_write(w, sign, mvcomp->sign);
 
-// Class
-#if CONFIG_DAALA_EC || CONFIG_ANS
+  // Class
   aom_write_symbol(w, mv_class, mvcomp->class_cdf, MV_CLASSES);
-#else
-  av1_write_token(w, av1_mv_class_tree, mvcomp->classes,
-                  &mv_class_encodings[mv_class]);
-#endif
 
   // Integer bits
   if (mv_class == MV_CLASS_0) {
@@ -62,16 +57,10 @@
     for (i = 0; i < n; ++i) aom_write(w, (d >> i) & 1, mvcomp->bits[i]);
   }
 
-// Fractional bits
-#if CONFIG_DAALA_EC || CONFIG_ANS
+  // Fractional bits
   aom_write_symbol(
       w, fr, mv_class == MV_CLASS_0 ? mvcomp->class0_fp_cdf[d] : mvcomp->fp_cdf,
       MV_FP_SIZE);
-#else
-  av1_write_token(w, av1_mv_fp_tree,
-                  mv_class == MV_CLASS_0 ? mvcomp->class0_fp[d] : mvcomp->fp,
-                  &mv_fp_encodings[fr]);
-#endif
 
   // High precision bit
   if (usehp)
@@ -218,11 +207,7 @@
                    nmv_context *mvctx, int usehp) {
   const MV diff = { mv->row - ref->row, mv->col - ref->col };
   const MV_JOINT_TYPE j = av1_get_mv_joint(&diff);
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_write_symbol(w, j, mvctx->joint_cdf, MV_JOINTS);
-#else
-  av1_write_token(w, av1_mv_joint_tree, mvctx->joints, &mv_joint_encodings[j]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   if (mv_joint_vertical(j))
     encode_mv_component(w, diff.row, &mvctx->comps[0], usehp);
 
@@ -243,11 +228,7 @@
   const MV diff = { mv->row - ref->row, mv->col - ref->col };
   const MV_JOINT_TYPE j = av1_get_mv_joint(&diff);
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_write_symbol(w, j, mvctx->joint_cdf, MV_JOINTS);
-#else
-  av1_write_token(w, av1_mv_joint_tree, mvctx->joints, &mv_joint_encodings[j]);
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   if (mv_joint_vertical(j))
     encode_mv_component(w, diff.row, &mvctx->comps[0], 0);
 
diff --git a/av1/encoder/firstpass.c b/av1/encoder/firstpass.c
index a5b7863..7a0abba 100644
--- a/av1/encoder/firstpass.c
+++ b/av1/encoder/firstpass.c
@@ -568,16 +568,11 @@
 
     od_init_qm(x->daala_enc.state.qm, x->daala_enc.state.qm_inv,
                x->daala_enc.qm == OD_HVS_QM ? OD_QM8_Q4_HVS : OD_QM8_Q4_FLAT);
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
     od_ec_enc_init(&x->daala_enc.w.ec, 65025);
-#else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
-#endif
-
-#if CONFIG_DAALA_EC
     od_ec_enc_reset(&x->daala_enc.w.ec);
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
   }
 #endif
@@ -998,10 +993,10 @@
   }
 
 #if CONFIG_PVQ
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
   od_ec_enc_clear(&x->daala_enc.w.ec);
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
 
   x->pvq_q->last_pos = x->pvq_q->curr_pos;
diff --git a/av1/encoder/pvq_encoder.c b/av1/encoder/pvq_encoder.c
index ab63f1b..0df238a 100644
--- a/av1/encoder/pvq_encoder.c
+++ b/av1/encoder/pvq_encoder.c
@@ -247,23 +247,23 @@
     aom_writer w;
     od_pvq_codeword_ctx cd;
     int tell;
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
     od_ec_enc_init(&w.ec, 1000);
 #else
-# error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+# error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
     OD_COPY(&cd, &adapt->pvq.pvq_codeword_ctx, 1);
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
     tell = od_ec_enc_tell_frac(&w.ec);
 #else
-# error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+# error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
     aom_encode_pvq_codeword(&w, &cd, y0, n - (theta != -1), k);
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
     rate = (od_ec_enc_tell_frac(&w.ec)-tell)/8.;
     od_ec_enc_clear(&w.ec);
 #else
-# error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+# error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
   }
   if (qg > 0 && theta >= 0) {
@@ -851,18 +851,18 @@
        (double)(skip_cdf[2] - skip_cdf[1]));
       dc_rate += 1;
 
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
       tell2 = od_ec_enc_tell_frac(&enc->w.ec);
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
       od_encode_checkpoint(enc, &dc_buf);
       generic_encode(&enc->w, &enc->state.adapt->model_dc[pli],
        n - 1, &enc->state.adapt->ex_dc[pli][bs][0], 2);
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
       tell2 = od_ec_enc_tell_frac(&enc->w.ec) - tell2;
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
       dc_rate += tell2/8.0;
       od_encode_rollback(enc, &dc_buf);
@@ -871,10 +871,10 @@
        enc->pvq_norm_lambda);
     }
   }
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
   tell = od_ec_enc_tell_frac(&enc->w.ec);
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
   /* Code as if we're not skipping. */
   aom_write_symbol(&enc->w, 2 + (out[0] != 0), skip_cdf, 4);
@@ -921,10 +921,10 @@
     }
     if (encode_flip) cfl_encoded = 1;
   }
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
   tell = od_ec_enc_tell_frac(&enc->w.ec) - tell;
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
   /* Account for the rate of skipping the AC, based on the same DC decision
      we made when trying to not skip AC. */
@@ -955,18 +955,18 @@
          (double)skip_cdf[0]);
         dc_rate += 1;
 
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
         tell2 = od_ec_enc_tell_frac(&enc->w.ec);
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
         od_encode_checkpoint(enc, &dc_buf);
         generic_encode(&enc->w, &enc->state.adapt->model_dc[pli],
          n - 1, &enc->state.adapt->ex_dc[pli][bs][0], 2);
-#if CONFIG_DAALA_EC
+#if !CONFIG_ANS
         tell2 = od_ec_enc_tell_frac(&enc->w.ec) - tell2;
 #else
-#error "CONFIG_PVQ currently requires CONFIG_DAALA_EC."
+#error "CONFIG_PVQ currently requires !CONFIG_ANS."
 #endif
         dc_rate += tell2/8.0;
         od_encode_rollback(enc, &dc_buf);
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 9c164eb..993e15c 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -1072,13 +1072,10 @@
   int c, cost;
   const int16_t *scan = scan_order->scan;
   const int16_t *nb = scan_order->neighbors;
-#if CONFIG_DAALA_EC || CONFIG_ANS
   const int ref = is_inter_block(mbmi);
   aom_prob *blockz_probs =
       cm->fc->blockzero_probs[txsize_sqr_map[tx_size]][type][ref];
 
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
-
 #if CONFIG_HIGHBITDEPTH
   const int cat6_bits = av1_get_cat6_extrabits_size(tx_size, xd->bd);
 #else
@@ -1092,12 +1089,8 @@
   (void)cm;
 
   if (eob == 0) {
-#if CONFIG_DAALA_EC || CONFIG_ANS
     // single eob token
     cost = av1_cost_bit(blockz_probs[pt], 0);
-#else
-    cost = token_costs[0][0][pt][EOB_TOKEN];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   } else {
     if (use_fast_coef_costing) {
       int band_left = *band_count++;
@@ -1106,11 +1099,7 @@
       int v = qcoeff[0];
       int16_t prev_t;
       cost = av1_get_token_cost(v, &prev_t, cat6_bits);
-#if CONFIG_DAALA_EC || CONFIG_ANS
       cost += (*token_costs)[!prev_t][pt][prev_t];
-#else
-      cost += (*token_costs)[0][pt][prev_t];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
       token_cache[0] = av1_pt_energy_class[prev_t];
       ++token_costs;
@@ -1122,11 +1111,7 @@
 
         v = qcoeff[rc];
         cost += av1_get_token_cost(v, &t, cat6_bits);
-#if CONFIG_DAALA_EC || CONFIG_ANS
         cost += (*token_costs)[!t][!prev_t][t];
-#else
-        cost += (*token_costs)[!prev_t][!prev_t][t];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
         prev_t = t;
         if (!--band_left) {
           band_left = *band_count++;
@@ -1135,8 +1120,7 @@
       }
 
       // eob token
-      if (band_left || (CONFIG_DAALA_EC || CONFIG_ANS))
-        cost += (*token_costs)[0][!prev_t][EOB_TOKEN];
+      cost += (*token_costs)[0][!prev_t][EOB_TOKEN];
 
     } else {  // !use_fast_coef_costing
       int band_left = *band_count++;
@@ -1144,23 +1128,12 @@
       // dc token
       int v = qcoeff[0];
       int16_t tok;
-#if !(CONFIG_DAALA_EC || CONFIG_ANS)
-      unsigned int(*tok_cost_ptr)[COEFF_CONTEXTS][ENTROPY_TOKENS];
-#endif  // !(CONFIG_DAALA_EC || CONFIG_ANS)
       cost = av1_get_token_cost(v, &tok, cat6_bits);
-#if CONFIG_DAALA_EC || CONFIG_ANS
       cost += (*token_costs)[!tok][pt][tok];
-#else
-      cost += (*token_costs)[0][pt][tok];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
       token_cache[0] = av1_pt_energy_class[tok];
       ++token_costs;
 
-#if !(CONFIG_DAALA_EC || CONFIG_ANS)
-      tok_cost_ptr = &((*token_costs)[!tok]);
-#endif  // !(CONFIG_DAALA_EC || CONFIG_ANS)
-
       // ac tokens
       for (c = 1; c < eob; c++) {
         const int rc = scan[c];
@@ -1168,26 +1141,17 @@
         v = qcoeff[rc];
         cost += av1_get_token_cost(v, &tok, cat6_bits);
         pt = get_coef_context(nb, token_cache, c);
-#if CONFIG_DAALA_EC || CONFIG_ANS
         cost += (*token_costs)[!tok][pt][tok];
-#else
-        cost += (*tok_cost_ptr)[pt][tok];
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
         token_cache[rc] = av1_pt_energy_class[tok];
         if (!--band_left) {
           band_left = *band_count++;
           ++token_costs;
         }
-#if !(CONFIG_DAALA_EC || CONFIG_ANS)
-        tok_cost_ptr = &((*token_costs)[!tok]);
-#endif  // !(CONFIG_DAALA_EC || CONFIG_ANS)
       }
 
       // eob token
-      if (band_left || (CONFIG_DAALA_EC || CONFIG_ANS)) {
-        pt = get_coef_context(nb, token_cache, c);
-        cost += (*token_costs)[0][pt][EOB_TOKEN];
-      }
+      pt = get_coef_context(nb, token_cache, c);
+      cost += (*token_costs)[0][pt][EOB_TOKEN];
     }
   }
 
diff --git a/av1/encoder/tokenize.c b/av1/encoder/tokenize.c
index a52e2b5..18d2cd9 100644
--- a/av1/encoder/tokenize.c
+++ b/av1/encoder/tokenize.c
@@ -264,13 +264,6 @@
 };
 #endif
 
-#if !(CONFIG_DAALA_EC || CONFIG_ANS)
-const struct av1_token av1_coef_encodings[ENTROPY_TOKENS] = {
-  { 2, 2 },  { 6, 3 },   { 28, 5 },  { 58, 6 },  { 59, 6 },  { 60, 6 },
-  { 61, 6 }, { 124, 7 }, { 125, 7 }, { 126, 7 }, { 127, 7 }, { 0, 1 }
-};
-#endif  // !(CONFIG_DAALA_EC || CONFIG_ANS)
-
 #if !CONFIG_PVQ || CONFIG_VAR_TX
 static void cost_coeffs_b(int plane, int block, int blk_row, int blk_col,
                           BLOCK_SIZE plane_bsize, TX_SIZE tx_size, void *arg) {
@@ -310,7 +303,6 @@
                    blk_row);
 }
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
 static INLINE void add_token(TOKENEXTRA **t,
                              aom_cdf_prob (*tail_cdf)[CDF_SIZE(ENTROPY_TOKENS)],
                              aom_cdf_prob (*head_cdf)[CDF_SIZE(ENTROPY_TOKENS)],
@@ -324,19 +316,6 @@
   (*t)->first_val = first_val;
   (*t)++;
 }
-
-#else
-static INLINE void add_token(TOKENEXTRA **t, const aom_prob *context_tree,
-                             int32_t extra, uint8_t token,
-                             uint8_t skip_eob_node, unsigned int *counts) {
-  (*t)->token = token;
-  (*t)->extra = extra;
-  (*t)->context_tree = context_tree;
-  (*t)->skip_eob_node = skip_eob_node;
-  (*t)++;
-  ++counts[token];
-}
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 #endif  // !CONFIG_PVQ || CONFIG_VAR_TX
 
 #if CONFIG_PALETTE
@@ -461,16 +440,11 @@
   const int ref = is_inter_block(mbmi);
   unsigned int(*const counts)[COEFF_CONTEXTS][ENTROPY_TOKENS] =
       td->rd_counts.coef_counts[txsize_sqr_map[tx_size]][type][ref];
-#if !(CONFIG_DAALA_EC || CONFIG_ANS)
-  aom_prob(*const coef_probs)[COEFF_CONTEXTS][UNCONSTRAINED_NODES] =
-      cpi->common.fc->coef_probs[txsize_sqr_map[tx_size]][type][ref];
-#endif  // !(CONFIG_DAALA_EC || CONFIG_ANS)
 #if CONFIG_EC_ADAPT
   FRAME_CONTEXT *ec_ctx = xd->tile_ctx;
-#elif CONFIG_DAALA_EC || CONFIG_ANS
+#else
   FRAME_CONTEXT *ec_ctx = cpi->common.fc;
 #endif
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_cdf_prob(
       *const coef_head_cdfs)[COEFF_CONTEXTS][CDF_SIZE(ENTROPY_TOKENS)] =
       ec_ctx->coef_head_cdfs[txsize_sqr_map[tx_size]][type][ref];
@@ -481,9 +455,6 @@
       td->counts->blockz_count[txsize_sqr_map[tx_size]][type][ref];
   int eob_val;
   int first_val = 1;
-#else
-  int skip_eob = 0;
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   const int seg_eob = get_tx_eob(&cpi->common.seg, segment_id, tx_size);
   unsigned int(*const eob_branch)[COEFF_CONTEXTS] =
       td->counts->eob_branch[txsize_sqr_map[tx_size]][type][ref];
@@ -497,7 +468,6 @@
   nb = scan_order->neighbors;
   c = 0;
 
-#if CONFIG_DAALA_EC || CONFIG_ANS
   if (eob == 0)
     add_token(&t, &coef_tail_cdfs[band[c]][pt], &coef_head_cdfs[band[c]][pt], 1,
               1, 0, BLOCK_Z_TOKEN);
@@ -533,27 +503,6 @@
     ++c;
     pt = get_coef_context(nb, token_cache, AOMMIN(c, eob - 1));
   }
-#else
-  while (c < eob) {
-    const int v = qcoeff[scan[c]];
-    eob_branch[band[c]][pt] += !skip_eob;
-
-    av1_get_token_extra(v, &token, &extra);
-
-    add_token(&t, coef_probs[band[c]][pt], extra, (uint8_t)token,
-              (uint8_t)skip_eob, counts[band[c]][pt]);
-
-    token_cache[scan[c]] = av1_pt_energy_class[token];
-    ++c;
-    pt = get_coef_context(nb, token_cache, c);
-    skip_eob = (token == ZERO_TOKEN);
-  }
-  if (c < seg_eob) {
-    add_token(&t, coef_probs[band[c]][pt], 0, EOB_TOKEN, 0,
-              counts[band[c]][pt]);
-    ++eob_branch[band[c]][pt];
-  }
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
 
 #if CONFIG_COEF_INTERLEAVE
   t->token = EOSB_TOKEN;
diff --git a/av1/encoder/tokenize.h b/av1/encoder/tokenize.h
index c3e8cef..cbfa3cd 100644
--- a/av1/encoder/tokenize.h
+++ b/av1/encoder/tokenize.h
@@ -35,12 +35,10 @@
 } TOKENVALUE;
 
 typedef struct {
-#if CONFIG_DAALA_EC || CONFIG_ANS
   aom_cdf_prob (*tail_cdf)[CDF_SIZE(ENTROPY_TOKENS)];
   aom_cdf_prob (*head_cdf)[CDF_SIZE(ENTROPY_TOKENS)];
   int eob_val;
   int first_val;
-#endif  // CONFIG_DAALA_EC || CONFIG_ANS
   const aom_prob *context_tree;
   EXTRABIT extra;
   uint8_t token;
@@ -49,9 +47,6 @@
 
 extern const aom_tree_index av1_coef_tree[];
 extern const aom_tree_index av1_coef_con_tree[];
-#if !(CONFIG_DAALA_EC || CONFIG_ANS)
-extern const struct av1_token av1_coef_encodings[];
-#endif  // !(CONFIG_DAALA_EC || CONFIG_ANS)
 
 int av1_is_skippable_in_plane(MACROBLOCK *x, BLOCK_SIZE bsize, int plane);
 
diff --git a/configure b/configure
index 562b1be..b77b07d 100755
--- a/configure
+++ b/configure
@@ -279,7 +279,6 @@
     alt_intra
     palette
     palette_delta_encoding
-    daala_ec
     rawbits
     ec_smallmul
     pvq
@@ -498,7 +497,6 @@
     # Enable low-bitdepth pixel pipeline by default
     soft_enable lowbitdepth
 
-    ! enabled ans && soft_enable daala_ec
     soft_enable palette
     soft_enable alt_intra
     soft_enable palette_throughput
@@ -519,28 +517,16 @@
     enabled dpcm_intra && enable_feature ext_tx
     enabled chroma_sub8x8 && enable_feature cb4x4
 
-    if ! enabled daala_ec && ! enabled ans && enabled cfl; then
-      log_echo "cfl requires daala_ec or ans, so disabling cfl"
-      disable_feature cfl
-    fi
-    if ! enabled daala_ec && ! enabled ans && enabled ec_adapt; then
-      log_echo "ec_adapt requires daala_ec or ans, so disabling ec_adapt"
-      disable_feature ec_adapt
-    fi
-    if ! enabled daala_ec && ! enabled ans && enabled new_multisymbol; then
-      log_echo "new_multisymbol requires daala_ec or ans, so disabling new_multisymbol"
-      disable_feature new_multisymbol
-    fi
     if ! enabled delta_q && enabled ext_delta_q; then
       log_echo "ext_delta_q requires delta_q, so disabling ext_delta_q"
       disable_feature ext_delta_q
     fi
-    if enabled rawbits && ! enabled daala_ec; then
-      log_echo "rawbits requires daala_ec, so disabling rawbits"
+    if enabled rawbits && enabled ans; then
+      log_echo "rawbits requires not ans, so disabling rawbits"
       disable_feature rawbits
     fi
-    if enabled ec_smallmul && ! enabled daala_ec; then
-      log_echo "ec_smallmul requires daala_ec, so disabling ec_smallmul"
+    if enabled ec_smallmul && enabled ans; then
+      log_echo "ec_smallmul requires not ans, so disabling ec_smallmul"
       disable_feature ec_smallmul
     fi
     if enabled ext_tile; then
diff --git a/test/boolcoder_test.cc b/test/boolcoder_test.cc
index e5bd913..7abe1b1 100644
--- a/test/boolcoder_test.cc
+++ b/test/boolcoder_test.cc
@@ -68,11 +68,6 @@
 
         aom_stop_encode(&bw);
 
-#if !CONFIG_DAALA_EC
-        // First bit should be zero
-        GTEST_ASSERT_EQ(bw_buffer[0] & 0x80, 0);
-#endif
-
         aom_reader br;
         aom_reader_init(&br, bw_buffer, bw.pos, NULL, NULL);
         bit_rnd.Reset(random_seed);
@@ -91,15 +86,11 @@
   }
 }
 
-#if CONFIG_DAALA_EC
 #if CONFIG_EC_SMALLMUL
 #define FRAC_DIFF_TOTAL_ERROR 0.16
 #else
 #define FRAC_DIFF_TOTAL_ERROR 0.07
 #endif
-#else
-#define FRAC_DIFF_TOTAL_ERROR 0.2
-#endif
 
 TEST(AV1, TestTell) {
   const int kBufferSize = 10000;
diff --git a/test/superframe_test.cc b/test/superframe_test.cc
index 0f54bae..a28d35d 100644
--- a/test/superframe_test.cc
+++ b/test/superframe_test.cc
@@ -119,23 +119,12 @@
 // to the decoder starting at the end of the buffer.
 #if CONFIG_EXT_TILE
 // Single tile does not work with ANS (see comment above).
-#if CONFIG_ANS || CONFIG_DAALA_EC
 const int tile_col_values[] = { 1, 2 };
-#else
-const int tile_col_values[] = { 1, 2, 32 };
-#endif
 const int tile_row_values[] = { 1, 2, 32 };
 AV1_INSTANTIATE_TEST_CASE(
     SuperframeTest,
     ::testing::Combine(::testing::Values(::libaom_test::kTwoPassGood),
                        ::testing::ValuesIn(tile_col_values),
                        ::testing::ValuesIn(tile_row_values)));
-#else
-#if !CONFIG_ANS && !CONFIG_DAALA_EC
-AV1_INSTANTIATE_TEST_CASE(
-    SuperframeTest,
-    ::testing::Combine(::testing::Values(::libaom_test::kTwoPassGood),
-                       ::testing::Values(0), ::testing::Values(0)));
-#endif  // !CONFIG_ANS
 #endif  // CONFIG_EXT_TILE
 }  // namespace
