diff --git a/src/scientific_plots/__init__.py b/src/scientific_plots/__init__.py
index 896a8d8e0935bd320279b15c4e0fa20dbf094a5b..0ef0f56d4f7c93743265ad9470e9fc393422fcb6 100644
--- a/src/scientific_plots/__init__.py
+++ b/src/scientific_plots/__init__.py
@@ -5,4 +5,4 @@ useful across several different projects and repositories. It also contains
 stub-files with several data-type annotations for scipy and matplot-lib
 functions."""
 
-__version__ = "1.8.3"
+__version__ = "1.8.4"
diff --git a/src/scientific_plots/plot_settings.py b/src/scientific_plots/plot_settings.py
index 89a5e64d556b29fe77faf1fa2bb0db71ab32d53c..5d20654f2c1638d9b2ebcddf4dfcdc1065c12168 100644
--- a/src/scientific_plots/plot_settings.py
+++ b/src/scientific_plots/plot_settings.py
@@ -536,7 +536,6 @@ def apply_styles(plot_function: Optional[PlotFunction] = None, *,
             _plot_function(*args, **kwargs)
 
             if PREVIEW:
-                # don't create the styled plots
                 return
 
             errors = (OSError, FileNotFoundError, ThreeDPlotException,
diff --git a/src/scipy-stubs/interpolate.pyi b/src/scipy-stubs/interpolate.pyi
index f68c40c79281ded38897a7346e29b8a560b634c0..3484840d05e67f259311e411521869758573e8d6 100644
--- a/src/scipy-stubs/interpolate.pyi
+++ b/src/scipy-stubs/interpolate.pyi
@@ -93,3 +93,10 @@ class CubicSpline:
     def integrate(self,
                   a: float, b: float,
                   extrapolate: Optional[Union[str, bool]] = None) -> float: ...
+
+
+def griddata(
+    points: Matrix, values: Union[Vector, float, complex],
+    xi: Union[Matrix, tuple[Vector, ...]], method: str = "linear",
+    fill_value: float = float("nan"), rescale: bool = False
+    ) -> Matrix: ...
diff --git a/src/scipy-stubs/signal/__init__.pyi b/src/scipy-stubs/signal/__init__.pyi
index 348b837b06baf089c8faf22e647539ef8766cd87..6cbdb7346fdb107d2742351110b4f0848119899e 100644
--- a/src/scipy-stubs/signal/__init__.pyi
+++ b/src/scipy-stubs/signal/__init__.pyi
@@ -25,8 +25,10 @@ def periodogram(
     detrend: bool = False) -> Tuple[Vector, Vector]: ...
 
 
-Single = Union[Vector, list[float]]
-Double = Union[tuple[Vector, Vector], tuple[list[float], list[float]]]
+Single = Union[Vector, list[float], tuple[float, ...]]
+Double = Union[
+    tuple[Vector, Vector], tuple[list[float], list[float]],
+    tuple[tuple[float, ...], tuple[float, ...]]]
 
 
 @overload
@@ -45,13 +47,15 @@ def savgol_filter(
 
 
 def sosfilt(
-    sos: Single, x: Single, axis: int = -1, zi: Optional[Single] = None,
+    sos: Single, x: Union[Single, Matrix],
+    axis: int = -1, zi: Optional[Single] = None,
     padtype: Optional[str] = "odd", padlen: Optional[int] = None)\
         -> Vector: ...
 
 
 def sosfiltfilt(
-    sos: Single, x: Single, axis: int = -1, zi: Optional[Single] = None,
+    sos: Single, x: Union[Single, Matrix],
+    axis: int = -1, zi: Optional[Single] = None,
     padtype: Optional[str] = "odd", padlen: Optional[int] = None)\
         -> Vector: ...
 
diff --git a/src/skimage-stubs/filters.pyi b/src/skimage-stubs/filters.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..31a5e8bff056cfe3ef5e18d1188606ec5bb4ed3e
--- /dev/null
+++ b/src/skimage-stubs/filters.pyi
@@ -0,0 +1,22 @@
+#!/usr/bin/env python3
+"""
+Typing stubs for skimage.filters.
+"""
+from typing import Optional, Union, Any
+from scientific_plots.types_ import Matrix
+
+
+def butterworth(
+    image: Matrix,
+    cutoff_frequency_ratio: float,
+    order: int = 4,
+    high_pass: bool = False,
+    squared_butterworth: bool = False,
+    npad: Optional[int] = None) -> Matrix: ...
+
+
+def sosfreqz(sos: Any,
+             worN: Optional[Union[int, Vector]] = 512, 
+             whole: bool = False, 
+             fs: Optional[float] = None)\
+	-> tuple[Vector, Vector]: ...
diff --git a/src/sklearn-stubs/ensemble.pyi b/src/sklearn-stubs/ensemble.pyi
new file mode 100644
index 0000000000000000000000000000000000000000..3df757c844b5f668be76a2e41228cf8128f64ba1
--- /dev/null
+++ b/src/sklearn-stubs/ensemble.pyi
@@ -0,0 +1,65 @@
+#!/usr/bin/env python3
+"""
+Typing stubs for sklearn.ensemble.
+"""
+from __future__ import annotations
+
+from typing import Optional, Union, List, Tuple, Dict, TypeVar
+from scientific_plots.types_ import Matrix, Vector as Vector_
+
+from vector_type import Vector  # Assuming Vector is defined in vector_type module
+
+Vector = TypeVar("Vector", bound=Union[Vector_, Matrix])
+
+
+class IsolationForest:
+    def __init__(self, 
+                 n_estimators: int = 100, 
+                 max_samples: Union[int, float, str] = 'auto', 
+                 contamination: Union[float, str] = 'auto', 
+                 max_features: float = 1.0, 
+                 bootstrap: bool = False, 
+                 n_jobs: Optional[int] = None, 
+                 behaviour: str = 'deprecated', 
+                 random_state: Optional[Union[int, np.random.RandomState]] = None, 
+                 verbose: int = 0, 
+                 warm_start: bool = False) -> None: ...
+    
+    def fit(self, 
+            X: Vector, 
+            y: Optional[Vector] = None, 
+            sample_weight: Optional[Vector] = None) -> 'IsolationForest': ...
+    
+    def predict(self, X: Vector) -> Vector: ...
+    
+    def fit_predict(self, 
+                    X: Vector, 
+                    y: Optional[Vector] = None, 
+                    sample_weight: Optional[Vector] = None) -> Vector: ...
+    
+    def decision_function(self, X: Vector) -> Vector: ...
+    
+    def score_samples(self, X: Vector) -> Vector: ...
+    
+    def get_params(self, 
+                   deep: bool = True) -> Dict[str, 
+                                            Union[int, float, str, bool, None]]: ...
+    
+    def set_params(self, **params) -> IsolationForest: ...
+
+    # Additional methods for compatibility with BaseEstimator and OutlierMixin
+    def __getstate__(self) -> dict: ...
+    def __setstate__(self, state: dict) -> None: ...
+
+    # Properties
+    @property
+    def estimators_(self) -> List: ...
+
+    @property
+    def estimators_samples_(self) -> List: ...
+
+    @property
+    def max_samples_(self) -> int: ...
+
+    @property
+    def offset_(self) -> float: ...