diff --git a/files/mavlink_generator/C/include_v1.0/mavlink_helpers.h b/files/mavlink_generator/C/include_v1.0/mavlink_helpers.h
index 6eb8f0ba2a554bf3a220ffcbbb922cbf9274dbdf..6799b6077db86f7793d2743a4a8778a6ba4f74fb 100644
--- a/files/mavlink_generator/C/include_v1.0/mavlink_helpers.h
+++ b/files/mavlink_generator/C/include_v1.0/mavlink_helpers.h
@@ -120,7 +120,7 @@ MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint
  */
 MAVLINK_HELPER uint16_t mavlink_msg_to_send_buffer(uint8_t *buffer, const mavlink_message_t *msg)
 {
-	memcpy(buffer, (uint8_t *)&msg->magic, MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)msg->len);
+	memcpy(buffer, (const uint8_t *)&msg->magic, MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)msg->len);
 	return MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)msg->len;
 }
 
@@ -182,7 +182,15 @@ MAVLINK_HELPER void mavlink_update_checksum(mavlink_message_t* msg, uint8_t c)
  */
 MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status)
 {
+#if MAVLINK_EXTERNAL_RX_BUFFER
+	// No m_mavlink_message array defined in function,
+	// has to be defined externally
+#ifndef m_mavlink_message
+#error ERROR: IF #define MAVLINK_EXTERNAL_RX_BUFFER IS SET, THE BUFFER HAS TO BE ALLOCATED OUTSIDE OF THIS FUNCTION
+#endif
+#else
 	static mavlink_message_t m_mavlink_message[MAVLINK_COMM_NUM_BUFFERS];
+#endif
 
         /*
 	  default message crc function. You can override this per-system to
@@ -209,6 +217,7 @@ MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_messa
 		{
 			status->parse_state = MAVLINK_PARSE_STATE_GOT_STX;
 			rxmsg->len = 0;
+			rxmsg->magic = c;
 			mavlink_start_checksum(rxmsg);
 		}
 		break;
@@ -269,7 +278,7 @@ MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_messa
 		break;
 
 	case MAVLINK_PARSE_STATE_GOT_MSGID:
-		_MAV_PAYLOAD(rxmsg)[status->packet_idx++] = (char)c;
+		_MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx++] = (char)c;
 		mavlink_update_checksum(rxmsg, c);
 		if (status->packet_idx == rxmsg->len)
 		{
@@ -296,6 +305,7 @@ MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_messa
 		else
 		{
 			status->parse_state = MAVLINK_PARSE_STATE_GOT_CRC1;
+			_MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx] = (char)c;
 		}
 		break;
 
@@ -317,6 +327,7 @@ MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_messa
 			// Successfully got message
 			status->msg_received = 1;
 			status->parse_state = MAVLINK_PARSE_STATE_IDLE;
+			_MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx+1] = (char)c;
 			memcpy(r_message, rxmsg, sizeof(mavlink_message_t));
 		}
 		break;
diff --git a/files/mavlink_generator/C/include_v1.0/mavlink_types.h b/files/mavlink_generator/C/include_v1.0/mavlink_types.h
index 571dc50872af5eefeebd98546cfdeae2b6240e35..3827834078b2dc8c12c692bfa35b7e4610f9cc27 100644
--- a/files/mavlink_generator/C/include_v1.0/mavlink_types.h
+++ b/files/mavlink_generator/C/include_v1.0/mavlink_types.h
@@ -1,6 +1,8 @@
 #ifndef MAVLINK_TYPES_H_
 #define MAVLINK_TYPES_H_
 
+#include <inttypes.h>
+
 enum MAV_ACTION
 {
     MAV_ACTION_HOLD = 0,
@@ -66,6 +68,8 @@ typedef struct param_union {
 		float param_float;
 		int32_t param_int32;
 		uint32_t param_uint32;
+		uint8_t param_uint8;
+		uint8_t bytes[4];
 	};
 	uint8_t type;
 } mavlink_param_union_t;
@@ -107,12 +111,12 @@ typedef enum {
 #define MAVLINK_MAX_FIELDS 64
 
 typedef struct __mavlink_field_info {
-	const char *name;             // name of this field
-	const char *print_format;     // printing format hint, or NULL
-	mavlink_message_type_t type;  // type of this field
-	unsigned array_length;        // if non-zero, field is an array
-	unsigned wire_offset;         // offset of each field in the payload
-	unsigned structure_offset;    // offset in a C structure
+        const char *name;                 // name of this field
+        const char *print_format;         // printing format hint, or NULL
+        mavlink_message_type_t type;      // type of this field
+        unsigned int array_length;        // if non-zero, field is an array
+        unsigned int wire_offset;         // offset of each field in the payload
+        unsigned int structure_offset;    // offset in a C structure
 } mavlink_field_info_t;
 
 // note that in this structure the order of fields is the order
@@ -123,11 +127,12 @@ typedef struct __mavlink_message_info {
 	mavlink_field_info_t fields[MAVLINK_MAX_FIELDS];       // field information
 } mavlink_message_info_t;
 
-#define _MAV_PAYLOAD(msg) ((char *)(&(msg)->payload64[0]))
+#define _MAV_PAYLOAD(msg) ((const char *)(&(msg)->payload64[0]))
+#define _MAV_PAYLOAD_NON_CONST(msg) ((char *)((char *)(&(msg)->payload64[0])))
 
 // checksum is immediately after the payload bytes
-#define mavlink_ck_a(msg) *(msg->len + (uint8_t *)_MAV_PAYLOAD(msg))
-#define mavlink_ck_b(msg) *((msg->len+(uint16_t)1) + (uint8_t *)_MAV_PAYLOAD(msg))
+#define mavlink_ck_a(msg) *(msg->len + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg))
+#define mavlink_ck_b(msg) *((msg->len+(uint16_t)1) + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg))
 
 typedef enum {
     MAVLINK_COMM_0,
diff --git a/files/mavlink_generator/C/include_v1.0/protocol.h b/files/mavlink_generator/C/include_v1.0/protocol.h
index 27c2396836e839638ef2d0a186442943346b28e3..7b3e3c0bd2112c9516e694b729cbc990d2e766bc 100644
--- a/files/mavlink_generator/C/include_v1.0/protocol.h
+++ b/files/mavlink_generator/C/include_v1.0/protocol.h
@@ -153,17 +153,25 @@ static inline void byte_copy_8(char *dst, const char *src)
 #define _mav_put_double(buf, wire_offset, b)   *(double *)&buf[wire_offset] = b
 #endif
 
+/*
+  like memcpy(), but if src is NULL, do a memset to zero
+*/
+static void mav_array_memcpy(void *dest, const void *src, size_t n)
+{
+	if (src == NULL) {
+		memset(dest, 0, n);
+	} else {
+		memcpy(dest, src, n);
+	}
+}
 
 /*
  * Place a char array into a buffer
  */
 static inline void _mav_put_char_array(char *buf, uint8_t wire_offset, const char *b, uint8_t array_length)
 {
-	if (b == NULL) {
-		memset(&buf[wire_offset], 0, array_length);
-	} else {
-		memcpy(&buf[wire_offset], b, array_length);
-	}
+	mav_array_memcpy(&buf[wire_offset], b, array_length);
+
 }
 
 /*
@@ -171,11 +179,8 @@ static inline void _mav_put_char_array(char *buf, uint8_t wire_offset, const cha
  */
 static inline void _mav_put_uint8_t_array(char *buf, uint8_t wire_offset, const uint8_t *b, uint8_t array_length)
 {
-	if (b == NULL) {
-		memset(&buf[wire_offset], 0, array_length);
-	} else {
-		memcpy(&buf[wire_offset], b, array_length);
-	}
+	mav_array_memcpy(&buf[wire_offset], b, array_length);
+
 }
 
 /*
@@ -183,11 +188,8 @@ static inline void _mav_put_uint8_t_array(char *buf, uint8_t wire_offset, const
  */
 static inline void _mav_put_int8_t_array(char *buf, uint8_t wire_offset, const int8_t *b, uint8_t array_length)
 {
-	if (b == NULL) {
-		memset(&buf[wire_offset], 0, array_length);
-	} else {
-		memcpy(&buf[wire_offset], b, array_length);
-	}
+	mav_array_memcpy(&buf[wire_offset], b, array_length);
+
 }
 
 #if MAVLINK_NEED_BYTE_SWAP
@@ -207,11 +209,7 @@ static inline void _mav_put_ ## TYPE ##_array(char *buf, uint8_t wire_offset, co
 #define _MAV_PUT_ARRAY(TYPE, V)					\
 static inline void _mav_put_ ## TYPE ##_array(char *buf, uint8_t wire_offset, const TYPE *b, uint8_t array_length) \
 { \
-	if (b == NULL) { \
-		memset(&buf[wire_offset], 0, array_length*sizeof(TYPE)); \
-	} else { \
-		memcpy(&buf[wire_offset], b, array_length*sizeof(TYPE)); \
-	} \
+	mav_array_memcpy(&buf[wire_offset], b, array_length*sizeof(TYPE)); \
 }
 #endif
 
@@ -224,9 +222,9 @@ _MAV_PUT_ARRAY(int64_t,  i64)
 _MAV_PUT_ARRAY(float,    f)
 _MAV_PUT_ARRAY(double,   d)
 
-#define _MAV_RETURN_char(msg, wire_offset)             _MAV_PAYLOAD(msg)[wire_offset]
-#define _MAV_RETURN_int8_t(msg, wire_offset)   (int8_t)_MAV_PAYLOAD(msg)[wire_offset]
-#define _MAV_RETURN_uint8_t(msg, wire_offset) (uint8_t)_MAV_PAYLOAD(msg)[wire_offset]
+#define _MAV_RETURN_char(msg, wire_offset)             (const char)_MAV_PAYLOAD(msg)[wire_offset]
+#define _MAV_RETURN_int8_t(msg, wire_offset)   (const int8_t)_MAV_PAYLOAD(msg)[wire_offset]
+#define _MAV_RETURN_uint8_t(msg, wire_offset) (const uint8_t)_MAV_PAYLOAD(msg)[wire_offset]
 
 #if MAVLINK_NEED_BYTE_SWAP
 #define _MAV_MSG_RETURN_TYPE(TYPE, SIZE) \
diff --git a/files/mavlink_generator/generator/_ctypes.pyd b/files/mavlink_generator/generator/_ctypes.pyd
new file mode 100644
index 0000000000000000000000000000000000000000..ae456be8063dc5776e31bda4300a9c04304a2511
Binary files /dev/null and b/files/mavlink_generator/generator/_ctypes.pyd differ
diff --git a/files/mavlink_generator/generator/_hashlib.pyd b/files/mavlink_generator/generator/_hashlib.pyd
new file mode 100644
index 0000000000000000000000000000000000000000..5efea4ac7366e80f01d857462a066a1bbb74adfa
Binary files /dev/null and b/files/mavlink_generator/generator/_hashlib.pyd differ
diff --git a/files/mavlink_generator/generator/_socket.pyd b/files/mavlink_generator/generator/_socket.pyd
new file mode 100644
index 0000000000000000000000000000000000000000..b4b3b1fe60899deb850110a1aacd46e956722ab0
Binary files /dev/null and b/files/mavlink_generator/generator/_socket.pyd differ
diff --git a/files/mavlink_generator/generator/_ssl.pyd b/files/mavlink_generator/generator/_ssl.pyd
new file mode 100644
index 0000000000000000000000000000000000000000..c054f240d67ff88e4fb9f6745858b0365099829e
Binary files /dev/null and b/files/mavlink_generator/generator/_ssl.pyd differ
diff --git a/files/mavlink_generator/generator/bz2.pyd b/files/mavlink_generator/generator/bz2.pyd
new file mode 100644
index 0000000000000000000000000000000000000000..df1a20e4c98d752349fefb7af3952102aa7cd2f4
Binary files /dev/null and b/files/mavlink_generator/generator/bz2.pyd differ
diff --git a/files/mavlink_generator/generator/library.zip b/files/mavlink_generator/generator/library.zip
new file mode 100644
index 0000000000000000000000000000000000000000..fb48826192e9366422e77132c1dcfa05e616dd1f
Binary files /dev/null and b/files/mavlink_generator/generator/library.zip differ
diff --git a/files/mavlink_generator/generator/mavgen.exe b/files/mavlink_generator/generator/mavgen.exe
new file mode 100644
index 0000000000000000000000000000000000000000..b59dd82c45c0f4288c3ece8bd02f4ea3f1f72379
Binary files /dev/null and b/files/mavlink_generator/generator/mavgen.exe differ
diff --git a/files/mavlink_generator/generator/pyexpat.pyd b/files/mavlink_generator/generator/pyexpat.pyd
new file mode 100644
index 0000000000000000000000000000000000000000..03c607001ccfa956e83f38fcab4edc5eab33899b
Binary files /dev/null and b/files/mavlink_generator/generator/pyexpat.pyd differ
diff --git a/files/mavlink_generator/generator/python27.dll b/files/mavlink_generator/generator/python27.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9b03b95e80bf87624389f3c348fcfbfd43d8db8e
Binary files /dev/null and b/files/mavlink_generator/generator/python27.dll differ
diff --git a/files/mavlink_generator/generator/select.pyd b/files/mavlink_generator/generator/select.pyd
new file mode 100644
index 0000000000000000000000000000000000000000..e1b0ec2c49f1108286fcd941a922070976c0e9ab
Binary files /dev/null and b/files/mavlink_generator/generator/select.pyd differ
diff --git a/files/mavlink_generator/generator/unicodedata.pyd b/files/mavlink_generator/generator/unicodedata.pyd
new file mode 100644
index 0000000000000000000000000000000000000000..a5c460d6fb27d2c938ea4b3c7401ed2358e14e3a
Binary files /dev/null and b/files/mavlink_generator/generator/unicodedata.pyd differ
diff --git a/files/mavlink_generator/generator/w9xpopen.exe b/files/mavlink_generator/generator/w9xpopen.exe
new file mode 100644
index 0000000000000000000000000000000000000000..f6033fdeaaaf14dc80579adeb1a8827f08d1de4f
Binary files /dev/null and b/files/mavlink_generator/generator/w9xpopen.exe differ
diff --git a/src/apps/mavlinkgen/generator/MAVLinkXMLParserV10.cc b/src/apps/mavlinkgen/generator/MAVLinkXMLParserV10.cc
index 5bbb3ec45fe4fa566a4700635d37c77f596b2f0d..b843daea5f7655a5ba96deb069e24f658303b955 100644
--- a/src/apps/mavlinkgen/generator/MAVLinkXMLParserV10.cc
+++ b/src/apps/mavlinkgen/generator/MAVLinkXMLParserV10.cc
@@ -96,7 +96,7 @@ void MAVLinkXMLParserV10::processError(QProcess::ProcessError err)
 bool MAVLinkXMLParserV10::generate()
 {
 #ifdef Q_OS_WIN
-    QString generatorCall("%1/files/mavlink_generator/generator/mavgen.exe");
+    QString generatorCall("files/mavlink_generator/generator/mavgen.exe");
 #endif
 #if (defined Q_OS_MAC) || (defined Q_OS_LINUX)
     QString generatorCall("python");