- Stub implementations for FtpGetFileSize, FtpCommand{A,W},
  HttpSendRequestExW, InternetGetLastResponseInfoW,
  InternetConfirmZoneCrossing{A,W}, InternetDial{A,W},
  InternetGoOnline{A,W}, InternetHangUp, CreateMD5SSOHash,
  InternetClearAllPerSiteCookieDecisions,
  InternetEnumPerSiteCookieDecision{A,W}, InternetGetCookieEx{A,W},
  InternetGetPerSiteCookieDecision{A,W},
  InternetSetPerSiteCookieDecision{A,W}, InternetSetCookieEx{A,W},
  ResumeSuspendedDownload, RetrieveUrlCacheEntryFileW,
  UnlockUrlCacheEntryFileW, {Create,Delete}UrlCacheEntryW,
  CommitUrlCacheEntryW, RetrieveUrlCacheEntryStreamW,
  FindCloseUrlCache, FindFirstUrlCacheEntryEx{A,W},
  FindFirstUrlCacheGroup, FindNextUrlCacheEntry{,Ex}{A,W},
  FindNextUrlCacheGroup, SetUrlCacheEntryGroup{A,W},
  {Get,Set}UrlCacheGroupAttribute{A,W}, SetUrlCacheConfigInfo{A,W}.
- Spec file stubs for new undocumented functions
  ForceNexusLookup{,ExW}, Ftp{Get,Put}FileEx, HttpCheckDavCompliance,
  InternetAlgIdToString{A,W}, InternetFortezzaCommand,
  InternetGetCertByURLA, InternetQueryFortezzaStatus,
  InternetSecurityProtocolToString{A,W}, InternetSetDialState{A,W},
  InternetShowSecurityInfoByURL{A,W}, IsUrlCacheEntryExpired{A,W},
  Privacy{Get,Set}ZonePreferenceW, RegisterUrlCacheNotification,
  UrlZonesDetach.
- Use memcpy instead of strncpy in InternetGetLastResponseInfoA.
- Add and improve some traces.
- Fix my own coding style in InternetTimeToSystemTimeW.
- Fix a couple of signedness warnings.

diff --git a/dlls/wininet/ftp.c b/dlls/wininet/ftp.c
index 8161f01..6f84a71 100644
--- a/dlls/wininet/ftp.c
+++ b/dlls/wininet/ftp.c
@@ -1233,6 +1233,15 @@
     return bSuccess;
 }
 
+DWORD WINAPI FtpGetFileSize( HINTERNET hFile, LPDWORD lpdwFileSizeHigh )
+{
+    FIXME("(%p, %p)\n", hFile, lpdwFileSizeHigh);
+
+    if (lpdwFileSizeHigh)
+        *lpdwFileSizeHigh = 0;
+
+    return 0;
+}
 
 /***********************************************************************
  *           FtpDeleteFileA  (WININET.@)
@@ -1602,6 +1611,23 @@
     return bSuccess;
 }
 
+BOOL WINAPI FtpCommandA( HINTERNET hConnect, BOOL fExpectResponse, DWORD dwFlags,
+                         LPCSTR lpszCommand, DWORD_PTR dwContext, HINTERNET* phFtpCommand )
+{
+    FIXME("%p %d 0x%08lx %s 0x%08lx %p\n", hConnect, fExpectResponse, dwFlags,
+          debugstr_a(lpszCommand), dwContext, phFtpCommand);
+
+    return TRUE;
+}
+
+BOOL WINAPI FtpCommandW( HINTERNET hConnect, BOOL fExpectResponse, DWORD dwFlags,
+                         LPCWSTR lpszCommand, DWORD_PTR dwContext, HINTERNET* phFtpCommand )
+{
+    FIXME("%p %d 0x%08lx %s 0x%08lx %p\n", hConnect, fExpectResponse, dwFlags,
+          debugstr_w(lpszCommand), dwContext, phFtpCommand);
+
+    return TRUE;
+}
 
 /***********************************************************************
  *           FTP_Connect (internal)
@@ -1623,7 +1649,8 @@
     static const WCHAR szDefaultPassword[] = {'u','s','e','r','@','s','e','r','v','e','r','\0'};
     struct sockaddr_in socketAddr;
     struct hostent *phe = NULL;
-    INT nsocket = -1, sock_namelen;
+    INT nsocket = -1;
+    UINT sock_namelen;
     BOOL bSuccess = FALSE;
     LPWININETFTPSESSIONW lpwfs = NULL;
     HINTERNET handle = NULL;
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c
index 4369d4f..294e29a 100644
--- a/dlls/wininet/http.c
+++ b/dlls/wininet/http.c
@@ -1205,6 +1205,22 @@
 }
 
 /***********************************************************************
+ *           HttpSendRequestExW (WININET.@)
+ *
+ * Sends the specified request to the HTTP server and allows chunked
+ * transfers
+ */
+BOOL WINAPI HttpSendRequestExW(HINTERNET hRequest,
+                   LPINTERNET_BUFFERSW lpBuffersIn,
+                   LPINTERNET_BUFFERSW lpBuffersOut,
+                   DWORD dwFlags, DWORD dwContext)
+{
+  FIXME("(%p, %p, %p, %08lx, %08lx): stub\n", hRequest, lpBuffersIn,
+    lpBuffersOut, dwFlags, dwContext);
+  return FALSE;
+}
+
+/***********************************************************************
  *           HttpSendRequestW (WININET.@)
  *
  * Sends the specified request to the HTTP server
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index c631826..662de3c 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -600,8 +600,8 @@
     *lpdwError = lpwite->dwError;
     if (lpwite->dwError)
     {
-        strncpy(lpszBuffer, lpwite->response, *lpdwBufferLength);
-	*lpdwBufferLength = strlen(lpszBuffer);
+        memcpy(lpszBuffer, lpwite->response, *lpdwBufferLength);
+        *lpdwBufferLength = strlen(lpszBuffer);
     }
     else
         *lpdwBufferLength = 0;
@@ -609,6 +609,34 @@
     return TRUE;
 }
 
+/***********************************************************************
+ *           InternetGetLastResponseInfoW (WININET.@)
+ *
+ * Return last wininet error description on the calling thread
+ *
+ * RETURNS
+ *    TRUE on success of writing to buffer
+ *    FALSE on failure
+ *
+ */
+BOOL WINAPI InternetGetLastResponseInfoW(LPDWORD lpdwError,
+    LPWSTR lpszBuffer, LPDWORD lpdwBufferLength)
+{
+    LPWITHREADERROR lpwite = (LPWITHREADERROR)TlsGetValue(g_dwTlsErrIndex);
+
+    TRACE("\n");
+
+    *lpdwError = lpwite->dwError;
+    if (lpwite->dwError)
+    {
+        memcpy(lpszBuffer, lpwite->response, *lpdwBufferLength);
+        *lpdwBufferLength = lstrlenW(lpszBuffer);
+    }
+    else
+        *lpdwBufferLength = 0;
+
+    return TRUE;
+}
 
 /***********************************************************************
  *           InternetGetConnectedState (WININET.@)
@@ -2127,14 +2155,14 @@
      */
 
     while (*s && !isalphaW( *s )) s++;
