diff --git a/docker/master-min/Dockerfile b/docker/master-min/Dockerfile
index 0856ed955f..f045a2da34 100644
--- a/docker/master-min/Dockerfile
+++ b/docker/master-min/Dockerfile
@@ -7,6 +7,9 @@ ENV LANG en_US.utf8
 # see: https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact
 ARG DEBIAN_VERSION
 ARG TOKEN
+ARG WITHOUT_PERL="true"
+ARG WITHOUT_PYTHON="true"
+ARG WITHOUT_JAVA="true"
 
 # By default, install the full set of FreeSWITCH packages.  Specify an alternative with:
 #   --build-arg="FS_META_PACKAGE=freeswitch-meta-vanilla"
@@ -48,12 +51,15 @@ RUN wget --no-verbose --http-user=signalwire --http-password=${TOKEN} \
 
 #Create the new root in a separate layer 
 COPY make_root_fs.sh freeswitch-config.patch /
-RUN sh /make_root_fs.sh
+RUN if [ "$WITHOUT_PERL" = "false" ] ; then sed -i 's/WITHOUT_PERL=.*/WITHOUT_PERL=\"false\"/' make_root_fs.sh; fi && \
+    if [ "$WITHOUT_PYTHON" = "false" ] ; then sed -i 's/WITHOUT_PYTHON=.*/WITHOUT_PYTHON=\"false\"/' make_root_fs.sh; fi && \
+    if [ "$WITHOUT_JAVA" = "false" ] ; then sed -i 's/WITHOUT_JAVA=.*/WITHOUT_JAVA=\"false\"/' make_root_fs.sh; fi && \
+    sh /make_root_fs.sh
 
 FROM scratch
 ENV LANG en_US.utf8
 
-COPY --from=stage /tmp/freeswitch /
+COPY --from=stage /tmp/newroot /
 COPY docker-entrypoint.sh healthcheck.sh sounds_version.txt /
 
 # explicitly set user/group IDs
diff --git a/docker/master-min/make_root_fs.sh b/docker/master-min/make_root_fs.sh
index 24fb9515df..5b169444ec 100755
--- a/docker/master-min/make_root_fs.sh
+++ b/docker/master-min/make_root_fs.sh
@@ -28,8 +28,10 @@
 #  David Heaps <king.dopey.10111@gmail.com>
 #
 
-BUILD_ROOT=/tmp/freeswitch
+BUILD_ROOT=/tmp/newroot
 DEBFILELIST=/tmp/filelist
+PACKAGELIST="libc6 busybox erlang erlang-base ca-certificates openssl gnupg2 passwd curl"
+PACKAGESEARCH="freeswitch"
 DEBFILELIST_BINARY="$DEBFILELIST.binary"
 DEBFILELISTLINKED="$DEBFILELIST.full.linked"
 FULLLIST="$DEBFILELIST.full"
@@ -40,15 +42,6 @@ WITHOUT_PERL="true"
 WITHOUT_PYTHON="true"
 WITHOUT_JAVA="true"
 
