diff --git a/.gitignore b/.gitignore
index 57774d1ac27f88ba5f1d5b304f6938ceca1faa3b..6a9e60a6f9943a878a03403616f1cfcadbf7cb85 100644
--- a/.gitignore
+++ b/.gitignore
@@ -46,33 +46,6 @@ _darcs/
 # sub-repositories
 
 /ghc-tarballs/
-/libffi-tarballs/
-/libraries/array/
-/libraries/base/
-/libraries/deepseq/
-/libraries/directory/
-/libraries/dph/
-/libraries/extensible-exceptions/
-/libraries/filepath/
-/libraries/ghc-prim/
-/libraries/haskell2010/
-/libraries/haskell98/
-/libraries/hoopl/
-/libraries/hpc/
-/libraries/integer-gmp/
-/libraries/integer-simple/
-/libraries/mtl/
-/libraries/old-locale/
-/libraries/old-time/
-/libraries/parallel/
-/libraries/process/
-/libraries/stm/
-/libraries/template-haskell/
-/libraries/unix/
-/libraries/utf8-string/
-/nofib/
-/utils/haddock/
-/utils/hsc2hs/
 
 # -----------------------------------------------------------------------------
 # Cabal dist directories
diff --git a/.gitmodules b/.gitmodules
index d83bfd05e99588ef67be2573ac700e131408dd24..69519806e9dc3164b1ff9f11440e915dae8a591e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -54,3 +54,75 @@
 	path = libraries/random
 	url = ../packages/random.git
 	ignore = untracked
