diff --git a/cdist/conf/type/__apt_mark/explorer/state b/cdist/conf/type/__apt_mark/explorer/state
new file mode 100644
index 00000000..3b70003a
--- /dev/null
+++ b/cdist/conf/type/__apt_mark/explorer/state
@@ -0,0 +1,27 @@
+#!/bin/sh
+#
+# 2016 Ander Punnar (cdist at kvlt.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/>.
+#
+
+if [ -f "$__object/parameter/name" ]; then
+    name="$(cat "$__object/parameter/name")"
+else
+    name="$__object_id"
+fi
+
+apt-mark showhold | grep -q $name && echo hold || echo unhold
diff --git a/cdist/conf/type/__apt_mark/gencode-remote b/cdist/conf/type/__apt_mark/gencode-remote
new file mode 100644
index 00000000..14505809
--- /dev/null
+++ b/cdist/conf/type/__apt_mark/gencode-remote
@@ -0,0 +1,43 @@
+#!/bin/sh
+#
+# 2016 Ander Punnar (cdist at kvlt.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/>.
+#
+
+if [ -f "$__object/parameter/name" ]; then
+    name="$(cat "$__object/parameter/name")"
+else
+    name="$__object_id"
+fi
+
+state_should="$(cat "$__object/parameter/state")"
+
+state_is="$(cat "$__object/explorer/state")"
+
+if [ "$state_should" = "$state_is" ]; then
+    exit 0
+fi
+
+case "$state_should" in
+    hold|unhold)
+        echo "apt-mark $state_should $name > /dev/null"
+    ;;
+    *)
+        echo "Unknown state: $state_should" >&2
+        exit 1
+    ;;
+esac
diff --git a/cdist/conf/type/__apt_mark/man.rst b/cdist/conf/type/__apt_mark/man.rst
new file mode 100644
index 00000000..7aa2a519
--- /dev/null
+++ b/cdist/conf/type/__apt_mark/man.rst
@@ -0,0 +1,47 @@
+cdist-type__apt_mark(7)
+=======================
+
+NAME
+----
+cdist-type__apt_mark - set package state as 'hold' or 'unhold'
+
+
+DESCRIPTION
+-----------
+See apt-mark(8) for details.
+
+
+REQUIRED PARAMETERS
+-------------------
+state
+   Either "hold" or "unhold".
+
+
+OPTIONAL PARAMETERS
+-------------------
+name
+   If supplied, use the name and not the object id as the package name.
+
+
+EXAMPLES
+--------
+
+.. code-block:: sh
+
+    # hold package
+    __apt_mark quagga --state hold
+    # unhold package
+    __apt_mark quagga --state unhold
+
+
+AUTHORS
+-------
+Ander Punnar <cdist--@--kvlt.ee>
+
+
+COPYING
+-------
+Copyright \(C) 2016 Ander Punnar. 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.
diff --git a/cdist/conf/type/__apt_mark/parameter/optional b/cdist/conf/type/__apt_mark/parameter/optional
new file mode 100644
index 00000000..f121bdbf
--- /dev/null
+++ b/cdist/conf/type/__apt_mark/parameter/optional
@@ -0,0 +1 @@
+name
diff --git a/cdist/conf/type/__apt_mark/parameter/required b/cdist/conf/type/__apt_mark/parameter/required
new file mode 100644
index 00000000..ff72b5c7
--- /dev/null
+++ b/cdist/conf/type/__apt_mark/parameter/required
@@ -0,0 +1 @@
+state
diff --git a/cdist/conf/type/__consul/files/versions/0.7.0/cksum b/cdist/conf/type/__consul/files/versions/0.7.0/cksum
new file mode 100644
index 00000000..3bffeedb
--- /dev/null
+++ b/cdist/conf/type/__consul/files/versions/0.7.0/cksum
@@ -0,0 +1 @@
+695240564 24003648 consul
diff --git a/cdist/conf/type/__consul/files/versions/0.7.0/source b/cdist/conf/type/__consul/files/versions/0.7.0/source
new file mode 100644
index 00000000..ad610fc7
--- /dev/null
+++ b/cdist/conf/type/__consul/files/versions/0.7.0/source
@@ -0,0 +1 @@
+https://releases.hashicorp.com/consul/0.7.0/consul_0.7.0_linux_amd64.zip
diff --git a/cdist/conf/type/__consul/files/versions/0.7.1/cksum b/cdist/conf/type/__consul/files/versions/0.7.1/cksum
new file mode 100644
index 00000000..476bd9f6
--- /dev/null
+++ b/cdist/conf/type/__consul/files/versions/0.7.1/cksum
@@ -0,0 +1 @@
+3128343188 28402769 consul
diff --git a/cdist/conf/type/__consul/files/versions/0.7.1/source b/cdist/conf/type/__consul/files/versions/0.7.1/source
new file mode 100644
index 00000000..6ba2e7bf
--- /dev/null
+++ b/cdist/conf/type/__consul/files/versions/0.7.1/source
@@ -0,0 +1 @@
+https://releases.hashicorp.com/consul/0.7.1/consul_0.7.1_linux_amd64.zip
diff --git a/cdist/conf/type/__package_upgrade_all/gencode-remote b/cdist/conf/type/__package_upgrade_all/gencode-remote
index 9dd3ddf6..3e25f45f 100755
--- a/cdist/conf/type/__package_upgrade_all/gencode-remote
+++ b/cdist/conf/type/__package_upgrade_all/gencode-remote
@@ -24,6 +24,10 @@
 
 type="$__object/parameter/type"
 
