diff --git a/cdist/conf/type/__hostname/explorer/hostname_file b/cdist/conf/type/__hostname/explorer/hostname_file
deleted file mode 100755
index 6a00aa9f..00000000
--- a/cdist/conf/type/__hostname/explorer/hostname_file
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/sh
-#
-# 2014 Nico Schottelius (nico-cdist at schottelius.org)
-#
-# 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 .
-#
-#
-# Retrieve the contents of /etc/hostname
-#
-
-# Almost any distribution
-if [ -f /etc/hostname ]; then
- cat /etc/hostname
-# SuSE
-elif [ -f /etc/HOSTNAME ]; then
- cat /etc/HOSTNAME
-fi
diff --git a/cdist/conf/type/__hostname/explorer/hostname_sysconfig b/cdist/conf/type/__hostname/explorer/hostname_sysconfig
deleted file mode 100755
index 4d6b8513..00000000
--- a/cdist/conf/type/__hostname/explorer/hostname_sysconfig
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/sh
-#
-# 2014 Nico Schottelius (nico-cdist at schottelius.org)
-#
-# 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 .
-#
-#
-# Retrieve the contents of /etc/sysconfig/network
-#
-
-if [ -f /etc/sysconfig/network ]; then
- awk -F= '/^HOSTNAME=/ { print $2 }' /etc/sysconfig/network
-fi
diff --git a/cdist/conf/type/__hostname/explorer/persistent_hostname b/cdist/conf/type/__hostname/explorer/persistent_hostname
new file mode 100755
index 00000000..9ec5639b
--- /dev/null
+++ b/cdist/conf/type/__hostname/explorer/persistent_hostname
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# 2019 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
+#
+# 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 .
+#
+#
+# Retrieve the persistent hostname
+#
+
+# Firstly, check hostnamectl if available.
+if command -v hostnamectl >/dev/null
+then
+ hostnamectl status --static && exit 0
+fi
+
+# In case hostnamectl is missing or failed:
+# Fall back to alternative OS-specific approaches.
+case $("$__explorer/os")
+in
+ alpine|archlinux|coreos|debian|devuan|suse|ubuntu)
+ [ -f /etc/hostname ] && cat /etc/hostname
+ ;;
+ suse)
+ [ -f /etc/HOSTNAME ] && cat /etc/HOSTNAME
+ ;;
+ scientific|centos)
+ [ -f /etc/sysconfig/network ] && awk -F= '/^HOSTNAME=/ { print $2 }' /etc/sysconfig/network
+ ;;
+ freebsd)
+ (. /etc/rc.conf && echo "$hostname")
+ ;;
+ openbsd)
+ cat /etc/myname
+ ;;
+ macosx)
+ scutil --get HostName 2>/dev/null
+ ;;
+esac
diff --git a/cdist/conf/type/__hostname/gencode-remote b/cdist/conf/type/__hostname/gencode-remote
index c6779a22..e7f32323 100755
--- a/cdist/conf/type/__hostname/gencode-remote
+++ b/cdist/conf/type/__hostname/gencode-remote
@@ -28,22 +28,14 @@ fi
os=$(cat "$__global/explorer/os")
name_running=$(cat "$__global/explorer/hostname")
-name_config=$(cat "$__object/explorer/hostname_file")
-name_sysconfig=$(cat "$__object/explorer/hostname_sysconfig")
+name_config=$(cat "$__object/explorer/persistent_hostname")
has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl")
################################################################################
# Check if the hostname is already correct
#
-if [ "$name_running" = "$name_should" ]; then
- case "$os" in
- archlinux|debian|suse|ubuntu|devuan|coreos|alpine)
- [ "$name_config" != "$name_should" ] || exit 0
- ;;
- scientific|centos|freebsd|openbsd)
- [ "$name_sysconfig" != "$name_should" ] || exit 0
- ;;
- esac
+if [ "$name_running" = "$name_should" ] && [ ! "$name_config" -o "$name_config" = "$name_should" ]; then
+ exit 0
fi
################################################################################