diff --git a/dbus-broker/default.nix b/dbus-broker/default.nix
index eb0eb76..cad66af 100644
--- a/dbus-broker/default.nix
+++ b/dbus-broker/default.nix
@@ -138,15 +138,22 @@ stdenv.mkDerivation (finalAttrs: {
     "-D=system-console-users=gdm,sddm,lightdm"
   ];
 
-  PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "/lib/systemd/system";
-  PKG_CONFIG_SYSTEMD_SYSTEMDUSERUNITDIR = "/lib/systemd/user";
-  PKG_CONFIG_SYSTEMD_CATALOGDIR = "/lib/systemd/catalog";
+  PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "/usr/lib/systemd/system";
+  PKG_CONFIG_SYSTEMD_SYSTEMDUSERUNITDIR = "/usr/lib/systemd/user";
+  PKG_CONFIG_SYSTEMD_CATALOGDIR = "/usr/lib/systemd/catalog";
 
   preInstall = ''
     export DESTDIR=${placeholder "out"}
   '';
 
-  postInstall = '''';
+  postInstall = ''
+    mkdir -p $out/usr/share
+    cp -Pr ${pkgs.dbus.out}/share/* $out/usr/share/
+    cp ${pkgs.dbus.out}/etc/systemd/system/dbus.socket $out/usr/lib/systemd/system/
+    find $out/usr/share/ -type d -exec chmod 755 {} \;
+    sed -i 's#/nix/store.*/share#/usr/share#' $out/usr/share/xml/dbus-1/catalog.xml
+    sed -i 's#/nix/store.*/libexec#/usr/bin#' $out/usr/share/dbus-1/system.conf
+  '';
 
   doCheck = false;
 
diff --git a/flake.nix b/flake.nix
index 7606d12..221d203 100644
--- a/flake.nix
+++ b/flake.nix
@@ -16,6 +16,7 @@
       system:
       let
         pkgs = import nixpkgs { inherit system; };
+        patosPkgs = self.packages.${system};
       in
       {
         packages = {
@@ -37,13 +38,8 @@
           systemd = pkgs.callPackage ./systemd { };
           dbus-broker = pkgs.callPackage ./dbus-broker { };
 
-          qemu-uefi-tpm = pkgs.callPackage ./utils/qemu-uefi-tpm.nix { inherit pkgs; };
-
-          mkinitrd = pkgs.callPackage ./utils/mkinitrd.nix {
-            inherit pkgs;
-            inherit system;
-            inherit self;
-          };
+          mkinitrd = pkgs.callPackage ./utils/mkinitrd.nix { inherit patosPkgs; };
+          qemu-uefi-tpm = pkgs.callPackage ./utils/qemu-uefi-tpm.nix { };
         };
 
         checks = {
diff --git a/glibc/default.nix b/glibc/default.nix
index 65bebc3..b5028c0 100644
--- a/glibc/default.nix
+++ b/glibc/default.nix
@@ -1,25 +1,21 @@
 {
-  fetchurl,
   pkgs,
   stdenv,
 
   ...
 }:
 let
-  version = "2.40";
-  pname = "glibcStandalone";
+  version = pkgs.glibc.version;
+  src = pkgs.glibc.src;
+  pname = "glibcPatos";
 in
 stdenv.mkDerivation (finalAttrs: {
   inherit version;
-
-  pname = pname;
-
-  src = fetchurl {
-    url = "mirror://gnu/glibc/glibc-${version}.tar.xz";
-    sha256 = "sha256-GaiQF16SY9dI9ieZPeb0sa+c0h4D8IDkv7Oh+sECBaI=";
-  };
+  inherit src;
+  inherit pname;
 
   enableParallelBuilding = true;
+  dontPatchShebangs = true;
 
   configureFlags = [
     "--prefix=/"
diff --git a/utils/mkinitrd.nix b/utils/mkinitrd.nix
index 6cc08d9..0bd234c 100644
--- a/utils/mkinitrd.nix
+++ b/utils/mkinitrd.nix
@@ -1,7 +1,6 @@
 {
   pkgs,
-  self,
-  system,
+  patosPkgs,
   ...
 }:
 pkgs.writeShellApplication {
@@ -14,29 +13,61 @@ pkgs.writeShellApplication {
   ];
 
   text = ''
-    # shellcheck disable=SC2038 
-    echo "make initrd..."
-    mkdir -p out
+    echo "Building initram disk"
+    mkdir -p root
+    pushd root
 
-    # copy systemd
-    cp -Pr ${self.packages.${system}.systemd.out}/* out/
-    pushd out
-
-    find . -type d -exec chmod 755 {} \;
-
-    # Copy kernel modules
-    cp -Pr ${self.packages.${system}.kernel.kernel}/lib/modules ./usr/lib/
-    find usr/lib/modules -type d -exec chmod 755 {} \;
-
-    mkdir -p dev proc sys tmp root
+    ### create directories
+    mkdir -p etc dev proc sys tmp root
     ln -sf usr/bin bin
     ln -sf usr/bin sbin
     ln -sf usr/lib lib
     ln -sf usr/lib lib64
-
     ln -sf ../proc/self/mounts etc/mtab
     ln -sf ../usr/lib/systemd/systemd init
 
+    ### install systemd
+    cp -Pr ${patosPkgs.systemd.out}/* ./
+    find . -type d -exec chmod 755 {} \;
+    rm -rf ./usr/include
+    rm -rf ./usr/sbin
+    # set default target to basic
+    mkdir usr/lib/systemd/system/basic.target.wants
+    ln -sf basic.target usr/lib/systemd/system/default.target
+    # remove first boot
+    rm -f usr/lib/systemd/system/sysinit.target.wants/systemd-firstboot.service
+    # remove vconsole setup
+    rm -f usr/lib/udev/rules.d/90-vconsole.rules
+
+    ### install PatOS glibc
+    cp -Pr ${patosPkgs.glibc.out}/lib/*.so* ./usr/lib/
+
+    ### install kernel modules
+    cp -Pr ${patosPkgs.kernel.kernel}/lib/modules ./usr/lib/
+    find usr/lib/modules -type d -exec chmod 755 {} \;
+
+    ### install busybox
+    cp ${pkgs.busybox.out}/bin/busybox ./usr/bin/
+    usr/bin/busybox --list | xargs -I {} ln -sf busybox usr/bin/{}
+
+    ### install dbus broker
+    cp -r ${patosPkgs.dbus-broker.out}/* ./
+    ln -sf ../dbus-broker.service usr/lib/systemd/system/basic.target.wants/dbus.service
+    ln -sf ../dbus.socket usr/lib/systemd/system/sockets.target.wants/dbus.socket
+
+    ### install lib kmod
+    cp -P ${pkgs.kmod.lib}/lib/* ./usr/lib
+    cp -P ${pkgs.kmod.out}/bin/* ./usr/bin
+
+    ### install libbpf
+    cp -P ${pkgs.libbpf.out}/lib/libbpf* ./usr/lib
+
+    ### Find and install all shared libs
+    find . -type f -executable -exec ldd {} \; 2> /dev/null | awk '{print $3}' | grep -v systemd | grep -v glibc | sort -u | xargs cp -t usr/lib
+    find . -type f -executable -exec chmod 755 {} \;
+
+
+    ### Create needed files
     echo patos > ./etc/hostname
     cat <<EOF > ./etc/os-release
     NAME="PatOS"
@@ -96,7 +127,7 @@ pkgs.writeShellApplication {
     EOF
     chmod 644 ./etc/group
 
-    # FIXME: remove this
+    # FIXME: remove this later (just to get a shell in the initramfs)
     cat <<EOF > usr/lib/systemd/system/demo.service
     [Unit]
     Description=Debug Shell (/bin/sulogin)
@@ -119,55 +150,12 @@ pkgs.writeShellApplication {
     [Install]
     WantedBy=basic.target
     EOF
-    mkdir usr/lib/systemd/system/basic.target.wants
     ln -sf ../demo.service usr/lib/systemd/system/basic.target.wants/demo.service
 
-    # set default target
-    ln -sf basic.target usr/lib/systemd/system/default.target
-    # remove first boot
-    rm -f usr/lib/systemd/system/sysinit.target.wants/systemd-firstboot.service
-    # remove vconsole setup
-    rm -f usr/lib/udev/rules.d/90-vconsole.rules
-
-    # install busybox
-    cp ${pkgs.busybox.out}/bin/busybox usr/bin/
-    usr/bin/busybox --list | xargs -I {} ln -sf busybox usr/bin/{}
-
-    # install dbus broker
-    cp ${self.packages.${system}.dbus-broker.out}/usr/bin/* usr/bin
-    cp ${self.packages.${system}.dbus-broker.out}/lib/systemd/system/* usr/lib/systemd/system
-    cp -Pr ${pkgs.dbus.out}/share/* usr/share/
-    find usr/share/ -type d -exec chmod 755 {} \;
-    sed -i 's#/nix/store.*/share#/usr/share#' usr/share/xml/dbus-1/*
-    sed -i 's#/nix/store.*/libexec#/usr/bin#' usr/share/dbus-1/system.conf
-
-    # enable dbus
-    ln -sf ../dbus-broker.service usr/lib/systemd/system/basic.target.wants/dbus.service
-
-    cat <<EOF > usr/lib/systemd/system/dbus.socket
-    [Unit]
-    Description=D-Bus System Message Bus Socket
-
-    [Socket]
-    ListenStream=/run/dbus/system_bus_socket
-    EOF
-    ln -sf ../dbus.socket usr/lib/systemd/system/sockets.target.wants/dbus.socket
-
-    # install lib kmod
-    cp -P ${pkgs.kmod.lib}/lib/* ./usr/lib
-    cp -P ${pkgs.kmod.out}/bin/* ./usr/bin
-    cp -P ${pkgs.libbpf.out}/lib/libbpf* ./usr/lib
-
-    # get shared libs
-    find . -type f -executable -exec ldd {} \; 2> /dev/null | awk '{print $3}' | grep -v systemd | sort -u | xargs cp -t usr/lib
-    find . -type f -executable -exec chmod 755 {} \;
-
-    # FIXME: hacky(?) ELF patching. Is there a better way????????
+    # FIXME: ELF patching. Is there a better way?
     find . -type f -executable -exec patchelf --set-rpath /lib:/usr/lib:/usr/lib/systemd {} \; 2> /dev/null
     find . -type f -executable -exec patchelf --set-interpreter /lib/ld-linux-x86-64.so.2 {} \; 2> /dev/null
-    cp ${
-      self.packages.${system}.glibc.out
-    }/lib/ld-linux-x86-64.so.2 lib/ && patchelf --remove-rpath lib/ld-linux-x86-64.so.2
+    patchelf --remove-rpath ./usr/lib/ld-linux-x86-64.so.2
 
     # strip binaries
     find . -type f -executable -exec strip {} \; 2> /dev/null
@@ -177,6 +165,6 @@ pkgs.writeShellApplication {
     find . -print0 | cpio --null --owner=root:root -o --format=newc | gzip -9 > ../initrd.gz
 
     popd
-    rm -rf out
+    rm -rf root
   '';
 }