diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index bb04095f379567bcaf0a473fa3f0f264a00874b7..2950b4b6ce3621ae81fbb603c8d8782fdd81cd3a 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -1,7 +1,7 @@
 /*
  * Listview control
  *
- * Copyright 1998 Eric Kohl
+ * Copyright 1998, 1999 Eric Kohl
  * Copyright 1999 Luc Tourangeau
  *
  * NOTES
@@ -10,6 +10,7 @@
  * TODO:
  *   1. No horizontal scrolling when header is larger than the client area.
  *   2. Drawing optimizations.
+ *   3. Hot item handling.
  *
  * Notifications:
  *   LISTVIEW_Notify : most notifications from children (editbox and header)
@@ -18,20 +19,21 @@
  *   LISTVIEW_SetItemCount : empty stub 
  * 
  * Unicode:
- *   LISTVIEW_SetItem32W : no unicode support
- *   LISTVIEW_InsertItem32W : no unicode support
- *   LISTVIEW_InsertColumn32W : no unicode support
+ *   LISTVIEW_SetItemW : no unicode support
+ *   LISTVIEW_InsertItemW : no unicode support
+ *   LISTVIEW_InsertColumnW : no unicode support
  *   LISTVIEW_GetColumnW : no unicode support
+ *   LISTVIEW_SetColumnW : no unicode support
  *
  * Advanced functionality:
  *   LISTVIEW_GetNumberOfWorkAreas : not implemented
  *   LISTVIEW_GetHotCursor : not implemented
- *   LISTVIEW_GetHotItem : not implemented
  *   LISTVIEW_GetHoverTime : not implemented
  *   LISTVIEW_GetISearchString : not implemented 
  *   LISTVIEW_GetBkImage : not implemented
  *   LISTVIEW_EditLabel : REPORT (need to implement a timer)
  *   LISTVIEW_GetColumnOrderArray : not implemented
+ *   LISTVIEW_SetColumnOrderArray : not implemented
  *   LISTVIEW_Arrange : empty stub
  *   LISTVIEW_ApproximateViewRect : incomplete
  *   LISTVIEW_Scroll : not implemented 
@@ -3161,7 +3163,28 @@ static LRESULT LISTVIEW_GetCountPerPage(HWND hwnd)
 }
 
 /* LISTVIEW_GetEditControl */
-/* LISTVIEW_GetExtendedListViewStyle */
+
+/***
+ * DESCRIPTION:
+ * Retrieves the extended listview style.
+ *
+ * PARAMETERS:
+ * [I] HWND  : window handle
+ *
+ * RETURN:
+ *   SUCCESS : previous style
+ *   FAILURE : 0
+ */
+static LRESULT LISTVIEW_GetExtendedListViewStyle(HWND hwnd)
+{
+    LISTVIEW_INFO *infoPtr;
+
+    /* make sure we can get the listview info */
+    if (!(infoPtr = (LISTVIEW_INFO *)GetWindowLongA(hwnd, 0)))
+	return (0);
+
+    return (infoPtr->dwExStyle);
+}
 
 /***
  * DESCRIPTION:
@@ -3416,8 +3439,30 @@ static LRESULT LISTVIEW_GetItemA(HWND hwnd, LPLVITEMA lpLVItem)
 
 /* LISTVIEW_GetItemW */
 /* LISTVIEW_GetHotCursor */
