diff --git a/include/commctrl.h b/include/commctrl.h
index 7ecd9ce..8513c6b 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -115,6 +115,8 @@
     sizeof(((name*)0)->member))
 #endif
 
+
+/* This is only for Winelib applications. DON't use it wine itself!!! */
 #define SNDMSG WINELIB_NAME_AW(SendMessage)
 
 
@@ -171,8 +173,8 @@
 
 typedef struct tagNMTTCUSTOMDRAW
 {
-	NMCUSTOMDRAW nmcd;
-	UINT32		 uDrawFlags;
+    NMCUSTOMDRAW nmcd;
+    UINT32       uDrawFlags;
 } NMTTCUSTOMDRAW, *LPNMTTCUSTOMDRAW;
 
 
@@ -234,12 +236,15 @@
 VOID WINAPI MenuHelp (UINT32, WPARAM32, LPARAM, HMENU32,
                       HINSTANCE32, HWND32, LPUINT32);
 
-/* Drag List */
+/**************************************************************************
+ *  Drag List control
+ */
 
-typedef struct tagDRAGLISTINFO {
-	UINT32 uNotification;
-	HWND32 hWnd;
-	POINT32 ptCursor;
+typedef struct tagDRAGLISTINFO
+{
+    UINT32  uNotification;
+    HWND32  hWnd;
+    POINT32 ptCursor;
 } DRAGLISTINFO, *LPDRAGLISTINFO;
 
 #define DL_BEGINDRAG            (WM_USER+133)
@@ -254,9 +259,10 @@
 
 #define DRAGLISTMSGSTRING       TEXT("commctrl_DragListMsg")
 
-BOOL32 WINAPI MakeDragList(HWND32 hLB);
-void WINAPI DrawInsert(HWND32 handParent, HWND32 hLB, int nItem);
-int WINAPI LBItemFromPt(HWND32 hLB, POINT32 pt, BOOL32 bAutoScroll);
+BOOL32 WINAPI MakeDragList (HWND32);
+VOID   WINAPI DrawInsert (HWND32, HWND32, INT32);
+INT32  WINAPI LBItemFromPt (HWND32, POINT32, BOOL32);
+
   
 /* UpDown */
 
@@ -477,7 +483,6 @@
 HRESULT WINAPI UninitializeFlatSB(HWND32);
 
 
-
 /* Header control */
 
 #define WC_HEADER16		"SysHeader" 
@@ -1200,6 +1205,7 @@
 #define LPTOOLTIPTEXTA  LPNMTTDISPINFOA
 #define LPTOOLTIPTEXT   LPNMTTDISPINFO
 
+
 /* Rebar control */
 
 #define REBARCLASSNAME16        "ReBarWindow"
@@ -1283,7 +1289,7 @@
 #define RB_GETBANDINFO          WINELIB_NAME_AW(RB_GETBANDINFO)
 #define RB_MINIMIZEBAND         (WM_USER+30)
 #define RB_MAXIMIZEBAND         (WM_USER+31)
-#define RB_GETBANDORDERS        (WM_USER+34)
+#define RB_GETBANDBORDERS       (WM_USER+34)
 #define RB_SHOWBAND             (WM_USER+35)
 #define RB_SETPALETTE           (WM_USER+37)
 #define RB_GETPALETTE           (WM_USER+38)
@@ -1613,6 +1619,8 @@
 #define TVM_GETTEXTCOLOR        (TV_FIRST+32)
 #define TVM_SETSCROLLTIME       (TV_FIRST+33)
 #define TVM_GETSCROLLTIME       (TV_FIRST+34)
+#define TVM_UNKNOWN35           (TV_FIRST+35)
+#define TVM_UNKNOWN36           (TV_FIRST+36)
 #define TVM_SETINSERTMARKCOLOR  (TV_FIRST+37)
 #define TVM_GETINSERTMARKCOLOR  (TV_FIRST+38)
 #define TVM_SETUNICODEFORMAT    CCM_SETUNICODEFORMAT
@@ -1741,11 +1749,11 @@
       HTREEITEM hItem;
       UINT32 state;
       UINT32 stateMask;
-      LPSTR pszText;
-      int cchTextMax;
-      int iImage;
-      int iSelectedImage;
-      int cChildren;
+      LPSTR  pszText;
+      INT32  cchTextMax;
+      INT32  iImage;
+      INT32  iSelectedImage;
+      INT32  cChildren;
       LPARAM lParam;
 } TV_ITEM, *LPTVITEM;
 
@@ -1754,13 +1762,13 @@
       HTREEITEM hItem;
       UINT32 state;
       UINT32 stateMask;
