diff --git a/cdist/conf/type/__clean_path/explorer/list b/cdist/conf/type/__clean_path/explorer/list
index 07d38127..58d0b411 100755
--- a/cdist/conf/type/__clean_path/explorer/list
+++ b/cdist/conf/type/__clean_path/explorer/list
@@ -29,7 +29,9 @@ then
     exclude="$( cat "$__object/parameter/exclude" )"
 
     find "$path" -mindepth 1 -maxdepth 1 -regex "$pattern" \
-        -and -not -regex "$exclude"
+        -and -not -regex "$exclude" \
+        \( -type d -printf '%p/\n' , -type f -print \)
 else
-    find "$path" -mindepth 1 -maxdepth 1 -regex "$pattern"
+    find "$path" -mindepth 1 -maxdepth 1 -regex "$pattern" \
+        \( -type d -printf '%p/\n' , -type f -print \)
 fi
diff --git a/cdist/conf/type/__clean_path/gencode-remote b/cdist/conf/type/__clean_path/gencode-remote
index 998a70d8..0157733f 100755
--- a/cdist/conf/type/__clean_path/gencode-remote
+++ b/cdist/conf/type/__clean_path/gencode-remote
@@ -18,31 +18,7 @@
 # along with cdist. If not, see <http://www.gnu.org/licenses/>.
 #
 
-[ ! -s "$__object/explorer/list" ] && exit 0
-
-path="/$__object_id"
-
-pattern="$( cat "$__object/parameter/pattern" )"
-
-if [ -f "$__object/parameter/exclude" ]
-then
-    exclude="$( cat "$__object/parameter/exclude" )"
-
-    echo "find '$path' -mindepth 1 -maxdepth 1 -regex '$pattern'" \
-        "-and -not -regex '$exclude'" \
-        '-exec rm -rf {} \;'
-else
-    echo "find '$path' -mindepth 1 -maxdepth 1 -regex '$pattern'" \
-        '-exec rm -rf {} \;'
-fi
-
-while read -r f
-do
-    echo "removed '$f'" >> "$__messages_out"
-done \
-< "$__object/explorer/list"
-
-if [ -f "$__object/parameter/onchange" ]
+if [ -f "$__object/explorer/list" ] && [ -f "$__object/parameter/onchange" ]
 then
     cat "$__object/parameter/onchange"
 fi
diff --git a/cdist/conf/type/__clean_path/manifest b/cdist/conf/type/__clean_path/manifest
new file mode 100755
index 00000000..065ecb36
--- /dev/null
+++ b/cdist/conf/type/__clean_path/manifest
@@ -0,0 +1,33 @@
+#!/bin/sh -e
+#
+# 2019 Ander Punnar (ander-at-kvlt-dot-ee)
+#
+# This file is part of cdist.
+#
+# cdist is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# cdist is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with cdist. If not, see <http://www.gnu.org/licenses/>.
+#
+
+[ ! -f "$__object/explorer/list" ] && exit 0
+
+for l in $( cat "$__object/explorer/list" )
+do
+    if echo "$l" | grep -Eq '/$'
+    then
+        __directory "$l" --state absent
+        echo "removed directory '$l'" >> "$__messages_out"
+    else
+        __file "$l" --state absent
+        echo "removed file '$l'" >> "$__messages_out"
+    fi
+done