Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.cpp	(revision 83926)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemGroup.cpp	(revision 83929)
@@ -328,6 +328,12 @@
         int iCountOfStartedMachineItems = 0;
         foreach (UIChooserItem *pItem, items(UIChooserNodeType_Machine))
-            if (pItem->node()->toMachineNode()->cache()->isItemStarted())
+        {
+            AssertPtrReturnVoid(pItem);
+            UIChooserItemMachine *pMachineItem = pItem->toMachineItem();
+            AssertPtrReturnVoid(pMachineItem);
+            AssertPtrReturnVoid(pMachineItem->cache());
+            if (pMachineItem->cache()->isItemStarted())
                 ++iCountOfStartedMachineItems;
+        }
         /* Template: */
         QString strMachineCount = tr("%n machine(s)", "Group item tool-tip / Machine info", items(UIChooserNodeType_Machine).size());
@@ -731,5 +737,5 @@
         /* For local items: */
         if (   nodeToGroupType()->groupType() == UIChooserNodeGroupType_Local
-            && pMachineItem->nodeToMachineType()->cacheType() == UIVirtualMachineItemType_Local)
+            && pMachineItem->cacheType() == UIVirtualMachineItemType_Local)
         {
             /* Make sure passed machine isn't immutable within own group: */
@@ -756,5 +762,5 @@
         else
         if (   nodeToGroupType()->groupType() == UIChooserNodeGroupType_Profile
-            && pMachineItem->nodeToMachineType()->cacheType() == UIVirtualMachineItemType_CloudReal)
+            && pMachineItem->cacheType() == UIVirtualMachineItemType_CloudReal)
         {
             /* Make sure passed item is ours: */
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.cpp	(revision 83926)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.cpp	(revision 83929)
@@ -64,22 +64,35 @@
 }
 
+UIVirtualMachineItem *UIChooserItemMachine::cache() const
+{
+    return nodeToMachineType() ? nodeToMachineType()->cache() : 0;
+}
+
+UIVirtualMachineItemType UIChooserItemMachine::cacheType() const
+{
+    return cache() ? cache()->itemType() : UIVirtualMachineItemType_Invalid;
+}
+
 QUuid UIChooserItemMachine::id() const
 {
-    return nodeToMachineType()->cache()->id();
+    return cache() ? cache()->id() : QUuid();
 }
 
 bool UIChooserItemMachine::accessible() const
 {
-    return nodeToMachineType()->cache()->accessible();
+    return cache() ? cache()->accessible() : false;
 }
 
 void UIChooserItemMachine::recache()
 {
-    nodeToMachineType()->cache()->recache();
+    if (cache())
+        cache()->recache();
 }
 
 bool UIChooserItemMachine::isLockedMachine() const
 {
-    const KMachineState enmState = nodeToMachineType()->cache()->machineState();
+    const KMachineState enmState = cacheType() == UIVirtualMachineItemType_Local
+                                 ? cache()->machineState()
+                                 : KMachineState_Null;
     return enmState != KMachineState_PoweredOff &&
            enmState != KMachineState_Saved &&
@@ -159,5 +172,6 @@
 
     /* Recache and update pixmaps: */
-    nodeToMachineType()->cache()->recachePixmap();
+    AssertPtrReturnVoid(cache());
+    cache()->recachePixmap();
     updatePixmaps();
 }
@@ -225,5 +239,6 @@
 void UIChooserItemMachine::updateToolTip()
 {
-    setToolTip(nodeToMachineType()->cache()->toolTipText());
+    AssertPtrReturnVoid(cache());
+    setToolTip(cache()->toolTipText());
 }
 
@@ -302,6 +317,7 @@
     /* And machine-item content to take into account: */
     int iTopLineWidth = m_iMinimumNameWidth;
-    if (   nodeToMachineType()->cacheType() == UIVirtualMachineItemType_Local
-        && !nodeToMachineType()->cache()->toLocal()->snapshotName().isEmpty())
+    /* Only local items can have snapshots: */
+    if (   cacheType() == UIVirtualMachineItemType_Local
+        && !cache()->toLocal()->snapshotName().isEmpty())
         iTopLineWidth += (iMinorSpacing +
                           m_iMinimumSnapshotNameWidth);
