diff --git a/README.md b/README.md
deleted file mode 100644
--- a/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-<!-- [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/lschoe/mpyc/master)
-[![Travis CI](https://app.travis-ci.com/lschoe/mpyc.svg)](https://app.travis-ci.com/lschoe/mpyc)
-[![codecov](https://codecov.io/gh/lschoe/mpyc/branch/master/graph/badge.svg)](https://codecov.io/gh/lschoe/mpyc)
-[![Read the Docs](https://readthedocs.org/projects/mpyc/badge/)](https://mpyc.readthedocs.io)
-[![PyPI](https://img.shields.io/pypi/v/mpyc.svg)](https://pypi.org/project/mpyc/) -->
-
-# hMPC Multiparty Computation in Haskell
-
-This hMPC library, written in the functional language Haskell, serves as a counterpart to the original [MPyC](https://github.com/lschoe/mpyc) library, written in the imperative language Python and developed by Berry Schoenmakers.
-
-hMPC supports secure *m*-party computation tolerating a dishonest minority of up to *t* passively corrupt parties,
-where *m &ge; 1* and *0 &le; t &lt; m/2*. The underlying cryptographic protocols are based on threshold secret sharing over finite
-fields (using Shamir's threshold scheme and optionally pseudorandom secret sharing).
-
-The details of the secure computation protocols are mostly transparent due to the use of sophisticated operator overloading
-combined with asynchronous evaluation of the associated protocols.
-
-## Documentation
-
-See `demos` for Haskell programs with lots of example code. See `docs/basics.rst` for a basic secure computation example in Haskell.
-
-The initial reseach is part of a master's graduation project. For further reading, refer to the complementary master's thesis: [Multiparty Computation in Haskell: From MPyC to hMPC](https://research.tue.nl/en/studentTheses/multiparty-computation-in-haskell).
-
-
-Original Python MPyC documentation:
-
-[Read the Docs](https://mpyc.readthedocs.io/) for `Sphinx`-based documentation, including an overview of the `demos`.
-
-The [MPyC homepage](https://www.win.tue.nl/~berry/mpyc/) has some more info and background.
-<!-- [GitHub Pages](https://lschoe.github.io/mpyc/) for `pydoc`-based documentation. -->
-
-
-
-<!-- ## Installation -->
-
-<!-- Pure Python, no dependencies. Python 3.9+ (following [NumPy's deprecation policy](https://numpy.org/neps/nep-0029-deprecation_policy.html#support-table)).
-
-Run `pip install .` in the root directory (containing file `setup.py`).\
-Or, run `pip install -e .`, if you want to edit the MPyC source files.
-
-Use `pip install numpy` to enable support for secure NumPy arrays in MPyC, along with vectorized implementations.
-
-Use `pip install gmpy2` to run MPyC with the package [gmpy2](https://pypi.org/project/gmpy2/) for considerably better performance.
-
-Use `pip install uvloop` (or `pip install winloop` on Windows) to replace Python's default asyncio event loop in MPyC for generally improved performance. -->
-
-<!-- ### Some Tips -->
-
-<!-- - Try `run-all.sh` or `run-all.bat` in the `demos` directory to have a quick look at all pure Python demos.
-Demos `bnnmnist.py` and `cnnmnist.py` require [NumPy](https://www.numpy.org/), demo `kmsurvival.py` requires
-[pandas](https://pandas.pydata.org/), [Matplotlib](https://matplotlib.org/), and [lifelines](https://pypi.org/project/lifelines/),
-and demo `ridgeregression.py` (and therefore demo `multilateration.py`) even require [Scikit-learn](https://scikit-learn.org/).\
-Try `np-run-all.sh` or `np-run-all.bat` in the `demos` directory to run all Python demos employing MPyC's secure arrays.
-Major speedups are achieved due to the reduced overhead of secure arrays and vectorized processing throughout the
-protocols. -->
-
-<!-- - To use the [Jupyter](https://jupyter.org/) notebooks `demos\*.ipynb`, you need to have Jupyter installed,
-e.g., using `pip install jupyter`. An interesting feature of Jupyter is the support of top-level `await`.
-For example, instead of `mpc.run(mpc.start())` you can simply use `await mpc.start()` anywhere in
-a notebook cell, even outside a coroutine.\
-For Python, you also get top-level `await` by running `python -m asyncio` to launch a natively async REPL.
-By running `python -m mpyc` instead you even get this REPL with the MPyC runtime preloaded! -->
-
-<!-- - Directory `demos\.config` contains configuration info used to run MPyC with multiple parties.
-The file `gen.bat` shows how to generate fresh key material for SSL. To generate SSL key material of your own, first run
-`pip install cryptography` (alternatively, run `pip install pyOpenSSL`). -->
-
-Copyright &copy; 2024 Nick van Gils
diff --git a/app/Runtime.hs b/app/Runtime.hs
--- a/app/Runtime.hs
+++ b/app/Runtime.hs
@@ -17,9 +17,11 @@
 import Data.List.Split
 import Data.List
 import Data.Bits
+import Data.Function
 import Text.Printf
 import System.Info (os)
 import Control.Concurrent
+import Control.Monad
 import Control.Monad.State
 import Asyncoro
 import System.Process
diff --git a/hMPC.cabal b/hMPC.cabal
--- a/hMPC.cabal
+++ b/hMPC.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hMPC
-version:        0.1.0.0
+version:        0.1.0.1
 synopsis:       Multiparty Computation in Haskell
 description:    hMPC is a Haskell package for secure multiparty computation (MPC).
                 .
@@ -35,7 +35,6 @@
 license-file:   LICENSE
 build-type:     Simple
 extra-source-files:
-    README.md
     CHANGELOG.md
 
 source-repository head
@@ -61,21 +60,21 @@
   build-depends:
       base >=4.7 && <5
     , binary >=0.8.8 && <0.9
-    , bytestring >=0.10.12 && <0.11
+    , bytestring >=0.10.12 && <0.13
     , cereal >=0.5.8 && <0.6
-    , containers >=0.6.4 && <0.7
-    , hashable >=1.3.5.0 && <1.5
+    , containers >=0.6.4 && <0.8
+    , hashable >=1.3.5.0 && <1.6
     , hgmp >=0.1.2 && <0.2
     , hslogger >=1.3.1 && <1.4
-    , lens >=5.0.1 && <5.3
-    , mtl >=2.2.2 && <2.3
-    , network >=3.1.2.7 && <3.2
+    , lens >=5.0.1 && <5.4
+    , mtl >=2.2.2 && <2.4
+    , network >=3.1.2.7 && <3.3
     , optparse-applicative >=0.16.1.0 && <0.19
     , process >=1.6.13 && <1.7
     , random >=1.2.1 && <1.3
     , split >=0.2.3.4 && <0.3
     , stm >=2.5.0 && <2.6
-    , time >=1.9.3 && <1.10
+    , time >=1.9.3 && <1.15
     , vector >=0.12.3.1 && <0.14
   default-language: Haskell2010
 
@@ -89,22 +88,22 @@
   build-depends:
       base >=4.7 && <5
     , binary >=0.8.8 && <0.9
-    , bytestring >=0.10.12 && <0.11
+    , bytestring >=0.10.12 && <0.13
     , cereal >=0.5.8 && <0.6
-    , containers >=0.6.4 && <0.7
+    , containers >=0.6.4 && <0.8
     , hMPC
-    , hashable >=1.3.5.0 && <1.5
+    , hashable >=1.3.5.0 && <1.6
     , hgmp >=0.1.2 && <0.2
     , hslogger >=1.3.1 && <1.4
-    , lens >=5.0.1 && <5.3
-    , mtl >=2.2.2 && <2.3
-    , network >=3.1.2.7 && <3.2
+    , lens >=5.0.1 && <5.4
+    , mtl >=2.2.2 && <2.4
+    , network >=3.1.2.7 && <3.3
     , optparse-applicative >=0.16.1.0 && <0.19
     , process >=1.6.13 && <1.7
     , random >=1.2.1 && <1.3
     , split >=0.2.3.4 && <0.3
     , stm >=2.5.0 && <2.6
-    , time >=1.9.3 && <1.10
+    , time >=1.9.3 && <1.15
     , vector >=0.12.3.1 && <0.14
   default-language: Haskell2010
 
@@ -122,21 +121,21 @@
       HUnit >=1.6.2.0
     , base >=4.7 && <5
     , binary >=0.8.8 && <0.9
-    , bytestring >=0.10.12 && <0.11
+    , bytestring >=0.10.12 && <0.13
     , cereal >=0.5.8 && <0.6
-    , containers >=0.6.4 && <0.7
+    , containers >=0.6.4 && <0.8
     , hMPC
-    , hashable >=1.3.5.0 && <1.5
+    , hashable >=1.3.5.0 && <1.6
     , hgmp >=0.1.2 && <0.2
     , hslogger >=1.3.1 && <1.4
-    , lens >=5.0.1 && <5.3
-    , mtl >=2.2.2 && <2.3
-    , network >=3.1.2.7 && <3.2
+    , lens >=5.0.1 && <5.4
+    , mtl >=2.2.2 && <2.4
+    , network >=3.1.2.7 && <3.3
     , optparse-applicative >=0.16.1.0 && <0.19
     , process >=1.6.13 && <1.7
     , random >=1.2.1 && <1.3
     , split >=0.2.3.4 && <0.3
     , stm >=2.5.0 && <2.6
-    , time >=1.9.3 && <1.10
+    , time >=1.9.3 && <1.15
     , vector >=0.12.3.1 && <0.14
   default-language: Haskell2010