-    if (*s == '\0' || *(s + 1) == '\0' || *(s + 2) == '\0') return FALSE;
+    if (s[0] == '\0' || s[1] == '\0' || s[2] == '\0') return FALSE;
     time->wDayOfWeek = 7;
 
     for (i = 0; i < 7; i++)
     {
-        if (toupperW( WININET_wkday[i][0] ) == toupperW( *s ) &&
-            toupperW( WININET_wkday[i][1] ) == toupperW( *(s + 1) ) &&
-            toupperW( WININET_wkday[i][2] ) == toupperW( *(s + 2) ) )
+        if (toupperW( WININET_wkday[i][0] ) == toupperW( s[0] ) &&
+            toupperW( WININET_wkday[i][1] ) == toupperW( s[1] ) &&
+            toupperW( WININET_wkday[i][2] ) == toupperW( s[2] ) )
         {
             time->wDayOfWeek = i;
             break;
@@ -2146,14 +2174,14 @@
     time->wDay = strtolW( s, &s, 10 );
 
     while (*s && !isalphaW( *s )) s++;
-    if (*s == '\0' || *(s + 1) == '\0' || *(s + 2) == '\0') return FALSE;
+    if (s[0] == '\0' || s[1] == '\0' || s[2] == '\0') return FALSE;
     time->wMonth = 0;
 
     for (i = 0; i < 12; i++)
     {
-        if (toupperW( WININET_month[i][0]) == toupperW( *s ) &&
-            toupperW( WININET_month[i][1]) == toupperW( *(s + 1) ) &&
-            toupperW( WININET_month[i][2]) == toupperW( *(s + 2) ) )
+        if (toupperW( WININET_month[i][0]) == toupperW( s[0] ) &&
+            toupperW( WININET_month[i][1]) == toupperW( s[1] ) &&
+            toupperW( WININET_month[i][2]) == toupperW( s[2] ) )
         {
             time->wMonth = i + 1;
             break;
@@ -3153,6 +3181,148 @@
     return FALSE;
 }
 
+DWORD WINAPI InternetConfirmZoneCrossingA( HWND hWnd, LPSTR szUrlPrev, LPSTR szUrlNew, BOOL bPost )
+{
+    FIXME("(%p, %s, %s, %x) stub\n", hWnd, debugstr_a(szUrlPrev), debugstr_a(szUrlNew), bPost);
+    return ERROR_SUCCESS;
+}
+
+DWORD WINAPI InternetConfirmZoneCrossingW( HWND hWnd, LPWSTR szUrlPrev, LPWSTR szUrlNew, BOOL bPost )
+{
+    FIXME("(%p, %s, %s, %x) stub\n", hWnd, debugstr_w(szUrlPrev), debugstr_w(szUrlNew), bPost);
+    return ERROR_SUCCESS;
+}
+
+DWORD WINAPI InternetDialA( HWND hwndParent, LPSTR lpszConnectoid, DWORD dwFlags,
+                            LPDWORD lpdwConnection, DWORD dwReserved )
+{
+    FIXME("(%p, %p, 0x%08lx, %p, 0x%08lx) stub\n", hwndParent, lpszConnectoid, dwFlags,
+          lpdwConnection, dwReserved);
+    return ERROR_SUCCESS;
+}
+
+DWORD WINAPI InternetDialW( HWND hwndParent, LPWSTR lpszConnectoid, DWORD dwFlags,
+                            LPDWORD lpdwConnection, DWORD dwReserved )
+{
+    FIXME("(%p, %p, 0x%08lx, %p, 0x%08lx) stub\n", hwndParent, lpszConnectoid, dwFlags,
+          lpdwConnection, dwReserved);
+    return ERROR_SUCCESS;
+}
+
+BOOL WINAPI InternetGoOnlineA( LPSTR lpszURL, HWND hwndParent, DWORD dwReserved )
+{
+    FIXME("(%s, %p, 0x%08lx) stub\n", debugstr_a(lpszURL), hwndParent, dwReserved);
+    return TRUE;
+}
+
+BOOL WINAPI InternetGoOnlineW( LPWSTR lpszURL, HWND hwndParent, DWORD dwReserved )
+{
+    FIXME("(%s, %p, 0x%08lx) stub\n", debugstr_w(lpszURL), hwndParent, dwReserved);
+    return TRUE;
+}
+
+DWORD WINAPI InternetHangUp( DWORD dwConnection, DWORD dwReserved )
+{
+    FIXME("(0x%08lx, 0x%08lx) stub\n", dwConnection, dwReserved);
+    return ERROR_SUCCESS;
+}
+
+BOOL WINAPI CreateMD5SSOHash( PWSTR pszChallengeInfo, PWSTR pwszRealm, PWSTR pwszTarget,
+                              PBYTE pbHexHash )
+{
+    FIXME("(%s, %s, %s, %p) stub\n", debugstr_w(pszChallengeInfo), debugstr_w(pwszRealm),
+          debugstr_w(pwszTarget), pbHexHash);
+    return FALSE;
+}
+
+BOOL WINAPI InternetClearAllPerSiteCookieDecisions( VOID )
+{
+    FIXME("stub\n");
+    return TRUE;
+}
+
+BOOL WINAPI InternetEnumPerSiteCookieDecisionA( LPSTR pszSiteName, unsigned long *pcSiteNameSize,
+                                                unsigned long *pdwDecision, unsigned long dwIndex )
+{
+    FIXME("(%s, %p, %p, 0x%08lx) stub\n",
+          debugstr_a(pszSiteName), pcSiteNameSize, pdwDecision, dwIndex);
+    return FALSE;
+}
+
+BOOL WINAPI InternetEnumPerSiteCookieDecisionW( LPWSTR pszSiteName, unsigned long *pcSiteNameSize,
+                                                unsigned long *pdwDecision, unsigned long dwIndex )
+{
+    FIXME("(%s, %p, %p, 0x%08lx) stub\n",
+          debugstr_w(pszSiteName), pcSiteNameSize, pdwDecision, dwIndex);
+    return FALSE;
+}
+
+BOOL WINAPI InternetGetCookieExA( LPCSTR pchURL, LPCSTR pchCookieName, LPSTR pchCookieData,
+                                  LPDWORD pcchCookieData, DWORD dwFlags, LPVOID lpReserved)
+{
+    FIXME("(%s, %s, %s, %p, 0x%08lx, %p) stub\n",
+          debugstr_a(pchURL), debugstr_a(pchCookieName), debugstr_a(pchCookieData),
+          pcchCookieData, dwFlags, lpReserved);
+    return FALSE;
+}
+
+BOOL WINAPI InternetGetCookieExW( LPCWSTR pchURL, LPCWSTR pchCookieName, LPWSTR pchCookieData,
+                                  LPDWORD pcchCookieData, DWORD dwFlags, LPVOID lpReserved)
+{
+    FIXME("(%s, %s, %s, %p, 0x%08lx, %p) stub\n",
+          debugstr_w(pchURL), debugstr_w(pchCookieName), debugstr_w(pchCookieData),
+          pcchCookieData, dwFlags, lpReserved);
+    return FALSE;
+}
+
+BOOL WINAPI InternetGetPerSiteCookieDecisionA( LPCSTR pwchHostName, unsigned long *pResult )
+{
+    FIXME("(%s, %p) stub\n", debugstr_a(pwchHostName), pResult);
+    return FALSE;
+}
+
+BOOL WINAPI InternetGetPerSiteCookieDecisionW( LPCWSTR pwchHostName, unsigned long *pResult )
+{
+    FIXME("(%s, %p) stub\n", debugstr_w(pwchHostName), pResult);
+    return FALSE;
+}
+
+BOOL WINAPI InternetSetPerSiteCookieDecisionA( LPCSTR pchHostName, DWORD dwDecision )
+{
+    FIXME("(%s, 0x%08lx) stub\n", debugstr_a(pchHostName), dwDecision);
+    return FALSE;
+}
+
+BOOL WINAPI InternetSetPerSiteCookieDecisionW( LPCWSTR pchHostName, DWORD dwDecision )
+{
+    FIXME("(%s, 0x%08lx) stub\n", debugstr_w(pchHostName), dwDecision);
+    return FALSE;
+}
+
+DWORD WINAPI InternetSetCookieExA( LPCSTR lpszURL, LPCSTR lpszCookieName, LPCSTR lpszCookieData,
+                                   DWORD dwFlags, DWORD_PTR dwReserved)
+{
+    FIXME("(%s, %s, %s, 0x%08lx, 0x%08lx) stub\n",
+          debugstr_a(lpszURL), debugstr_a(lpszCookieName), debugstr_a(lpszCookieData),
+          dwFlags, dwReserved);
+    return TRUE;
+}
+
+DWORD WINAPI InternetSetCookieExW( LPCWSTR lpszURL, LPCWSTR lpszCookieName, LPCWSTR lpszCookieData,
+                                   DWORD dwFlags, DWORD_PTR dwReserved)
+{
+    FIXME("(%s, %s, %s, 0x%08lx, 0x%08lx) stub\n",
+          debugstr_w(lpszURL), debugstr_w(lpszCookieName), debugstr_w(lpszCookieData),
+          dwFlags, dwReserved);
+    return TRUE;
+}
+
+BOOL WINAPI ResumeSuspendedDownload( HINTERNET hInternet, DWORD dwError )
+{
+    FIXME("(%p, 0x%08lx) stub\n", hInternet, dwError);
+    return FALSE;
+}
+ 
 /***********************************************************************
  *
  *         InternetCreateUrlW
diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c
index 2a11050..6a6037d 100644
--- a/dlls/wininet/urlcache.c
+++ b/dlls/wininet/urlcache.c
@@ -777,7 +777,7 @@
 
     if (*lpdwBufferSize >= dwRequiredSize)
     {
-        lpCacheEntryInfo->lpHeaderInfo = (LPSTR)lpCacheEntryInfo + dwRequiredSize - pUrlEntry->dwHeaderInfoSize - 1;
+        lpCacheEntryInfo->lpHeaderInfo = (LPBYTE)lpCacheEntryInfo + dwRequiredSize - pUrlEntry->dwHeaderInfoSize - 1;
         memcpy(lpCacheEntryInfo->lpHeaderInfo, (LPSTR)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo, pUrlEntry->dwHeaderInfoSize);
         ((LPBYTE)lpCacheEntryInfo)[dwRequiredSize - 1] = '\0';
     }
@@ -1163,7 +1163,7 @@
     pUrlEntry = (URL_CACHEFILE_ENTRY *)pEntry;
     TRACE("Found URL: %s\n", debugstr_a(pUrlEntry->szSourceUrlName));
     if (pUrlEntry->dwOffsetHeaderInfo)
-        TRACE("Header info: %s\n", debugstr_a((LPBYTE)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo));
+        TRACE("Header info: %s\n", debugstr_a((LPSTR)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo));
 
     if (!URLCache_CopyEntry(
         pContainer,
@@ -1247,7 +1247,7 @@
 
     pUrlEntry = (URL_CACHEFILE_ENTRY *)pEntry;
     TRACE("Found URL: %s\n", debugstr_a(pUrlEntry->szSourceUrlName));
-    TRACE("Header info: %s\n", debugstr_a((LPBYTE)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo));
+    TRACE("Header info: %s\n", debugstr_a((LPSTR)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo));
 
     if (!URLCache_CopyEntry(
         pContainer,
@@ -1487,6 +1487,26 @@
 }
 
 /***********************************************************************
+ *           RetrieveUrlCacheEntryFileW (WININET.@)
+ *
+ */
+BOOL WINAPI RetrieveUrlCacheEntryFileW(
+    IN LPCWSTR lpszUrlName,
+    OUT LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo,
+    IN OUT LPDWORD lpdwCacheEntryInfoBufferSize,
+    IN DWORD dwReserved
+    )
+{
+    TRACE("(%s, %p, %p, 0x%08lx)\n",
+        debugstr_w(lpszUrlName),
+        lpCacheEntryInfo,
+        lpdwCacheEntryInfoBufferSize,
+        dwReserved);
+
+    return FALSE;
+}
+
+/***********************************************************************
  *           UnlockUrlCacheEntryFileA (WININET.@)
  *
  */
@@ -1550,6 +1570,16 @@
 }
 
 /***********************************************************************
+ *           UnlockUrlCacheEntryFileW (WININET.@)
+ *
+ */
+BOOL WINAPI UnlockUrlCacheEntryFileW( LPCWSTR lpszUrlName, DWORD dwReserved )
+{
+    FIXME("(%s, 0x%08lx)\n", debugstr_w(lpszUrlName), dwReserved);
+    return TRUE;
+}
+
+/***********************************************************************
  *           CreateUrlCacheEntryA (WININET.@)
  *
  */
@@ -1675,6 +1705,28 @@
 }
 
 /***********************************************************************
+ *           CreateUrlCacheEntryW (WININET.@)
+ *
+ */
+BOOL WINAPI CreateUrlCacheEntryW(
+    IN LPCWSTR lpszUrlName,
+    IN DWORD dwExpectedFileSize,
+    IN LPCWSTR lpszFileExtension,
+    OUT LPWSTR lpszFileName,
+    IN DWORD dwReserved
+)
+{
+    FIXME("(%s, 0x%08lx, %s, %p, 0x%08lx) stub\n",
+        debugstr_w(lpszUrlName),
+        dwExpectedFileSize,
+        debugstr_w(lpszFileExtension),
+        lpszFileName,
+        dwReserved);
+
+    return TRUE;
+}
+
+/***********************************************************************
  *           CommitUrlCacheEntryA (WININET.@)
  *
  */
@@ -1707,7 +1759,7 @@
         CacheEntryType,
         lpHeaderInfo,
         dwHeaderSize,
-        lpszFileExtension,
+        debugstr_a(lpszFileExtension),
         dwReserved);
 
     if (dwReserved)