@@ -400,6 +416,6 @@
 
         /* No drops for cloud items: */
-        if (   nodeToMachineType()->cacheType() != UIVirtualMachineItemType_Local
-            || pMachineItem->nodeToMachineType()->cacheType() != UIVirtualMachineItemType_Local)
+        if (   cacheType() != UIVirtualMachineItemType_Local
+            || pMachineItem->cacheType() != UIVirtualMachineItemType_Local)
             return false;
         /* No drops for immutable item: */
@@ -498,5 +514,6 @@
 {
     /* Recache and update pixmaps: */
-    nodeToMachineType()->cache()->recachePixmap();
+    AssertPtrReturnVoid(cache());
+    cache()->recachePixmap();
     updatePixmaps();
 }
@@ -614,6 +631,7 @@
 {
     /* Get new pixmap and pixmap-size: */
+    AssertPtrReturnVoid(cache());
     QSize pixmapSize;
-    QPixmap pixmap = nodeToMachineType()->cache()->osPixmap(&pixmapSize);
+    QPixmap pixmap = cache()->osPixmap(&pixmapSize);
     /* Update linked values: */
     if (m_pixmapSize != pixmapSize)
@@ -635,5 +653,6 @@
     const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);
     /* Get new state-pixmap and state-pixmap size: */
-    const QIcon stateIcon = nodeToMachineType()->cache()->machineStateIcon();
+    AssertPtrReturnVoid(cache());
+    const QIcon stateIcon = cache()->machineStateIcon();
     AssertReturnVoid(!stateIcon.isNull());
     const QSize statePixmapSize = QSize(iIconMetric, iIconMetric);
@@ -726,10 +745,10 @@
     int iMinimumSnapshotNameWidth = 0;
     /* Is there any snapshot exists? */
-    if (   nodeToMachineType()->cacheType() == UIVirtualMachineItemType_Local
-        && !nodeToMachineType()->cache()->toLocal()->snapshotName().isEmpty())
+    if (   cacheType() == UIVirtualMachineItemType_Local
+        && !cache()->toLocal()->snapshotName().isEmpty())
     {
         QFontMetrics fm(m_snapshotNameFont, model()->paintDevice());
         int iBracketWidth = fm.width("()"); /* bracket width */
-        int iActualTextWidth = fm.width(nodeToMachineType()->cache()->toLocal()->snapshotName()); /* snapshot-name width */
+        int iActualTextWidth = fm.width(cache()->toLocal()->snapshotName()); /* snapshot-name width */
         int iMinimumTextWidth = fm.width("..."); /* ellipsis width */
         iMinimumSnapshotNameWidth = iBracketWidth + qMin(iActualTextWidth, iMinimumTextWidth);
@@ -812,5 +831,5 @@
 {
     /* Make sure this is local machine item: */
-    if (nodeToMachineType()->cacheType() != UIVirtualMachineItemType_Local)
+    if (cacheType() != UIVirtualMachineItemType_Local)
         return;
 
@@ -820,5 +839,5 @@
     /* Calculate new visible snapshot-name: */
     int iBracketWidth = QFontMetrics(m_snapshotNameFont, pPaintDevice).width("()");
-    QString strVisibleSnapshotName = compressText(m_snapshotNameFont, pPaintDevice, nodeToMachineType()->cache()->toLocal()->snapshotName(),
+    QString strVisibleSnapshotName = compressText(m_snapshotNameFont, pPaintDevice, cache()->toLocal()->snapshotName(),
                                                   m_iMaximumSnapshotNameWidth - iBracketWidth);
     strVisibleSnapshotName = QString("(%1)").arg(strVisibleSnapshotName);
@@ -841,5 +860,6 @@
 {
     /* Get new state-text and state-text size: */
-    const QSize stateTextSize = textSize(m_stateTextFont, model()->paintDevice(), nodeToMachineType()->cache()->machineStateName());
+    AssertPtrReturnVoid(cache());
+    const QSize stateTextSize = textSize(m_stateTextFont, model()->paintDevice(), cache()->machineStateName());
 
     /* Update linked values: */
@@ -1118,6 +1138,6 @@
 
             /* Paint middle element: */
-            if (   nodeToMachineType()->cacheType() == UIVirtualMachineItemType_Local
-                && !nodeToMachineType()->cache()->toLocal()->snapshotName().isEmpty())
+            if (   cacheType() == UIVirtualMachineItemType_Local
+                && !cache()->toLocal()->snapshotName().isEmpty())
             {
                 /* Prepare variables: */
@@ -1168,4 +1188,5 @@
                 int iMachineStateTextY = iBottomLineIndent + 1;
                 /* Paint state text: */
+                AssertPtrReturnVoid(cache());
                 paintText(/* Painter: */
                           pPainter,
@@ -1177,5 +1198,5 @@
                           model()->paintDevice(),
                           /* Text to paint: */
-                          nodeToMachineType()->cache()->machineStateName());
+                          cache()->machineStateName());
             }
         }
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.h	(revision 83926)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserItemMachine.h	(revision 83929)
@@ -24,7 +24,9 @@
 /* GUI includes: */
 #include "UIChooserItem.h"
+#include "UIManagerDefs.h"
 
 /* Forward declarations: */
 class UIChooserNodeMachine;
+class UIVirtualMachineItem;
 
 
@@ -48,4 +50,9 @@
         /** Returns machine node reference. */
         UIChooserNodeMachine *nodeToMachineType() const;
+
+        /** Returns virtual machine cache instance. */
+        UIVirtualMachineItem *cache() const;
+        /** Returns virtual machine cache type. */
+        UIVirtualMachineItemType cacheType() const;
 
         /** Returns item machine id. */
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 83926)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/chooser/UIChooserModel.cpp	(revision 83929)
@@ -296,7 +296,6 @@
     return      firstSelectedItem()
              && firstSelectedItem()->firstMachineItem()
-             && firstSelectedItem()->firstMachineItem()->node()
-             && firstSelectedItem()->firstMachineItem()->node()->toMachineNode()
-           ? firstSelectedItem()->firstMachineItem()->node()->toMachineNode()->cache()
+             && firstSelectedItem()->firstMachineItem()->toMachineItem()
+           ? firstSelectedItem()->firstMachineItem()->toMachineItem()->cache()
            : 0;
 }