-/* LISTVIEW_GetHotItem */
-/* LISTVIEW_GetHoverTime> */
+
+/***
+ * DESCRIPTION:
+ * Retrieves the index of the hot item.
+ *
+ * PARAMETERS:
+ * [I] HWND  : window handle
+ *
+ * RETURN:
+ *   SUCCESS : hot item index
+ *   FAILURE : -1 (no hot item)
+ */
+static LRESULT LISTVIEW_GetHotItem(HWND hwnd)
+{
+    LISTVIEW_INFO *infoPtr;
+
+    /* make sure we can get the listview info */
+    if (!(infoPtr = (LISTVIEW_INFO *)GetWindowLongA(hwnd, 0)))
+	return (-1);
+
+    return (infoPtr->nHotItem);
+}
+
+/* LISTVIEW_GetHoverTime */
 
 /***
  * DESCRIPTION:
@@ -4632,6 +4677,8 @@ static LRESULT LISTVIEW_SetBkColor(HWND hwnd, COLORREF clrBk)
   return TRUE;
 }
 
+/* LISTVIEW_SetBkImage */
+
 /***
  * DESCRIPTION:
  * Sets the callback mask. This mask will be used when the parent
@@ -4762,6 +4809,9 @@ static LRESULT LISTVIEW_SetColumnA(HWND hwnd, INT nColumn,
   return bResult;
 }
 
+/* LISTVIEW_SetColumnW */
+/* LISTVIEW_SetColumnOrderArray */
+
 /***
  * DESCRIPTION:
  * Sets the width of a column
@@ -4812,6 +4862,71 @@ static LRESULT LISTVIEW_SetColumnWidth(HWND hwnd, INT iCol, INT cx)
     return lret;
 }
 
+/***
+ * DESCRIPTION:
+ * Sets the extended listview style.
+ *
+ * PARAMETERS:
+ * [I] HWND  : window handle
+ * [I] DWORD : mask
+ * [I] DWORD : style
+ *
+ * RETURN:
+ *   SUCCESS : previous style
+ *   FAILURE : 0
+ */
+static LRESULT LISTVIEW_SetExtendedListViewStyle(HWND hwnd, DWORD dwMask, DWORD dwStyle)
+{
+    LISTVIEW_INFO *infoPtr;
+    DWORD dwOldStyle;
+
+    /* make sure we can get the listview info */
+    if (!(infoPtr = (LISTVIEW_INFO *)GetWindowLongA(hwnd, 0)))
+	return (0);
+
+    /* store previous style */
+    dwOldStyle = infoPtr->dwExStyle;
+
+    /* set new style */
+    infoPtr->dwExStyle = (dwOldStyle & ~dwMask) | (dwStyle & dwMask);
+
+    return (dwOldStyle);
+}
+
+/* LISTVIEW_SetHotCursor */
+
+/***
+ * DESCRIPTION:
+ * Sets the hot item index.
+ *
+ * PARAMETERS:
+ * [I] HWND  : window handle
+ * [I] INT   : index
+ *
+ * RETURN:
+ *   SUCCESS : previous hot item index
+ *   FAILURE : -1 (no hot item)
+ */
+static LRESULT LISTVIEW_SetHotItem(HWND hwnd, INT iIndex)
+{
+    LISTVIEW_INFO *infoPtr;
+    INT iOldIndex;
+
+    /* make sure we can get the listview info */
+    if (!(infoPtr = (LISTVIEW_INFO *)GetWindowLongA(hwnd, 0)))
+	return (-1);
+
+    /* store previous index */
+    iOldIndex = infoPtr->nHotItem;
+
+    /* set new style */
+    infoPtr->nHotItem = iIndex;
+
+    return (iOldIndex);
+}
+
+/* LISTVIEW_SetIconSpacing */
+
 /***
  * DESCRIPTION:
  * Sets image lists.
@@ -4898,13 +5013,35 @@ static LRESULT LISTVIEW_SetItemA(HWND hwnd, LPLVITEMA lpLVItem)
  * PARAMETER(S):
  * [I] HWND : window handle
  * [I] INT : item count (prjected number of items)
+ * [I] DWORD : update flags
  *
  * RETURN:
- * None
+ *   SUCCESS : TRUE
+ *   FAILURE : FALSE
  */
