+Note you can also specifying more complex pins using distribution properties.
+
+ apt::pin { 'stable':
+ priority => -10,
+ originator => 'Debian',
+ release_version => '3.0',
+ component => 'main',
+ label => 'Debian'
+ }
+
+If you wish to pin a number of packages you may specify the packages as a space
+delimited string using the `packages` attribute or pass in an array of package
+names.
+
+### apt::hold
+
+When you wish to hold a package in Puppet, it should be done by passing in
+'held' as the ensure attribute to the package resource. However, a lot of
+public modules do not take this into account and generally do not work well
+with an ensure of 'held'.
+
+Moreover, when Puppet is told to hold a package, it holds it at the current version installed; there is no way to tell it to both install a specific version **and** hold that version, unless you use an exec resource that wraps `dpkg --set-selections` or `apt-mark`.
+
+At first glance, it seems this issue could also be solved by passing the version required to the ensure attribute---but that only means that Puppet will install that
+version after it processes the package. It does not inform apt that we want
+this package to be held; that is, should another package want to upgrade this one (because of a version requirement in a dependency, for example), we want apt to refuse.
+
+To solve this issue, use apt::hold. Implement this by creating a preferences file with a priority of 1001. Under normal circumstances, this preference will always win. Because the priority is > 1000, apt will maintain the required version, downgrading the current package if necessary.
+
+With this, you can now set a package's ensure attribute to 'latest' but get the version specified by apt::hold:
+
+ apt::hold { 'vim':
+ version => '2:7.3.547-7',
+ }
+
+Alternatively, if you want to hold Vim at version 7.3.*, you can pass in a version with a glob:
+
+ apt::hold { 'vim':
+ version => '2:7.3.*',
+ }
+
+### apt::ppa