@@ -1881,6 +1933,38 @@
     return TRUE;
 }
 
+/***********************************************************************
+ *           CommitUrlCacheEntryW (WININET.@)
+ *
+ */
+BOOL WINAPI CommitUrlCacheEntryW(
+    IN LPCWSTR lpszUrlName,
+    IN LPCWSTR lpszLocalFileName,
+    IN FILETIME ExpireTime,
+    IN FILETIME LastModifiedTime,
+    IN DWORD CacheEntryType,
+    IN LPBYTE lpHeaderInfo,
+    IN DWORD dwHeaderSize,
+    IN LPCWSTR lpszFileExtension,
+    IN LPCWSTR dwReserved
+    )
+{
+    FIXME("(%s, %s, ..., ..., %lx, %p, %ld, %s, %p) stub\n",
+        debugstr_w(lpszUrlName),
+        debugstr_w(lpszLocalFileName),
+        CacheEntryType,
+        lpHeaderInfo,
+        dwHeaderSize,
+        debugstr_w(lpszFileExtension),
+        dwReserved);
+
+    return TRUE;
+}
+
+/***********************************************************************
+ *           ReadUrlCacheEntryStream (WININET.@)
+ *
+ */
 BOOL WINAPI ReadUrlCacheEntryStream(
     IN HANDLE hUrlCacheStream,
     IN  DWORD dwLocation,
@@ -1931,14 +2015,17 @@
     STREAM_HANDLE * pStream;
     HANDLE hFile;
 
-    if (!RetrieveUrlCacheEntryFileA(lpszUrlName, 
-        lpCacheEntryInfo, 
+    TRACE( "(%s, %p, %p, %x, 0x%08lx)\n", debugstr_a(lpszUrlName), lpCacheEntryInfo,
+           lpdwCacheEntryInfoBufferSize, fRandomRead, dwReserved );
+
+    if (!RetrieveUrlCacheEntryFileA(lpszUrlName,
+        lpCacheEntryInfo,
         lpdwCacheEntryInfoBufferSize,
         dwReserved))
     {
         return NULL;
     }
-    
+
     hFile = CreateFileA(lpCacheEntryInfo->lpszLocalFileName,
         GENERIC_READ,
         FILE_SHARE_READ,
@@ -1964,6 +2051,23 @@
 }
 
 /***********************************************************************
+ *           RetrieveUrlCacheEntryStreamW (WININET.@)
+ *
+ */
+HANDLE WINAPI RetrieveUrlCacheEntryStreamW(
+    IN LPCWSTR lpszUrlName,
+    OUT LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo,
+    IN OUT LPDWORD lpdwCacheEntryInfoBufferSize,
+    IN BOOL fRandomRead,
+    IN DWORD dwReserved
+    )
+{
+    FIXME( "(%s, %p, %p, %x, 0x%08lx)\n", debugstr_w(lpszUrlName), lpCacheEntryInfo,
+           lpdwCacheEntryInfoBufferSize, fRandomRead, dwReserved );
+    return NULL;
+}
+
+/***********************************************************************
  *           UnlockUrlCacheEntryStream (WININET.@)
  *
  */
@@ -2049,6 +2153,64 @@
 }
 
 /***********************************************************************
+ *           DeleteUrlCacheEntryW (WININET.@)
+ *
+ */
+BOOL WINAPI DeleteUrlCacheEntryW(LPCWSTR lpszUrlName)
+{
+    FIXME("(%s) stub\n", debugstr_w(lpszUrlName));
+    return TRUE;
+}
+
+/***********************************************************************
+ *           FindCloseUrlCache (WININET.@)
+ *
+ */
+BOOL WINAPI FindCloseUrlCache(HANDLE hEnumHandle)
+{
+    FIXME("(%p) stub\n", hEnumHandle);
+    return TRUE;
+}
+
+HANDLE WINAPI FindFirstUrlCacheEntryExA(
+  LPCSTR lpszUrlSearchPattern,
+  DWORD dwFlags,
+  DWORD dwFilter,
+  GROUPID GroupId,
+  LPINTERNET_CACHE_ENTRY_INFOA lpFirstCacheEntryInfo,
+  LPDWORD lpdwFirstCacheEntryInfoBufferSize,
+  LPVOID lpReserved,
+  LPDWORD pcbReserved2,
+  LPVOID lpReserved3
+)
+{
+    FIXME("(%s, 0x%08lx, 0x%08lx, 0x%08lx%08lx, %p, %p, %p, %p, %p) stub\n", debugstr_a(lpszUrlSearchPattern),
+          dwFlags, dwFilter, (ULONG)(GroupId >> 32), (ULONG)GroupId, lpFirstCacheEntryInfo,
+          lpdwFirstCacheEntryInfoBufferSize, lpReserved, pcbReserved2,lpReserved3);
+    SetLastError(ERROR_FILE_NOT_FOUND);
+    return NULL;
+}
+
+HANDLE WINAPI FindFirstUrlCacheEntryExW(
+  LPCWSTR lpszUrlSearchPattern,
+  DWORD dwFlags,
+  DWORD dwFilter,
+  GROUPID GroupId,
+  LPINTERNET_CACHE_ENTRY_INFOW lpFirstCacheEntryInfo,
+  LPDWORD lpdwFirstCacheEntryInfoBufferSize,
+  LPVOID lpReserved,
+  LPDWORD pcbReserved2,
+  LPVOID lpReserved3
+)
+{
+    FIXME("(%s, 0x%08lx, 0x%08lx, 0x%08lx%08lx, %p, %p, %p, %p, %p) stub\n", debugstr_w(lpszUrlSearchPattern),
+          dwFlags, dwFilter, (ULONG)(GroupId >> 32), (ULONG)GroupId, lpFirstCacheEntryInfo,
+          lpdwFirstCacheEntryInfoBufferSize, lpReserved, pcbReserved2,lpReserved3);
+    SetLastError(ERROR_FILE_NOT_FOUND);
+    return NULL;
+}
+
+/***********************************************************************
  *           FindFirstUrlCacheEntryA (WININET.@)
  *
  */
@@ -2071,14 +2233,75 @@
   return 0;
 }
 
+HANDLE WINAPI FindFirstUrlCacheGroup( DWORD dwFlags, DWORD dwFilter, LPVOID lpSearchCondition,
+                                      DWORD dwSearchCondition, GROUPID* lpGroupId, LPVOID lpReserved )
+{
+    FIXME("(0x%08lx, 0x%08lx, %p, 0x%08lx, %p, %p) stub\n", dwFlags, dwFilter, lpSearchCondition,
+          dwSearchCondition, lpGroupId, lpReserved);
+    return NULL;
+}
+
+BOOL WINAPI FindNextUrlCacheEntryA(
+  HANDLE hEnumHandle,
+  LPINTERNET_CACHE_ENTRY_INFOA lpNextCacheEntryInfo,
+  LPDWORD lpdwNextCacheEntryInfoBufferSize
+)
+{
+    FIXME("(%p, %p, %p) stub\n", hEnumHandle, lpNextCacheEntryInfo, lpdwNextCacheEntryInfoBufferSize);
+    return FALSE;
+}
+
+BOOL WINAPI FindNextUrlCacheEntryW(
+  HANDLE hEnumHandle,
+  LPINTERNET_CACHE_ENTRY_INFOW lpNextCacheEntryInfo,
+  LPDWORD lpdwNextCacheEntryInfoBufferSize
+)
+{
+    FIXME("(%p, %p, %p) stub\n", hEnumHandle, lpNextCacheEntryInfo, lpdwNextCacheEntryInfoBufferSize);
+    return FALSE;
+}
+
+BOOL WINAPI FindNextUrlCacheEntryExA(
+  HANDLE hEnumHandle,
+  LPINTERNET_CACHE_ENTRY_INFOA lpFirstCacheEntryInfo,
+  LPDWORD lpdwFirstCacheEntryInfoBufferSize,
+  LPVOID lpReserved,
+  LPDWORD pcbReserved2,
+  LPVOID lpReserved3
+)
+{
+    FIXME("(%p, %p, %p, %p, %p, %p) stub\n", hEnumHandle, lpFirstCacheEntryInfo, lpdwFirstCacheEntryInfoBufferSize,
+          lpReserved, pcbReserved2, lpReserved3);
+    return FALSE;
+}
+
+BOOL WINAPI FindNextUrlCacheEntryExW(
+  HANDLE hEnumHandle,
+  LPINTERNET_CACHE_ENTRY_INFOW lpFirstCacheEntryInfo,
+  LPDWORD lpdwFirstCacheEntryInfoBufferSize,
+  LPVOID lpReserved,
+  LPDWORD pcbReserved2,
+  LPVOID lpReserved3
+)
+{
+    FIXME("(%p, %p, %p, %p, %p, %p) stub\n", hEnumHandle, lpFirstCacheEntryInfo, lpdwFirstCacheEntryInfoBufferSize,
+          lpReserved, pcbReserved2, lpReserved3);
+    return FALSE;
+}
+
+BOOL WINAPI FindNextUrlCacheGroup( HANDLE hFind, GROUPID* lpGroupId, LPVOID lpReserved )
+{
+    FIXME("(%p, %p, %p) stub\n", hFind, lpGroupId, lpReserved);
+    return FALSE;
+}
+
 /***********************************************************************
  *           CreateUrlCacheGroup (WININET.@)
  *
  */
-INTERNETAPI GROUPID WINAPI CreateUrlCacheGroup(DWORD dwFlags, LPVOID 
-lpReserved)
+INTERNETAPI GROUPID WINAPI CreateUrlCacheGroup(DWORD dwFlags, LPVOID lpReserved)
 {
-  FIXME("(%lx, %p): stub\n", dwFlags, lpReserved);
+  FIXME("(0x%08lx, %p): stub\n", dwFlags, lpReserved);
   return FALSE;
 }
 
@@ -2088,19 +2311,37 @@
  */
 BOOL WINAPI DeleteUrlCacheGroup(GROUPID GroupId, DWORD dwFlags, LPVOID lpReserved)
 {
-    FIXME("STUB\n");
+    FIXME("(0x%08lx%08lx, 0x%08lx, %p) stub\n",
+          (ULONG)(GroupId >> 32), (ULONG)GroupId, dwFlags, lpReserved);
     return FALSE;
 }
 
 /***********************************************************************
- *           SetUrlCacheEntryGroup (WININET.@)
+ *           SetUrlCacheEntryGroupA (WININET.@)
  *
  */
-BOOL WINAPI SetUrlCacheEntryGroup(LPCSTR lpszUrlName, DWORD dwFlags,
+BOOL WINAPI SetUrlCacheEntryGroupA(LPCSTR lpszUrlName, DWORD dwFlags,
   GROUPID GroupId, LPBYTE pbGroupAttributes, DWORD cbGroupAttributes,
   LPVOID lpReserved)
 {
-    FIXME("STUB\n");
+    FIXME("(%s, 0x%08lx, 0x%08lx%08lx, %p, 0x%08lx, %p) stub\n",
+          debugstr_a(lpszUrlName), dwFlags, (ULONG)(GroupId >> 32), (ULONG)GroupId,
+          pbGroupAttributes, cbGroupAttributes, lpReserved);
+    SetLastError(ERROR_FILE_NOT_FOUND);
+    return FALSE;
+}
+
+/***********************************************************************
+ *           SetUrlCacheEntryGroupW (WININET.@)
+ *
+ */
+BOOL WINAPI SetUrlCacheEntryGroupW(LPCWSTR lpszUrlName, DWORD dwFlags,
+  GROUPID GroupId, LPBYTE pbGroupAttributes, DWORD cbGroupAttributes,
+  LPVOID lpReserved)
+{
+    FIXME("(%s, 0x%08lx, 0x%08lx%08lx, %p, 0x%08lx, %p) stub\n",
+          debugstr_w(lpszUrlName), dwFlags, (ULONG)(GroupId >> 32), (ULONG)GroupId,
+          pbGroupAttributes, cbGroupAttributes, lpReserved);
     SetLastError(ERROR_FILE_NOT_FOUND);
     return FALSE;
 }
@@ -2127,6 +2368,54 @@
     return FALSE;
 }
 
+BOOL WINAPI GetUrlCacheGroupAttributeA( GROUPID gid, DWORD dwFlags, DWORD dwAttributes,
+                                        LPINTERNET_CACHE_GROUP_INFOA lpGroupInfo,
+                                        LPDWORD lpdwGroupInfo, LPVOID lpReserved )
+{
+    FIXME("(0x%08lx%08lx, 0x%08lx, 0x%08lx, %p, %p, %p) stub\n",
+          (ULONG)(gid >> 32), (ULONG)gid, dwFlags, dwAttributes, lpGroupInfo,
+          lpdwGroupInfo, lpReserved);
+    return FALSE;
+}
+
+BOOL WINAPI GetUrlCacheGroupAttributeW( GROUPID gid, DWORD dwFlags, DWORD dwAttributes,
+                                        LPINTERNET_CACHE_GROUP_INFOW lpGroupInfo,
+                                        LPDWORD lpdwGroupInfo, LPVOID lpReserved )
+{
+    FIXME("(0x%08lx%08lx, 0x%08lx, 0x%08lx, %p, %p, %p) stub\n",
+          (ULONG)(gid >> 32), (ULONG)gid, dwFlags, dwAttributes, lpGroupInfo,
+          lpdwGroupInfo, lpReserved);
+    return FALSE;
+}
+
+BOOL WINAPI SetUrlCacheGroupAttributeA( GROUPID gid, DWORD dwFlags, DWORD dwAttributes,
+                                        LPINTERNET_CACHE_GROUP_INFOA lpGroupInfo, LPVOID lpReserved )
+{
+    FIXME("(0x%08lx%08lx, 0x%08lx, 0x%08lx, %p, %p) stub\n",
+          (ULONG)(gid >> 32), (ULONG)gid, dwFlags, dwAttributes, lpGroupInfo, lpReserved);
+    return TRUE;
+}
+
+BOOL WINAPI SetUrlCacheGroupAttributeW( GROUPID gid, DWORD dwFlags, DWORD dwAttributes,
+                                        LPINTERNET_CACHE_GROUP_INFOW lpGroupInfo, LPVOID lpReserved )
+{
+    FIXME("(0x%08lx%08lx, 0x%08lx, 0x%08lx, %p, %p) stub\n",
+          (ULONG)(gid >> 32), (ULONG)gid, dwFlags, dwAttributes, lpGroupInfo, lpReserved);
+    return TRUE;
+}
+
+BOOL WINAPI SetUrlCacheConfigInfoA( LPDWORD lpCacheConfigInfo, DWORD dwFieldControl )
+{
+    FIXME("(%p, 0x%08lx) stub\n", lpCacheConfigInfo, dwFieldControl);
+    return TRUE;
+}
+
+BOOL WINAPI SetUrlCacheConfigInfoW( LPDWORD lpCacheConfigInfo, DWORD dwFieldControl )
+{
+    FIXME("(%p, 0x%08lx) stub\n", lpCacheConfigInfo, dwFieldControl);
+    return TRUE;
+}
+
 /***********************************************************************
  *           DeleteIE3Cache (WININET.@)
  *
diff --git a/dlls/wininet/wininet.spec b/dlls/wininet/wininet.spec
index 7eb91d2..dbbec4d 100644
--- a/dlls/wininet/wininet.spec
+++ b/dlls/wininet/wininet.spec
@@ -19,38 +19,43 @@
 @ stdcall InternetInitializeAutoProxyDll(long)
 @ stub ShowCertificate
 @ stdcall CommitUrlCacheEntryA(str str long long long long long str long str str)
-@ stub CommitUrlCacheEntryW
+@ stdcall CommitUrlCacheEntryW(wstr wstr long long long long long wstr long wstr wstr)
+@ stdcall CreateMD5SSOHash(wstr wstr wstr ptr)
 @ stub CreateUrlCacheContainerA
 @ stub CreateUrlCacheContainerW
 @ stdcall CreateUrlCacheEntryA(str long str ptr long)
-@ stub CreateUrlCacheEntryW
+@ stdcall CreateUrlCacheEntryW(wstr long wstr ptr long)
 @ stdcall CreateUrlCacheGroup(long ptr)
 @ stdcall DeleteIE3Cache(ptr ptr str long)
 @ stub DeleteUrlCacheContainerA
 @ stub DeleteUrlCacheContainerW
 @ stdcall DeleteUrlCacheEntry(str) DeleteUrlCacheEntryA
 @ stdcall DeleteUrlCacheEntryA(str)
-@ stub DeleteUrlCacheEntryW
+@ stdcall DeleteUrlCacheEntryW(wstr)
 @ stdcall DeleteUrlCacheGroup(double long ptr)
 @ stdcall DetectAutoProxyUrl(str long long)
 @ stdcall DllInstall(long ptr) WININET_DllInstall
-@ stub FindCloseUrlCache
+@ stdcall FindCloseUrlCache(long)
 @ stub FindFirstUrlCacheContainerA
 @ stub FindFirstUrlCacheContainerW
 @ stdcall FindFirstUrlCacheEntryA(str ptr ptr)
-@ stub FindFirstUrlCacheEntryExA
-@ stub FindFirstUrlCacheEntryExW
+@ stdcall FindFirstUrlCacheEntryExA(str long long long ptr ptr ptr ptr ptr)
+@ stdcall FindFirstUrlCacheEntryExW(wstr long long long ptr ptr ptr ptr ptr)
 @ stdcall FindFirstUrlCacheEntryW(wstr ptr ptr)
+@ stdcall FindFirstUrlCacheGroup(long long ptr long ptr ptr)
 @ stub FindNextUrlCacheContainerA
 @ stub FindNextUrlCacheContainerW
-@ stub FindNextUrlCacheEntryA
-@ stub FindNextUrlCacheEntryExA
-@ stub FindNextUrlCacheEntryExW
-@ stub FindNextUrlCacheEntryW
+@ stdcall FindNextUrlCacheEntryA(long ptr ptr)
+@ stdcall FindNextUrlCacheEntryExA(long ptr ptr ptr ptr ptr)
+@ stdcall FindNextUrlCacheEntryExW(long ptr ptr ptr ptr ptr)
+@ stdcall FindNextUrlCacheEntryW(long ptr ptr)
+@ stdcall FindNextUrlCacheGroup(long ptr ptr)
+@ stub ForceNexusLookup
+@ stub ForceNexusLookupExW
 @ stub FreeUrlCacheSpaceA
 @ stub FreeUrlCacheSpaceW
-@ stub FtpCommandA
-@ stub FtpCommandW
+@ stdcall FtpCommandA(long long long str ptr ptr)
+@ stdcall FtpCommandW(long long long wstr ptr ptr)
 @ stdcall FtpCreateDirectoryA(ptr str)
 @ stdcall FtpCreateDirectoryW(ptr wstr)
 @ stdcall FtpDeleteFileA(ptr str)
@@ -60,10 +65,13 @@
 @ stdcall FtpGetCurrentDirectoryA(ptr str ptr)
 @ stdcall FtpGetCurrentDirectoryW(ptr wstr ptr)
 @ stdcall FtpGetFileA(ptr str str long long long long)
+@ stub FtpGetFileEx
+@ stdcall FtpGetFileSize(long ptr)
 @ stdcall FtpGetFileW(ptr wstr wstr long long long long)
 @ stdcall FtpOpenFileA(ptr str long long long)
 @ stdcall FtpOpenFileW(ptr wstr long long long)
 @ stdcall FtpPutFileA(ptr str str long long)
+@ stub FtpPutFileEx
 @ stdcall FtpPutFileW(ptr wstr wstr long long)
 @ stdcall FtpRemoveDirectoryA(ptr str)
 @ stdcall FtpRemoveDirectoryW(ptr wstr)
@@ -77,6 +85,8 @@
 @ stdcall GetUrlCacheEntryInfoExA(str ptr ptr str ptr ptr long)
 @ stdcall GetUrlCacheEntryInfoExW(wstr ptr ptr wstr ptr ptr long)
 @ stdcall GetUrlCacheEntryInfoW(wstr ptr long)
+@ stdcall GetUrlCacheGroupAttributeA(double long long ptr ptr ptr)
+@ stdcall GetUrlCacheGroupAttributeW(double long long ptr ptr ptr)
 @ stub GetUrlCacheHeaderData
 @ stdcall GopherCreateLocatorA(str long str str long str ptr)
 @ stdcall GopherCreateLocatorW(wstr long wstr wstr long wstr ptr)
@@ -90,6 +100,7 @@
 @ stdcall GopherOpenFileW(ptr wstr wstr long long)
 @ stdcall HttpAddRequestHeadersA(ptr str long long)
 @ stdcall HttpAddRequestHeadersW(ptr wstr long long)
+@ stub HttpCheckDavCompliance
 @ stdcall HttpEndRequestA(ptr ptr long long)
 @ stdcall HttpEndRequestW(ptr ptr long long)
 @ stdcall HttpOpenRequestA(ptr str str str str ptr long long)
@@ -98,9 +109,11 @@
 @ stdcall HttpQueryInfoW(ptr long ptr ptr ptr)
 @ stdcall HttpSendRequestA(ptr str long ptr long)
 @ stdcall HttpSendRequestExA(long ptr ptr long long)
-@ stub HttpSendRequestExW
+@ stdcall HttpSendRequestExW(long ptr ptr long long)
 @ stdcall HttpSendRequestW(ptr wstr long ptr long)
 @ stub IncrementUrlCacheHeaderData
+@ stub InternetAlgIdToStringA
+@ stub InternetAlgIdToStringW
 @ stdcall InternetAttemptConnect(long)
 @ stdcall InternetAutodial(long ptr)
 @ stub InternetAutodialCallback
@@ -109,10 +122,13 @@
 @ stdcall InternetCanonicalizeUrlW(wstr wstr ptr long)
 @ stdcall InternetCheckConnectionA(ptr long long)
 @ stdcall InternetCheckConnectionW(ptr long long)
+@ stdcall InternetClearAllPerSiteCookieDecisions()
 @ stdcall InternetCloseHandle(long)
 @ stdcall InternetCombineUrlA(str str str ptr long)
 @ stdcall InternetCombineUrlW(wstr wstr wstr ptr long)
-@ stub InternetConfirmZoneCrossing
+@ stdcall InternetConfirmZoneCrossing(long str str long) InternetConfirmZoneCrossingA
+@ stdcall InternetConfirmZoneCrossingA(long str str long)
+@ stdcall InternetConfirmZoneCrossingW(long wstr wstr long)
 @ stdcall InternetConnectA(ptr str long str str long long long)
 @ stdcall InternetConnectW(ptr wstr long wstr wstr long long long)
 @ stdcall InternetCrackUrlA(str long long ptr)
@@ -120,45 +136,69 @@
 @ stdcall InternetCreateUrlA(ptr long ptr ptr)
 @ stdcall InternetCreateUrlW(ptr long ptr ptr)
 @ stub InternetDebugGetLocalTime
-@ stub InternetDial
+@ stdcall InternetDial(long str long ptr long) InternetDialA
+@ stdcall InternetDialA(long str long ptr long)
+@ stdcall InternetDialW(long wstr long ptr long)
+@ stdcall InternetEnumPerSiteCookieDecisionA(ptr ptr ptr long)
+@ stdcall InternetEnumPerSiteCookieDecisionW(ptr ptr ptr long)
 @ stdcall InternetErrorDlg(long long long long ptr)
 @ stdcall InternetFindNextFileA(ptr ptr)
 @ stdcall InternetFindNextFileW(ptr ptr)
+@ stub InternetFortezzaCommand
 @ stub InternetGetCertByURL
+@ stub InternetGetCertByURLA
 @ stdcall InternetGetConnectedState(ptr long)
+@ stdcall InternetGetConnectedStateEx(ptr ptr long long) InternetGetConnectedStateExA
 @ stdcall InternetGetConnectedStateExA(ptr ptr long long)
 @ stdcall InternetGetConnectedStateExW(ptr ptr long long)
 @ stdcall InternetGetCookieA(str str ptr long)
+@ stdcall InternetGetCookieExA(str str ptr ptr long ptr)
+@ stdcall InternetGetCookieExW(wstr wstr ptr ptr long ptr)
 @ stdcall InternetGetCookieW(wstr wstr ptr long)
-@ stdcall InternetGetLastResponseInfoA(ptr str ptr)
-@ stub InternetGetLastResponseInfoW
-@ stub InternetGoOnline
-@ stub InternetHangUp
+@ stdcall InternetGetLastResponseInfoA(ptr ptr ptr)
+@ stdcall InternetGetLastResponseInfoW(ptr ptr ptr)
+@ stdcall InternetGetPerSiteCookieDecisionA(str ptr)
+@ stdcall InternetGetPerSiteCookieDecisionW(wstr ptr)
+@ stdcall InternetGoOnline(str long long) InternetGoOnlineA
+@ stdcall InternetGoOnlineA(str long long)
+@ stdcall InternetGoOnlineW(wstr long long)
+@ stdcall InternetHangUp(long long)
 @ stdcall InternetLockRequestFile(ptr ptr)
 @ stdcall InternetOpenA(str long str str long)
-@ stdcall InternetOpenW(wstr long wstr wstr long)
 @ stub InternetOpenServerPushParse
+@ stdcall InternetOpenW(wstr long wstr wstr long)
 @ stdcall InternetOpenUrlA(ptr str str long long long)
 @ stdcall InternetOpenUrlW(ptr wstr wstr long long long)
 @ stdcall InternetQueryDataAvailable(ptr ptr long long)
+@ stub InternetQueryFortezzaStatus
 @ stdcall InternetQueryOptionA(ptr long ptr ptr)
 @ stdcall InternetQueryOptionW(ptr long ptr ptr)
 @ stdcall InternetReadFile(ptr ptr long ptr)
 @ stdcall InternetReadFileExA(ptr ptr long long)
 @ stdcall InternetReadFileExW(ptr ptr long long)
+@ stub InternetSecurityProtocolToStringA
+@ stub InternetSecurityProtocolToStringW
 @ stub InternetServerPushParse
 @ stdcall InternetSetCookieA(str str str)
+@ stdcall InternetSetCookieExA(str str str long ptr)
+@ stdcall InternetSetCookieExW(wstr wstr wstr long ptr)
 @ stdcall InternetSetCookieW(wstr wstr wstr)
 @ stub InternetSetDialState
+@ stub InternetSetDialStateA
+@ stub InternetSetDialStateW
 @ stdcall InternetSetFilePointer(ptr long ptr long long)
 @ stdcall InternetSetOptionA(ptr long ptr long)
-@ stdcall InternetSetOptionW(ptr long ptr long)
 @ stdcall InternetSetOptionExA(ptr long ptr long long)
 @ stdcall InternetSetOptionExW(ptr long ptr long long)
+@ stdcall InternetSetOptionW(ptr long ptr long)
+@ stdcall InternetSetPerSiteCookieDecisionA(str long)
+@ stdcall InternetSetPerSiteCookieDecisionW(wstr long)
 @ stdcall InternetSetStatusCallback(ptr ptr) InternetSetStatusCallbackA
 @ stdcall InternetSetStatusCallbackA(ptr ptr)
 @ stdcall InternetSetStatusCallbackW(ptr ptr)
 @ stub InternetShowSecurityInfoByURL
+@ stub InternetShowSecurityInfoByURLA
+@ stub InternetShowSecurityInfoByURLW
 @ stdcall InternetTimeFromSystemTime(ptr long ptr long) InternetTimeFromSystemTimeA
 @ stdcall InternetTimeFromSystemTimeA(ptr long ptr long)
 @ stdcall InternetTimeFromSystemTimeW(ptr long ptr long)
@@ -170,25 +210,36 @@
 @ stub InternetWriteFileExA
 @ stub InternetWriteFileExW
 @ stdcall IsHostInProxyBypassList(long str long)
+@ stub IsUrlCacheEntryExpiredA
+@ stub IsUrlCacheEntryExpiredW
 @ stub LoadUrlCacheContent
 @ stub ParseX509EncodedCertificateForListBoxEntry
+@ stub PrivacyGetZonePreferenceW # (long long ptr ptr ptr)
+@ stub PrivacySetZonePreferenceW # (long long long wstr)
 @ stdcall ReadUrlCacheEntryStream(ptr long ptr ptr long)
+@ stub RegisterUrlCacheNotification
+@ stdcall ResumeSuspendedDownload(long long)
 @ stdcall RetrieveUrlCacheEntryFileA(str ptr ptr long)
-@ stub RetrieveUrlCacheEntryFileW
+@ stdcall RetrieveUrlCacheEntryFileW(wstr ptr ptr long)
 @ stdcall RetrieveUrlCacheEntryStreamA(str ptr ptr long long)
-@ stub RetrieveUrlCacheEntryStreamW
+@ stdcall RetrieveUrlCacheEntryStreamW(wstr ptr ptr long long)
 @ stub RunOnceUrlCache
-@ stub SetUrlCacheConfigInfoA
-@ stub SetUrlCacheConfigInfoW
-@ stdcall SetUrlCacheEntryGroup(str long double ptr long ptr)
+@ stdcall SetUrlCacheConfigInfoA(ptr long)
+@ stdcall SetUrlCacheConfigInfoW(ptr long)
+@ stdcall SetUrlCacheEntryGroup(str long double ptr long ptr) SetUrlCacheEntryGroupA
+@ stdcall SetUrlCacheEntryGroupA(str long double ptr long ptr)
+@ stdcall SetUrlCacheEntryGroupW(wstr long double ptr long ptr)
 @ stdcall SetUrlCacheEntryInfoA(str ptr long)
 @ stdcall SetUrlCacheEntryInfoW(wstr ptr long)
+@ stdcall SetUrlCacheGroupAttributeA(double long long ptr ptr)
+@ stdcall SetUrlCacheGroupAttributeW(double long long ptr ptr)
 @ stub SetUrlCacheHeaderData
 @ stub ShowClientAuthCerts
 @ stub ShowSecurityInfo
 @ stub ShowX509EncodedCertificate
 @ stdcall UnlockUrlCacheEntryFile(str long) UnlockUrlCacheEntryFileA
 @ stdcall UnlockUrlCacheEntryFileA(str long)
-@ stub UnlockUrlCacheEntryFileW
+@ stdcall UnlockUrlCacheEntryFileW(wstr long)
 @ stdcall UnlockUrlCacheEntryStream(ptr long)
 @ stub UpdateUrlCacheContentPath
+@ stub UrlZonesDetach
diff --git a/include/wininet.h b/include/wininet.h
index ed5cb5c..8127d40 100644
--- a/include/wininet.h
+++ b/include/wininet.h
@@ -281,6 +281,32 @@
 DECL_WINELIB_TYPE_AW(INTERNET_BUFFERS)
 DECL_WINELIB_TYPE_AW(LPINTERNET_BUFFERS)
 
+#define GROUP_OWNER_STORAGE_SIZE 4
+#define GROUPNAME_MAX_LENGTH 120
+
+typedef struct _INTERNET_CACHE_GROUP_INFOA {
+    DWORD dwGroupSize;
+    DWORD dwGroupFlags;
+    DWORD dwGroupType;
+    DWORD dwDiskUsage;
+    DWORD dwDiskQuota;
+    DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];
+    CHAR  szGroupName[GROUPNAME_MAX_LENGTH];
+} INTERNET_CACHE_GROUP_INFOA, * LPINTERNET_CACHE_GROUP_INFOA;
+
+typedef struct _INTERNET_CACHE_GROUP_INFOW {
+    DWORD dwGroupSize;
+    DWORD dwGroupFlags;
+    DWORD dwGroupType;
+    DWORD dwDiskUsage;
+    DWORD dwDiskQuota;
+    DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];
+    WCHAR szGroupName[GROUPNAME_MAX_LENGTH];
+} INTERNET_CACHE_GROUP_INFOW, *LPINTERNET_CACHE_GROUP_INFOW;
+
+DECL_WINELIB_TYPE_AW(INTERNET_CACHE_GROUP_INFO)
+DECL_WINELIB_TYPE_AW(LPINTERNET_CACHE_GROUP_INFO)
+
 BOOLAPI InternetTimeFromSystemTimeA(CONST SYSTEMTIME *,DWORD ,LPSTR ,DWORD);
 BOOLAPI InternetTimeFromSystemTimeW(CONST SYSTEMTIME *,DWORD ,LPWSTR ,DWORD);
 #define InternetTimeFromSystemTime WINELIB_NAME_AW(InternetTimeFromSystemTime)
@@ -1153,6 +1179,28 @@
 BOOLAPI HttpQueryInfoW(HINTERNET ,DWORD ,LPVOID lpBuffer ,LPDWORD ,LPDWORD lpdwIndex);
 #define HttpQueryInfo  WINELIB_NAME_AW(HttpQueryInfo)
 
+BOOLAPI InternetClearAllPerSiteCookieDecisions(VOID);
+
+BOOLAPI InternetEnumPerSiteCookieDecisionA(LPSTR,unsigned long *,unsigned long *,unsigned long);
+BOOLAPI InternetEnumPerSiteCookieDecisionW(LPWSTR,unsigned long *,unsigned long *,unsigned long);
+#define InternetEnumPerSiteCookieDecision WINELIB_NAME_AW(InternetEnumPerSiteCookieDecision)
+
+BOOLAPI InternetGetCookieExA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD,LPVOID);
+BOOLAPI InternetGetCookieExW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD,LPVOID);
+#define InternetGetCookieEx WINELIB_NAME_AW(InternetGetCookieEx)
+
+DWORD WINAPI InternetSetCookieExA(LPCSTR,LPCSTR,LPCSTR,DWORD,DWORD_PTR);
+DWORD WINAPI InternetSetCookieExW(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,DWORD_PTR);
+#define InternetSetCookieEx WINELIB_NAME_AW(InternetSetCookieEx)
+
+BOOLAPI InternetGetPerSiteCookieDecisionA(LPCSTR,unsigned long *);
+BOOLAPI InternetGetPerSiteCookieDecisionW(LPCWSTR,unsigned long *);
+#define InternetGetPerSiteCookieDecision WINELIB_NAME_AW(InternetGetPerSiteCookieDecision)
+
+BOOLAPI InternetSetPerSiteCookieDecisionA(LPCSTR,DWORD);
+BOOLAPI InternetSetPerSiteCookieDecisionW(LPCWSTR,DWORD);
+#define InternetSetPerSiteCookieDecision WINELIB_NAME_AW(InternetSetPerSiteCookieDecision)
+
 BOOLAPI InternetSetCookieA(LPCSTR ,LPCSTR ,LPCSTR);
 BOOLAPI InternetSetCookieW(LPCWSTR ,LPCWSTR ,LPCWSTR);
 #define InternetSetCookie  WINELIB_NAME_AW(InternetSetCookie)
@@ -1352,14 +1400,22 @@
 #define CreateUrlCacheEntry  WINELIB_NAME_AW(CreateUrlCacheEntry)
 
 BOOLAPI CommitUrlCacheEntryA(LPCSTR,LPCSTR,FILETIME,FILETIME,DWORD,LPBYTE,DWORD,LPCSTR,LPCSTR);
-BOOLAPI CommitUrlCacheEntryW(LPCSTR,LPCWSTR,FILETIME,FILETIME,DWORD,LPWSTR,DWORD,LPCWSTR,LPCWSTR);
+BOOLAPI CommitUrlCacheEntryW(LPCWSTR,LPCWSTR,FILETIME,FILETIME,DWORD,LPBYTE,DWORD,LPCWSTR,LPCWSTR);
 #define CommitUrlCacheEntry  WINELIB_NAME_AW(CommitUrlCacheEntry)
 
+BOOLAPI ResumeSuspendedDownload(HINTERNET, DWORD);
+
 BOOLAPI RetrieveUrlCacheEntryFileA(LPCSTR ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,DWORD);
 BOOLAPI RetrieveUrlCacheEntryFileW(LPCWSTR ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD ,DWORD);
 #define RetrieveUrlCacheEntryFile  WINELIB_NAME_AW(RetrieveUrlCacheEntryFile)
 
-BOOLAPI UnlockUrlCacheEntryFile(LPCSTR ,DWORD);
+BOOLAPI SetUrlCacheConfigInfoA(LPDWORD,DWORD);
+BOOLAPI SetUrlCacheConfigInfoW(LPDWORD,DWORD);
+#define SetUrlCacheConfigInfo  WINELIB_NAME_AW(SetUrlCacheConfigInfo)
+
+BOOLAPI UnlockUrlCacheEntryFileA(LPCSTR ,DWORD);
+BOOLAPI UnlockUrlCacheEntryFileW(LPCWSTR ,DWORD);
+#define UnlockUrlCacheEntryFile  WINELIB_NAME_AW(UnlockUrlCacheEntryFile)
 
 INTERNETAPI HANDLE WINAPI RetrieveUrlCacheEntryStreamA(LPCSTR ,
 	LPINTERNET_CACHE_ENTRY_INFOA , LPDWORD ,BOOL ,DWORD);
@@ -1394,13 +1450,27 @@
 #define SetUrlCacheEntryInfo  WINELIB_NAME_AW(SetUrlCacheEntryInfo)
 
 typedef LONGLONG GROUPID;
-INTERNETAPI GROUPID WINAPI CreateUrlCacheGroup(DWORD ,LPVOID);
+
+INTERNETAPI GROUPID WINAPI CreateUrlCacheGroup(DWORD,LPVOID);
 BOOLAPI DeleteUrlCacheGroup(GROUPID ,DWORD ,LPVOID);
 
+INTERNETAPI HANDLE WINAPI FindFirstUrlCacheGroup(DWORD,DWORD,LPVOID,DWORD,GROUPID*,LPVOID);
+BOOLAPI FindNextUrlCacheGroup(HANDLE,GROUPID*,LPVOID);
+
+BOOLAPI GetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPDWORD,LPVOID);
+BOOLAPI GetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPDWORD,LPVOID);
+#define GetUrlCacheGroupAttribute  WINELIB_NAME_AW(GetUrlCacheGroupAttribute)
+
 #define INTERNET_CACHE_GROUP_ADD      0
 #define INTERNET_CACHE_GROUP_REMOVE   1
 
-BOOLAPI SetUrlCacheEntryGroup(LPCSTR ,DWORD ,GROUPID ,LPBYTE ,DWORD ,LPVOID);
+BOOLAPI SetUrlCacheEntryGroupA(LPCSTR,DWORD,GROUPID,LPBYTE,DWORD,LPVOID);
+BOOLAPI SetUrlCacheEntryGroupW(LPCWSTR,DWORD,GROUPID,LPBYTE,DWORD,LPVOID);
+#define SetUrlCacheEntryGroup  WINELIB_NAME_AW(SetUrlCacheEntryGroup)
+
+BOOLAPI SetUrlCacheGroupAttributeA(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOA,LPVOID);
+BOOLAPI SetUrlCacheGroupAttributeW(GROUPID,DWORD,DWORD,LPINTERNET_CACHE_GROUP_INFOW,LPVOID);
+#define SetUrlCacheGroupAttribute  WINELIB_NAME_AW(SetUrlCacheGroupAttribute)
 
 INTERNETAPI HANDLE WINAPI FindFirstUrlCacheEntryExA(
     LPCSTR ,DWORD ,DWORD ,GROUPID ,LPINTERNET_CACHE_ENTRY_INFOA ,LPDWORD ,LPVOID ,LPDWORD ,LPVOID );
@@ -1420,9 +1490,11 @@
 BOOLAPI FindNextUrlCacheEntryW(HANDLE ,LPINTERNET_CACHE_ENTRY_INFOW ,LPDWORD);
 #define FindNextUrlCacheEntry  WINELIB_NAME_AW(FindNextUrlCacheEntry)
 
-
 BOOLAPI FindCloseUrlCache(HANDLE);
-BOOLAPI DeleteUrlCacheEntry(LPCSTR);
+
+BOOLAPI DeleteUrlCacheEntryA(LPCSTR);
+BOOLAPI DeleteUrlCacheEntryW(LPCWSTR);
+#define DeleteUrlCacheEntry  WINELIB_NAME_AW(DeleteUrlCacheEntry)
 
 INTERNETAPI DWORD WINAPI InternetDialA(HWND ,LPSTR ,DWORD ,LPDWORD ,DWORD);
 INTERNETAPI DWORD WINAPI InternetDialW(HWND ,LPWSTR ,DWORD ,LPDWORD ,DWORD);
@@ -1432,6 +1504,7 @@
 #define INTERNET_DIAL_UNATTENDED       0x8000
 
 INTERNETAPI DWORD WINAPI InternetHangUp(DWORD ,DWORD);
+BOOLAPI CreateMD5SSOHash(PWSTR,PWSTR,PWSTR,PBYTE);
 
 #define INTERENT_GOONLINE_REFRESH 0x00000001
 #define INTERENT_GOONLINE_MASK 0x00000001