-static VOID LISTVIEW_SetItemCount(HWND hwnd, INT nItemCount)
+static BOOL LISTVIEW_SetItemCount(HWND hwnd, INT nItems, DWORD dwFlags)
+{
+  LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO*)GetWindowLongA(hwnd, 0);
+
+  FIXME("(%d %08lx)empty stub!\n", nItems, dwFlags);
+
+  if (nItems == 0)
+    return LISTVIEW_DeleteAllItems (hwnd);
+
+  if (nItems > GETITEMCOUNT(infoPtr))
 {
-  FIXME("empty stub!\n");
+    /* append items */
+    FIXME("append items\n");
+
+  }
+  else if (nItems < GETITEMCOUNT(infoPtr))
+  {
+    /* remove items */
+    FIXME("remove items\n");
+
+  }
+
+  return TRUE;
 }
 
 /***
@@ -4953,6 +5090,8 @@ static BOOL LISTVIEW_SetItemPosition(HWND hwnd, INT nItem,
   return bResult;
 }
 
+/* LISTVIEW_SetItemPosition32 */
+
 /***
  * DESCRIPTION:
  * Sets the state of one or many items.
@@ -5036,6 +5175,29 @@ static BOOL LISTVIEW_SetItemTextA(HWND hwnd, INT nItem, LPLVITEMA lpLVItem)
   return bResult;
 }
 
+/* LISTVIEW_SetItemTextW */
+
+/***
+ * DESCRIPTION:
+ * Set item index that marks the start of a multiple selection.
+ *
+ * PARAMETER(S):
+ * [I] HWND : window handle
+ * [I] INT  : index
+ *
+ * RETURN:
+ * Index number or -1 if there is no selection mark.
+ */
+static LRESULT LISTVIEW_SetSelectionMark(HWND hwnd, INT nIndex)
+{
+  LISTVIEW_INFO *infoPtr = (LISTVIEW_INFO *)GetWindowLongA(hwnd, 0);
+  INT nOldIndex = infoPtr->nSelectionMark;
+
+  infoPtr->nSelectionMark = nIndex;
+
+  return nOldIndex;
+}
+
 /***
  * DESCRIPTION:
  * Sets the text background color.
@@ -5080,6 +5242,9 @@ static LRESULT LISTVIEW_SetTextColor (HWND hwnd, COLORREF clrText)
   return TRUE;
 }
 
+/* LISTVIEW_SetToolTips */
+/* LISTVIEW_SetUnicodeFormat */
+/* LISTVIEW_SetWorkAreas */
 
 /***
  * DESCRIPTION:
@@ -5168,6 +5333,8 @@ static LRESULT LISTVIEW_SortItems(HWND hwnd, WPARAM wParam, LPARAM lParam)
     return TRUE;
 }
 
+/* LISTVIEW_SubItemHitTest */
+
 /***
  * DESCRIPTION:
  * Updates an items or rearranges the listview control.
@@ -5246,6 +5413,7 @@ static LRESULT LISTVIEW_Create(HWND hwnd, WPARAM wParam, LPARAM lParam)
   infoPtr->uCallbackMask = 0;
   infoPtr->nFocusedItem = -1;
   infoPtr->nSelectionMark = -1;
+  infoPtr->nHotItem = -1;
   infoPtr->iconSpacing.cx = GetSystemMetrics(SM_CXICONSPACING);
   infoPtr->iconSpacing.cy = GetSystemMetrics(SM_CYICONSPACING);
   ZeroMemory(&infoPtr->rcList, sizeof(RECT));
@@ -6480,7 +6648,10 @@ LRESULT WINAPI LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
     return LISTVIEW_GetColumnA(hwnd, (INT)wParam, (LPLVCOLUMNA)lParam);
 
 /*	case LVM_GETCOLUMNW: */
-/*	case LVM_GETCOLUMNORDERARRAY: */
+
+  case LVM_GETCOLUMNORDERARRAY:
+    FIXME("Unimplemented msg LVM_GETCOLUMNORDERARRAY\n");
+    return 0;
 
   case LVM_GETCOLUMNWIDTH:
     return LISTVIEW_GetColumnWidth(hwnd, (INT)wParam);
@@ -6489,13 +6660,18 @@ LRESULT WINAPI LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
     return LISTVIEW_GetCountPerPage(hwnd);
 
 /*	case LVM_GETEDITCONTROL: */
-/*	case LVM_GETEXTENDEDLISTVIEWSTYLE: */
+
+  case LVM_GETEXTENDEDLISTVIEWSTYLE:
+    return LISTVIEW_GetExtendedListViewStyle(hwnd);
 
   case LVM_GETHEADER:
     return LISTVIEW_GetHeader(hwnd);
 
 /*	case LVM_GETHOTCURSOR: */
-/*	case LVM_GETHOTITEM: */
+
+  case LVM_GETHOTITEM:
+    return LISTVIEW_GetHotItem(hwnd);
+
 /*	case LVM_GETHOVERTIME: */
 
   case LVM_GETIMAGELIST:
@@ -6598,15 +6774,25 @@ LRESULT WINAPI LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
   case LVM_SETCOLUMNA:
     return LISTVIEW_SetColumnA(hwnd, (INT)wParam, (LPLVCOLUMNA)lParam);
 
