diff --git a/default.nix b/default.nix
index 1dfac4043e31cbfec742f1d5f7ed7a2eda6caeae..82a6921dfb97db8f314c6cc378bc18f67fda7e03 100644
--- a/default.nix
+++ b/default.nix
@@ -1,7 +1,8 @@
 { pkgs ? import <nixpkgs> {}, haskellPackages ? pkgs.haskellPackages, args ? {} }:
 
 let
-  quasar-wayland = haskellPackages.callCabal2nix "quasar-wayland" ./. args;
+  #quasar-wayland = haskellPackages.callCabal2nix "quasar-wayland" ./. args;
+  quasar-wayland = pkgs.haskell.packages.ghc921.callCabal2nix "quasar-wayland" ./. args;
 
 in
   if pkgs.lib.inNixShell then quasar-wayland.env else quasar-wayland
diff --git a/flake.lock b/flake.lock
index 599e5dbc9d86de7944a18d8ead209af8a4807ee5..d7a8003b54af7df66fbaab7fd53ac453253a73e5 100644
--- a/flake.lock
+++ b/flake.lock
@@ -2,11 +2,11 @@
   "nodes": {
     "nixpkgs": {
       "locked": {
-        "lastModified": 1635403963,
-        "narHash": "sha256-0actzfzBAXvvDJ/EvPSGbtCPXUwSObQrcq0RpsPWZgA=",
+        "lastModified": 1638110343,
+        "narHash": "sha256-hQaow8sGPyUrXgrqgDRsfA+73uR0vms2goTQNxIAaRQ=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "2deb07f3ac4eeb5de1c12c4ba2911a2eb1f6ed61",
+        "rev": "942eb9a335b4cd22fa6a7be31c494e53e76f5637",
         "type": "github"
       },
       "original": {
diff --git a/quasar-wayland.cabal b/quasar-wayland.cabal
index 2acb8c1f0ada5ffeb70dd0e337da8ea85225b03b..1c5bdc355092d9da80b3958ad7bd94cac1f6422e 100644
--- a/quasar-wayland.cabal
+++ b/quasar-wayland.cabal
@@ -41,6 +41,7 @@ common shared-properties
     MultiParamTypeClasses
     NamedFieldPuns
     NoImplicitPrelude
+    OverloadedRecordDot
     OverloadedStrings
     PolyKinds
     RankNTypes
@@ -52,23 +53,13 @@ common shared-properties
     TypeFamilies
     TypeOperators
     ViewPatterns
-    -- Required for the record-dot-preprocessor plugin
-    DuplicateRecordFields
-    TypeApplications
-    FlexibleContexts
-    DataKinds
-    MultiParamTypeClasses
-    TypeSynonymInstances
-    FlexibleInstances
-    UndecidableInstances
-    GADTs
   default-language: Haskell2010
   ghc-options:
-    -fplugin=RecordDotPreprocessor
     -Weverything
     -Wno-all-missed-specialisations
-    -Wno-missing-safe-haskell-mode
     -Wno-missing-import-lists
+    -Wno-missing-kind-signatures
+    -Wno-missing-safe-haskell-mode
     -Wno-unsafe
     -Werror=incomplete-patterns
     -Werror=missing-fields
@@ -107,9 +98,6 @@ library
     utf8-string,
     stm,
     xml,
-    -- required for record-dot-preprocessor
-    record-dot-preprocessor,
-    record-hasfield,
   hs-source-dirs:
     src
 
@@ -118,9 +106,6 @@ executable quasar-wayland-example
   build-depends:
     quasar,
     quasar-wayland,
-    -- required for record-dot-preprocessor
-    record-dot-preprocessor,
-    record-hasfield,
   main-is: Main.hs
   hs-source-dirs:
     example
@@ -133,9 +118,6 @@ test-suite quasar-wayland-test
     --QuickCheck,
     hspec,
     --quasar-wayland,
-    -- required for record-dot-preprocessor
-    record-dot-preprocessor,
-    record-hasfield,
   main-is: Spec.hs
   other-modules:
     --Quasar.TemplateSpec
diff --git a/src/Quasar/Wayland/Protocol/Core.hs b/src/Quasar/Wayland/Protocol/Core.hs
index 8668bee36a81e2ada0295b61842d01621b37a061..e4cff7c44567f2c0718ddf15ebf6e3176e0e0f26 100644
--- a/src/Quasar/Wayland/Protocol/Core.hs
+++ b/src/Quasar/Wayland/Protocol/Core.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE DeriveLift #-}
+{-# LANGUAGE UndecidableInstances #-}
 
 module Quasar.Wayland.Protocol.Core (
   ObjectId,
@@ -600,7 +601,7 @@ sendMessage object message = do
       putWord32host $ (fromIntegral msgSize `shiftL` 16) .|. fromIntegral opcode
 
 objectSendMessage :: forall s i. IsInterfaceSide s i => Object s i -> WireUp s i -> STM ()
-objectSendMessage object message = runProtocolM (objectProtocol object) $ sendMessage object message
+objectSendMessage object message = runProtocolM object.objectProtocol $ sendMessage object message
 
 
 receiveMessages :: IsSide s => ProtocolM s ()