diff --git a/Makefile.am b/Makefile.am
index 875cd123708b6b88f8e3db5dcb75710b34c3b480..b4d3aeaa944d33ac2bbc1687e65cc327f924487a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -231,6 +231,7 @@ dist_TESTS = \
 	test/ganeti.hooks_unittest.py \
 	test/ganeti.http_unittest.py \
 	test/ganeti.locking_unittest.py \
+	test/ganeti.objects_unittest.py \
 	test/ganeti.rapi.resources_unittest.py \
 	test/ganeti.serializer_unittest.py \
 	test/ganeti.ssh_unittest.py \
diff --git a/lib/objects.py b/lib/objects.py
index 1cdc98f11ba304e6cd6a7b7c0597aee74577937b..5c879069b1288f6ea7338cae305595ae2cf4819b 100644
--- a/lib/objects.py
+++ b/lib/objects.py
@@ -104,13 +104,6 @@ class ConfigObject(object):
       raise KeyError(key)
     setattr(self, key, value)
 
-  def __getstate__(self):
-    state = {}
-    for name in self.__slots__:
-      if hasattr(self, name):
-        state[name] = getattr(self, name)
-    return state
-
   def __setstate__(self, state):
     for name in state:
       if name in self.__slots__:
@@ -126,7 +119,14 @@ class ConfigObject(object):
     make sure all objects returned are only standard python types.
 
     """
-    return dict([(k, getattr(self, k, None)) for k in self.__slots__])
+    result = {}
+    for name in self.__slots__:
+      value = getattr(self, name, None)
+      if value is not None:
+        result[name] = value
+    return result
+
+  __getstate__ = ToDict
 
   @classmethod
   def FromDict(cls, val):
diff --git a/test/ganeti.objects_unittest.py b/test/ganeti.objects_unittest.py
new file mode 100755
index 0000000000000000000000000000000000000000..fdea939c71f16b65d3e49db886c594edb156f8d1
--- /dev/null
+++ b/test/ganeti.objects_unittest.py
@@ -0,0 +1,48 @@
+#!/usr/bin/python
+#
+
+# Copyright (C) 2006, 2007, 2008 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
+# 0.0510-1301, USA.
+
+
+"""Script for unittesting the objects module"""
+
+
+import unittest
+
+from ganeti import objects
+
+class SimpleObject(objects.ConfigObject):
+  __slots__ = ['a', 'b']
+
+class TestDictState(unittest.TestCase):
+  """Simple dict tansformation tests"""
+
+  def testSimpleObjectToDict(self):
+    o1 = SimpleObject(a='1')
+    self.assertEquals(o1.ToDict(), {'a': '1'})
+    self.assertEquals(o1.__getstate__(), {'a': '1'})
+    self.assertEquals(o1.__getstate__(), o1.ToDict())
+    o1.a = 2
+    o1.b = 5
+    self.assertEquals(o1.ToDict(), {'a': 2, 'b': 5})
+    o2 = SimpleObject.FromDict(o1.ToDict())
+    self.assertEquals(o1.ToDict(), {'a': 2, 'b': 5})
+
+
+if __name__ == '__main__':
+  unittest.main()