-/*	case LVM_SETCOLUMNW: */
-/*	case LVM_SETCOLUMNORDERARRAY: */
+  case LVM_SETCOLUMNW:
+    FIXME("Unimplemented msg LVM_SETCOLUMNW\n");
+    return 0;
+
+  case LVM_SETCOLUMNORDERARRAY:
+    FIXME("Unimplemented msg LVM_SETCOLUMNORDERARRAY\n");
+    return 0;
 
   case LVM_SETCOLUMNWIDTH:
     return LISTVIEW_SetColumnWidth(hwnd, (INT)wParam, (INT)lParam);
 
-/*	case LVM_SETEXTENDEDLISTVIEWSTYLE: */
+  case LVM_SETEXTENDEDLISTVIEWSTYLE:
+    return LISTVIEW_SetExtendedListViewStyle(hwnd, (DWORD)wParam, (DWORD)lParam);
+
 /*	case LVM_SETHOTCURSOR: */
-/*	case LVM_SETHOTITEM: */
+
+  case LVM_SETHOTITEM:
+    return LISTVIEW_SetHotItem(hwnd, (INT)wParam);
+
 /*	case LVM_SETHOVERTIME: */
 /*	case LVM_SETICONSPACING: */
 	
@@ -6619,14 +6805,13 @@ LRESULT WINAPI LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
 /*	case LVM_SETITEMW: */
 
   case LVM_SETITEMCOUNT: 
-    LISTVIEW_SetItemCount(hwnd, (INT)wParam);
-    break;
+    return LISTVIEW_SetItemCount(hwnd, (INT)wParam, (DWORD)lParam);
     
   case LVM_SETITEMPOSITION:
     return LISTVIEW_SetItemPosition(hwnd, (INT)wParam, (INT)LOWORD(lParam),
                                     (INT)HIWORD(lParam));
 
-/*	case LVM_SETITEMPOSITION: */
+/*	case LVM_SETITEMPOSITION32: */
 
   case LVM_SETITEMSTATE: 
     return LISTVIEW_SetItemState(hwnd, (INT)wParam, (LPLVITEMA)lParam);
@@ -6634,7 +6819,10 @@ LRESULT WINAPI LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam,
   case LVM_SETITEMTEXTA:
     return LISTVIEW_SetItemTextA(hwnd, (INT)wParam, (LPLVITEMA)lParam);
 
-/*	case LVM_SETSELECTIONMARK: */
+/*	case LVM_SETITEMTEXTW: */
+
+  case LVM_SETSELECTIONMARK:
+    return LISTVIEW_SetSelectionMark(hwnd, (INT)lParam);
 
   case LVM_SETTEXTBKCOLOR:
     return LISTVIEW_SetTextBkColor(hwnd, (COLORREF)lParam);
diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c
index 3f3c05a242ded3f32be9b5c628ce94e0fe756851..f313a4ba4998c854e8ca1113219b1192d9a1b3fb 100644
--- a/dlls/comctl32/treeview.c
+++ b/dlls/comctl32/treeview.c
@@ -1461,7 +1461,8 @@ LRESULT WINAPI TREEVIEW_Sort (
 
 	/* undocumented feature: TVI_ROOT means `sort the whole tree' */
 
-  if (parent==TVI_ROOT) parent=infoPtr->TopRootItem;
+  if (parent==TVI_ROOT)
+    parent=infoPtr->TopRootItem;
 
   /* Check for a valid handle to the parent item */
   if (!TREEVIEW_ValidItem(infoPtr, parent))
@@ -1870,6 +1871,8 @@ TREEVIEW_InsertItemA (HWND hwnd, WPARAM wParam, LPARAM lParam)
 
    return (LRESULT) iItem;
 }
+
+
 static LRESULT
 TREEVIEW_InsertItemW(HWND hwnd, WPARAM wParam, LPARAM lParam)
 {
@@ -1921,8 +1924,6 @@ TREEVIEW_InsertItemW(HWND hwnd, WPARAM wParam, LPARAM lParam)
 }
 
 