@@ -312,5 +311,5 @@
     QList<UIVirtualMachineItem*> currentMachineList;
     foreach (UIChooserItemMachine *pItem, currentMachineItemList)
-        currentMachineList << pItem->nodeToMachineType()->cache();
+        currentMachineList << pItem->cache();
     return currentMachineList;
 }
@@ -1056,5 +1055,5 @@
     foreach (UIChooserItemMachine *pItem, inaccessibleMachineItemList)
     {
-        switch (pItem->nodeToMachineType()->cacheType())
+        switch (pItem->cacheType())
         {
             case UIVirtualMachineItemType_Local:
@@ -1082,5 +1081,5 @@
             {
                 /* Much more simple than for local items, we are not reloading them, just refreshing: */
-                pItem->nodeToMachineType()->cache()->toCloud()->updateInfoAsync(false /* delayed */);
+                pItem->cache()->toCloud()->updateInfoAsync(false /* delayed */);
 
                 break;
@@ -1150,8 +1149,8 @@
         if (fVerdict)
         {
-            if (pMachineItem->nodeToMachineType()->cacheType() == UIVirtualMachineItemType_Local)
-                localMachinesToUnregister.append(pMachineItem->nodeToMachineType()->cache()->toLocal()->machine());
-            else if (pMachineItem->nodeToMachineType()->cacheType() == UIVirtualMachineItemType_CloudReal)
-                cloudMachinesToUnregister.append(pMachineItem->nodeToMachineType()->cache()->toCloud()->machine());
+            if (pMachineItem->cacheType() == UIVirtualMachineItemType_Local)
+                localMachinesToUnregister.append(pMachineItem->cache()->toLocal()->machine());
+            else if (pMachineItem->cacheType() == UIVirtualMachineItemType_CloudReal)
+                cloudMachinesToUnregister.append(pMachineItem->cache()->toCloud()->machine());
         }
         else