+[submodule "libraries/array"]
+	path = libraries/array
+	url = ../packages/array.git
+[submodule "libraries/base"]
+	path = libraries/base
+	url = ../packages/base.git
+[submodule "libraries/deepseq"]
+	path = libraries/deepseq
+	url = ../packages/deepseq.git
+[submodule "libraries/directory"]
+	path = libraries/directory
+	url = ../packages/directory.git
+[submodule "libraries/filepath"]
+	path = libraries/filepath
+	url = ../packages/filepath.git
+[submodule "libraries/ghc-prim"]
+	path = libraries/ghc-prim
+	url = ../packages/ghc-prim.git
+[submodule "libraries/haskell98"]
+	path = libraries/haskell98
+	url = ../packages/haskell98.git
+[submodule "libraries/haskell2010"]
+	path = libraries/haskell2010
+	url = ../packages/haskell2010.git
+[submodule "libraries/hoopl"]
+	path = libraries/hoopl
+	url = ../packages/hoopl.git
+[submodule "libraries/hpc"]
+	path = libraries/hpc
+	url = ../packages/hpc.git
+[submodule "libraries/integer-gmp"]
+	path = libraries/integer-gmp
+	url = ../packages/integer-gmp.git
+[submodule "libraries/integer-simple"]
+	path = libraries/integer-simple
+	url = ../packages/integer-simple.git
+[submodule "libraries/old-locale"]
+	path = libraries/old-locale
+	url = ../packages/old-locale.git
+[submodule "libraries/old-time"]
+	path = libraries/old-time
+	url = ../packages/old-time.git
+[submodule "libraries/process"]
+	path = libraries/process
+	url = ../packages/process.git
+[submodule "libraries/template-haskell"]
+	path = libraries/template-haskell
+	url = ../packages/template-haskell.git
+[submodule "libraries/unix"]
+	path = libraries/unix
+	url = ../packages/unix.git
+[submodule "libraries/parallel"]
+	path = libraries/parallel
+	url = ../packages/parallel.git
+[submodule "libraries/stm"]
+	path = libraries/stm
+	url = ../packages/stm.git
+[submodule "libraries/dph"]
+	path = libraries/dph
+	url = ../packages/dph.git
+[submodule "utils/haddock"]
+	path = utils/haddock
+	url = ../haddock.git
+[submodule "nofib"]
+	path = nofib
+	url = ../nofib.git
+[submodule "utils/hsc2hs"]
+	path = utils/hsc2hs
+	url = ../hsc2hs.git
+[submodule "libffi-tarballs"]
+	path = libffi-tarballs
+	url = ../libffi-tarballs.git
diff --git a/libffi-tarballs b/libffi-tarballs
new file mode 160000
index 0000000000000000000000000000000000000000..a0088d1da0e171849ddb47a46c869856037a01d1
--- /dev/null
+++ b/libffi-tarballs
@@ -0,0 +1 @@
+Subproject commit a0088d1da0e171849ddb47a46c869856037a01d1
diff --git a/libraries/array b/libraries/array
new file mode 160000
index 0000000000000000000000000000000000000000..26ff04744117b0ad8233a1a2b5635fa1277b88d9
--- /dev/null
+++ b/libraries/array
@@ -0,0 +1 @@
+Subproject commit 26ff04744117b0ad8233a1a2b5635fa1277b88d9
diff --git a/libraries/base b/libraries/base
new file mode 160000
index 0000000000000000000000000000000000000000..065aef8da36a16bb23f07b298ccd63ed2a64f7fe
--- /dev/null
+++ b/libraries/base
@@ -0,0 +1 @@
+Subproject commit 065aef8da36a16bb23f07b298ccd63ed2a64f7fe
diff --git a/libraries/deepseq b/libraries/deepseq
new file mode 160000
index 0000000000000000000000000000000000000000..3a9c431e4c89ca506aae8e80867cfcde8c099724
--- /dev/null
+++ b/libraries/deepseq
@@ -0,0 +1 @@
+Subproject commit 3a9c431e4c89ca506aae8e80867cfcde8c099724
diff --git a/libraries/directory b/libraries/directory
new file mode 160000
index 0000000000000000000000000000000000000000..0c64d5420e54bb871f0407a4ec3155c6be600756
--- /dev/null
+++ b/libraries/directory
@@ -0,0 +1 @@
+Subproject commit 0c64d5420e54bb871f0407a4ec3155c6be600756
diff --git a/libraries/dph b/libraries/dph
new file mode 160000
index 0000000000000000000000000000000000000000..556e09cdc9f8e1cc22dd10b703c97d0e228b483d
--- /dev/null
+++ b/libraries/dph
@@ -0,0 +1 @@
+Subproject commit 556e09cdc9f8e1cc22dd10b703c97d0e228b483d
diff --git a/libraries/filepath b/libraries/filepath
new file mode 160000
index 0000000000000000000000000000000000000000..486373cb6bc3de8bf7f0b8532558c5fff32df20a
--- /dev/null
+++ b/libraries/filepath
@@ -0,0 +1 @@
+Subproject commit 486373cb6bc3de8bf7f0b8532558c5fff32df20a
diff --git a/libraries/ghc-prim b/libraries/ghc-prim
new file mode 160000
index 0000000000000000000000000000000000000000..84d7b7dd2d91ec9cce154602669b97a084412cf2
--- /dev/null
+++ b/libraries/ghc-prim
@@ -0,0 +1 @@
+Subproject commit 84d7b7dd2d91ec9cce154602669b97a084412cf2
diff --git a/libraries/haskell2010 b/libraries/haskell2010
new file mode 160000
index 0000000000000000000000000000000000000000..5c5b84b02d940b2487ffe0778ca62e329ad0bf75
--- /dev/null
+++ b/libraries/haskell2010
@@ -0,0 +1 @@
+Subproject commit 5c5b84b02d940b2487ffe0778ca62e329ad0bf75
diff --git a/libraries/haskell98 b/libraries/haskell98
new file mode 160000
index 0000000000000000000000000000000000000000..446b1af378b185383b879ab7d1db99c291629144
--- /dev/null
+++ b/libraries/haskell98
@@ -0,0 +1 @@
+Subproject commit 446b1af378b185383b879ab7d1db99c291629144
diff --git a/libraries/hoopl b/libraries/hoopl
new file mode 160000
index 0000000000000000000000000000000000000000..275f1cf9d8a044406a1492ee3f1655f0ea9a993d
--- /dev/null
+++ b/libraries/hoopl
@@ -0,0 +1 @@
+Subproject commit 275f1cf9d8a044406a1492ee3f1655f0ea9a993d
diff --git a/libraries/hpc b/libraries/hpc
new file mode 160000
index 0000000000000000000000000000000000000000..50ed27faf857380e282e0c85472a55210a5022c8
--- /dev/null
+++ b/libraries/hpc
@@ -0,0 +1 @@
+Subproject commit 50ed27faf857380e282e0c85472a55210a5022c8
diff --git a/libraries/integer-gmp b/libraries/integer-gmp
new file mode 160000
index 0000000000000000000000000000000000000000..f57a632600713b4067caa2774f77797ef9d4d60e
--- /dev/null
+++ b/libraries/integer-gmp
@@ -0,0 +1 @@
+Subproject commit f57a632600713b4067caa2774f77797ef9d4d60e
diff --git a/libraries/integer-simple b/libraries/integer-simple
new file mode 160000
index 0000000000000000000000000000000000000000..9e8b924f68c4cdb6c7ae88f274baa3560aaa305e
--- /dev/null
+++ b/libraries/integer-simple
@@ -0,0 +1 @@
+Subproject commit 9e8b924f68c4cdb6c7ae88f274baa3560aaa305e
diff --git a/libraries/old-locale b/libraries/old-locale
new file mode 160000
index 0000000000000000000000000000000000000000..7e7f6722895af36ca4e2f60f2fdfdc056b70db0b
--- /dev/null
+++ b/libraries/old-locale
@@ -0,0 +1 @@
+Subproject commit 7e7f6722895af36ca4e2f60f2fdfdc056b70db0b
diff --git a/libraries/old-time b/libraries/old-time
new file mode 160000
index 0000000000000000000000000000000000000000..89017411036b24875393e4fd6ca8ef92fc181ad2
--- /dev/null
+++ b/libraries/old-time
@@ -0,0 +1 @@
+Subproject commit 89017411036b24875393e4fd6ca8ef92fc181ad2
diff --git a/libraries/parallel b/libraries/parallel
new file mode 160000
index 0000000000000000000000000000000000000000..03da43303ed05ace65cb24cee1dbc1766c694233
--- /dev/null
+++ b/libraries/parallel
@@ -0,0 +1 @@
+Subproject commit 03da43303ed05ace65cb24cee1dbc1766c694233
diff --git a/libraries/process b/libraries/process
new file mode 160000
index 0000000000000000000000000000000000000000..353a0edaef658d4566caaa46f70bed814a2c5afe
--- /dev/null
+++ b/libraries/process
@@ -0,0 +1 @@
+Subproject commit 353a0edaef658d4566caaa46f70bed814a2c5afe
diff --git a/libraries/stm b/libraries/stm
new file mode 160000
index 0000000000000000000000000000000000000000..143b02dabc32ec20509fbf98573f826ce1d1d23b
--- /dev/null
+++ b/libraries/stm
@@ -0,0 +1 @@
+Subproject commit 143b02dabc32ec20509fbf98573f826ce1d1d23b
diff --git a/libraries/template-haskell b/libraries/template-haskell
new file mode 160000
index 0000000000000000000000000000000000000000..6b485668ba22d4d78664866100a8ef2daf62ff89
--- /dev/null
+++ b/libraries/template-haskell
@@ -0,0 +1 @@
+Subproject commit 6b485668ba22d4d78664866100a8ef2daf62ff89
diff --git a/libraries/unix b/libraries/unix
new file mode 160000
index 0000000000000000000000000000000000000000..dc0e771a282df8ba92892b9619aed0c2b5b1bb7a
--- /dev/null
+++ b/libraries/unix
@@ -0,0 +1 @@
+Subproject commit dc0e771a282df8ba92892b9619aed0c2b5b1bb7a
diff --git a/nofib b/nofib
new file mode 160000
index 0000000000000000000000000000000000000000..317148f9fb9d39c408f48d9b4f14c20ef9697ee4
--- /dev/null
+++ b/nofib
@@ -0,0 +1 @@
+Subproject commit 317148f9fb9d39c408f48d9b4f14c20ef9697ee4
diff --git a/packages b/packages
index 616dfc1d8912d0be795a18d0379c23268dc4334f..619d1478e6ab3da99f596d956192c8eb84400dc4 100644
--- a/packages
+++ b/packages
@@ -45,42 +45,42 @@
 # localpath                  tag         remotepath                      upstreamurl
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ghc-tarballs                 windows     ghc-tarballs.git                -
-libffi-tarballs              -           libffi-tarballs.git             -
-utils/hsc2hs                 -           hsc2hs.git                      -
-utils/haddock                -           haddock.git                     -
-libraries/array              -           packages/array.git              -
-libraries/base               -           packages/base.git               -
+libffi-tarballs              -           -                               -
+utils/hsc2hs                 -           -                               -
+utils/haddock                -           -                               -
+libraries/array              -           -                               -
+libraries/base               -           -                               -
 libraries/binary             -           -                               https://github.com/kolmodin/binary.git
 libraries/bytestring         -           -                               https://github.com/haskell/bytestring.git
 libraries/Cabal              -           -                               https://github.com/haskell/cabal.git
 libraries/containers         -           -                               https://github.com/haskell/containers.git
