diff --git a/dockerfiles/devenv.Dockerfile b/dockerfiles/devenv.Dockerfile
index 5126d7e02595012496b1a3e8cf3eed8845bb2dae..815f15922376158a7c7fb4b734dc53951e9aa46b 100644
--- a/dockerfiles/devenv.Dockerfile
+++ b/dockerfiles/devenv.Dockerfile
@@ -1,21 +1,27 @@
+# ***********************************************************
+# *              DEVENV Base Image for ROS                  *
+# ***********************************************************
+
 ARG ROS_DISTRO
-FROM osrf/ros:${ROS_DISTRO}-desktop-full
+FROM osrf/ros:${ROS_DISTRO}-desktop-full as devenv
 ENV ROS_DISTRO "${ROS_DISTRO}"
 
 ARG EXT_SHELL=bash
+ENV EXT_SHELL "${EXT_SHELL}"
+ENV SHELL="/bin/${SHELL}"
 RUN echo "Building devenv for ROS" $ROS_DISTRO "with shell" $EXT_SHELL
 
 # Avoid warnings by switching to noninteractive
 ENV DEBIAN_FRONTEND=noninteractive
 
 # Import the key in order to be able to use the packages from the repository
-# RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7E72C5B4111A50084C63C9489E7A9B1D990CF897
 # NOV - 2023
-RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 4B63CF8FDE49746E98FA01DDAD19BAB3CBF125EA
+# RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 4B63CF8FDE49746E98FA01DDAD19BAB3CBF125EA
 
 # Setup environment
 RUN apt-get update && apt-get install -y apt-utils
 
+# Setup locales
 RUN apt-get install -y \
     locales \
     && sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && locale-gen en_US.UTF-8
@@ -59,7 +65,7 @@ RUN apt-get update && \
 # Install zsh if requested
 RUN if [ "$EXT_SHELL" = "zsh" ]; \
     then \
-    apt-get -y install zsh; \
+        apt-get -y install zsh; \
     fi
 
 # Configure system to look for debian packages in the Tecnalia's artifactory repository
@@ -70,12 +76,6 @@ RUN curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt
 RUN sh -c "echo 'yaml https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/rosdistro/rosdep_tecnalia.yaml' \
     >> /etc/ros/rosdep/sources.list.d/20-default.list"
 