+apt_clean="$__object/parameter/apt-clean"
+
+apt_dist_upgrade="$__object/parameter/apt-dist-upgrade"
+
 if [ -f "$type" ]; then
     type="$(cat "$type")"
 else
@@ -48,8 +52,15 @@ case "$type" in
         echo "yum --quiet clean all"
         ;;
     apt)
-        echo $aptget dist-upgrade
-        echo "apt-get --quiet autoclean"
+        if [ -f "$apt_dist_upgrade" ]
+        then echo $aptget dist-upgrade
+        else echo $aptget upgrade
+        fi
+
+        if [ -f "$apt_clean" ]
+        then echo "apt-get --quiet clean"
+        else echo "apt-get --quiet autoclean"
+        fi
         ;;
     pacman)
         echo "pacman --noprogressbar --noconfirm --sync --sysupgrade"
diff --git a/cdist/conf/type/__package_upgrade_all/man.rst b/cdist/conf/type/__package_upgrade_all/man.rst
index 62cbc43d..e9e2b8ce 100644
--- a/cdist/conf/type/__package_upgrade_all/man.rst
+++ b/cdist/conf/type/__package_upgrade_all/man.rst
@@ -28,6 +28,15 @@ type
     * pacman for Arch Linux
 
 
+BOOLEAN PARAMETERS
+------------------
+apt-dist-upgrade
+    Do dist-upgrade instead of upgrade.
+
+apt-clean
+    Clean out the local repository of retrieved package files.
+
+
 EXAMPLES
 --------
 
diff --git a/cdist/conf/type/__package_upgrade_all/parameter/boolean b/cdist/conf/type/__package_upgrade_all/parameter/boolean
new file mode 100644
index 00000000..7a56a34b
--- /dev/null
+++ b/cdist/conf/type/__package_upgrade_all/parameter/boolean
@@ -0,0 +1,2 @@
+apt-clean
+apt-dist-upgrade
diff --git a/cdist/conf/type/__user/gencode-remote b/cdist/conf/type/__user/gencode-remote
index 463fbe49..223d4d46 100755
--- a/cdist/conf/type/__user/gencode-remote
+++ b/cdist/conf/type/__user/gencode-remote
@@ -104,7 +104,7 @@ if [ "$state" = "present" ]; then
        if [ $# -gt 0 ]; then
           echo mod >> "$__messages_out"
           if [ "$os" = "freebsd" ]; then
-             echo pw usermod "$@" "$name"
+             echo pw usermod "$@" -n "$name"
           else
              echo usermod "$@" "$name"
           fi
@@ -125,7 +125,7 @@ if [ "$state" = "present" ]; then
         done
 
        if [ "$os" = "freebsd" ]; then
-          echo pw useradd "$@" "$name"
+          echo pw useradd "$@" -n "$name"
        else
           echo useradd "$@" "$name"
        fi
diff --git a/cdist/config.py b/cdist/config.py
index b0131601..b8d0672c 100644
--- a/cdist/config.py
+++ b/cdist/config.py
@@ -285,6 +285,7 @@ class Config(object):
                 host_fqdn = ''
 
             target_host = (host, host_name, host_fqdn)
+            log.debug("target_host: {}".format(target_host))
 
             local = cdist.exec.local.Local(
                 target_host=target_host,
diff --git a/cdist/core/code.py b/cdist/core/code.py
index cfc1316a..e9e2edf0 100644
--- a/cdist/core/code.py
+++ b/cdist/core/code.py
@@ -100,9 +100,7 @@ class Code(object):
     """
     # target_host is tuple (target_host, target_hostname, target_fqdn)
     def __init__(self, target_host, local, remote):
-        self.target_host = target_host[0]
-        self.target_hostname = target_host[1]
-        self.target_fqdn = target_host[2]
+        self.target_host = target_host
         self.local = local
         self.remote = remote
         self.env = {
diff --git a/docs/changelog b/docs/changelog
index 9519f2b3..b5959d77 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -2,6 +2,11 @@ Changelog
 ---------
 
 next:
+	* Type __consul: add source and cksum files for Consul 0.7.0 and 0.7.1 (Carlos Ortigoza)
+	* Type __user: FreeBSD fix (Kamila Součková)
+	* New type: __apt_mark (Ander Punnar)
+	* Type __package_upgrade_all: do not dist-upgrade by default, add apt-clean and apt-dist-upgrade options  (Ander Punnar)
+	* Core: fix target_host vars (Darko Poljak)
 	* All: Merge install feature from 4.0-pre-not-stable (Darko Poljak)
 
 4.3.2: 2016-10-13