-libraries/deepseq            -           packages/deepseq.git            -
-libraries/directory          -           packages/directory.git          -
-libraries/filepath           -           packages/filepath.git           -
-libraries/ghc-prim           -           packages/ghc-prim.git           -
+libraries/deepseq            -           -                               -
+libraries/directory          -           -                               -
+libraries/filepath           -           -                               -
+libraries/ghc-prim           -           -                               -
 libraries/haskeline          -           -                               https://github.com/judah/haskeline.git
-libraries/haskell98          -           packages/haskell98.git          -
-libraries/haskell2010        -           packages/haskell2010.git        -
-libraries/hoopl              -           packages/hoopl.git              -
-libraries/hpc                -           packages/hpc.git                -
-libraries/integer-gmp        -           packages/integer-gmp.git        -
-libraries/integer-simple     -           packages/integer-simple.git     -
-libraries/old-locale         -           packages/old-locale.git         -
-libraries/old-time           -           packages/old-time.git           -
+libraries/haskell98          -           -                               -
+libraries/haskell2010        -           -                               -
+libraries/hoopl              -           -                               -
+libraries/hpc                -           -                               -
+libraries/integer-gmp        -           -                               -
+libraries/integer-simple     -           -                               -
+libraries/old-locale         -           -                               -
+libraries/old-time           -           -                               -
 libraries/pretty             -           -                               https://github.com/haskell/pretty.git
