diff --git a/include/serial.h b/include/serial.h
index 9bb91b2b111c170a8096b6e9fd37ed1594c63569..e42fa026986bca9d9fbb36f59778a95855c0e510 100644
--- a/include/serial.h
+++ b/include/serial.h
@@ -53,11 +53,24 @@
   TypeName(const TypeName&);               \
   void operator=(const TypeName&)
 
+// If on Windows undefine the PARITY_* defines that are in winbase.h
+#ifdef PARTIY_NONE
+    #undef PARITY_NONE
+#endif
+
+#ifdef PARTIY_ODD
+    #undef PARITY_ODD
+#endif
+
+#ifdef PARTIY_EVEN
+    #undef PARITY_EVEN
+#endif
+
 // DEFINES
 #define DEFAULT_BAUDRATE 9600
 #define DEFAULT_TIMEOUT 0.0
 #define DEFAULT_BYTESIZE EIGHTBITS
-#define DEFAULT_PARITY NONE
+#define DEFAULT_PARITY PARITY_NONE
 #define DEFAULT_STOPBITS STOPBITS_ONE
 #define DEFAULT_FLOWCONTROL FLOWCONTROL_NONE
 
diff --git a/src/serial.cpp b/src/serial.cpp
index 81806a558fc34d3b2c2ef26025a852ff3da9bbe3..a8ede68473aa901bd7d3923464ee7ce377b9f644 100644
--- a/src/serial.cpp
+++ b/src/serial.cpp
@@ -159,6 +159,8 @@ void Serial::init() {
 
 Serial::~Serial() {
     this->close();
+    if(this->timeout != NULL)
+        delete this->timeout;
 }
 
 void Serial::open() {
@@ -185,8 +187,11 @@ void Serial::open() {
 void Serial::close() {
     // Cancel the current timeout timer and async reads
     this->timeout_timer.cancel();
-    this->serial_port->cancel();
-    this->serial_port->close();
+    if(this->serial_port != NULL) {
+        this->serial_port->cancel();
+        this->serial_port->close();
+        delete this->serial_port;
+    }
 }
 
 const int Serial::read(char* buffer, int size) {
@@ -219,7 +224,7 @@ const std::string Serial::read(int size) {
     char *serial_buffer = new char[size];
     int bytes_read_ = this->read(serial_buffer, size);
     std::string return_str(serial_buffer, (std::size_t)bytes_read_);
-    delete serial_buffer;
+    delete[] serial_buffer;
     return return_str;
 }
 
@@ -248,7 +253,7 @@ const int Serial::write(std::string data) {
     char *cstr = new char[data.size()+1];
     std::strcpy(cstr, data.c_str());
     int bytes_wrote = this->write(cstr, data.length());
-    delete cstr;
+    delete[] cstr;
     return bytes_wrote;
 }
 
@@ -277,6 +282,8 @@ void Serial::setTimeoutMilliseconds(long timeout) {
     if(timeout > 0) {
         this->timeout = new boost::posix_time::milliseconds(timeout);
     } else {
+        if(this->timeout != NULL)
+            delete this->timeout;
         this->timeout = NULL;
     }