diff --git a/cabal.project b/cabal.project
new file mode 100644
index 0000000000000000000000000000000000000000..e5f5f2e72c0a30f3ffab7117a1aaacb1772cc513
--- /dev/null
+++ b/cabal.project
@@ -0,0 +1,3 @@
+packages:
+  rtree/
+  rtree-c/
diff --git a/example/README.md b/example/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..345e6aef713208c8d50cdea23b85e6ad831f0449
--- /dev/null
+++ b/example/README.md
@@ -0,0 +1 @@
+Test
diff --git a/flake.lock b/flake.lock
index f37ab3b8df56dc2129128aa0042e921238ce7633..b331d354adada3b25724bf48916a76794baf7f28 100644
--- a/flake.lock
+++ b/flake.lock
@@ -34,6 +34,21 @@
         "type": "github"
       }
     },
+    "nix-filter": {
+      "locked": {
+        "lastModified": 1705332318,
+        "narHash": "sha256-kcw1yFeJe9N4PjQji9ZeX47jg0p9A0DuU4djKvg1a7I=",
+        "owner": "numtide",
+        "repo": "nix-filter",
+        "rev": "3449dc925982ad46246cfc36469baf66e1b64f17",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "nix-filter",
+        "type": "github"
+      }
+    },
     "nixpkgs": {
       "locked": {
         "lastModified": 1699065553,
@@ -54,6 +69,7 @@
       "inputs": {
         "flake-utils": "flake-utils",
         "language-c": "language-c",
+        "nix-filter": "nix-filter",
         "nixpkgs": "nixpkgs"
       }
     },
diff --git a/flake.nix b/flake.nix
index eee7af254f2dbf31073e079a95fa0c02267072c0..d510940e1df830bb739b544cd523610e1625db01 100644
--- a/flake.nix
+++ b/flake.nix
@@ -2,6 +2,7 @@
   inputs = {
     nixpkgs.url = github:nixos/nixpkgs/nixpkgs-unstable;
     flake-utils.url = github:numtide/flake-utils;
+    nix-filter.url = github:numtide/nix-filter;
     language-c = {
       url = github:kalhauge/language-c;
       flake = false;
@@ -11,16 +12,24 @@
     self,
     nixpkgs,
     flake-utils,
+    nix-filter,
     ...
   } @ inputs: let
-    packages = final: p: {
-      "rtree" = p.callCabal2nixWithOptions "rtree" "${self}" "" {};
-      "language-c" =
-        final.haskell.lib.overrideCabal
-        (p.callCabal2nixWithOptions "language-c" inputs.language-c "" {}) {
-          doCheck = false;
-        };
+    load = p: n: {
+      "${n}" =
+        p.callCabal2nixWithOptions n
+        "${self}/${n}" "" {};
     };
+    packages = final: p:
+      {
+        "language-c" =
+          final.haskell.lib.overrideCabal
+          (p.callCabal2nixWithOptions "language-c" inputs.language-c "" {}) {
+            doCheck = false;
+          };
+      }
+      // load p "rtree"
+      // load p "rtree-c";
     overlays = final: prev: {
       haskellPackages = prev.haskellPackages.extend (p: _: packages final p);
     };
@@ -40,6 +49,7 @@
       packages = {
         default = hpkgs.rtree;
         rtree = hpkgs.rtree;
+        rtree-c = hpkgs.rtree-c;
       };
       devShells = let
         nativeBuildInputs = with hpkgs; [
@@ -54,8 +64,8 @@
         default =
           hpkgs.shellFor
           {
-            name = "rtree-shell";
-            packages = p: [p.rtree];
+            name = "rtree-shells";
+            packages = p: [p.rtree p.rtree-c];
             doBenchmark = true;
             inherit nativeBuildInputs withHoogle;
           };
diff --git a/hie.yaml b/hie.yaml
deleted file mode 100644
index 8764232366804781ea91e3786e62d0a3e2e19d3c..0000000000000000000000000000000000000000
--- a/hie.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-cradle:
-  cabal:
-    - path: "./src"
-      component: "lib:rtree"
-    - path: "./bin/rtree-c"
-      component: "exe:rtree-c"
-    - path: "./test/src"
-      component: "test:rtree-test"
diff --git a/bin/rtree-c/Main.hs b/rtree-c/bin/Main.hs
similarity index 100%
rename from bin/rtree-c/Main.hs
rename to rtree-c/bin/Main.hs
diff --git a/package.yaml b/rtree-c/package.yaml
similarity index 78%
rename from package.yaml
rename to rtree-c/package.yaml
index 8f266d55c204a2388d6b1b71dfd29e4fe0b48816..6a2525f974d9eb93aec586d4ef79c46b3b9c04a4 100644
--- a/package.yaml
+++ b/rtree-c/package.yaml
@@ -1,4 +1,4 @@
-name: rtree 
+name: rtree-c
 # version: 0.1.0
 # synopsis: synopsis
 # maintainer: maintainer <email>
@@ -9,27 +9,19 @@ ghc-options: -Wall -fno-warn-incomplete-uni-patterns
 
 dependencies:
   - base >= 4.9 && < 5
-  - transformers
-  - free
-  - vector
-  - data-fix
-  - mtl
-  - directory
-  - containers
-  - text
-  - pretty-simple
+  - rtree
+  - language-c
 
 library:
   source-dirs: src
 
 executables:
   rtree-c: 
-    source-dirs: bin/rtree-c
+    source-dirs: bin/
     main: Main.hs
     dependencies:
-      - rtree
+      - rtree-c
       - optparse-applicative
-      - language-c
       - typed-process
       - directory
       - pretty
@@ -44,6 +36,7 @@ tests:
     main: Main.hs
     dependencies:
       - rtree
+      - rtree-c
       # - template
       # - hedgehog
       # - hspec
diff --git a/rtree.cabal b/rtree-c/rtree-c.cabal
similarity index 65%
rename from rtree.cabal
rename to rtree-c/rtree-c.cabal
index af80d3de6fa72079820a31a4c8b3fc8499e35e95..4d7d26cd37acc634ffe966104c739abeb09f6438 100644
--- a/rtree.cabal
+++ b/rtree-c/rtree-c.cabal
@@ -4,80 +4,57 @@ cabal-version: 1.12
 --
 -- see: https://github.com/sol/hpack
 
-name:           rtree
+name:           rtree-c
 version:        0.0.0
 build-type:     Simple
 
 library
   exposed-modules:
-      Control.Monad.Reduce
-      Control.RTree
-      Data.Valuation
+      ReduceC
   other-modules:
-      Paths_rtree
+      Paths_rtree_c
   hs-source-dirs:
       src
   ghc-options: -Wall -fno-warn-incomplete-uni-patterns
   build-depends:
       base >=4.9 && <5
-    , containers
-    , data-fix
-    , directory
-    , free
-    , mtl
-    , pretty-simple
-    , text
-    , transformers
-    , vector
+    , language-c
+    , rtree
   default-language: Haskell2010
 
 executable rtree-c
   main-is: Main.hs
   other-modules:
-      ReduceC
-      Paths_rtree
+      Paths_rtree_c
   hs-source-dirs:
-      bin/rtree-c
+      bin/
   ghc-options: -Wall -fno-warn-incomplete-uni-patterns
   build-depends:
       base >=4.9 && <5
     , co-log
-    , containers
-    , data-fix
     , directory
     , filepath
-    , free
     , language-c
-    , mtl
     , optparse-applicative
     , pretty
-    , pretty-simple
     , rtree
+    , rtree-c
     , text
     , time
-    , transformers
     , typed-process
-    , vector
   default-language: Haskell2010
 
 test-suite rtree-test
   type: exitcode-stdio-1.0
   main-is: Main.hs
   other-modules:
-      Paths_rtree
+      Paths_rtree_c
   hs-source-dirs:
       test/src
   ghc-options: -Wall -fno-warn-incomplete-uni-patterns
   build-depends:
       base >=4.9 && <5
-    , containers
-    , data-fix
-    , directory
-    , free
-    , mtl
-    , pretty-simple
+    , language-c
     , rtree
-    , text
-    , transformers
-    , vector
+    , rtree-c
   default-language: Haskell2010
diff --git a/bin/rtree-c/ReduceC.hs b/rtree-c/src/ReduceC.hs
similarity index 100%
rename from bin/rtree-c/ReduceC.hs
rename to rtree-c/src/ReduceC.hs
diff --git a/test/src/Main.hs b/rtree-c/test/src/Main.hs
similarity index 50%
rename from test/src/Main.hs
rename to rtree-c/test/src/Main.hs
index d2a6c17d9e2e241440f4117b53cbc0198af82f0b..76a9bdb5d48831da2e59c811ecbcbb5a379bdfb5 100644
--- a/test/src/Main.hs
+++ b/rtree-c/test/src/Main.hs
@@ -1,3 +1 @@
-
-main :: IO ()
 main = pure ()
diff --git a/README.md b/rtree/README.md
similarity index 100%
rename from README.md
rename to rtree/README.md
diff --git a/rtree/package.yaml b/rtree/package.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0330af896ba874c54ab5a09673c972920df74ed2
--- /dev/null
+++ b/rtree/package.yaml
@@ -0,0 +1,20 @@
+name: rtree 
+# version: 0.1.0
+# synopsis: synopsis
+# maintainer: maintainer <email>
+# category: categories
+# extra-source-files: []
+
+ghc-options: -Wall -fno-warn-incomplete-uni-patterns 
+
+dependencies:
+  - base >= 4.9 && < 5
+  - transformers
+  - vector
+  - mtl
+  - containers
+  - text
+
+library:
+  source-dirs: src
+
diff --git a/rtree/rtree.cabal b/rtree/rtree.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..3cf39c8a6b2bd226886a956def1807e6f1f0eddc
--- /dev/null
+++ b/rtree/rtree.cabal
@@ -0,0 +1,28 @@
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.35.2.
+--
+-- see: https://github.com/sol/hpack
+
+name:           rtree
+version:        0.0.0
+build-type:     Simple
+
+library
+  exposed-modules:
+      Control.Monad.Reduce
+      Control.RTree
+      Data.Valuation
+  other-modules:
+      Paths_rtree
+  hs-source-dirs:
+      src
+  ghc-options: -Wall -fno-warn-incomplete-uni-patterns
+  build-depends:
+      base >=4.9 && <5
+    , containers
+    , mtl
+    , text
+    , transformers
+    , vector
+  default-language: Haskell2010
diff --git a/src/Control/Monad/Reduce.hs b/rtree/src/Control/Monad/Reduce.hs
similarity index 100%
rename from src/Control/Monad/Reduce.hs
rename to rtree/src/Control/Monad/Reduce.hs
diff --git a/src/Control/RTree.hs b/rtree/src/Control/RTree.hs
similarity index 100%
rename from src/Control/RTree.hs
rename to rtree/src/Control/RTree.hs
diff --git a/src/Data/Valuation.hs b/rtree/src/Data/Valuation.hs
similarity index 100%
rename from src/Data/Valuation.hs
rename to rtree/src/Data/Valuation.hs
diff --git a/test/data/.gitignore b/test/data/.gitignore
deleted file mode 100644
index b86ba2e4d0922a2d3345241809e3e2e5d05a4a18..0000000000000000000000000000000000000000
--- a/test/data/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-file2.c
-*.bak
diff --git a/test/data/simple1.c b/test/data/simple1.c
deleted file mode 100644
index 206e19854fabf5ac2fa56dd2f200e4fb279f588f..0000000000000000000000000000000000000000
--- a/test/data/simple1.c
+++ /dev/null
@@ -1,7 +0,0 @@
-extern int printf (const char *, ...);
-
-int main (void)
-{
-  printf("hello");
-  return 0;
-}
diff --git a/test/data/typedef.c b/test/data/typedef.c
deleted file mode 100644
index 98d10336a42d3a501d4f3033515aeeee61a2f655..0000000000000000000000000000000000000000
--- a/test/data/typedef.c
+++ /dev/null
@@ -1,6 +0,0 @@
-typedef const int size_t;
-void main()
-{
-    size_t a = 0;
-    return 0;
-}
\ No newline at end of file
diff --git a/test/test.sh b/test/test.sh
deleted file mode 100755
index 2cfc4fb41e8db6554cd188a531713f181181b853..0000000000000000000000000000000000000000
--- a/test/test.sh
+++ /dev/null
@@ -1 +0,0 @@
-cabal test --test-options='-o test.svg -w 600 -h 400' --test-show-details=streaming