diff --git a/download.c b/download.c
index 9794986..78f8936 100644
--- a/download.c
+++ b/download.c
@@ -110,14 +110,14 @@ void download_begin(void)
 {
 	int r;
 
-	printf("\r\nEntering Bootloader Mode\r\n");
+	printf("\r\nEntering Bootloader Mode.\r\n");
 	hard_reset_to_bootloader();
 	printf("Read \"%s\"", file_setting());
 	r = read_intel_hex(file_setting());
 	if (r < 0) {
 		// how are we going to abort???
 	}
-	printf(": %d bytes\r\n", r);
+	printf(": %d bytes.\r\n", r);
 	mk_valid_code_vector();
 	state = SYNC_1;
 	reboot_only = 0;
@@ -127,7 +127,7 @@ void download_begin(void)
 
 void soft_reboot_begin(void)
 {
-	printf("\r\nEntering Bootloader Mode\r\n");
+	printf("\r\nEntering Bootloader Mode.\r\n");
 	hard_reset_to_bootloader();
 	state = SYNC_1;
 	reboot_only = 1;
@@ -136,7 +136,7 @@ void soft_reboot_begin(void)
 
 void hard_reset_to_bootloader(void)
 {
-	printf("Reset CPU (into bootloader)\r\n");
+	printf("Reset CPU (into bootloader).\r\n");
 	set_rts(1);		// RTS (ttl level) connects to P0.14
 	set_dtr(1);		// DTR (ttl level) connects to RST
 	send_break_signal();	// or break detect circuit to RST
@@ -148,7 +148,7 @@ void hard_reset_to_bootloader(void)
 
 void hard_reset_to_user_code(void)
 {
-	printf("Reset CPU (into user code)\r\n");
+	printf("Reset CPU (into user code).\r\n");
 	set_rts(0);		// RTS (ttl level) connects to P0.14
 	set_dtr(1);		// DTR (ttl level) connects to RST
 	send_break_signal();	// or break detect circuit to RST
@@ -267,7 +267,7 @@ static void download_main(int event)
 	  case SYNC_1:
 		switch (event) {
 		  case BEGIN:
-			printf("Attempting baud sync");
+			printf("Attempting baud sync: ");
 			retry = 0;
 		  case RETRY:
 			printf(".");
@@ -347,7 +347,7 @@ static void download_main(int event)
 		  case RESPONSE:
 			if (num_lines(parsed_response_buf) != 1) return;
 			if (strcmp(parsed_response_buf, "OK\r\n") == 0) {
-				printf("Baud sync sucessful\r\n");
+				printf("\r\nBaud sync sucessful.\r\n");
 				state = CHIP_ID;
 				event = BEGIN;
 				break;
@@ -382,7 +382,7 @@ static void download_main(int event)
 					download_cancel(buf);
 					break;
 				}
-				printf("Found chip: \"%s\"\r\n", chip->part_number);
+				printf("Found chip: \"%s\".\r\n", chip->part_number);
 				  //download_cancel("stop here, remove this later");
 				state = UNLOCK;
 				event = BEGIN;
@@ -407,7 +407,7 @@ static void download_main(int event)
 		  case RESPONSE:
 			if (num_lines(parsed_response_buf) != 1) return;
 			if (strcmp(parsed_response_buf, "0\r\n") == 0) {
-				printf("Device Unlocked\r\n");
+				printf("Device unlocked.\r\n");
 				if (reboot_only) {
 					state = BOOT_SOFT;
 				} else {
@@ -443,7 +443,7 @@ static void download_main(int event)
 			fflush(stdout);
 			if (!bytes_within_range(chip->layout[sector].address, 
 			   chip->layout[sector].address + chip->layout[sector].size - 1)) {
-				printf("not used\r\n");
+				printf("not used.\r\n");
 				sector++;
 				break;
 			}
@@ -458,7 +458,7 @@ static void download_main(int event)
 		  case RESPONSE:
 			if (num_lines(parsed_response_buf) == 1 &&
 			  strcmp(parsed_response_buf, "0\r\n") == 0) {
-				printf("already blank\r\n");
+				printf("already blank.\r\n");
 				sector++;
 				event = BEGIN;
 				break;
@@ -510,13 +510,13 @@ static void download_main(int event)
 		  case RESPONSE:
 			if (num_lines(parsed_response_buf) < 1) return;
 			if (strcmp(parsed_response_buf, "0\r\n") == 0) {
-				printf("Ok\r\n");
+				printf("Ok.\r\n");
 				sector++;
 				state = BLANK_CHECK_SECTOR;
 				event = BEGIN;
 				break;
 			} else {
-				printf("Error\r\n");
+				printf("Error.\r\n");
 				download_cancel("Unable to erase flash"); return;
 			}
 		  case TIMEOUT:
@@ -541,7 +541,7 @@ static void download_main(int event)
 			fflush(stdout);
 			if (!bytes_within_range(chip->layout[sector].address + sector_offset, 
 			   chip->layout[sector].address + sector_offset + chip->chunk_size - 1)) {
-				printf("not used\r\n");
+				printf("not used.\r\n");
 				sector_offset += chip->chunk_size;
 				if (sector_offset >= chip->layout[sector].size) {
 					sector_offset = 0;
@@ -669,7 +669,7 @@ static void download_main(int event)
 		  case RESPONSE:
 			if (num_lines(parsed_response_buf) != 1) return;
 			if (strcmp(parsed_response_buf, "0\r\n") == 0) {
-				printf("Ok\r\n");
+				printf("Ok.\r\n");
 				sector_offset += chip->chunk_size;
 				if (sector_offset >= chip->layout[sector].size) {
 					sector_offset = 0;
@@ -702,7 +702,7 @@ static void download_main(int event)
 		switch(event) {
 		  case BEGIN:
 			printf("Booting (soft jump)...\r\n");
-			printf("loading jump code\r\n");
+			printf("Loading jump code.\r\n");
 			// would be nice if we could simply jump to the user's code, but
 			// Philips didn't think of that.  The interrupt vector table stays
 			// mapped to the bootloader, so jumping to zero only runs the
@@ -798,7 +798,7 @@ static void download_main(int event)
 	  case BOOT_RUN_CODE:
 		switch(event) {
 		  case BEGIN:
-			printf("jumping now!\r\n");
+			printf("Jumping now!\r\n");
 			snprintf(buf, sizeof(buf), "G %d A\r\n", chip->ram_addr);
 			xmit_cmd(buf, 4);
 			return;
@@ -825,7 +825,7 @@ static void download_main(int event)
 
 
 	  default:
-		  snprintf(buf, sizeof(buf), "unknown state %d\r\n", state);
+		  snprintf(buf, sizeof(buf), "unknown state %d.\r\n", state);
 		  download_cancel(buf);
 		  return;
 	}
@@ -837,7 +837,7 @@ void download_cancel(const char *mesg)
 {
 	printf("\r\nDownload Canceled");
 	if (mesg && *mesg) printf(": %s", mesg);
-	printf("\r\n");
+	printf(".\r\n");
 	// need to do some cleanup for various states???
 	done_program(1);
 }
diff --git a/gui.c b/gui.c
index 089584a..e8ee61d 100644
--- a/gui.c
+++ b/gui.c
@@ -362,7 +362,7 @@ void create_window(int *argc, char ***argv)
 	gtk_widget_set_sensitive(reboot_button, TRUE);
 	gtk_widget_show(reboot_button);
 
-	bootloader_button = gtk_button_new_with_label("Booloader");
+	bootloader_button = gtk_button_new_with_label("Bootloader");
 	gtk_widget_show(bootloader_button);
 
 	quit_button = gtk_button_new_with_label("Quit");
diff --git a/ihex.c b/ihex.c
index cda37af..35e6d7f 100644
--- a/ihex.c
+++ b/ihex.c
@@ -77,7 +77,7 @@ int read_intel_hex(const char *filename)
 
 	fp = fopen(filename, "r");
 	if (fp == NULL) {
-		printf("Unable to read file %s\n", filename);
+		printf("Unable to read file %s.\n", filename);
 		return -1;
 	}
 	while (!feof(fp)) {
@@ -86,7 +86,7 @@ int read_intel_hex(const char *filename)
 		lineno++;
 		if (*buf) {
 			if (parse_hex_line(buf) == 0) {
-				printf("Warning, parse error line %d\n", lineno);
+				printf("Warning, parse error line %d.\n", lineno);
 				return -2;
 			}
 		}
diff --git a/lpc2k_pgm.c b/lpc2k_pgm.c
index 8a655c0..23e79a7 100644
--- a/lpc2k_pgm.c
+++ b/lpc2k_pgm.c
@@ -61,7 +61,7 @@ int main(int argc, char **argv)
 	init_settings();
 	term_fd = open_tty();
 	if (term_fd < 0) {
-		printf("Unable to open I/O to terminal (/dev/tty), r=%d\n",
+		printf("Unable to open I/O to terminal (/dev/tty), r=%d.\n",
 			term_fd);
 		sleep(1);
 		exit(1);
@@ -80,10 +80,10 @@ void change_baud(const char *baud_name)
 
 	r = set_baud(baud_name);
 	if (r == 0) {
-		printf("Baud rate set to %s\r\n", baud_name);
+		printf("Baud rate set to %s.\r\n", baud_name);
 		new_baud_setting(baud_name);
 	} else {
-		printf("Unable to set baud to %s\r\n", baud_name);
+		printf("Unable to set baud to %s.\r\n", baud_name);
 	}
 }
 
diff --git a/serial.c b/serial.c
index 28dc5d8..9fd7da4 100644
--- a/serial.c
+++ b/serial.c
@@ -44,7 +44,10 @@
 #include <fcntl.h>
 #include <termios.h>
 #include <sys/ioctl.h>
-#include <linux/serial.h>
+
+#ifdef __linux__
+# include <linux/serial.h>
+#endif
 
 #include "serial.h"
 #include "settings.h"
@@ -60,30 +63,34 @@ static void report_open_error(const char *filename, int err);
 void open_serial_port(const char *port_name)
 {
 	int r;
+#ifdef __linux__
 	struct serial_struct kernel_serial_settings;
+#endif
 
 	if (port_fd >= 0) {
 		close(port_fd);
 	}
-	port_fd = open(port_name, O_RDWR);
+	port_fd = open(port_name, O_RDWR | O_NOCTTY | O_NONBLOCK | O_SYNC);
 	if (port_fd < 0) {
 		report_open_error(port_name, errno);
 		return;
 	}
 	r = set_baud(baud_setting());
 	if (r == 0) {
-		printf("Port \"%s\" opened at %s baud\r\n",
+		printf("Port \"%s\" opened at %s baud.\r\n",
 			port_name, baud_setting());
 		new_port_setting(port_name);
 	} else {
-		printf("Port \"%s\" opened, unable to set baud to %s\r\n",
+		printf("Port \"%s\" opened, unable to set baud to %s.\r\n",
 			port_name, baud_setting());
 	}
+#ifdef __linux__
 	/* attempt to set low latency mode, but don't worry if we can't */
 	r = ioctl(port_fd, TIOCGSERIAL, &kernel_serial_settings);
 	if (r < 0) return;
 	kernel_serial_settings.flags |= ASYNC_LOW_LATENCY;
 	ioctl(port_fd, TIOCSSERIAL, &kernel_serial_settings);
+#endif
 }
 
 
@@ -104,19 +111,19 @@ static void report_open_error(const char *filename, int err)
 	printf("\r\n");
 	printf("Unable to open \"%s\"\r\n", filename);
 	if (err == EACCES) {
-		printf("You don't have permission to access %s\r\n", filename);
+		printf("You don't have permission to access %s.\r\n", filename);
 	}
 	//printf("Attemping to find more information about %s....\r\n", filename);
 	r = stat(filename, &info);
 	if (r < 0) {
 		if (errno == ENOENT) {
-			printf("file %s does not exist\r\n", filename);
+			printf("File %s does not exist.\r\n", filename);
 		} else if (errno == ELOOP) {
-			printf("too many symbolic links\r\n");
+			printf("Too many symbolic links!\r\n");
 		} else if (errno == EACCES) {
-			printf("permission denied to get file status\r\n");
+			printf("Permission denied to get file status.\r\n");
 		} else {
-			printf("Unable to get file status, err%d\r\n", errno);
+			printf("Unable to get file status, err%d.\r\n", errno);
 		}
 		return;
 	}
@@ -165,26 +172,26 @@ static void report_open_error(const char *filename, int err)
 	perm = info.st_mode;
 
 	if ((perm & S_IROTH) && (perm & S_IWOTH)) {
-		printf("%s has read/write permission for everybody\r\n",
+		printf("%s has read/write permission for everybody.\r\n",
 			filename);
 	} else {
-		printf("%s is not read/write for everybody, so\r\n", filename);
-		printf("  you must match either user or group permission\r\n");
+		printf("%s is not read/write for everybody, so you\r\n", filename);
+		printf("  must match either user or group permission.\r\n");
 		if ((perm & S_IRUSR) && (perm & S_IWUSR)) {
-			printf("%s has read/write permission for user %s\r\n",
+			printf("%s has read/write permission for user %s.\r\n",
 				filename, file_uname);
 			perm_ok = 1;
 		}
 		if ((perm & S_IRGRP) && (perm & S_IWGRP)) {
-			printf("%s has read/write permission for group %s\r\n",
+			printf("%s has read/write permission for group %s.\r\n",
 				filename, file_gname);
 			perm_ok = 1;
 		}
 		if (perm_ok == 0) {
-			printf("%s does not read/write permission for user or group!\r\n",
+			printf("%s does not have read/write permission for neither user nor group!\r\n",
 				filename);
 		} else {
-			printf("Your access privs: user %s, group %s\r\n",
+			printf("Your access privs: user %s, group %s.\r\n",
 				my_uname, my_gname);
 		}
 	}
@@ -261,8 +268,9 @@ int set_baud(const char *baud_name)
 	if (r != 0) return -3;
 	//port_setting.c_iflag = IGNBRK | IGNPAR | IXANY | IXON;
 	port_setting.c_iflag = IGNBRK | IGNPAR;
-	port_setting.c_cflag = baud | CS8 | CREAD | HUPCL | CLOCAL;
-	port_setting.c_oflag = 0;
+	port_setting.c_cflag = CS8 | CREAD | HUPCL | CLOCAL;
+	cfsetspeed(&port_setting, baud);
+	port_setting.c_oflag = OPOST;
 	port_setting.c_lflag = 0;
 	r = tcsetattr(port_fd, TCSAFLUSH, &port_setting);
 	if (r != 0) return -4;
