diff --git a/docs/00-introduction.ipynb b/docs/00-introduction.ipynb
index f598f8c20a9a7c6df05822d7fbab6d01be984006..469205d3b167cd0d85eb0fdc0a5350a676a2b4bc 100644
--- a/docs/00-introduction.ipynb
+++ b/docs/00-introduction.ipynb
@@ -41,7 +41,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "!pip install -qU semantic-router==0.0.28"
+    "!pip install -qU semantic-router==0.0.29"
    ]
   },
   {
diff --git a/docs/01-save-load-from-file.ipynb b/docs/01-save-load-from-file.ipynb
index 4e084e1e0c92fdec5c33138fe79361e5644555f5..025dce49f588bccf4d2212af7cf21d5afcabe1b7 100644
--- a/docs/01-save-load-from-file.ipynb
+++ b/docs/01-save-load-from-file.ipynb
@@ -36,7 +36,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "!pip install -qU semantic-router==0.0.28"
+    "!pip install -qU semantic-router==0.0.29"
    ]
   },
   {
diff --git a/docs/02-dynamic-routes.ipynb b/docs/02-dynamic-routes.ipynb
index 084d19fe5f827871050a49fd3852606c40902184..7581798499e1aba0c412d1f65bbae23f9217c190 100644
--- a/docs/02-dynamic-routes.ipynb
+++ b/docs/02-dynamic-routes.ipynb
@@ -48,7 +48,7 @@
       },
       "outputs": [],
       "source": [
-        "!pip install -qU semantic-router==0.0.28"
+        "!pip install -qU semantic-router==0.0.29"
       ]
     },
     {
diff --git a/docs/05-local-execution.ipynb b/docs/05-local-execution.ipynb
index bd776631f325118e2324e9622c6c29d44814783e..8acd2a9b28657418e67b0c071303f66aac5a7b1d 100644
--- a/docs/05-local-execution.ipynb
+++ b/docs/05-local-execution.ipynb
@@ -41,7 +41,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "!pip install -qU \"semantic-router[local]==0.0.28\""
+    "!pip install -qU \"semantic-router[local]==0.0.29\""
    ]
   },
   {
diff --git a/docs/06-threshold-optimization.ipynb b/docs/06-threshold-optimization.ipynb
index 2d17f216d831fcd2ead680ffc6c31cdc1c04b750..b833ca74da0615b1d1aca0318948eeb79c90539f 100644
--- a/docs/06-threshold-optimization.ipynb
+++ b/docs/06-threshold-optimization.ipynb
@@ -29,7 +29,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "!pip install -qU \"semantic-router[local]==0.0.28\""
+    "!pip install -qU \"semantic-router[local]==0.0.29\""
    ]
   },
   {
diff --git a/docs/07-multi-modal.ipynb b/docs/07-multi-modal.ipynb
index fc28677d459116ff79c31e9edfe7a26f6dcae8b7..26263fdebe5d389974496976a97417a9876045c3 100644
--- a/docs/07-multi-modal.ipynb
+++ b/docs/07-multi-modal.ipynb
@@ -100,7 +100,7 @@
    ],
    "source": [
     "!pip install -qU \\\n",
-    "    \"semantic-router[vision]==0.0.28\" \\\n",
+    "    \"semantic-router[vision]==0.0.29\" \\\n",
     "    datasets==2.17.0"
    ]
   },
diff --git a/docs/examples/unstructured-element-splitter.ipynb b/docs/examples/unstructured-element-splitter.ipynb
index e1ad820722f158b9bffc5d9d26af64b2d21a551f..7e36923dc5b75e579913361e49d6a83c3d7fdea1 100644
--- a/docs/examples/unstructured-element-splitter.ipynb
+++ b/docs/examples/unstructured-element-splitter.ipynb
@@ -16,7 +16,7 @@
     "# It may take longer to install the package\n",
     "!pip install -qU \\\n",
     "    \"unstructured[pdf]==0.12.4\" \\\n",
