Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.cpp	(revision 55006)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.cpp	(revision 55015)
@@ -31,4 +31,7 @@
 
 /* GUI includes: */
+# include "UIMedium.h"
+# include "UIIconPool.h"
+# include "VBoxGlobal.h"
 # include "QIDialogButtonBox.h"
 # include "QIWithRetranslateUI.h"
@@ -44,4 +47,5 @@
 enum UIEncryptionDataTableSection
 {
+    UIEncryptionDataTableSection_Status,
     UIEncryptionDataTableSection_Id,
     UIEncryptionDataTableSection_Password,
@@ -99,5 +103,5 @@
 
     /** Returns the shallow copy of the encryption password map instance. */
-    EncryptionPasswordsMap encryptionPasswords() const { return m_encryptionPasswords; }
+    EncryptionPasswordMap encryptionPasswords() const { return m_encryptionPasswords; }
 
     /** Returns the row count, taking optional @a parent instead of root if necessary. */
@@ -122,9 +126,14 @@
     void prepare();
 
+    /** Returns whether passed @a strPassword is valid for medium with passed @a strMediumId. */
+    bool isPasswordValid(const QString strMediumId, const QString strPassword);
+
     /** Holds the encrypted medium map reference. */
     const EncryptedMediumMap &m_encryptedMediums;
 
     /** Holds the encryption password map instance. */
-    EncryptionPasswordsMap m_encryptionPasswords;
+    EncryptionPasswordMap m_encryptionPasswords;
+    /** Holds the encryption password status map instance. */
+    EncryptionPasswordStatusMap m_encryptionPasswordStatus;
 };
 
@@ -144,5 +153,5 @@
     /** Returns the shallow copy of the encryption password map
       * acquired from the UIEncryptionDataModel instance. */
-    EncryptionPasswordsMap encryptionPasswords() const;
+    EncryptionPasswordMap encryptionPasswords() const;
 
 private:
