diff --git a/krebs/5pkgs/default.nix b/krebs/5pkgs/default.nix
index 25ba83d8f..616992b95 100644
--- a/krebs/5pkgs/default.nix
+++ b/krebs/5pkgs/default.nix
@@ -22,6 +22,7 @@ rec {
   nq = callPackage ./nq {};
   posix-array = callPackage ./posix-array {};
   pssh = callPackage ./pssh {};
+  passwdqc-utils = callPackage ./passwdqc-utils {};
   Reaktor = callPackage ./Reaktor {};
   realwallpaper = callPackage ./realwallpaper.nix {};
   youtube-tools = callPackage ./youtube-tools {};
diff --git a/krebs/5pkgs/passwdqc-utils/default.nix b/krebs/5pkgs/passwdqc-utils/default.nix
new file mode 100644
index 000000000..0299715ba
--- /dev/null
+++ b/krebs/5pkgs/passwdqc-utils/default.nix
@@ -0,0 +1,27 @@
+{stdenv,pam,fetchurl,...}:
+
+stdenv.mkDerivation rec {
+  name = "passwdqc-utils-${version}";
+  version = "1.3.0";
+  buildInputs = [ pam ];
+  src = fetchurl {
+    url = "http://www.openwall.com/passwdqc/passwdqc-${version}.tar.gz";
+    sha256 = "0l3zbrp4pvah0dz33m48aqlz9nx663cc1fqhnlwr0p853b10la93";
+  };
+  buildTargets = "utils";
+  installFlags= [ "BINDIR=$(out)/bin"
+                  "CONFDIR=$(out)/etc"
+                  "SHARED_LIBDIR=$(out)/lib"
+                  "DEVEL_LIBDIR=$(out)/lib"
+                  "SECUREDIR=$(out)/lib/security"
+                  "INCLUDEDIR=$(out)/include"
+                  "MANDIR=$(out)/man"];
+  installTargets = "install_lib install_utils";
+
+  meta = {
+    description = "passwdqc utils (pwqgen,pwqcheck) and library";
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = [ stdenv.lib.maintainers.makefu ];
+    patforms = stdenv.lib.platforms.linux; # more installFlags must be set for Darwin,Solaris
+  };
+}
diff --git a/makefu/1systems/pnp.nix b/makefu/1systems/pnp.nix
index 7698ea14d..fdc2f0135 100644
--- a/makefu/1systems/pnp.nix
+++ b/makefu/1systems/pnp.nix
@@ -23,6 +23,7 @@
       ## \/ are only plugins, must enable Reaktor explicitly
       ../2configs/Reaktor/stockholmLentil.nix
       ../2configs/Reaktor/simpleExtend.nix
+      ../2configs/Reaktor/random-emoji.nix
       ../2configs/Reaktor/titlebot.nix
 
       ../2configs/exim-retiolum.nix
diff --git a/makefu/2configs/Reaktor/random-emoji.nix b/makefu/2configs/Reaktor/random-emoji.nix
new file mode 100644
index 000000000..b2d99b36b
--- /dev/null
+++ b/makefu/2configs/Reaktor/random-emoji.nix
@@ -0,0 +1,25 @@
+{ config, lib, pkgs, ... }:
+
+with pkgs;
+let
+  rpkg = pkgs.substituteAll( {
+    name="random-emoji";
+    dir= "bin";
+    isExecutable=true;
+    src= ./random-emoji.sh;
+    });
+  rpkg-path = lib.makeSearchPath "bin" (with pkgs; [
+                        coreutils
+                        gnused
+                        gnugrep
+                        curl]);
+in {
+  # TODO: make origin a variable, <- module is generic enough to handle different origins, not only stockholm
+  krebs.Reaktor.extraConfig = ''
+  public_commands.insert(0,{
+    'capname' : "emoji",
+    'pattern' : indirect_pattern.format("emoji"),
+    'argv'    : ["${rpkg}/bin/random-emoji"],
+    'env'     : { 'PATH':'${rpkg-path}' } })
+  '';
+}
diff --git a/makefu/2configs/Reaktor/random-emoji.sh b/makefu/2configs/Reaktor/random-emoji.sh
new file mode 100644
index 000000000..913d615be
--- /dev/null
+++ b/makefu/2configs/Reaktor/random-emoji.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+curl http://emojicons.com/random -s | \
+  grep data-text | \
+  sed -n 's/.*>\(.*\)<\/textarea>/\1/p' | \
+  head -n 1
diff --git a/makefu/2configs/git/cgit-retiolum.nix b/makefu/2configs/git/cgit-retiolum.nix
index 40b51e601..1277a014e 100644
--- a/makefu/2configs/git/cgit-retiolum.nix
+++ b/makefu/2configs/git/cgit-retiolum.nix
@@ -29,6 +29,7 @@ let
     hooks = {
       post-receive = git.irc-announce {
         nick = config.networking.hostName;
+        verbose = config.krebs.build.host.name == "pnp";
         channel = "#retiolum";
         # TODO remove the hardcoded hostname
         server = "cd.retiolum";