-    "    \"semantic-router==0.0.28\""
+    "    \"semantic-router==0.0.29\""
    ]
   },
   {
diff --git a/pyproject.toml b/pyproject.toml
index 94db45e6c2a9e8134748d4328134637bcb2af4f5..3f0de743f3dceccf04fe9a27f7925d988eb568ef 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "semantic-router"
-version = "0.0.28"
+version = "0.0.29"
 description = "Super fast semantic router for AI decision making"
 authors = [
     "James Briggs <james@aurelio.ai>",
diff --git a/semantic_router/__init__.py b/semantic_router/__init__.py
index e8a4494b896dc2778fb2fcf70f9f8e6174bb7147..6693edc54bec428d0d375f9160599be2e93a3075 100644
--- a/semantic_router/__init__.py
+++ b/semantic_router/__init__.py
@@ -4,4 +4,4 @@ from semantic_router.route import Route
 
 __all__ = ["RouteLayer", "HybridRouteLayer", "Route", "LayerConfig"]
 
-__version__ = "0.0.28"
+__version__ = "0.0.29"
diff --git a/semantic_router/splitters/rolling_window.py b/semantic_router/splitters/rolling_window.py
index 092433fe3a91c5fb139e097e5fcb90256f036930..2f80ff3b7782ed4247f6624d00262715d6140e60 100644
--- a/semantic_router/splitters/rolling_window.py
+++ b/semantic_router/splitters/rolling_window.py
@@ -39,6 +39,7 @@ class RollingWindowSplitter(BaseSplitter):
     def __init__(
         self,
         encoder: BaseEncoder,
+        name="rolling_window_splitter",
         threshold_adjustment=0.01,
         dynamic_threshold: bool = True,
         window_size=5,
@@ -46,7 +47,7 @@ class RollingWindowSplitter(BaseSplitter):
         max_split_tokens=300,
         split_tokens_tolerance=10,
         plot_splits=False,
-        name="rolling_window_splitter",
+        enable_statistics=False,
     ):
         super().__init__(name=name, encoder=encoder)
         self.calculated_threshold: float
@@ -58,6 +59,7 @@ class RollingWindowSplitter(BaseSplitter):
         self.min_split_tokens = min_split_tokens
         self.max_split_tokens = max_split_tokens
         self.split_tokens_tolerance = split_tokens_tolerance
+        self.enable_statistics = enable_statistics
         self.statistics: SplitStatistics
 
     def __call__(self, docs: List[str]) -> List[DocumentSplit]:
@@ -88,8 +90,13 @@ class RollingWindowSplitter(BaseSplitter):
             self.calculated_threshold = self.encoder.score_threshold
         split_indices = self._find_split_indices(similarities=similarities)
         splits = self._split_documents(docs, split_indices, similarities)
-        self.plot_similarity_scores(similarities, split_indices, splits)
-        logger.info(self.statistics)
+
+        if self.plot_splits:
+            self.plot_similarity_scores(similarities, split_indices, splits)
+
+        if self.enable_statistics:
+            print(self.statistics)
+
         return splits
 
     def _encode_documents(self, docs: List[str]) -> np.ndarray:
@@ -174,7 +181,7 @@ class RollingWindowSplitter(BaseSplitter):
                 logger.debug(f"Iteration {iteration}: Adjusting low to {low}")
             iteration += 1
 
-        logger.info(
+        logger.debug(
             f"Optimal threshold {self.calculated_threshold} found "
             f"with median tokens ({median_tokens}) in target range "
             f"({self.min_split_tokens}-{self.max_split_tokens})."
@@ -325,9 +332,7 @@ class RollingWindowSplitter(BaseSplitter):
             )
             return
 
-        if not self.plot_splits:
-            return
-        fig, axs = plt.subplots(2, 1, figsize=(12, 12))  # Adjust for two plots
+        _, axs = plt.subplots(2, 1, figsize=(12, 12))  # Adjust for two plots
 
         # Plot 1: Similarity Scores
         axs[0].plot(similarities, label="Similarity Scores", marker="o")