diff --git a/Makefile.am b/Makefile.am
index 0b74f95df3348749d10eb8b5bc38ab8d4c7aa93b..76d91733e397d9aff287e741f7f4df09b84a3f79 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -60,7 +60,9 @@ HTOOLS_DIRS = \
 	htools/Ganeti/HTools \
 	htools/Ganeti/HTools/Program \
 	htools/Ganeti/Query \
-	htest
+	htest \
+	htest/Test \
+	htest/Test/Ganeti
 
 DIRS = \
 	autotools \
@@ -374,7 +376,8 @@ HPCEXCL = --exclude Main \
 	--exclude Ganeti.THH \
 	--exclude Ganeti.HTools.QC \
 	--exclude Ganeti.HTools.Version \
-	--exclude Test.Ganeti.TestHelper
+	--exclude Test.Ganeti.TestHelper \
+	$(patsubst htools.%,--exclude Test.%,$(subst /,.,$(patsubst %.hs,%, $(filter-out htest/%,$(HS_LIB_SRCS)))))
 
 HS_LIB_SRCS = \
 	htools/Ganeti/HTools/CLI.hs \
@@ -426,7 +429,8 @@ HS_LIB_SRCS = \
 	htools/Ganeti/Runtime.hs \
 	htools/Ganeti/Ssconf.hs \
 	htools/Ganeti/THH.hs \
-	htest/Test/Ganeti/TestHelper.hs
+	htest/Test/Ganeti/TestHelper.hs \
+	htest/Test/Ganeti/Objects.hs
 
 
 HS_BUILT_SRCS = htools/Ganeti/HTools/Version.hs htools/Ganeti/Constants.hs
diff --git a/htest/Test/Ganeti/Objects.hs b/htest/Test/Ganeti/Objects.hs
new file mode 100644
index 0000000000000000000000000000000000000000..af825605006cf4ebdd3af233fd62fb770c53a77c
--- /dev/null
+++ b/htest/Test/Ganeti/Objects.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+{-| Unittests for ganeti-htools.
+
+-}
+
+{-
+
+Copyright (C) 2009, 2010, 2011, 2012 Google Inc.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA.
+
+-}
+
+module Test.Ganeti.Objects (testObjects) where
+
+import qualified Data.Map as Map
+import Test.QuickCheck
+
+import Test.Ganeti.TestHelper
+import qualified Ganeti.Objects as Objects
+
+-- | Tests that fillDict behaves correctly
+prop_Objects_fillDict :: [(Int, Int)] -> [(Int, Int)] -> Property
+prop_Objects_fillDict defaults custom =
+  let d_map = Map.fromList defaults
+      d_keys = map fst defaults
+      c_map = Map.fromList custom
+      c_keys = map fst custom
+  in printTestCase "Empty custom filling"
+      (Objects.fillDict d_map Map.empty [] == d_map) .&&.
+     printTestCase "Empty defaults filling"
+      (Objects.fillDict Map.empty c_map [] == c_map) .&&.
+     printTestCase "Delete all keys"
+      (Objects.fillDict d_map c_map (d_keys++c_keys) == Map.empty)
+
+testSuite "Objects"
+  [ 'prop_Objects_fillDict
+  ]
diff --git a/htest/test.hs b/htest/test.hs
index 3aecfa679cc13a59f65bef0c679471d714ce9645..d4fefcd7c54bbdd1f167700191fda5fd5fb1ae15 100644
--- a/htest/test.hs
+++ b/htest/test.hs
@@ -30,6 +30,7 @@ import Test.Framework
 import System.Environment (getArgs)
 
 import Ganeti.HTools.QC
+import Test.Ganeti.Objects
 
 -- | Our default test options, overring the built-in test-framework
 -- ones.
diff --git a/htools/Ganeti/HTools/QC.hs b/htools/Ganeti/HTools/QC.hs
index 729fc4f5d5f58f878558840741b7eda67ac82656..07501420a641f30e55b4345569deaa9c07d6d6b0 100644
--- a/htools/Ganeti/HTools/QC.hs
+++ b/htools/Ganeti/HTools/QC.hs
@@ -51,7 +51,6 @@ module Ganeti.HTools.QC
   , testRpc
   , testQlang
   , testConfd
-  , testObjects
   ) where
 
 import qualified Test.HUnit as HUnit
@@ -2173,23 +2172,3 @@ testSuite "Confd"
   [ 'prop_Confd_req_sign
   , 'prop_Confd_bad_key
   ]
-
--- * Objects tests
-
--- | Tests that fillDict behaves correctly
-prop_Objects_fillDict :: [(Int, Int)] -> [(Int, Int)] -> Property
-prop_Objects_fillDict defaults custom =
-  let d_map = Map.fromList defaults
-      d_keys = map fst defaults
-      c_map = Map.fromList custom
-      c_keys = map fst custom
-  in printTestCase "Empty custom filling"
-      (Objects.fillDict d_map Map.empty [] == d_map) .&&.
-     printTestCase "Empty defaults filling"
-      (Objects.fillDict Map.empty c_map [] == c_map) .&&.
-     printTestCase "Delete all keys"
-      (Objects.fillDict d_map c_map (d_keys++c_keys) == Map.empty)
-
-testSuite "Objects"
-  [ 'prop_Objects_fillDict
-  ]