-      LPSTR pszText;
-      int cchTextMax;
-      int iImage;
-      int iSelectedImage;
-      int cChildren;
+      LPSTR  pszText;
+      INT32  cchTextMax;
+      INT32  iImage;
+      INT32  iSelectedImage;
+      INT32  cChildren;
       LPARAM lParam;
-      int iIntegral;
+      INT32  iIntegral;
 } TV_ITEMEX, *LPTVITEMEX;
 
 #define TVITEM TV_ITEM
@@ -2437,8 +2445,8 @@
     UINT32 dwState;
     UINT32 dwStateMask;
     LPSTR  pszText;
-    int    cchTextMax;
-    int    iImage;
+    INT32  cchTextMax;
+    INT32  iImage;
     LPARAM lParam;
 } TCITEM32A, *LPTCITEM32A;
 
@@ -2667,114 +2675,14 @@
 
 
 
-/**************************************************************************
- *  UNDOCUMENTED functions
- */
-
-/* private heap memory functions */
-
-LPVOID WINAPI COMCTL32_Alloc (DWORD);
-LPVOID WINAPI COMCTL32_ReAlloc (LPVOID, DWORD);
-BOOL32 WINAPI COMCTL32_Free (LPVOID);
-DWORD  WINAPI COMCTL32_GetSize (LPVOID);
-
-
-INT32  WINAPI Str_GetPtr32A (LPCSTR, LPSTR, INT32);
-BOOL32 WINAPI Str_SetPtr32A (LPSTR *, LPCSTR);
-INT32  WINAPI Str_GetPtr32W (LPCWSTR, LPWSTR, INT32);
-BOOL32 WINAPI Str_SetPtr32W (LPWSTR *, LPCWSTR);
-#define Str_GetPtr WINELIB_NAME_AW(Str_GetPtr)
-#define Str_SetPtr WINELIB_NAME_AW(Str_SetPtr)
-
-
-/* Dynamic Storage Array */
-
-typedef struct _DSA
-{
-    INT32  nItemCount;
-    LPVOID pData;
-    INT32  nMaxCount;
-    INT32  nItemSize;
-    INT32  nGrow;
-} DSA, *HDSA;
-
-HDSA   WINAPI DSA_Create (INT32, INT32);
-BOOL32 WINAPI DSA_DeleteAllItems (const HDSA);
-INT32  WINAPI DSA_DeleteItem (const HDSA, INT32);
-BOOL32 WINAPI DSA_Destroy (const HDSA);
-BOOL32 WINAPI DSA_GetItem (const HDSA, INT32, LPVOID);
-LPVOID WINAPI DSA_GetItemPtr (const HDSA, INT32);
-INT32  WINAPI DSA_InsertItem (const HDSA, INT32, LPVOID);
-BOOL32 WINAPI DSA_SetItem (const HDSA, INT32, LPVOID);
-
-typedef INT32 (CALLBACK *DSAENUMPROC)(LPVOID, DWORD);
-VOID   WINAPI DSA_EnumCallback (const HDSA, DSAENUMPROC, LPARAM);
-BOOL32 WINAPI DSA_DestroyCallback (const HDSA, DSAENUMPROC, LPARAM);
-
-
-/* Dynamic Pointer Array */
-
-typedef struct _DPA
-{
-    INT32    nItemCount;
-    LPVOID   *ptrs; 
-    HANDLE32 hHeap;
-    INT32    nGrow;
-    INT32    nMaxCount;
-} DPA, *HDPA;
-
-HDPA   WINAPI DPA_Create (INT32);
-HDPA   WINAPI DPA_CreateEx (INT32, HANDLE32);
-BOOL32 WINAPI DPA_Destroy (const HDPA);
-HDPA   WINAPI DPA_Clone (const HDPA, const HDPA);
-LPVOID WINAPI DPA_GetPtr (const HDPA, INT32);
-INT32  WINAPI DPA_GetPtrIndex (const HDPA, LPVOID);
-BOOL32 WINAPI DPA_Grow (const HDPA, INT32);
-BOOL32 WINAPI DPA_SetPtr (const HDPA, INT32, LPVOID);
-INT32  WINAPI DPA_InsertPtr (const HDPA, INT32, LPVOID);
-LPVOID WINAPI DPA_DeletePtr (const HDPA, INT32);
-BOOL32 WINAPI DPA_DeleteAllPtrs (const HDPA);
-
-typedef INT32 (CALLBACK *PFNDPACOMPARE)(LPVOID, LPVOID, LPARAM);
-BOOL32 WINAPI DPA_Sort (const HDPA, PFNDPACOMPARE, LPARAM);
-
-#define DPAS_SORTED             0x0001
-#define DPAS_INSERTBEFORE       0x0002
-#define DPAS_INSERTAFTER        0x0004
- 
-INT32  WINAPI DPA_Search (const HDPA, LPVOID, INT32, PFNDPACOMPARE, LPARAM, UINT32);
-
-#define DPAM_SORT               0x0001
-
-BOOL32 WINAPI DPA_Merge (const HDPA, const HDPA, DWORD, PFNDPACOMPARE, LPVOID, LPARAM);
-
-typedef INT32 (CALLBACK *DPAENUMPROC)(LPVOID, DWORD);
-VOID   WINAPI DPA_EnumCallback (const HDPA, DPAENUMPROC, LPARAM);
-BOOL32 WINAPI DPA_DestroyCallback (const HDPA, DPAENUMPROC, LPARAM);
-
-
-#define DPA_GetPtrCount(hdpa)  (*(INT32*)(hdpa))
-#define DPA_GetPtrPtr(hdpa)    (*((LPVOID**)((BYTE*)(hdpa)+sizeof(INT32))))
-#define DPA_FastGetPtr(hdpa,i) (DPA_GetPtrPtr(hdpa)[i])
-
-
-/* notification helper functions */
-
-LRESULT WINAPI COMCTL32_SendNotify (HWND32, HWND32, UINT32, LPNMHDR);
-
-/* type and functionality of last parameter is still unknown */
-LRESULT WINAPI COMCTL32_SendNotifyEx (HWND32, HWND32, UINT32, LPNMHDR, DWORD);
-
 /*
  * Property sheet support (callback procs)
  */
 
