Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 73118)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 73119)
@@ -2143,15 +2143,15 @@
 }
 
-QList<CGuestOSType> VBoxGlobal::vmGuestOSFamilyList() const
-{
-    QList<CGuestOSType> result;
-    for (int i = 0; i < m_guestOSFamilyIDs.size(); ++i)
-        result << m_guestOSTypes[i][0];
-    return result;
+QString VBoxGlobal::vmGuestOSFamilyDescription(const QString &strFamilyId) const
+{
+    AssertMsg(m_guestOSFamilyDescriptions.contains(strFamilyId),
+              ("Family ID incorrect: '%s'.", strFamilyId.toLatin1().constData()));
+    return m_guestOSFamilyDescriptions.value(strFamilyId);
 }
 
 QList<CGuestOSType> VBoxGlobal::vmGuestOSTypeList(const QString &strFamilyId) const
 {
-    AssertMsg(m_guestOSFamilyIDs.contains(strFamilyId), ("Family ID incorrect: '%s'.", strFamilyId.toLatin1().constData()));
+    AssertMsg(m_guestOSFamilyIDs.contains(strFamilyId),
+              ("Family ID incorrect: '%s'.", strFamilyId.toLatin1().constData()));
     return m_guestOSFamilyIDs.contains(strFamilyId) ?
            m_guestOSTypes[m_guestOSFamilyIDs.indexOf(strFamilyId)] : QList<CGuestOSType>();
@@ -4385,7 +4385,9 @@
                 const CGuestOSType os = guestOSTypes.at(i);
                 const QString strFamilyID = os.GetFamilyId();
+                const QString strFamilyDescription = os.GetFamilyDescription();
                 if (!m_guestOSFamilyIDs.contains(strFamilyID))
                 {
                     m_guestOSFamilyIDs << strFamilyID;
+                    m_guestOSFamilyDescriptions[strFamilyID] = strFamilyDescription;
                     m_guestOSTypes << QList<CGuestOSType>();
                 }
Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 73118)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 73119)
@@ -21,4 +21,5 @@
 /* Qt includes: */
 #include <QFileIconProvider>
+#include <QMap>
 #include <QReadWriteLock>
 
@@ -442,16 +443,16 @@
     /** @name COM: Guest OS Type.
      * @{ */
-        /** Returns the list of few guest OS types, queried from
-          * IVirtualBox corresponding to every family id. */
-        QList<CGuestOSType> vmGuestOSFamilyList() const;
-        /** Returns the list of all guest OS types, queried from
-          * IVirtualBox corresponding to passed family id. */
+        /** Returns the list of family IDs. */
+        QList<QString> vmGuestOSFamilyIDs() const { return m_guestOSFamilyIDs; }
+
+        /** Returns a family description with passed @a strFamilyId. */
+        QString vmGuestOSFamilyDescription(const QString &strFamilyId) const;
+        /** Returns a list of all guest OS types with passed @a strFamilyId. */
         QList<CGuestOSType> vmGuestOSTypeList(const QString &strFamilyId) const;
 
-        /** Returns the guest OS type object corresponding to the given type id of list
-          * containing OS types related to OS family determined by family id attribute.
-          * If the index is invalid a null object is returned. */
+        /** Returns the guest OS type for passed @a strTypeId.
+          * It is being serached through the list of family with passed @a strFamilyId if specified. */
         CGuestOSType vmGuestOSType(const QString &strTypeId, const QString &strFamilyId = QString()) const;
-        /** Returns the description corresponding to the given guest OS type id. */
+        /** Returns a type description with passed @a strTypeId. */
         QString vmGuestOSTypeDescription(const QString &strTypeId) const;
 
@@ -833,4 +834,6 @@
         /** Holds the guest OS family IDs. */
         QList<QString>               m_guestOSFamilyIDs;
+        /** Holds the guest OS family descriptions. */
+        QMap<QString, QString>       m_guestOSFamilyDescriptions;
         /** Holds the guest OS types for each family ID. */
         QList<QList<CGuestOSType> >  m_guestOSTypes;
Index: trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIGuestOSTypeSelectionButton.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIGuestOSTypeSelectionButton.cpp	(revision 73118)
+++ trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIGuestOSTypeSelectionButton.cpp	(revision 73119)
@@ -84,13 +84,12 @@
 void UIGuestOSTypeSelectionButton::populateMenu()
 {
+    /* Clea initially: */
     m_pMainMenu->clear();
 
-    /* Create a list of all possible OS types */
-    QList<CGuestOSType> families = vboxGlobal().vmGuestOSFamilyList();
-    foreach(const CGuestOSType &comFamily, families)
+    /* Create a list of all possible OS types: */
+    foreach(const QString &strFamilyId, vboxGlobal().vmGuestOSFamilyIDs())
     {
-        QMenu *pSubMenu = m_pMainMenu->addMenu(comFamily.GetFamilyDescription());
-        QList<CGuestOSType> types = vboxGlobal().vmGuestOSTypeList(comFamily.GetFamilyId());
-        foreach (const CGuestOSType &comType, types)
+        QMenu *pSubMenu = m_pMainMenu->addMenu(vboxGlobal().vmGuestOSFamilyDescription(strFamilyId));
+        foreach (const CGuestOSType &comType, vboxGlobal().vmGuestOSTypeList(strFamilyId))
         {
             QAction *pAction = pSubMenu->addAction(vboxGlobal().vmGuestOSTypePixmapDefault(comType.GetId()),
Index: trunk/src/VBox/Frontends/VirtualBox/src/widgets/UINameAndSystemEditor.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/widgets/UINameAndSystemEditor.cpp	(revision 73118)
+++ trunk/src/VBox/Frontends/VirtualBox/src/widgets/UINameAndSystemEditor.cpp	(revision 73119)
@@ -338,10 +338,10 @@
 {
     /* Populate VM OS family combo: */
-    const QList<CGuestOSType> families = vboxGlobal().vmGuestOSFamilyList();
-    for (int i = 0; i < families.size(); ++i)
-    {
-        const QString strFamilyName = families.at(i).GetFamilyDescription();
-        m_pComboFamily->insertItem(i, strFamilyName);
-        m_pComboFamily->setItemData(i, families.at(i).GetFamilyId(), TypeID);
+    const QList<QString> &familyIDs = vboxGlobal().vmGuestOSFamilyIDs();
+    for (int i = 0; i < familyIDs.size(); ++i)
+    {
+        const QString &strFamilyId = familyIDs.at(i);
+        m_pComboFamily->insertItem(i, vboxGlobal().vmGuestOSFamilyDescription(strFamilyId));
+        m_pComboFamily->setItemData(i, strFamilyId, TypeID);
     }
 
