diff --git a/lib/query.py b/lib/query.py
index 92b8175b4706c54d1d6128edc5a8514803088e09..f050cca9051d34ca1773972af5cd9c60c79be530 100644
--- a/lib/query.py
+++ b/lib/query.py
@@ -1259,6 +1259,7 @@ class InstanceQueryData:
     # Used for individual rows
     self.inst_hvparams = None
     self.inst_beparams = None
+    self.inst_osparams = None
     self.inst_nicparams = None
 
   def __iter__(self):
@@ -1271,6 +1272,7 @@ class InstanceQueryData:
     for inst in self.instances:
       self.inst_hvparams = self.cluster.FillHV(inst, skip_globals=True)
       self.inst_beparams = self.cluster.FillBE(inst)
+      self.inst_osparams = self.cluster.SimpleFillOS(inst.os, inst.osparams)
       self.inst_nicparams = [self.cluster.SimpleFillNIC(nic.nicparams)
                              for nic in inst.nics]
 
@@ -1636,11 +1638,14 @@ def _GetInstanceParameterFields():
   fields = [
     # Filled parameters
     (_MakeField("hvparams", "HypervisorParameters", QFT_OTHER,
-                "Hypervisor parameters"),
+                "Hypervisor parameters (merged)"),
      IQ_CONFIG, 0, lambda ctx, _: ctx.inst_hvparams),
     (_MakeField("beparams", "BackendParameters", QFT_OTHER,
-                "Backend parameters"),
+                "Backend parameters (merged)"),
      IQ_CONFIG, 0, lambda ctx, _: ctx.inst_beparams),
+    (_MakeField("osparams", "OpSysParameters", QFT_OTHER,
+                "Operating system parameters (merged)"),
+     IQ_CONFIG, 0, lambda ctx, _: ctx.inst_osparams),
 
     # Unfilled parameters
     (_MakeField("custom_hvparams", "CustomHypervisorParameters", QFT_OTHER,
@@ -1649,6 +1654,9 @@ def _GetInstanceParameterFields():
     (_MakeField("custom_beparams", "CustomBackendParameters", QFT_OTHER,
                 "Custom backend parameters",),
      IQ_CONFIG, 0, _GetItemAttr("beparams")),
+    (_MakeField("custom_osparams", "CustomOpSysParameters", QFT_OTHER,
+                "Custom operating system parameters",),
+     IQ_CONFIG, 0, _GetItemAttr("osparams")),
     (_MakeField("custom_nicparams", "CustomNicParameters", QFT_OTHER,
                 "Custom network interface parameters"),
      IQ_CONFIG, 0, lambda ctx, inst: [nic.nicparams for nic in inst.nics]),
diff --git a/test/ganeti.query_unittest.py b/test/ganeti.query_unittest.py
index c9cc012a38c62ee885c881b5b9487b5b0c065be6..213470a2c935e4616ce574066b60d83efe7bb645 100755
--- a/test/ganeti.query_unittest.py
+++ b/test/ganeti.query_unittest.py
@@ -564,16 +564,20 @@ class TestInstanceQuery(unittest.TestCase):
         },
       nicparams={
         constants.PP_DEFAULT: constants.NICC_DEFAULTS,
-        })
+        },
+      os_hvp={},
+      osparams={})
 
     instances = [
-      objects.Instance(name="inst1", hvparams={}, beparams={}, nics=[]),
-      objects.Instance(name="inst2", hvparams={}, nics=[],
+      objects.Instance(name="inst1", hvparams={}, beparams={}, osparams={},
+                       nics=[], os="deb1"),
+      objects.Instance(name="inst2", hvparams={}, nics=[], osparams={},
+        os="foomoo",
         beparams={
           constants.BE_MEMORY: 512,
         }),
-      objects.Instance(name="inst3", hvparams={}, beparams={},
-        nics=[objects.NIC(ip="192.0.2.99", nicparams={})]),
+      objects.Instance(name="inst3", hvparams={}, beparams={}, osparams={},
+        os="dos", nics=[objects.NIC(ip="192.0.2.99", nicparams={})]),
       ]
 
     iqd = query.InstanceQueryData(instances, cluster, None, [], [], {},
@@ -617,7 +621,12 @@ class TestInstanceQuery(unittest.TestCase):
         constants.PP_DEFAULT: constants.NICC_DEFAULTS,
         },
       os_hvp={},
-      tcpudp_port_pool=set())
+      tcpudp_port_pool=set(),
+      osparams={
+        "deb99": {
+          "clean_install": "yes",
+          },
+        })
 
     offline_nodes = ["nodeoff1", "nodeoff2"]
     bad_nodes = ["nodebad1", "nodebad2", "nodebad3"] + offline_nodes