-
-#define WC_PROPSHEET32A      "SysPager"
-#define WC_PROPSHEET32W      L"SysPager"
+#define WC_PROPSHEET32A      "SysPropertySheet"
+#define WC_PROPSHEET32W      L"SysPropertySheet"
 #define WC_PROPSHEET         WINELIB_NAME_AW(WC_PROPSHEET)
 
-
 struct _PROPSHEETPAGE32A;  /** need to forward declare those structs **/
 struct _PROPSHEETPAGE32W;
 struct _PSP;
@@ -2945,7 +2853,7 @@
 INT32 WINAPI PropertySheet32W(LPCPROPSHEETHEADER32W);
 #define PropertySheet WINELIB_NAME_AW(PropertySheet)
 HPROPSHEETPAGE WINAPI CreatePropertySheetPage32A(LPCPROPSHEETPAGE32A);
-HPROPSHEETPAGE WINAPI  CreatePropertySheetPage32W(LPCPROPSHEETPAGE32W);
+HPROPSHEETPAGE WINAPI CreatePropertySheetPage32W(LPCPROPSHEETPAGE32W);
 #define CreatePropertySheetPage WINELIB_NAME_AW(CreatePropertySheetPage)
 BOOL32 WINAPI DestroyPropertySheetPage32(HPROPSHEETPAGE hPropPage);
 #define DestroyPropertySheetPage WINELIB_NAME(DestroyPropertySheetPage)
@@ -2953,6 +2861,7 @@
 /*
  * Property sheet support (UNICODE-WineLib)
  */
+
 DECL_WINELIB_TYPE_AW(PROPSHEETPAGE) 
 DECL_WINELIB_TYPE_AW(LPPROPSHEETPAGE) 
 DECL_WINELIB_TYPE_AW(LPCPROPSHEETPAGE) 
@@ -2962,6 +2871,7 @@
 DECL_WINELIB_TYPE_AW(LPFNPSPCALLBACK) 
 DECL_WINELIB_TYPE(PFNPROPSHEETCALLBACK) 
 
+
 /*
  * Property sheet support (defines)
  */
@@ -3080,7 +2990,7 @@
  */
 
 #define PropSheet_SetCurSel(hDlg, hpage, index) \
-	SNDMSG(hDlg, PSM_SETCURSEL, (WPARAM)index, (LPARAM)hpage)
+	SeandMessage32A(hDlg, PSM_SETCURSEL, (WPARAM32)index, (LPARAM)hpage)
 	 
 #define PropSheet_RemovePage(hDlg, index, hpage) \
 	SNDMSG(hDlg, PSM_REMOVEPAGE, index, (LPARAM)hpage)
@@ -3134,6 +3044,104 @@
 	(HWND)SNDMSG(hDlg, PSM_GETCURRENTPAGEHWND, 0, 0L)
 	 
 
