diff --git a/Ganeti/HTools/Loader.hs b/Ganeti/HTools/Loader.hs
index 30a2614164bd7c5955c727e407846a9092b64e8b..e1f35a0e1879795a4971cefdcb23b42856affcaf 100644
--- a/Ganeti/HTools/Loader.hs
+++ b/Ganeti/HTools/Loader.hs
@@ -40,6 +40,7 @@ module Ganeti.HTools.Loader
 import Data.Function (on)
 import Data.List
 import Data.Maybe (fromJust)
+import qualified Data.Map as M
 import Text.Printf (printf)
 
 import qualified Ganeti.HTools.Container as Container
@@ -78,14 +79,14 @@ data Request = Request RqType Node.List Instance.List [String]
 -- | Lookups a node into an assoc list.
 lookupNode :: (Monad m) => NameAssoc -> String -> String -> m Ndx
 lookupNode ktn inst node =
-    case lookup node ktn of
+    case M.lookup node ktn of
       Nothing -> fail $ "Unknown node '" ++ node ++ "' for instance " ++ inst
       Just idx -> return idx
 
 -- | Lookups an instance into an assoc list.
 lookupInstance :: (Monad m) => NameAssoc -> String -> m Idx
 lookupInstance kti inst =
-    case lookup inst kti of
+    case M.lookup inst kti of
       Nothing -> fail $ "Unknown instance '" ++ inst ++ "'"
       Just idx -> return idx
 
@@ -93,9 +94,11 @@ lookupInstance kti inst =
 assignIndices :: (Element a) =>
                  [(String, a)]
               -> (NameAssoc, [(Int, a)])
-assignIndices =
-    unzip . map (\ (idx, (k, v)) -> ((k, idx), (idx, setIdx v idx)))
-          . zip [0..]
+assignIndices nodes =
+  let (na, idx_node) =
+          unzip . map (\ (idx, (k, v)) -> ((k, idx), (idx, setIdx v idx)))
+          . zip [0..] $ nodes
+  in (M.fromList na, idx_node)
 
 -- | Assoc element comparator
 assocEqual :: (Eq a) => (a, b) -> (a, b) -> Bool
diff --git a/Ganeti/HTools/Types.hs b/Ganeti/HTools/Types.hs
index 200163b9c97f8619359ca089c9c7df420b4465c1..7a0c6db90eef67b8b6f36117ab9c3ae9a12a14f4 100644
--- a/Ganeti/HTools/Types.hs
+++ b/Ganeti/HTools/Types.hs
@@ -55,6 +55,8 @@ module Ganeti.HTools.Types
     , queryTimeout
     ) where
 
+import qualified Data.Map as M
+
 -- | The instance index type.
 type Idx = Int
 
@@ -62,7 +64,7 @@ type Idx = Int
 type Ndx = Int
 
 -- | The type used to hold name-to-idx mappings.
-type NameAssoc = [(String, Int)]
+type NameAssoc = M.Map String Int
 
 -- | A separate name for the cluster score type.
 type Score = Double