--tftp-lowercase option.
diff --git a/CHANGELOG b/CHANGELOG
index fee3305..5300f6d 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -93,6 +93,9 @@
 	    Give correct from-cache answers to explict CNAME queries.
 	    Thanks to Rob Zwissler for spotting this.
 	    
+	    Add --dhcp-lowercase option. Thanks to Oliver Rath for the
+	    patch. 
+	    
 
 version 2.60
             Fix compilation problem in Mac OS X Lion. Thanks to Olaf
diff --git a/man/dnsmasq.8 b/man/dnsmasq.8
index c43aee5..0a3b5df 100644
--- a/man/dnsmasq.8
+++ b/man/dnsmasq.8
@@ -1385,6 +1385,12 @@
 enabled, and certainly not without specifying --tftp-root. Doing so
 can expose any world-readable file on the server to any host on the net. 
 .TP
+.B --tftp-lowercase
+Convert filenames in TFTP requests to all lowercase. This is useful
+for requests from Windows machines, which have case-insensitive
+filesystems and tend to play fast-and-loose with case in filenames.
+Note that dnsmasq's tftp server always converts "\\" to "/" in filenames.
+.TP
 .B --tftp-max=<connections>
 Set the maximum number of concurrent TFTP connections allowed. This
 defaults to 50. When serving a large number of TFTP connections,
diff --git a/src/dnsmasq.h b/src/dnsmasq.h
index 082c923..3b4eac2 100644
--- a/src/dnsmasq.h
+++ b/src/dnsmasq.h
@@ -217,7 +217,8 @@
 #define OPT_CONNTRACK      35
 #define OPT_FQDN_UPDATE    36
 #define OPT_RA             37
-#define OPT_LAST           38
+#define OPT_TFTP_LC        38
+#define OPT_LAST           39
 
 /* extra flags for my_syslog, we use a couple of facilities since they are known 
    not to occupy the same bits as priorities, no matter how syslog.h is set up. */
diff --git a/src/option.c b/src/option.c
index 611b599..5cb7d7b 100644
--- a/src/option.c
+++ b/src/option.c
@@ -117,6 +117,7 @@
 #define LOPT_RA        306
 #define LOPT_DUID      307
 #define LOPT_HOST_REC  308
+#define LOPT_TFTP_LC   309
 
 #ifdef HAVE_GETOPT_LONG
 static const struct option opts[] =  
@@ -196,6 +197,7 @@
     { "tftp-unique-root", 0, 0, LOPT_APREF },
     { "tftp-root", 1, 0, LOPT_PREFIX },
     { "tftp-max", 1, 0, LOPT_TFTP_MAX },
+    { "tftp-lowercase", 0, 0, LOPT_TFTP_LC },
     { "ptr-record", 1, 0, LOPT_PTR },
     { "naptr-record", 1, 0, LOPT_NAPTR },
     { "bridge-interface", 1, 0 , LOPT_BRIDGE },
@@ -342,6 +344,7 @@
   { LOPT_SECURE, OPT_TFTP_SECURE, NULL, gettext_noop("Allow access only to files owned by the user running dnsmasq."), NULL },
   { LOPT_TFTP_MAX, ARG_ONE, "<integer>", gettext_noop("Maximum number of conncurrent TFTP transfers (defaults to %s)."), "#" },
   { LOPT_NOBLOCK, OPT_TFTP_NOBLOCK, NULL, gettext_noop("Disable the TFTP blocksize extension."), NULL },
+  { LOPT_TFTP_LC, OPT_TFTP_LC, NULL, gettext_noop("Convert TFTP filenames to lowercase"), NULL },
   { LOPT_TFTPPORTS, ARG_ONE, "<start>,<end>", gettext_noop("Ephemeral port range for use by TFTP transfers."), NULL },
   { LOPT_LOG_OPTS, OPT_LOG_OPTS, NULL, gettext_noop("Extra logging for DHCP."), NULL },
   { LOPT_MAX_LOGS, ARG_ONE, "[=<integer>]", gettext_noop("Enable async. logging; optionally set queue length."), NULL },
diff --git a/src/tftp.c b/src/tftp.c
index a67fcaa..bda04f3 100644
--- a/src/tftp.c
+++ b/src/tftp.c
@@ -345,9 +345,12 @@
 	}
 
       /* cope with backslashes from windows boxen. */
-      while ((p = strchr(filename, '\\')))
-	*p = '/';
-
+      for (p = filename; *p; p++)
+	if (*p == '\\')
+	  *p = '/';
+	else if (option_bool(OPT_TFTP_LC))
+	  *p = tolower(*p);
+		
       strcpy(daemon->namebuff, "/");
       if (prefix)
 	{