-fs_files_debian() {
-    PACKAGES=$(dpkg-query -f '${binary:Package}\n' -W 'freeswitch*')
-    PACKAGES="libc6 busybox erlang erlang-base ca-certificates gnupg2 passwd curl $PACKAGES"
-    for pkg in $PACKAGES
-    do
-        dpkg-query -L "$pkg" 2> /dev/null
-    done
-}
-
 filter_unnecessary_files() {
 # excluded following files and directories recursive
 # /.
@@ -82,6 +75,32 @@ filter_unnecessary_files() {
     fi
 }
 
+fs_files_debian() {
+    PACKAGES="$PACKAGELIST"
+    if [ "$WITHOUT_PERL" = "false" ];then
+        PACKAGES="$PACKAGES perl-base"
+    fi
+    if [ "$WITHOUT_PYTHON" = "false" ];then
+        PACKAGES="$PACKAGES python3 python3.11-minimal"
+    fi
+    if [ "$WITHOUT_JAVA" = "false" ];then
+        PACKAGES="$PACKAGES openjdk-17-jre-headless java-common"
+    fi
+    for search in $PACKAGESEARCH; do
+        NEW_PACKAGES=$(dpkg-query -f '${binary:Package}\n' -W "*$search*")
+        PACKAGES="$NEW_PACKAGES $PACKAGES"
+    done
+
+    for pkg in $PACKAGES
+    do
+        dpkg-query -L "$pkg" >> $DEBFILELIST 2> /dev/null
+    done
+}
+
+dpkg_search_cmd() {
+    dpkg-query -f '\${binary:Package}\n' -W "*$1*"
+}
+
 clean_build() {
     rm -Rf $BUILD_ROOT
     mkdir -p $BUILD_ROOT
@@ -165,21 +184,25 @@ create_folder_structure() {
     do
         #Create the folder it's linking to at the same time, to prevent racing conditions
         FOLDER_TO_CREATE=$(readlink "$f")
+        if [ -n "$BUILD_ROOT$FOLDER_TO_CREATE" ]; then
+            mkdir -p "$BUILD_ROOT$FOLDER_TO_CREATE"
+            chown --reference="$FOLDER_TO_CREATE" "$BUILD_ROOT$FOLDER_TO_CREATE"
+            chmod --reference="$FOLDER_TO_CREATE" "$BUILD_ROOT$FOLDER_TO_CREATE"
+        fi
+
         #Get the parent folder of the link to allow for deep references
         PARENT_FOLDER=$(dirname "$f")
-        if [ -n "$FOLDER_TO_CREATE" ]; then
-            if [ ! -e "$BUILD_ROOT$PARENT_FOLDER/$FOLDER_TO_CREATE" ]; then
-                mkdir -p "$BUILD_ROOT$PARENT_FOLDER/$FOLDER_TO_CREATE"
-                chown --reference="$PARENT_FOLDER/$FOLDER_TO_CREATE" "$BUILD_ROOT$PARENT_FOLDER/$FOLDER_TO_CREATE"
-                chmod --reference="$PARENT_FOLDER/$FOLDER_TO_CREATE" "$BUILD_ROOT$PARENT_FOLDER/$FOLDER_TO_CREATE"
-            fi
-            cp -pP "$f" "$BUILD_ROOT"
-        fi        
+        if [ -n "$BUILD_ROOT$PARENT_FOLDER" ]; then
+            mkdir -p "$BUILD_ROOT$PARENT_FOLDER"
+            chown --reference="$PARENT_FOLDER" "$BUILD_ROOT$PARENT_FOLDER"
+            chmod --reference="$PARENT_FOLDER" "$BUILD_ROOT$PARENT_FOLDER"
+        fi
+        cp -pP "$f" "$BUILD_ROOT$PARENT_FOLDER"
     done
 
     #Create all remaining folders
     cat $FOLDERLIST | while IFS= read -r f
-    do
+    do 
         if [ ! -e "$BUILD_ROOT$f" ]; then
             mkdir -p "$BUILD_ROOT$f"
             chown --reference="$f" "$BUILD_ROOT$f"
@@ -213,14 +236,14 @@ make_new_root() {
     patch -p 1 < /freeswitch-config.patch
     mkdir bin
     busybox --install -s bin
+    cp -rpP /etc/ssl/certs etc/ssl
     mkdir -p etc/pki/tls/certs
-    cp /etc/ssl/certs/ca-certificates.crt etc/ssl/certs/ca-certificates.crt
     cp etc/ssl/certs/ca-certificates.crt etc/pki/tls/certs/ca-bundle.crt
 }
 
 CUR_DIR=$(pwd)
 clean_build
-fs_files_debian > $DEBFILELIST
+fs_files_debian
 sort_filelist $DEBFILELIST
 create_full_file_list
 filter_unnecessary_files