diff --git a/rfbplayer/UserPixelFormatsDialog.h b/rfbplayer/UserPixelFormatsDialog.h
index e3d1aa3..72244e9 100644
--- a/rfbplayer/UserPixelFormatsDialog.h
+++ b/rfbplayer/UserPixelFormatsDialog.h
@@ -18,7 +18,9 @@
 
 // -=- UserPixelFormatsDialog.h
 
-#include <rfb_win32/Dialog.h>
+#include <rfbplayer/EditPixelFormatDialog.h>
+
+#define UPF_REGISTRY_PATH "Software\\TightVnc\\RfbPlayer\\UserDefinedPF"
 
 class UserPixelFormatsDialog : public rfb::win32::Dialog {
 public:
@@ -36,23 +38,63 @@
     pfList = GetDlgItem(handle, IDC_PF_LIST);
     for (int i = supportedPF->getDefaultPFCount(); i < supportedPF->count(); i++) {
       SendMessage(pfList, LB_ADDSTRING, 
-        0, (LPARAM)(LPCTSTR)(((*supportedPF)[i]).format_name));
+        0, (LPARAM)(LPCTSTR)(((*supportedPF)[i])->format_name));
     }
     SendMessage(pfList, LB_SETCURSEL, 0, 0);
   }
   virtual bool onCommand(int item, int cmd) { 
     switch (item) {
     case IDC_ADD_BUTTON:
+      { 
+        char format_name[MAX_STR_LEN] = "";
+        PixelFormat pf(32, 24, 0, 1, 0, 0, 0, 0, 0, 0);
+        EditPixelFormatDialog edit(supportedPF, format_name, &pf);
+        if (edit.showDialog(handle)) {
+          supportedPF->add(format_name, pf);
+          SendMessage(pfList, LB_ADDSTRING, 0, (LPARAM)(LPCTSTR)format_name);
+        };
+       (*supportedPF)[15];
+      }
       break;
     case IDC_REMOVE_BUTTON:
+      {
+        int index = SendMessage(pfList, LB_GETCURSEL, 0, 0);
+        if (index == LB_ERR) {
+          MessageBox(handle, "You must select the pixel format for remove.", 
+                     "RfbPlayer", MB_OK | MB_ICONWARNING);
+          return false;
+        } else {
+          supportedPF->remove(supportedPF->getDefaultPFCount() + index);
+          SendMessage(pfList, LB_DELETESTRING, index, 0);
+        }
+      }
       break;
+    case IDC_PF_LIST:
+      if (cmd != LBN_DBLCLK) break;
     case IDC_EDIT_BUTTON:
+      {
+        int index = SendMessage(pfList, LB_GETCURSEL, 0, 0);
+        PixelFormat *pf = 
+          &(supportedPF->operator[](index + supportedPF->getDefaultPFCount())->PF);
+        char *format_name = 
+          (supportedPF)->operator[](index + supportedPF->getDefaultPFCount())->format_name;
+        EditPixelFormatDialog edit(supportedPF, format_name, pf);
+        if (edit.showDialog(handle)) {
+          SendMessage(pfList, LB_DELETESTRING, index, 0);
+          SendMessage(pfList, LB_INSERTSTRING, index, (LPARAM)(LPCTSTR)format_name);
+          SendMessage(pfList, LB_SETCURSEL, index, 0);
+        };
+      }
       break;
     default:
       break;
     }
     return false;
   }
+  virtual bool onOk() {
+    supportedPF->writeUserDefinedPF(HKEY_CURRENT_USER, UPF_REGISTRY_PATH);
+    return true;
+  }
 
   HWND pfList;
   PixelFormatList *supportedPF;
