diff --git a/dlls/wininet/tests/internet.c b/dlls/wininet/tests/internet.c
index aeeee4e..29897b5 100644
--- a/dlls/wininet/tests/internet.c
+++ b/dlls/wininet/tests/internet.c
@@ -1,7 +1,7 @@
 /*
  * Wininet - internet tests
  *
- * Copyright 2005 Vijay Kiran Kamuju
+ * Copyright 2006 Vijay Kiran Kamuju
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -24,16 +24,20 @@
 #include "winbase.h"
 #include "wininet.h"
 #include "winerror.h"
 
 #include "wine/test.h"
 
-void InternetQueryOptionA_test()
+void InternetQueryOption_test()
 {
   HINTERNET hinet,hurl;
   DWORD len;
   DWORD err;
   static const char useragent[] = {"Wininet Test"};
+  static const WCHAR winagent[] = {'W','i','n','i','n','e','t',' ','T','e','s','t',' ','A','g','e','n','t',0};
+  static const char ainagent[] = {"Wininet Test Agent"};
   char *buffer;
+  WCHAR *wbuffer;
   int retval;
 
   hinet = InternetOpenA(useragent,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL, 0);
@@ -105,9 +109,74 @@ void InternetQueryOptionA_test()
   todo_wine ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code%ld\n",err);
 
   InternetCloseHandle(hinet);
+
+  hinet = InternetOpenA(useragent,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL, 0);
+  ok((hinet != 0x0),"InternetOpen Failed\n");
+
+  SetLastError(0xdeadbeef);
+  retval=InternetSetOptionW(hinet,INTERNET_OPTION_USER_AGENT, &winagent, sizeof(winagent));
+  err=GetLastError();
+  ok(retval == 1,"Got wrong return value %d\n",retval);
+  ok(err == 0xdeadbeef, "Got wrong error code %ld\n",err);
+
+  len=0;
+  SetLastError(0xdeadbeef);
+  wbuffer=HeapAlloc(GetProcessHeap(),0,len);
+  retval = InternetQueryOptionW(hinet,INTERNET_OPTION_USER_AGENT,wbuffer,&len);
+  err=GetLastError();
+  ok(buffer != NULL,"Output Buffer Should Not be Set");
+  todo_wine ok(len == (lstrlenW(winagent)+1)*2,"Got wrong user agent length %ld instead of %d\n",len,(lstrlenW(winagent)+1)*2);
+  ok(retval == 0,"Got wrong return value %d\n",retval);
+  todo_wine ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code%ld\n",err);
+  HeapFree(GetProcessHeap(),0,wbuffer);
+
+  SetLastError(0xdeadbeef);
+  len=40;
+  wbuffer=HeapAlloc(GetProcessHeap(),0,len);
+  retval = InternetQueryOptionW(hinet,INTERNET_OPTION_USER_AGENT,wbuffer,&len);
+  err=GetLastError();
+  ok(retval == 1,"Got wrong return value %d\n",retval);
+  todo_wine ok(!lstrcmpW(winagent,wbuffer),"Got wrong user agent string \n");
+  todo_wine ok(len == lstrlenW(winagent),"Got wrong user agent length %ld instead of %d\n",len,lstrlenW(winagent));
+  ok(err == 0xdeadbeef, "Got wrong error code %ld\n",err);
+  HeapFree(GetProcessHeap(),0,wbuffer);
+
+  SetLastError(0xdeadbeef);
+  len=20;
+  buffer=HeapAlloc(GetProcessHeap(),0,len);
+  retval = InternetQueryOptionA(hinet,INTERNET_OPTION_USER_AGENT,buffer,&len);
+  err=GetLastError();
+  todo_wine ok(!strcmp(ainagent,buffer),"Got wrong user agent string \n");
+  todo_wine ok(len == lstrlenW(winagent),"Got wrong user agent length %ld instead of %d\n",len,lstrlenW(winagent));
+  ok(err == 0xdeadbeef, "Got wrong error code %ld\n",err);
+  HeapFree(GetProcessHeap(),0,buffer);
+
+  InternetCloseHandle(hinet);
+}
+
+void InternetSetOption_test()
+{
+
+  DWORD err;
+  int retval;
+  static const char inpbuffer[] = {"Wininet Test"};
+
+  SetLastError(0xdeadbeef);
+  retval = InternetSetOptionA(NULL,INTERNET_OPTION_USER_AGENT, &inpbuffer, sizeof(inpbuffer));
+  err=GetLastError();
+  ok(retval == 0,"Got wrong return value %d\n",retval);
+  ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code %ld\n",err);
+
+  SetLastError(0xdeadbeef);
+  retval = InternetSetOptionW(NULL,INTERNET_OPTION_USER_AGENT, &inpbuffer, sizeof(inpbuffer));
+  err=GetLastError();
+  ok(retval == 0,"Got wrong return value %d\n",retval);
+  ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code %ld\n",err);
 }
 
 START_TEST(internet)
 {
-  InternetQueryOptionA_test();
+  InternetQueryOption_test();
+  InternetSetOption_test();
 }
+
