diff --git a/dbus-broker/default.nix b/dbus-broker/default.nix
index cad66af..eb0eb76 100644
--- a/dbus-broker/default.nix
+++ b/dbus-broker/default.nix
@@ -138,22 +138,15 @@ stdenv.mkDerivation (finalAttrs: {
     "-D=system-console-users=gdm,sddm,lightdm"
   ];
 
-  PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "/usr/lib/systemd/system";
-  PKG_CONFIG_SYSTEMD_SYSTEMDUSERUNITDIR = "/usr/lib/systemd/user";
-  PKG_CONFIG_SYSTEMD_CATALOGDIR = "/usr/lib/systemd/catalog";
+  PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "/lib/systemd/system";
+  PKG_CONFIG_SYSTEMD_SYSTEMDUSERUNITDIR = "/lib/systemd/user";
+  PKG_CONFIG_SYSTEMD_CATALOGDIR = "/lib/systemd/catalog";
 
   preInstall = ''
     export DESTDIR=${placeholder "out"}
   '';
 
-  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
-  '';
+  postInstall = '''';
 
   doCheck = false;
 
diff --git a/flake.nix b/flake.nix
index 221d203..7606d12 100644
--- a/flake.nix
+++ b/flake.nix
@@ -16,7 +16,6 @@
       system:
       let
         pkgs = import nixpkgs { inherit system; };
-        patosPkgs = self.packages.${system};
       in
       {
         packages = {
@@ -38,8 +37,13 @@
           systemd = pkgs.callPackage ./systemd { };
           dbus-broker = pkgs.callPackage ./dbus-broker { };
 
-          mkinitrd = pkgs.callPackage ./utils/mkinitrd.nix { inherit patosPkgs; };
-          qemu-uefi-tpm = pkgs.callPackage ./utils/qemu-uefi-tpm.nix { };
+          qemu-uefi-tpm = pkgs.callPackage ./utils/qemu-uefi-tpm.nix { inherit pkgs; };
+
+          mkinitrd = pkgs.callPackage ./utils/mkinitrd.nix {
+            inherit pkgs;
+            inherit system;
+            inherit self;
+          };
         };
 
         checks = {
diff --git a/glibc/default.nix b/glibc/default.nix
index b5028c0..65bebc3 100644
--- a/glibc/default.nix
+++ b/glibc/default.nix
@@ -1,21 +1,25 @@
 {
+  fetchurl,
   pkgs,
   stdenv,
 
   ...
 }:
 let
-  version = pkgs.glibc.version;
-  src = pkgs.glibc.src;
-  pname = "glibcPatos";
+  version = "2.40";
+  pname = "glibcStandalone";
 in
 stdenv.mkDerivation (finalAttrs: {
   inherit version;
-  inherit src;
-  inherit pname;
+
+  pname = pname;
+
+  src = fetchurl {
+    url = "mirror://gnu/glibc/glibc-${version}.tar.xz";
+    sha256 = "sha256-GaiQF16SY9dI9ieZPeb0sa+c0h4D8IDkv7Oh+sECBaI=";
+  };
 
   enableParallelBuilding = true;
-  dontPatchShebangs = true;
 
   configureFlags = [
     "--prefix=/"
diff --git a/utils/mkinitrd.nix b/utils/mkinitrd.nix
index 0bd234c..6cc08d9 100644
--- a/utils/mkinitrd.nix
+++ b/utils/mkinitrd.nix
@@ -1,6 +1,7 @@
 {
   pkgs,
-  patosPkgs,
+  self,
+  system,
   ...
 }:
 pkgs.writeShellApplication {
@@ -13,61 +14,29 @@ pkgs.writeShellApplication {
   ];
 
   text = ''
-    echo "Building initram disk"
-    mkdir -p root
-    pushd root
+    # shellcheck disable=SC2038 
+    echo "make initrd..."
+    mkdir -p out
 
-    ### create directories
-    mkdir -p etc dev proc sys tmp 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
     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"
@@ -127,7 +96,7 @@ pkgs.writeShellApplication {
     EOF
     chmod 644 ./etc/group
 
-    # FIXME: remove this later (just to get a shell in the initramfs)
+    # FIXME: remove this
     cat <<EOF > usr/lib/systemd/system/demo.service
     [Unit]
     Description=Debug Shell (/bin/sulogin)
@@ -150,12 +119,55 @@ 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
 
-    # FIXME: ELF patching. Is there a better way?
+    # 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????????
     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
-    patchelf --remove-rpath ./usr/lib/ld-linux-x86-64.so.2
+    cp ${
+      self.packages.${system}.glibc.out
+    }/lib/ld-linux-x86-64.so.2 lib/ && patchelf --remove-rpath lib/ld-linux-x86-64.so.2
 
     # strip binaries
     find . -type f -executable -exec strip {} \; 2> /dev/null
@@ -165,6 +177,6 @@ pkgs.writeShellApplication {
     find . -print0 | cpio --null --owner=root:root -o --format=newc | gzip -9 > ../initrd.gz
 
     popd
-    rm -rf root
+    rm -rf out
   '';
 }