diff --git a/src/pypelines/__init__.py b/src/pypelines/__init__.py
index 93cb8a16d921ea0a188b7948820f78b56468c043..4fd42c1fc9c76df4528b4372bb4ba199baa153d3 100644
--- a/src/pypelines/__init__.py
+++ b/src/pypelines/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.0.59"
+__version__ = "0.0.60"
 
 from . import loggs
 from .pipes import *
diff --git a/src/pypelines/pipelines.py b/src/pypelines/pipelines.py
index a140325219b1ffb4e2a6cdc049f5c11a2e69c962..06e45338d45a896d4a7f89c9b734cdd2722cda65 100644
--- a/src/pypelines/pipelines.py
+++ b/src/pypelines/pipelines.py
@@ -10,7 +10,12 @@ if TYPE_CHECKING:
     from .graphs import PipelineGraph
 
 
-class Pipeline:
+class PipelineType(Protocol):
+
+    def __getattr__(self, name: str) -> "BasePipe": ...
+
+
+class Pipeline(PipelineType):
     pipes: Dict[str, "BasePipe"]
     runner_backend_class = BaseTaskBackend
 
diff --git a/src/pypelines/pipes.py b/src/pypelines/pipes.py
index 0f95a07ec5dbb1cfeb06a9da5baf6109c1c471ea..3393780ca1007035812dc4cb04f98b2cbc4ddb1e 100644
--- a/src/pypelines/pipes.py
+++ b/src/pypelines/pipes.py
@@ -17,7 +17,12 @@ if TYPE_CHECKING:
     from .pipelines import Pipeline
 
 
-class BasePipe(metaclass=ABCMeta):
+class BasePipeType(Protocol):
+
+    def __getattr__(self, name: str) -> "BaseStep": ...
+
+
+class BasePipe(BasePipeType, metaclass=ABCMeta):
     # this class must implements only the logic to link steps together.
 
     default_extra = None
diff --git a/src/pypelines/steps.py b/src/pypelines/steps.py
index e624fc9d384d711d38c774fb415d80b82129e8c8..c9a6ebfe47e2c180df3d975e93c1d4fec6710682 100644
--- a/src/pypelines/steps.py
+++ b/src/pypelines/steps.py
@@ -7,7 +7,7 @@ from pandas import DataFrame
 from dataclasses import dataclass
 
 from types import MethodType
-from typing import Callable, Type, Iterable, Protocol, List, TYPE_CHECKING
+from typing import Callable, Type, Iterable, Protocol, List, TYPE_CHECKING, Any
 
 if TYPE_CHECKING:
     from .pipelines import Pipeline
@@ -244,7 +244,7 @@ class BaseStep:
         """
 
         @wraps(self.pipe.disk_class.load)
-        def wrapper(session, extra=None, strict=False):
+        def wrapper(session, extra=None, strict=False) -> Any:
             """Wrapper function to load disk object with session and optional extra parameters.
 
             Args: