diff --git a/src/deblock.rs b/src/deblock.rs
index 501251982f301379adc6ad4a2b87adb1e4e851c9..e1c2b781e9468ff0441ef053ee95779c9de65271 100644
--- a/src/deblock.rs
+++ b/src/deblock.rs
@@ -12,6 +12,7 @@
 use std::cmp;
 use context::*;
 use plane::*;
+use quantize::*;
 use partition::*;
 use partition::PredictionMode::*;
 use util::clamp;
@@ -485,3 +486,37 @@ pub fn deblock_filter_frame(fi: &FrameInvariants, fs: &mut FrameState,
         deblock_plane(fi, &fs.deblock, &mut fs.rec.planes[p], p, bc, bit_depth);
     }
 }
+
+pub fn deblock_filter_optimize(fi: &FrameInvariants, fs: &mut FrameState,
+                               _bc: &mut BlockContext, bit_depth: usize) {
+    let q = ac_q(fi.base_q_idx, bit_depth) as i32;
+    let level = clamp (match bit_depth {
+        8 => {
+            if fi.frame_type == FrameType::KEY {
+                q * 17563 - 421574 + (1<<18>>1) >> 18
+            } else {
+                q * 6017 + 650707 + (1<<18>>1) >> 18
+            }
+        }
+        10 => {
+            if fi.frame_type == FrameType::KEY {
+                (q * 20723 + 4060632 + (1<<20>>1) >> 20) - 4
+            } else {
+                q * 20723 + 4060632 + (1<<20>>1) >> 20
+            }
+        }
+        12 => {
+            if fi.frame_type == FrameType::KEY {
+                (q * 20723 + 16242526 + (1<<22>>1) >> 22) - 4
+            } else {
+                q * 20723 + 16242526 + (1<<22>>1) >> 22
+            }
+        }
+        _ => {assert!(false); 0}
+    }, 0, MAX_LOOP_FILTER as i32) as u8;
+
+    fs.deblock.levels[0] = level;
+    fs.deblock.levels[1] = level;
+    fs.deblock.levels[2] = level;
+    fs.deblock.levels[3] = level;
+}
diff --git a/src/encoder.rs b/src/encoder.rs
index 584fea628a6837237c05d052bf042a02096a8034..68986ce7198206c81544e6707d6f013f041ce7a4 100644
--- a/src/encoder.rs
+++ b/src/encoder.rs
@@ -1925,6 +1925,7 @@ fn encode_tile(sequence: &mut Sequence, fi: &FrameInvariants, fs: &mut FrameStat
         }
     }
     /* TODO: Don't apply if lossless */
+    deblock_filter_optimize(fi, fs, &mut cw.bc, bit_depth);
     if fs.deblock.levels[0] != 0 || fs.deblock.levels[1] != 0 {
         deblock_filter_frame(fi, fs, &mut cw.bc, bit_depth);
     }