diff --git a/examples/fri.rs b/examples/fri.rs
index 68f1449adce867c774586d177bd41e1fbc4f35d5..9f7fd7e2883d9ae73d865a84bd472cfeed097ce1 100644
--- a/examples/fri.rs
+++ b/examples/fri.rs
@@ -8,24 +8,32 @@ use rs_merkle::Hasher;
 use fri::algorithms::Blake3;
 use komodo::error::KomodoError;
 
-fn run<F: PrimeField, H: Hasher, P>() -> Result<(), KomodoError>
+fn run<const N: usize, F: PrimeField, H: Hasher, P>(
+    bytes: &[u8],
+    k: usize,
+    n: usize,
+    bf: usize,
+    rpo: usize,
+    q: usize,
+) -> Result<(), KomodoError>
 where
     P: DenseUVPolynomial<F>,
     for<'a, 'b> &'a P: Div<&'b P, Output = P>,
     <H as rs_merkle::Hasher>::Hash: AsRef<[u8]>,
 {
-    // the code parameters and the data to manipulate
-    let (k, n) = (4, 16);
-    let bytes = include_bytes!("../assets/dragoon_133x133.png").to_vec();
-    eprintln!("loaded {} bytes of data", bytes.len());
-
     let shards = komodo::fri::encode::<F>(&bytes, k, n);
-    let blocks = komodo::fri::prove::<2, F, H, P>(shards, 1, 1, 50).unwrap();
-    komodo::fri::verify::<2, F, H, P>(blocks[0].clone(), n, 50).unwrap();
+    let blocks = komodo::fri::prove::<N, F, H, P>(shards, bf, rpo, q).unwrap();
+
+    for block in blocks {
+        komodo::fri::verify::<N, F, H, P>(block, n, q).unwrap();
+    }
 
     Ok(())
 }
 
 fn main() {
-    run::<Fr, Blake3, DensePolynomial<Fr>>().unwrap();
+    let bytes = include_bytes!("../assets/dragoon_133x133.png").to_vec();
+    eprintln!("loaded {} bytes of data", bytes.len());
+
+    run::<2, Fr, Blake3, DensePolynomial<Fr>>(&bytes, 4, 16, 1, 1, 50).unwrap();
 }