-# Create a virtual environment
-# RUN apt-get install -y python3-venv
-# ENV VIRTUAL_ENV=/opt/venv
-# RUN python3 -m venv $VIRTUAL_ENV
-# ENV PATH="$VIRTUAL_ENV/bin:$PATH"
-
 # Copy the requirements.txt file into the container
 WORKDIR /tmp/dependencies/
 COPY /distro_dependencies/* ./
@@ -83,76 +83,112 @@ COPY /distro_dependencies/* ./
 # Install the packages listed in ${ROS_DISTRO}_requirements.txt
 RUN if [ -f "${ROS_DISTRO}_requirements.txt" ]; \
     then \
-    apt-get update && \
-    # Install apt-get packages
-    awk '/^# APT-GET PACKAGES/,/^# PIP PACKAGES/' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs apt-get install -y && \
-    # Install pip packages
-    export PIP_BREAK_SYSTEM_PACKAGES=1 && \
-    awk '/^# PIP PACKAGES/,0' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs -r -n1 pip install -U ;\
-    apt-get clean; \
+        apt-get update && \
+        # Install apt-get packages
+        awk '/^# APT-GET PACKAGES/,/^# PIP PACKAGES/' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs apt-get install -y && \
+        # Install pip packages
+        # workaround for ROS jazzy
+        export PIP_BREAK_SYSTEM_PACKAGES=1 && \
+        awk '/^# PIP PACKAGES/,0' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs -r -n1 pip install -U ;\
+        apt-get clean; \
     fi
 
-RUN rm -rf *
-
-# Install extra packages ws_dependencies
-ARG PACKAGES=none
-COPY /ws_dependencies/* ./
-RUN echo $PACKAGES
-RUN if [ "$PACKAGES" != "none" ]; \
-    then \
-    if [ -f "${PACKAGES}" ]; \
-    then \
-    # Install apt-get packages
-    apt-get update && \
-    awk '/^# APT-GET PACKAGES/,/^# PIP PACKAGES/' ${PACKAGES} | grep -v '^#' | xargs apt-get install -y && \
-    # Install pip packages
-    export PIP_BREAK_SYSTEM_PACKAGES=1 && \
-    awk '/^# PIP PACKAGES/,0' ${PACKAGES} | grep -v '^#' | xargs -r -n1 pip install -U ;\
-    apt-get clean; \
-    fi \
-    fi
-
-RUN rm -rf *
-
 # Install extra libs from .deb files
 WORKDIR /tmp/srcs/
 COPY /extra_libs/* ./
 
-# Enviroment tools based on ubuntu version
+# Install the packages listed in common_libs.txt
 RUN if [ -f "common_libs.txt" ]; \
     then \
-    grep -v '^#' common_libs.txt | xargs wget \
-    && dpkg -i *.deb; \
+        # Download .deb files from common_libs.txt using wget
+        grep -v '^#' common_libs.txt | xargs wget \
+        # Install .deb files
+        && dpkg -i *.deb; \
     fi
 
+# Install notify-osd
 RUN apt-get --reinstall install -y libnotify-bin notify-osd
+RUN rm -rf *
 
-# RUN PIP_BREAK_SYSTEM_PACKAGES=1 pip install git+https://github.com/isl-org/Open3D.git
+# Update base image
+RUN apt-get update \
+    && apt-get -y upgrade \
+    && apt-get -y autoremove \
+    && apt-get -y autoclean
+
+# Copy entrypoint
+COPY ./ros_entrypoint.sh /
+RUN chmod a+x /ros_entrypoint.sh
+
+# Set running in docker for zsh powerlevel10k
+ENV RUNNING_IN_DOCKER true
+
+# Set extra environment variables for ROS2
+ENV ROS_LOCALHOST_ONLY=1
+ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
+
+# Define entrypoint and command
+ENTRYPOINT ["/ros_entrypoint.sh"]
+CMD $EXT_SHELL
+
+# Switch back to dialog for any ad-hoc use of apt-get
+ENV DEBIAN_FRONTEND=
+
+# ***********************************************************
+# *                   WORKSPACE EXTENDED                    *
+# ***********************************************************
+
+# Use devenv as base image
+FROM devenv as workspace-extended
+
+# Avoid warnings by switching to noninteractive
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Install extra packages ws_dependencies
+ARG PACKAGES=none
+WORKDIR /tmp/dependencies/
+COPY /ws_dependencies/* ./
+RUN if [ "$PACKAGES" != "none" ]; \
+    then \
+        if [ -f "${PACKAGES}" ]; \
+        then \
+            # Install apt-get packages
+            apt-get update && \
+            awk '/^# APT-GET PACKAGES/,/^# PIP PACKAGES/' ${PACKAGES} | grep -v '^#' | xargs apt-get install -y && \
+            # Install pip packages
+            export PIP_BREAK_SYSTEM_PACKAGES=1 && \
+            awk '/^# PIP PACKAGES/,0' ${PACKAGES} | grep -v '^#' | xargs -r -n1 pip install -U ;\
+            apt-get clean; \
+        fi \
+    fi
+
+# Install open3d from source workaround in jazzy
 RUN if [ "$ROS_DISTRO" = "jazzy" ]; \
     then \
         PIP_BREAK_SYSTEM_PACKAGES=1 pip install -U -f https://www.open3d.org/docs/latest/getting_started.html --only-binary open3d open3d; \
     fi
 
-ARG PEAK_DRIVER=install
+# Install Peak driver
+ARG PEAK_DRIVER=none
 RUN if [ "$PEAK_DRIVER" = "install" ]; \
     then \
-    apt-get update && apt-get install -y udev libpopt-dev linux-headers-$(uname -r) \
-    && wget https://www.peak-system.com/fileadmin/media/linux/files/peak-linux-driver-8.18.0.tar.gz \
-    # && wget https://www.peak-system.com/quick/PEAK-Linux-Driver -O peak-linux-driver.tar.gz \
-    && wget https://www.peak-system.com/quick/BasicLinux -O PCAN-Basic_Linux.tar.gz \
-    && tar -xvf peak-linux-driver-8.18.0.tar.gz \
-    && cd peak-linux-driver-8.18.0 \
-    && make clean && make install || echo 'make failed but move forward'\
-    && cd .. \
-    && tar -xvf PCAN-Basic_Linux.tar.gz \
-    && cd PCAN-Basic_Linux-4.9.0.7/libpcanbasic \
-    && make clean && make install || echo 'make failed but move forward';\
+        apt-get update && apt-get install -y udev libpopt-dev linux-headers-$(uname -r) \
+        && wget https://www.peak-system.com/fileadmin/media/linux/files/peak-linux-driver-8.18.0.tar.gz \
+        # && wget https://www.peak-system.com/quick/PEAK-Linux-Driver -O peak-linux-driver.tar.gz \
+        && wget https://www.peak-system.com/quick/BasicLinux -O PCAN-Basic_Linux.tar.gz \
+        && tar -xvf peak-linux-driver-8.18.0.tar.gz \
+        && cd peak-linux-driver-8.18.0 \
+        && make clean && make install || echo 'make failed but move forward'\
+        && cd .. \
+        && tar -xvf PCAN-Basic_Linux.tar.gz \
+        && cd PCAN-Basic_Linux-4.9.0.7/libpcanbasic \
+        && make clean && make install || echo 'make failed but move forward';\
     fi
 
 RUN rm -rf *
 
 # Update this date to re-run the image final update
-LABEL image.date=30-10-2024
+LABEL image.date=06-11-2024
 
 # Update final image
 RUN apt-get update \
@@ -160,41 +196,5 @@ RUN apt-get update \
     && apt-get -y autoremove \
     && apt-get -y autoclean
 
-# Set entrypoint
-COPY ./ros_entrypoint.sh /
-RUN chmod a+x /ros_entrypoint.sh
-
-ENV EXT_SHELL "${EXT_SHELL}"
-ENV RUNNING_IN_DOCKER true
-
 # Switch back to dialog for any ad-hoc use of apt-get
 ENV DEBIAN_FRONTEND=
-
-# Enable localhost only ROS2
-ENV ROS_LOCALHOST_ONLY=1
-ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
-
-ARG SHELL=/bin/bash
-ENV SHELL="${SHELL}"
-
-# ARG USERNAME=danil
-# ARG USER_UID=1000
-# ARG USER_GID=$USER_UID
-
-# # Delete user if it exists in container (e.g Ubuntu Noble: ubuntu)
-# RUN if id -u $USER_UID ; then userdel `id -un $USER_UID` ; fi
-
-# # Create the user
-# RUN groupadd --gid $USER_GID $USERNAME \
-#     && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
-#     #
-#     # [Optional] Add sudo support. Omit if you don't need to install software after connecting.
-#     && apt-get update \
-#     && apt-get install -y sudo \
-#     && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
-#     && chmod 0440 /etc/sudoers.d/$USERNAME
-
-# USER ${USERNAME}
-
-ENTRYPOINT ["/ros_entrypoint.sh"]
-CMD $EXT_SHELL