diff --git a/src/codec2/mod.rs b/src/codec2/mod.rs
index 9276caf8e7a8cc1cb892bd3e63a9b321144e98c8..1f7f0fee973959fb4e957460a189a63df7cc887e 100644
--- a/src/codec2/mod.rs
+++ b/src/codec2/mod.rs
@@ -145,7 +145,7 @@ pub struct Fsk<I: Iterator<Item = Complex>> {
 }
 
 impl<I: Iterator<Item = Complex>> Fsk<I> {
-    pub fn new(iq_iter: I) -> Self {
+    pub fn new(iq_iter: I, max_deviation: i32) -> Self {
         const P: i32 = 5;
         const FS: i32 = 9600 * P;
 
@@ -153,8 +153,8 @@ impl<I: Iterator<Item = Complex>> Fsk<I> {
 
         // Set upper/lower bound on the FSK peaks, from center
         // (Hz)
-        let fsk_lower = -15_000;
-        let fsk_upper = 15_000;
+        let fsk_lower = -max_deviation;
+        let fsk_upper = max_deviation;
 
         unsafe {
             fsk_set_freq_est_limits(internal, fsk_lower, fsk_upper);
diff --git a/src/decoder/mod.rs b/src/decoder/mod.rs
index 5f5e8588016f38c894554d48aa1d01b0386ec97b..a49eae37d2dd64c37faa55d9595a078ece93cf90 100644
--- a/src/decoder/mod.rs
+++ b/src/decoder/mod.rs
@@ -47,7 +47,7 @@ pub fn decode_forever(felinet_send: mpsc::Sender<SemiPacketIn>, config: &Config,
             Complex { real, imag }
         });
     let iq_no_dc = RemoveDcBias::new(iq);
-    let soft_bits = Fsk::new(iq_no_dc);
+    let soft_bits = Fsk::new(iq_no_dc, config.max_deviation);
     let demod = Demod::new(soft_bits);
 
     demod.demod(|mut p| {