-libraries/process            -           packages/process.git            -
-libraries/template-haskell   -           packages/template-haskell.git   -
+libraries/process            -           -                               -
+libraries/template-haskell   -           -                               -
 libraries/terminfo           -           -                               https://github.com/judah/terminfo.git
 libraries/time               -           -                               http://git.haskell.org/darcs-mirrors/time.git
 libraries/transformers       -           -                               http://git.haskell.org/darcs-mirrors/transformers.git
-libraries/unix               -           packages/unix.git               -
+libraries/unix               -           -                               -
 libraries/Win32              -           -                               https://github.com/haskell/win32.git
 libraries/xhtml              -           -                               https://github.com/haskell/xhtml.git
-nofib                        nofib       nofib.git                       -
-libraries/parallel           extra       packages/parallel.git           -
-libraries/stm                extra       packages/stm.git                -
+nofib                        nofib       -                               -
+libraries/parallel           extra       -                               -
+libraries/stm                extra       -                               -
 libraries/random             dph         -                               https://github.com/haskell/random.git
 libraries/primitive          dph         -                               https://github.com/haskell/primitive.git
 libraries/vector             dph         -                               https://github.com/haskell/vector.git
-libraries/dph                dph         packages/dph.git                -
+libraries/dph                dph         -                               -
 .                            -           ghc.git                         -
diff --git a/utils/haddock b/utils/haddock
new file mode 160000
index 0000000000000000000000000000000000000000..42757dd19c2062945063c9f8359b561c2eed2031
--- /dev/null
+++ b/utils/haddock
@@ -0,0 +1 @@
+Subproject commit 42757dd19c2062945063c9f8359b561c2eed2031
diff --git a/utils/hsc2hs b/utils/hsc2hs
new file mode 160000
index 0000000000000000000000000000000000000000..4a0f67704d89712f8493a0c7eccffa9243d6ef09
--- /dev/null
+++ b/utils/hsc2hs
@@ -0,0 +1 @@
+Subproject commit 4a0f67704d89712f8493a0c7eccffa9243d6ef09