@@ -630,7 +639,8 @@ class TestInstanceQuery(unittest.TestCase):
         admin_up=True, hypervisor=constants.HT_XEN_PVM, os="linux1",
         primary_node="node1",
         disk_template=constants.DT_PLAIN,
-        disks=[]),
+        disks=[],
+        osparams={}),
       objects.Instance(name="inst2", hvparams={}, nics=[],
         uuid="73a0f8a7-068c-4630-ada2-c3440015ab1a",
         ctime=1291211000, mtime=1291211077, serial_no=1,
@@ -640,7 +650,8 @@ class TestInstanceQuery(unittest.TestCase):
         disks=[],
         beparams={
           constants.BE_MEMORY: 512,
-        }),
+        },
+        osparams={}),
       objects.Instance(name="inst3", hvparams={}, beparams={},
         uuid="11ec8dff-fb61-4850-bfe0-baa1803ff280",
         ctime=1291011000, mtime=1291013000, serial_no=1923,
@@ -654,7 +665,8 @@ class TestInstanceQuery(unittest.TestCase):
                         constants.NIC_LINK: constants.DEFAULT_BRIDGE,
                         }),
           objects.NIC(ip=None, mac=macs.pop(), nicparams={}),
-          ]),
+          ],
+        osparams={}),
       objects.Instance(name="inst4", hvparams={}, beparams={},
         uuid="68dab168-3ef5-4c9d-b4d3-801e0672068c",
         ctime=1291244390, mtime=1291244395, serial_no=25,
@@ -677,7 +689,8 @@ class TestInstanceQuery(unittest.TestCase):
                         constants.NIC_MODE: constants.NIC_MODE_BRIDGED,
                         constants.NIC_LINK: "eth123",
                         }),
-          ]),
+          ],
+        osparams={}),
       objects.Instance(name="inst5", hvparams={}, nics=[],
         uuid="0e3dca12-5b42-4e24-98a2-415267545bd0",
         ctime=1231211000, mtime=1261200000, serial_no=3,
@@ -687,7 +700,8 @@ class TestInstanceQuery(unittest.TestCase):
         disks=[],
         beparams={
           constants.BE_MEMORY: 512,
-        }),
+        },
+        osparams={}),
       objects.Instance(name="inst6", hvparams={}, nics=[],
         uuid="72de6580-c8d5-4661-b902-38b5785bb8b3",
         ctime=7513, mtime=11501, serial_no=13390,
@@ -697,7 +711,10 @@ class TestInstanceQuery(unittest.TestCase):
         disks=[],
         beparams={
           constants.BE_MEMORY: 768,
-        }),
+        },
+        osparams={
+          "clean_install": "no",
+          }),
       objects.Instance(name="inst7", hvparams={}, nics=[],
         uuid="ceec5dc4-b729-4f42-ae28-69b3cd24920e",
         ctime=None, mtime=None, serial_no=1947,
@@ -705,7 +722,8 @@ class TestInstanceQuery(unittest.TestCase):
         primary_node="node6",
         disk_template=constants.DT_DISKLESS,
         disks=[],
-        beparams={}),
+        beparams={},
+        osparams={}),
       ]
 
     assert not utils.FindDuplicates(inst.name for inst in instances)
@@ -826,6 +844,18 @@ class TestInstanceQuery(unittest.TestCase):
         exp = (constants.RS_NORMAL, inst.name in live_data)
       self.assertEqual(row[fieldidx["oper_state"]], exp)
 
+      cust_exp = (constants.RS_NORMAL, {})
+      if inst.os == "deb99":
+        if inst.name == "inst6":
+          exp = (constants.RS_NORMAL, {"clean_install": "no"})
+          cust_exp = exp
+        else:
+          exp = (constants.RS_NORMAL, {"clean_install": "yes"})
+      else:
+        exp = (constants.RS_NORMAL, {})
+      self.assertEqual(row[fieldidx["osparams"]], exp)
+      self.assertEqual(row[fieldidx["custom_osparams"]], cust_exp)
+
       usage = disk_usage[inst.name]
       if usage is None:
         usage = 0