@@ -211,4 +220,5 @@
     switch (index.column())
     {
+        case UIEncryptionDataTableSection_Status:   return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
         case UIEncryptionDataTableSection_Id:       return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
         case UIEncryptionDataTableSection_Password: return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
@@ -227,6 +237,7 @@
     switch (iSection)
     {
-        case UIEncryptionDataTableSection_Id:       return tr("Password ID");
-        case UIEncryptionDataTableSection_Password: return tr("Password");
+        case UIEncryptionDataTableSection_Status:   return tr("Status", "password table field");
+        case UIEncryptionDataTableSection_Id:       return tr("ID", "password table field");
+        case UIEncryptionDataTableSection_Password: return tr("Password", "password table field");
         default: break;
     }
@@ -243,4 +254,17 @@
     switch (iRole)
     {
+        case Qt::DecorationRole:
+        {
+            /* Depending on column index: */
+            switch (index.column())
+            {
+                case UIEncryptionDataTableSection_Status:
+                    return m_encryptionPasswordStatus.value(m_encryptionPasswordStatus.keys().at(index.row())) ?
+                           UIIconPool::iconSet(":/status_check_16px.png") : UIIconPool::iconSet(":/status_error_16px.png");
+                default:
+                    return QVariant();
+            }
+            break;
+        }
         case Qt::DisplayRole:
         {
@@ -312,6 +336,22 @@
     switch (index.column())
     {
-        case UIEncryptionDataTableSection_Password: m_encryptionPasswords[m_encryptionPasswords.keys().at(index.row())] = value.toString(); break;
-        default: break;
+        case UIEncryptionDataTableSection_Password:
+        {
+            /* Update password: */
+            const int iRow = index.row();
+            const QString strPassword = value.toString();
+            const QString strKey = m_encryptionPasswords.keys().at(iRow);
+            m_encryptionPasswords[strKey] = strPassword;
+            /* Update password status: */
+            const QString strMediumId = m_encryptedMediums.values(strKey).first();
+            const bool fPasswordStatus = isPasswordValid(strMediumId, strPassword);
+            m_encryptionPasswordStatus[strKey] = fPasswordStatus;
+            /* Initiate explicit password status update: */
+            const QModelIndex statusIndex = createIndex(iRow, UIEncryptionDataTableSection_Status);
+            emit dataChanged(statusIndex, statusIndex);
+            break;
+        }
+        default:
+            break;
     }
     /* Nothing to set by default: */
@@ -321,7 +361,29 @@
 void UIEncryptionDataModel::prepare()
 {
-    /* Populate the map of passwords. */
+    /* Populate the map of passwords and statuses. */
     foreach (const QString &strPasswordId, m_encryptedMediums.keys())
+    {
         m_encryptionPasswords.insert(strPasswordId, QString());
+        m_encryptionPasswordStatus.insert(strPasswordId, false);
+    }
+}
+
+bool UIEncryptionDataModel::isPasswordValid(const QString strMediumId, const QString strPassword)
+{
+    /* Look for the medium with passed ID: */
+    const UIMedium uimedium = vboxGlobal().medium(strMediumId);
+    if (!uimedium.isNull())
+    {
+        /* Check wrapped medium for validity: */
+        const CMedium medium = uimedium.medium();
+        if (!medium.isNull())
+        {
+            /* Check whether the password is suitable for that medium. */
+            medium.CheckEncryptionPassword(strPassword);
+            return medium.isOk();
+        }
+    }
+    /* False by default: */
+    return false;
 }
 
@@ -334,7 +396,7 @@
 }
 
-EncryptionPasswordsMap UIEncryptionDataTable::encryptionPasswords() const
-{
-    AssertPtrReturn(m_pModelEncryptionData, EncryptionPasswordsMap());
+EncryptionPasswordMap UIEncryptionDataTable::encryptionPasswords() const
+{
+    AssertPtrReturn(m_pModelEncryptionData, EncryptionPasswordMap());
     return m_pModelEncryptionData->encryptionPasswords();
 }
@@ -384,4 +446,5 @@
     verticalHeader()->setDefaultSectionSize((int)(verticalHeader()->minimumSectionSize() * 1.33));
     horizontalHeader()->setStretchLastSection(false);
+    horizontalHeader()->setResizeMode(UIEncryptionDataTableSection_Status, QHeaderView::ResizeToContents);
     horizontalHeader()->setResizeMode(UIEncryptionDataTableSection_Id, QHeaderView::Interactive);
     horizontalHeader()->setResizeMode(UIEncryptionDataTableSection_Password, QHeaderView::Stretch);
@@ -403,7 +466,7 @@
 }
 
-EncryptionPasswordsMap UIAddDiskEncryptionPasswordDialog::encryptionPasswords() const
-{
-    AssertPtrReturn(m_pTableEncryptionData, EncryptionPasswordsMap());
+EncryptionPasswordMap UIAddDiskEncryptionPasswordDialog::encryptionPasswords() const
+{
+    AssertPtrReturn(m_pTableEncryptionData, EncryptionPasswordMap());
     return m_pTableEncryptionData->encryptionPasswords();
 }
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.h	(revision 55006)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIAddDiskEncryptionPasswordDialog.h	(revision 55015)
@@ -32,5 +32,6 @@
 /* Type definitions: */
 typedef QMultiMap<QString, QString> EncryptedMediumMap;
-typedef QMap<QString, QString> EncryptionPasswordsMap;
+typedef QMap<QString, QString> EncryptionPasswordMap;
+typedef QMap<QString, bool> EncryptionPasswordStatusMap;
 
 /** QDialog reimplementation used to
@@ -50,5 +51,5 @@
     /** Returns the shallow copy of the encryption password map
       * acquired from the UIEncryptionDataTable instance. */
-    EncryptionPasswordsMap encryptionPasswords() const;
+    EncryptionPasswordMap encryptionPasswords() const;
 
 private:
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 55006)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 55015)
@@ -2437,5 +2437,5 @@
 
     /* Ask for the disk encryption passwords if necessary: */
-    EncryptionPasswordsMap encryptionPasswords;
+    EncryptionPasswordMap encryptionPasswords;
     if (!encryptedMediums.isEmpty())
     {
Index: trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.cpp	(revision 55006)
+++ trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.cpp	(revision 55015)
@@ -314,5 +314,5 @@
                 /* Get the maps of encrypted mediums and their passwords: */
                 const EncryptedMediumMap &encryptedMedium = generalData.m_encryptedMediums;
-                const EncryptionPasswordsMap &encryptionPasswords = generalData.m_encryptionPasswords;
+                const EncryptionPasswordMap &encryptionPasswords = generalData.m_encryptionPasswords;
                 /* Enumerate attachments: */
                 foreach (const CMediumAttachment &attachment, m_machine.GetMediumAttachments())
Index: trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.h	(revision 55006)
+++ trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsGeneral.h	(revision 55015)
@@ -92,5 +92,5 @@
     EncryptedMediumMap m_encryptedMediums;
     /** Holds the encryption passwords. */
-    EncryptionPasswordsMap m_encryptionPasswords;
+    EncryptionPasswordMap m_encryptionPasswords;
 };
 typedef UISettingsCache<UIDataSettingsMachineGeneral> UICacheSettingsMachineGeneral;
