diff --git a/Ganeti/HTools/QC.hs b/Ganeti/HTools/QC.hs
index fe214cd362cc426a4a5944acb4538e3e2547d62f..e20e1af8e4731ec50121e9a57323998e77101d98 100644
--- a/Ganeti/HTools/QC.hs
+++ b/Ganeti/HTools/QC.hs
@@ -28,6 +28,7 @@ module Ganeti.HTools.QC
     , test_Container
     , test_Instance
     , test_Node
+    , test_Text
     ) where
 
 import Test.QuickCheck
@@ -61,7 +62,10 @@ instance Arbitrary Instance.Instance where
       name <- arbitrary
       mem <- choose(0, 100)
       dsk <- choose(0, 100)
-      run_st <- arbitrary
+      run_st <- elements ["ERROR_up", "ERROR_down", "ADMIN_down"
+                         , "ERROR_nodedown", "ERROR_nodeoffline"
+                         , "running"
+                         , "no_such_status1", "no_such_status2"]
       pn <- arbitrary
       sn <- arbitrary
       vcpus <- arbitrary
@@ -162,12 +166,58 @@ prop_Instance_setBoth inst pdx sdx =
     where _types = (inst::Instance.Instance, pdx::Types.Ndx, sdx::Types.Ndx)
           si = Instance.setBoth inst pdx sdx
 
+prop_Instance_runStatus_True inst =
+    let run_st = Instance.running inst
+        run_tx = Instance.run_st inst
+    in
+      run_tx == "running" || run_tx == "ERROR_up" ==> run_st == True
+
+prop_Instance_runStatus_False inst =
+    let run_st = Instance.running inst
+        run_tx = Instance.run_st inst
+    in
+      run_tx /= "running" && run_tx /= "ERROR_up" ==> run_st == False
+
 test_Instance =
     [ run prop_Instance_setIdx
     , run prop_Instance_setName
     , run prop_Instance_setPri
     , run prop_Instance_setSec
     , run prop_Instance_setBoth
+    , run prop_Instance_runStatus_True
+    , run prop_Instance_runStatus_False
+    ]
+
+-- Instance text loader tests
+
+prop_Text_Load_Instance name mem dsk vcpus status pnode snode pdx sdx =
+    let vcpus_s = show vcpus
+        dsk_s = show dsk
+        mem_s = show mem
+        rsnode = snode ++ "a" -- non-empty secondary node
+        rsdx = if pdx == sdx
+               then sdx + 1
+               else sdx
+        ndx = [(pnode, pdx), (rsnode, rsdx)]
+        inst = Text.loadInst ndx
+               (name:mem_s:dsk_s:vcpus_s:status:pnode:rsnode:[])::
+               Maybe (String, Instance.Instance)
+        _types = ( name::String, mem::Int, dsk::Int
+                 , vcpus::Int, status::String
+                 , pnode::String, snode::String
+                 , pdx::Types.Ndx, sdx::Types.Ndx)
+    in
+      case inst of
+        Nothing -> False
+        Just (_, i) ->
+            (Instance.name i == name &&
+             Instance.vcpus i == vcpus &&
+             Instance.mem i == mem &&
+             Instance.pnode i == pdx &&
+             Instance.snode i == rsdx)
+
+test_Text =
+    [ run prop_Text_Load_Instance
     ]
 
 -- Node tests
diff --git a/Ganeti/HTools/Text.hs b/Ganeti/HTools/Text.hs
index 3db802e019bd79b716bcf6449a8a61e0956750e9..aea0c00edef873bd8507d2ec832c747571cea36b 100644
--- a/Ganeti/HTools/Text.hs
+++ b/Ganeti/HTools/Text.hs
@@ -29,6 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 module Ganeti.HTools.Text
     (
       loadData
+    , loadInst
     ) where
 
 import Control.Monad
diff --git a/test.hs b/test.hs
index 59d6f101d16468edc5c214fea760cd68a14f5173..ab90f0169f65dc52c9dcb4ea6a511fd768da2f2c 100644
--- a/test.hs
+++ b/test.hs
@@ -38,3 +38,4 @@ main = do
   runTests "Container" options test_Container
   runTests "Instance" options test_Instance
   runTests "Node" options test_Node
+  runTests "Text" options test_Text