--- client.c.orig	2013-05-18 15:48:02.572081600 -0500
+++ client.c	2013-05-18 17:14:37.376634800 -0500
@@ -328,8 +328,12 @@
 	    strlcpy(data.term, term, sizeof data.term) >= sizeof data.term)
 		*data.term = '\0';
 
+#ifdef __CYGWIN__
+	snprintf(&data.ttyname, sizeof(data.ttyname), "%s", ttyname(STDIN_FILENO));
+#else
 	if ((fd = dup(STDIN_FILENO)) == -1)
 		fatal("dup failed");
+#endif
 	imsg_compose(&client_ibuf,
 	    MSG_IDENTIFY, PROTOCOL_VERSION, -1, fd, &data, sizeof data);
 	client_update_event();
--- compat.h.orig	2013-05-18 15:47:08.434235200 -0500
+++ compat.h	2013-05-18 15:46:47.263793600 -0500
@@ -242,4 +242,8 @@
 #define optarg             BSDoptarg
 #endif
 
+#ifndef ECHOPRT
+#define ECHOPRT         0x00000020      /* visual erase mode for hardcopy */
+#endif
+
 #endif /* COMPAT_H */
--- server-client.c.orig	2013-05-18 15:56:46.315187200 -0500
+++ server-client.c	2013-05-18 17:25:07.282394800 -0500
@@ -823,9 +823,12 @@
 		case MSG_IDENTIFY:
 			if (datalen != sizeof identifydata)
 				fatalx("bad MSG_IDENTIFY size");
+			memcpy(&identifydata, imsg.data, sizeof identifydata);
+#ifdef __CYGWIN__
+			imsg.fd = open(identifydata.ttyname, O_RDWR|O_NOCTTY);
+#endif
 			if (imsg.fd == -1)
 				fatalx("MSG_IDENTIFY missing fd");
-			memcpy(&identifydata, imsg.data, sizeof identifydata);
 
 			server_client_msg_identify(c, &identifydata, imsg.fd);
 			break;
--- tmux.h.orig	2013-05-18 15:50:46.107233600 -0500
+++ tmux.h	2013-05-18 15:52:14.374155200 -0500
@@ -475,6 +475,8 @@
 
 	char		term[TERMINAL_LENGTH];
 
+	char		ttyname[TTY_NAME_MAX];
+
 #define IDENTIFY_UTF8 0x1
 #define IDENTIFY_256COLOURS 0x2
 #define IDENTIFY_88COLOURS 0x4
--- tty.c.orig	2013-05-18 17:03:52.539404400 -0500
+++ tty.c	2013-05-18 17:12:47.508652400 -0500
@@ -23,7 +23,11 @@
 
 #include <errno.h>
 #include <fcntl.h>
+
+#ifndef __CYGWIN__
 #include <resolv.h>
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 #include <termios.h>
