diff --git a/tools/winedump/main.c b/tools/winedump/main.c
index 315249d..d92d011 100644
--- a/tools/winedump/main.c
+++ b/tools/winedump/main.c
@@ -27,16 +27,24 @@
 
 static void do_include (const char *arg)
 {
-  globals.directory = arg;
+  char *newIncludes;
+
+  if (!globals.directory)
+    globals.directory = strdup(arg);
+  else {
+    newIncludes = str_create (3,globals.directory," ",arg);
+    free(globals.directory);
+    globals.directory = newIncludes;
+  }
   globals.do_code = 1;
 }
 
 
 static inline const char* strip_ext (const char *str)
 {
-  char *ext = strstr(str, ".dll");
-  if (ext)
-    return str_substring (str, ext);
+  int len = strlen(str);
+  if (len>4 && strcmp(str+len-4,".dll") == 0)
+    return str_substring (str, str+len-4);
   else
     return strdup (str);
 }
@@ -193,7 +201,7 @@
   {"-t",    SPEC, 0, do_trace,    "-t           TRACE arguments (implies -c)"},
   {"-f",    SPEC, 1, do_forward,  "-f dll       Forward calls to 'dll' (implies -t)"},
   {"-D",    SPEC, 0, do_document, "-D           Generate documentation"},
-  {"-o",    SPEC, 1, do_name,     "-o name      Set the output dll name (default: dll)"},
+  {"-o",    SPEC, 1, do_name,     "-o name      Set the output dll name (default: dll). note: strips .dll extensions"},
   {"-C",    SPEC, 0, do_cdecl,    "-C           Assume __cdecl calls (default: __stdcall)"},
   {"-s",    SPEC, 1, do_start,    "-s num       Start prototype search after symbol 'num'"},
   {"-e",    SPEC, 1, do_end,      "-e num       End prototype search after symbol 'num'"},
diff --git a/tools/winedump/search.c b/tools/winedump/search.c
index 79363b9..8667185 100644
--- a/tools/winedump/search.c
+++ b/tools/winedump/search.c
@@ -81,10 +81,20 @@
     while (fgets (grep_buff, MAX_RESULT_LEN, grep))
     {
       int i;
-      for (i = 0; grep_buff[i] && grep_buff[i] != '\n' ; i++)
-        ;
+      const char *extension = grep_buff;
+      for (i = 0; grep_buff[i] && grep_buff[i] != '\n' ; i++) {
+	if (grep_buff[i] == '.')
+	  extension = &grep_buff[i];
+      }
       grep_buff[i] = '\0';
 
+      /* Definitly not in these: */
+      if (strcmp(extension,".dll") == 0 ||
+	  strcmp(extension,".lib") == 0 ||
+	  strcmp(extension,".so")  == 0 ||
+	  strcmp(extension,".o")   == 0)
+	continue;
+
       if (VERBOSE)
         puts (grep_buff);
 
@@ -344,4 +354,3 @@
     free (fgrep_buff);
 }
 #endif
-
diff --git a/tools/winedump/winedump.h b/tools/winedump/winedump.h
index 3188a81..cda4ff2 100644
--- a/tools/winedump/winedump.h
+++ b/tools/winedump/winedump.h
@@ -126,7 +126,7 @@
   int   start_ordinal;     /* -s */
   int   end_ordinal;       /* -e */
   search_symbol *search_symbol; /* -S */
-  const char *directory;   /* -I */
+  char *directory;         /* -I */
   const char *forward_dll; /* -f */
   const char *dll_name;    /* -o */
   char *uc_dll_name;       /* -o */