-
-
 static LRESULT
 TREEVIEW_DeleteItem (HWND hwnd, WPARAM wParam, LPARAM lParam)
 {
@@ -2176,6 +2177,7 @@ TREEVIEW_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
     infoPtr->clrText=-1;	/* use system color */
     infoPtr->dropItem=0;
     infoPtr->pCallBackSort=NULL;
+    infoPtr->uScrollTime = 300;  /* milliseconds */
 
 /*
     infoPtr->hwndNotify = GetParent32 (hwnd);
@@ -3498,6 +3500,27 @@ TREEVIEW_KeyDown (HWND hwnd, WPARAM wParam, LPARAM lParam)
 }
 
 
+static LRESULT
+TREEVIEW_GetScrollTime (HWND hwnd)
+{
+  TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd);
+
+  return infoPtr->uScrollTime;
+}
+
+
+static LRESULT
+TREEVIEW_SetScrollTime (HWND hwnd, UINT uScrollTime)
+{
+  TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd);
+  UINT uOldScrollTime = infoPtr->uScrollTime;
+
+  infoPtr->uScrollTime = min (uScrollTime, 100);
+
+  return uOldScrollTime;
+}
+
+
 LRESULT WINAPI
 TREEVIEW_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
@@ -3542,7 +3565,7 @@ TREEVIEW_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
       		return TREEVIEW_GetItemA (hwnd, wParam, lParam);
 
     	case TVM_GETITEMW:
-      		FIXME("Unimplemented msg TVM_GETITEM32W\n");
+      		FIXME("Unimplemented msg TVM_GETITEMW\n");
       		return 0;
 
     	case TVM_SETITEMA:
@@ -3553,11 +3576,11 @@ TREEVIEW_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
       		return 0;
 
     	case TVM_EDITLABELA:
-      		FIXME("Unimplemented msg TVM_EDITLABEL32A \n");
+      		FIXME("Unimplemented msg TVM_EDITLABELA \n");
       		return 0;
 
     	case TVM_EDITLABELW:
-      		FIXME("Unimplemented msg TVM_EDITLABEL32W \n");
+      		FIXME("Unimplemented msg TVM_EDITLABELW \n");
       		return 0;
 
     	case TVM_GETEDITCONTROL:
@@ -3586,11 +3609,11 @@ TREEVIEW_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
       		return TREEVIEW_EndEditLabelNow (hwnd, wParam, lParam);
   
     	case TVM_GETISEARCHSTRINGA:
-      		FIXME("Unimplemented msg TVM_GETISEARCHSTRING32A\n");
+      		FIXME("Unimplemented msg TVM_GETISEARCHSTRINGA\n");
       		return 0;
   
     	case TVM_GETISEARCHSTRINGW:
-      		FIXME("Unimplemented msg TVM_GETISEARCHSTRING32W\n");
+      		FIXME("Unimplemented msg TVM_GETISEARCHSTRINGW\n");
       		return 0;
   
     	case TVM_GETTOOLTIPS:
@@ -3622,12 +3645,10 @@ TREEVIEW_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
       		return TREEVIEW_GetTextColor (hwnd);
   
     	case TVM_SETSCROLLTIME:
-      		FIXME("Unimplemented msg TVM_SETSCROLLTIME\n");
-      		return 0;
+      		return TREEVIEW_SetScrollTime (hwnd, (UINT)wParam);
   
     	case TVM_GETSCROLLTIME:
-      		FIXME("Unimplemented msg TVM_GETSCROLLTIME\n");
-      		return 0;
+      		return TREEVIEW_GetScrollTime (hwnd);
 
     	case TVM_GETITEMSTATE:
       		return TREEVIEW_GetItemState (hwnd,wParam, lParam);
diff --git a/include/listview.h b/include/listview.h
index 96a10788069defe8c31e2676515a5543f9f45428..85a604c9a16a67bbaffd0812f46d87abedfdc5e4 100644
--- a/include/listview.h
+++ b/include/listview.h
@@ -45,6 +45,7 @@ typedef struct tagLISTVIEW_INFO
     INT nItemHeight;
     INT nItemWidth;
     INT nSelectionMark;
+    INT nHotItem;
     SHORT notifyFormat;
     RECT rcList;
     RECT rcView;
diff --git a/include/treeview.h b/include/treeview.h
index 8e006a9f53a30e7b639720287144cf9a18ccf253..fb525479653e2d04d03942d1b224b60a43912a49 100644
--- a/include/treeview.h
+++ b/include/treeview.h
@@ -53,6 +53,7 @@ typedef struct tagTREEVIEW_INFO
   HTREEITEM     uMaxHandle;     /* needed for delete_item */
   HTREEITEM     TopRootItem;    /* handle to first item in treeview */
   INT           cdmode;         /* last custom draw setting */
+  UINT          uScrollTime;	/* max. time for scrolling in milliseconds*/
   UINT          uItemHeight;    /* item height, -1 for default item height */
   UINT          uRealItemHeight;/* current item height in pixels */
   UINT          uVisibleHeight; /* visible height of treeview in pixels */