=== types/vdex/vocabulary.py
==================================================================
--- types/vdex/vocabulary.py	(revision 3264)
+++ types/vdex/vocabulary.py	(local)
@@ -16,6 +16,7 @@
 __author__  = '''Jens Klein <jens@bluedynamics.com>'''
 __docformat__ = 'plaintext'

+from UserDict import DictMixin
 from StringIO import StringIO
 from types import StringTypes
 from xml.dom import minidom
@@ -31,6 +32,37 @@
 from Products.ATVocabularyManager.config import *


+class OrderedDictionary(DictMixin):
+    """ Ordered dictionary implementation from
+    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496761
+    """
+
+    def __init__(self):
+        self._keys = []
+        self._data = {}
+
+    def __setitem__(self, key, value):
+        if key not in self._data:
+            self._keys.append(key)
+        self._data[key] = value
+
+    def __getitem__(self, key):
+        return self._data[key]
+
+    def __delitem__(self, key):
+        del self._data[key]
+        self._keys.remove(key)
+
+    def keys(self):
+        return list(self._keys)
+
+    def copy(self):
+        copyDict = OrderedDictionary()
+        copyDict._data = self._data.copy()
+        copyDict._keys = self._keys[:]
+        return copyDict
+
+
 class VdexTermHandlerMixin:
     """ abstract mixin class provides methods to handle terms on parent class.
     """
@@ -50,7 +82,7 @@
             The instance of the content is given as parameter.
         """

-        vdict = {}
+        vdict = OrderedDictionary()
         for obj in self.contentValues():
             if obj.meta_type == "VdexTerm":
                 vsubdict=obj.getVocabularyDict(instance)