+/**************************************************************************
+ *  UNDOCUMENTED functions
+ */
+
+/* private heap memory functions */
+
+LPVOID WINAPI COMCTL32_Alloc (DWORD);
+LPVOID WINAPI COMCTL32_ReAlloc (LPVOID, DWORD);
+BOOL32 WINAPI COMCTL32_Free (LPVOID);
+DWORD  WINAPI COMCTL32_GetSize (LPVOID);
+
+
+INT32  WINAPI Str_GetPtr32A (LPCSTR, LPSTR, INT32);
+BOOL32 WINAPI Str_SetPtr32A (LPSTR *, LPCSTR);
+INT32  WINAPI Str_GetPtr32W (LPCWSTR, LPWSTR, INT32);
+BOOL32 WINAPI Str_SetPtr32W (LPWSTR *, LPCWSTR);
+#define Str_GetPtr WINELIB_NAME_AW(Str_GetPtr)
+#define Str_SetPtr WINELIB_NAME_AW(Str_SetPtr)
+
+
+/* Dynamic Storage Array */
+
+typedef struct _DSA
+{
+    INT32  nItemCount;
+    LPVOID pData;
+    INT32  nMaxCount;
+    INT32  nItemSize;
+    INT32  nGrow;
+} DSA, *HDSA;
+
+HDSA   WINAPI DSA_Create (INT32, INT32);
+BOOL32 WINAPI DSA_DeleteAllItems (const HDSA);
+INT32  WINAPI DSA_DeleteItem (const HDSA, INT32);
+BOOL32 WINAPI DSA_Destroy (const HDSA);
+BOOL32 WINAPI DSA_GetItem (const HDSA, INT32, LPVOID);
+LPVOID WINAPI DSA_GetItemPtr (const HDSA, INT32);
+INT32  WINAPI DSA_InsertItem (const HDSA, INT32, LPVOID);
+BOOL32 WINAPI DSA_SetItem (const HDSA, INT32, LPVOID);
+
+typedef INT32 (CALLBACK *DSAENUMPROC)(LPVOID, DWORD);
+VOID   WINAPI DSA_EnumCallback (const HDSA, DSAENUMPROC, LPARAM);
+BOOL32 WINAPI DSA_DestroyCallback (const HDSA, DSAENUMPROC, LPARAM);
+
+
+/* Dynamic Pointer Array */
+
+typedef struct _DPA
+{
+    INT32    nItemCount;
+    LPVOID   *ptrs; 
+    HANDLE32 hHeap;
+    INT32    nGrow;
+    INT32    nMaxCount;
+} DPA, *HDPA;
+
+HDPA   WINAPI DPA_Create (INT32);
+HDPA   WINAPI DPA_CreateEx (INT32, HANDLE32);
+BOOL32 WINAPI DPA_Destroy (const HDPA);
+HDPA   WINAPI DPA_Clone (const HDPA, const HDPA);
+LPVOID WINAPI DPA_GetPtr (const HDPA, INT32);
+INT32  WINAPI DPA_GetPtrIndex (const HDPA, LPVOID);
+BOOL32 WINAPI DPA_Grow (const HDPA, INT32);
+BOOL32 WINAPI DPA_SetPtr (const HDPA, INT32, LPVOID);
+INT32  WINAPI DPA_InsertPtr (const HDPA, INT32, LPVOID);
+LPVOID WINAPI DPA_DeletePtr (const HDPA, INT32);
+BOOL32 WINAPI DPA_DeleteAllPtrs (const HDPA);
+
+typedef INT32 (CALLBACK *PFNDPACOMPARE)(LPVOID, LPVOID, LPARAM);
+BOOL32 WINAPI DPA_Sort (const HDPA, PFNDPACOMPARE, LPARAM);
+
+#define DPAS_SORTED             0x0001
+#define DPAS_INSERTBEFORE       0x0002
+#define DPAS_INSERTAFTER        0x0004
+ 
+INT32  WINAPI DPA_Search (const HDPA, LPVOID, INT32, PFNDPACOMPARE, LPARAM, UINT32);
+
+#define DPAM_SORT               0x0001
+
+BOOL32 WINAPI DPA_Merge (const HDPA, const HDPA, DWORD, PFNDPACOMPARE, LPVOID, LPARAM);
+
+typedef INT32 (CALLBACK *DPAENUMPROC)(LPVOID, DWORD);
+VOID   WINAPI DPA_EnumCallback (const HDPA, DPAENUMPROC, LPARAM);
+BOOL32 WINAPI DPA_DestroyCallback (const HDPA, DPAENUMPROC, LPARAM);
+
+
+#define DPA_GetPtrCount(hdpa)  (*(INT32*)(hdpa))
+#define DPA_GetPtrPtr(hdpa)    (*((LPVOID**)((BYTE*)(hdpa)+sizeof(INT32))))
+#define DPA_FastGetPtr(hdpa,i) (DPA_GetPtrPtr(hdpa)[i])
+
+
+/* notification helper functions */
+
+LRESULT WINAPI COMCTL32_SendNotify (HWND32, HWND32, UINT32, LPNMHDR);
+
+/* type and functionality of last parameter is still unknown */
+LRESULT WINAPI COMCTL32_SendNotifyEx (HWND32, HWND32, UINT32, LPNMHDR, DWORD);
+
 #ifdef __cplusplus
 }
 #endif
