diff --git a/quasar-network.cabal b/quasar-network.cabal
index c7f3448bf3141967ee6fd5611e7e117263698586..baa3650ba27c454728029edd3539d14b35e8db5c 100644
--- a/quasar-network.cabal
+++ b/quasar-network.cabal
@@ -95,6 +95,7 @@ library
   exposed-modules:
     Quasar.Network
     Quasar.Network.Connection
+    Quasar.Network.Exception
     Quasar.Network.Multiplexer
     Quasar.Network.Runtime
     Quasar.Network.Runtime.Observable
@@ -107,9 +108,10 @@ test-suite quasar-network-test
   import: shared-executable-properties
   type: exitcode-stdio-1.0
   build-depends:
+    QuickCheck,
     hspec,
     quasar-network,
-    QuickCheck
+    stm,
   main-is: Spec.hs
   other-modules:
     Quasar.NetworkSpec
diff --git a/src/Quasar/Network/Exception.hs b/src/Quasar/Network/Exception.hs
new file mode 100644
index 0000000000000000000000000000000000000000..97e822c55a3ae9dbdbcdfe275fcdbcf4a23672b6
--- /dev/null
+++ b/src/Quasar/Network/Exception.hs
@@ -0,0 +1,22 @@
+module Quasar.Network.Exception (
+  PackedException(..), packException, unpackException
+) where
+
+import Control.Exception
+import Data.Binary (Binary(..))
+import Quasar.Prelude
+
+data PackedException = PackedAnyException AnyException
+  deriving stock (Show, Eq, Generic)
+  deriving anyclass Binary
+
+data AnyException = AnyException String
+  deriving stock (Show, Eq, Generic)
+  deriving anyclass (Binary, Exception)
+
+
+packException :: Exception e => e -> PackedException
+packException ex = PackedAnyException $ AnyException $ displayException ex
+
+unpackException :: PackedException -> SomeException
+unpackException (PackedAnyException ex) = toException ex