From 561087a30a8d0b24780ccb1cb469525c339a8698 Mon Sep 17 00:00:00 2001
From: Richard Harrison <rjh@zaretto.com>
Date: Sun, 12 Feb 2017 16:57:24 +0100
Subject: [PATCH] Support for configurable MP Protocol Version 1.1.2

/sim/multiplay/protocol-version is either 1 or 2

The properties defined in multiplaymgr define which version they are related to; however if these are in a more recent protocol than selected they will be transmitted in the selected protocol version.

The id property list now defines a "transmit as" - however this is not yet implemented.

This commit is intended to be a WIP towards changes for 2017.1 that will ensure any future protocol changes are compatible with this version (so this 2017.1 would be able to see a protocl V3 FG if one ever existed), key to this is to stop processing the property list as soon as an unknown ID is encountered.
---
 src/MultiPlayer/multiplaymgr.cxx | 491 ++++++++++++++++---------------
 src/MultiPlayer/multiplaymgr.hxx |  17 +-
 2 files changed, 273 insertions(+), 235 deletions(-)

diff --git a/src/MultiPlayer/multiplaymgr.cxx b/src/MultiPlayer/multiplaymgr.cxx
index ae9c3ab96..046e7344d 100644
--- a/src/MultiPlayer/multiplaymgr.cxx
+++ b/src/MultiPlayer/multiplaymgr.cxx
@@ -66,7 +66,22 @@ enum TransmissionType {
 	TT_INT,
 	TT_FLOAT,
 	TT_STRING,
+	TT_SHORTINT,
 };
+/*
+ * Definitions for the version of the protocol to use to transmit the items defined in the IdPropertyList
+ * 
+ * There is currently a plan to deliver a revised protocol (2017-02-01) that will pack a V1 and a V2 section into 
+ * the existing POS_DATA_ID packet. However this cannot function properly with pre 2017.1 clients.
+ * As of 2017.1 a version of this module that will handle V2 packets, but only emit V1 packets, as an interim measure
+ * to pave the way for future changes; which may be that fgms is updated to handle both packets, or it could be that
+ * after a certain amount of time has elapsed this could simply become the de-facto standard.
+ * So 2017.1 needs to be configurable to transmit V2 packets (via a property, available on a dialog) - 
+ * so that in the future (when 2017.1 is an old release) anyone still running 2017.1 could choose to run V2 on the
+ * understanding that V2 will be incompatible with V1 clients.
+ */
+const int V1_1_PROP_ID = 1;
+const int V1_1_2_PROP_ID = 2;
 
 
 struct IdPropertyList {
@@ -87,254 +102,254 @@ static int convert_launchbar_state(int direction, xdr_data_t*, FGPropertyData*)
 // This should be extendable dynamically for every specific aircraft ...
 // For now only that static list
 static const IdPropertyList sIdPropertyList[] = {
-	{ 100, "surface-positions/left-aileron-pos-norm",  simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 101, "surface-positions/right-aileron-pos-norm", simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 102, "surface-positions/elevator-pos-norm",      simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 103, "surface-positions/rudder-pos-norm",        simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 104, "surface-positions/flap-pos-norm",          simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 105, "surface-positions/speedbrake-pos-norm",    simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 106, "gear/tailhook/position-norm",              simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 107, "gear/launchbar/position-norm",             simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	//  {108, "gear/launchbar/state",                     simgear::props::STRING, TT_STRING,  1, NULL},
-	{ 109, "gear/launchbar/holdback-position-norm",    simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 110, "canopy/position-norm",                     simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 111, "surface-positions/wing-pos-norm",          simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 112, "surface-positions/wing-fold-pos-norm",     simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 113, "gear/launchbar/state",                     simgear::props::STRING, TT_STRING,  2, convert_launchbar_state},
+	{ 100, "surface-positions/left-aileron-pos-norm",  simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 101, "surface-positions/right-aileron-pos-norm", simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 102, "surface-positions/elevator-pos-norm",      simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 103, "surface-positions/rudder-pos-norm",        simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 104, "surface-positions/flap-pos-norm",          simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 105, "surface-positions/speedbrake-pos-norm",    simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 106, "gear/tailhook/position-norm",              simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 107, "gear/launchbar/position-norm",             simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 108, "gear/launchbar/state",                     simgear::props::STRING, TT_STRING,  V1_1_PROP_ID, NULL},
+	{ 109, "gear/launchbar/holdback-position-norm",    simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 110, "canopy/position-norm",                     simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 111, "surface-positions/wing-pos-norm",          simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 112, "surface-positions/wing-fold-pos-norm",     simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 113, "gear/launchbar/state",                     simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, convert_launchbar_state},
 
-	{ 200, "gear/gear[0]/compression-norm",           simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 201, "gear/gear[0]/position-norm",              simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 210, "gear/gear[1]/compression-norm",           simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 211, "gear/gear[1]/position-norm",              simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 220, "gear/gear[2]/compression-norm",           simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 221, "gear/gear[2]/position-norm",              simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 230, "gear/gear[3]/compression-norm",           simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 231, "gear/gear[3]/position-norm",              simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 240, "gear/gear[4]/compression-norm",           simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 241, "gear/gear[4]/position-norm",              simgear::props::FLOAT, TT_FLOAT,  1, NULL },
+	{ 200, "gear/gear[0]/compression-norm",           simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 201, "gear/gear[0]/position-norm",              simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 210, "gear/gear[1]/compression-norm",           simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 211, "gear/gear[1]/position-norm",              simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 220, "gear/gear[2]/compression-norm",           simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 221, "gear/gear[2]/position-norm",              simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 230, "gear/gear[3]/compression-norm",           simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 231, "gear/gear[3]/position-norm",              simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 240, "gear/gear[4]/compression-norm",           simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 241, "gear/gear[4]/position-norm",              simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
 
-	{ 300, "engines/engine[0]/n1",  simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 301, "engines/engine[0]/n2",  simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 302, "engines/engine[0]/rpm", simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 310, "engines/engine[1]/n1",  simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 311, "engines/engine[1]/n2",  simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 312, "engines/engine[1]/rpm", simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 320, "engines/engine[2]/n1",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 321, "engines/engine[2]/n2",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 322, "engines/engine[2]/rpm", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 330, "engines/engine[3]/n1",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 331, "engines/engine[3]/n2",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 332, "engines/engine[3]/rpm", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 340, "engines/engine[4]/n1",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 341, "engines/engine[4]/n2",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 342, "engines/engine[4]/rpm", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 350, "engines/engine[5]/n1",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 351, "engines/engine[5]/n2",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 352, "engines/engine[5]/rpm", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 360, "engines/engine[6]/n1",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 361, "engines/engine[6]/n2",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 362, "engines/engine[6]/rpm", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 370, "engines/engine[7]/n1",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 371, "engines/engine[7]/n2",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 372, "engines/engine[7]/rpm", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 380, "engines/engine[8]/n1",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 381, "engines/engine[8]/n2",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 382, "engines/engine[8]/rpm", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 390, "engines/engine[9]/n1",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 391, "engines/engine[9]/n2",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 392, "engines/engine[9]/rpm", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
+	{ 300, "engines/engine[0]/n1",  simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 301, "engines/engine[0]/n2",  simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 302, "engines/engine[0]/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 310, "engines/engine[1]/n1",  simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 311, "engines/engine[1]/n2",  simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 312, "engines/engine[1]/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 320, "engines/engine[2]/n1",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 321, "engines/engine[2]/n2",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 322, "engines/engine[2]/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 330, "engines/engine[3]/n1",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 331, "engines/engine[3]/n2",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 332, "engines/engine[3]/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 340, "engines/engine[4]/n1",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 341, "engines/engine[4]/n2",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 342, "engines/engine[4]/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 350, "engines/engine[5]/n1",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 351, "engines/engine[5]/n2",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 352, "engines/engine[5]/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 360, "engines/engine[6]/n1",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 361, "engines/engine[6]/n2",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 362, "engines/engine[6]/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 370, "engines/engine[7]/n1",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 371, "engines/engine[7]/n2",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 372, "engines/engine[7]/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 380, "engines/engine[8]/n1",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 381, "engines/engine[8]/n2",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 382, "engines/engine[8]/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 390, "engines/engine[9]/n1",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 391, "engines/engine[9]/n2",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 392, "engines/engine[9]/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
 
-	{ 800, "rotors/main/rpm", simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 801, "rotors/tail/rpm", simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 810, "rotors/main/blade[0]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 811, "rotors/main/blade[1]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 812, "rotors/main/blade[2]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 813, "rotors/main/blade[3]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 820, "rotors/main/blade[0]/flap-deg",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 821, "rotors/main/blade[1]/flap-deg",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 822, "rotors/main/blade[2]/flap-deg",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 823, "rotors/main/blade[3]/flap-deg",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 830, "rotors/tail/blade[0]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 831, "rotors/tail/blade[1]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
+	{ 800, "rotors/main/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 801, "rotors/tail/rpm", simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 810, "rotors/main/blade[0]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 811, "rotors/main/blade[1]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 812, "rotors/main/blade[2]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 813, "rotors/main/blade[3]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 820, "rotors/main/blade[0]/flap-deg",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 821, "rotors/main/blade[1]/flap-deg",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 822, "rotors/main/blade[2]/flap-deg",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 823, "rotors/main/blade[3]/flap-deg",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 830, "rotors/tail/blade[0]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 831, "rotors/tail/blade[1]/position-deg",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
 
-	{ 900, "sim/hitches/aerotow/tow/length",                       simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 901, "sim/hitches/aerotow/tow/elastic-constant",             simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 902, "sim/hitches/aerotow/tow/weight-per-m-kg-m",            simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 903, "sim/hitches/aerotow/tow/dist",                         simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 904, "sim/hitches/aerotow/tow/connected-to-property-node",   simgear::props::BOOL, TT_BOOL,  1, NULL },
-	{ 905, "sim/hitches/aerotow/tow/connected-to-ai-or-mp-callsign",   simgear::props::STRING, TT_STRING,  1, NULL },
-	{ 906, "sim/hitches/aerotow/tow/brake-force",                  simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 907, "sim/hitches/aerotow/tow/end-force-x",                  simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 908, "sim/hitches/aerotow/tow/end-force-y",                  simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 909, "sim/hitches/aerotow/tow/end-force-z",                  simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 930, "sim/hitches/aerotow/is-slave",                         simgear::props::BOOL, TT_BOOL,  1, NULL },
-	{ 931, "sim/hitches/aerotow/speed-in-tow-direction",           simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 932, "sim/hitches/aerotow/open",                             simgear::props::BOOL, TT_BOOL,  1, NULL },
-	{ 933, "sim/hitches/aerotow/local-pos-x",                      simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 934, "sim/hitches/aerotow/local-pos-y",                      simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 935, "sim/hitches/aerotow/local-pos-z",                      simgear::props::FLOAT, TT_FLOAT,  1, NULL },
+	{ 900, "sim/hitches/aerotow/tow/length",                       simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 901, "sim/hitches/aerotow/tow/elastic-constant",             simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 902, "sim/hitches/aerotow/tow/weight-per-m-kg-m",            simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 903, "sim/hitches/aerotow/tow/dist",                         simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 904, "sim/hitches/aerotow/tow/connected-to-property-node",   simgear::props::BOOL, TT_BOOL,  V1_1_PROP_ID, NULL },
+	{ 905, "sim/hitches/aerotow/tow/connected-to-ai-or-mp-callsign",   simgear::props::STRING, TT_STRING,  V1_1_PROP_ID, NULL },
+	{ 906, "sim/hitches/aerotow/tow/brake-force",                  simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 907, "sim/hitches/aerotow/tow/end-force-x",                  simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 908, "sim/hitches/aerotow/tow/end-force-y",                  simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 909, "sim/hitches/aerotow/tow/end-force-z",                  simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 930, "sim/hitches/aerotow/is-slave",                         simgear::props::BOOL, TT_BOOL,  V1_1_PROP_ID, NULL },
+	{ 931, "sim/hitches/aerotow/speed-in-tow-direction",           simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 932, "sim/hitches/aerotow/open",                             simgear::props::BOOL, TT_BOOL,  V1_1_PROP_ID, NULL },
+	{ 933, "sim/hitches/aerotow/local-pos-x",                      simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 934, "sim/hitches/aerotow/local-pos-y",                      simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 935, "sim/hitches/aerotow/local-pos-z",                      simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
 
-	{ 1001, "controls/flight/slats",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 1002, "controls/flight/speedbrake",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 1003, "controls/flight/spoilers",  simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 1004, "controls/gear/gear-down",  simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 1005, "controls/lighting/nav-lights",  simgear::props::FLOAT, TT_FLOAT,  1, NULL },
-	{ 1006, "controls/armament/station[0]/jettison-all",  simgear::props::BOOL, TT_BOOL,  2, NULL },
+	{ 1001, "controls/flight/slats",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 1002, "controls/flight/speedbrake",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 1003, "controls/flight/spoilers",  simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 1004, "controls/gear/gear-down",  simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 1005, "controls/lighting/nav-lights",  simgear::props::FLOAT, TT_FLOAT,  V1_1_PROP_ID, NULL },
+	{ 1006, "controls/armament/station[0]/jettison-all",  simgear::props::BOOL, TT_BOOL,  V1_1_2_PROP_ID, NULL },
 
-	{ 1100, "sim/model/variant", simgear::props::INT, TT_INT,  2, NULL },
-	{ 1101, "sim/model/livery/file", simgear::props::STRING, TT_STRING,  2, NULL },
+	{ 1100, "sim/model/variant", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 1101, "sim/model/livery/file", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
 
-	{ 1200, "environment/wildfire/data", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 1201, "environment/contrail", simgear::props::INT, TT_INT,  2, NULL },
+	{ 1200, "environment/wildfire/data", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 1201, "environment/contrail", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
 
-	{ 1300, "tanker", simgear::props::INT, TT_INT,  1, NULL },
+	{ 1300, "tanker", simgear::props::INT, TT_INT,  V1_1_PROP_ID, NULL },
 
-	{ 1400, "scenery/events", simgear::props::STRING, TT_STRING,  2, NULL },
+	{ 1400, "scenery/events", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
 
-	{ 1500, "instrumentation/transponder/transmitted-id", simgear::props::INT, TT_INT,  1, NULL },
-	{ 1501, "instrumentation/transponder/altitude", simgear::props::INT, TT_INT,  1, NULL },
-	{ 1502, "instrumentation/transponder/ident", simgear::props::BOOL, TT_BOOL,  1, NULL },
-	{ 1503, "instrumentation/transponder/inputs/mode", simgear::props::INT, TT_INT,  1, NULL },
+	{ 1500, "instrumentation/transponder/transmitted-id", simgear::props::INT, TT_INT,  V1_1_PROP_ID, NULL },
+	{ 1501, "instrumentation/transponder/altitude", simgear::props::INT, TT_INT,  V1_1_PROP_ID, NULL },
+	{ 1502, "instrumentation/transponder/ident", simgear::props::BOOL, TT_BOOL,  V1_1_PROP_ID, NULL },
+	{ 1503, "instrumentation/transponder/inputs/mode", simgear::props::INT, TT_INT,  V1_1_PROP_ID, NULL },
 
-	{ 10001, "sim/multiplay/transmission-freq-hz",  simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10002, "sim/multiplay/chat",  simgear::props::STRING, TT_STRING,  1, NULL },
+	{ 10001, "sim/multiplay/transmission-freq-hz",  simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10002, "sim/multiplay/chat",  simgear::props::STRING, TT_STRING,  V1_1_PROP_ID, NULL },
 
-	{ 10100, "sim/multiplay/generic/string[0]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10101, "sim/multiplay/generic/string[1]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10102, "sim/multiplay/generic/string[2]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10103, "sim/multiplay/generic/string[3]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10104, "sim/multiplay/generic/string[4]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10105, "sim/multiplay/generic/string[5]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10106, "sim/multiplay/generic/string[6]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10107, "sim/multiplay/generic/string[7]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10108, "sim/multiplay/generic/string[8]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10109, "sim/multiplay/generic/string[9]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10110, "sim/multiplay/generic/string[10]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10111, "sim/multiplay/generic/string[11]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10112, "sim/multiplay/generic/string[12]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10113, "sim/multiplay/generic/string[13]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10114, "sim/multiplay/generic/string[14]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10115, "sim/multiplay/generic/string[15]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10116, "sim/multiplay/generic/string[16]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10117, "sim/multiplay/generic/string[17]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10118, "sim/multiplay/generic/string[18]", simgear::props::STRING, TT_STRING,  2, NULL },
-	{ 10119, "sim/multiplay/generic/string[19]", simgear::props::STRING, TT_STRING,  2, NULL },
+	{ 10100, "sim/multiplay/generic/string[0]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10101, "sim/multiplay/generic/string[1]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10102, "sim/multiplay/generic/string[2]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10103, "sim/multiplay/generic/string[3]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10104, "sim/multiplay/generic/string[4]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10105, "sim/multiplay/generic/string[5]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10106, "sim/multiplay/generic/string[6]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10107, "sim/multiplay/generic/string[7]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10108, "sim/multiplay/generic/string[8]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10109, "sim/multiplay/generic/string[9]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10110, "sim/multiplay/generic/string[10]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10111, "sim/multiplay/generic/string[11]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10112, "sim/multiplay/generic/string[12]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10113, "sim/multiplay/generic/string[13]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10114, "sim/multiplay/generic/string[14]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10115, "sim/multiplay/generic/string[15]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10116, "sim/multiplay/generic/string[16]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10117, "sim/multiplay/generic/string[17]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10118, "sim/multiplay/generic/string[18]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
+	{ 10119, "sim/multiplay/generic/string[19]", simgear::props::STRING, TT_STRING,  V1_1_2_PROP_ID, NULL },
 
-	{ 10200, "sim/multiplay/generic/float[0]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10201, "sim/multiplay/generic/float[1]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10202, "sim/multiplay/generic/float[2]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10203, "sim/multiplay/generic/float[3]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10204, "sim/multiplay/generic/float[4]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10205, "sim/multiplay/generic/float[5]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10206, "sim/multiplay/generic/float[6]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10207, "sim/multiplay/generic/float[7]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10208, "sim/multiplay/generic/float[8]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10209, "sim/multiplay/generic/float[9]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10210, "sim/multiplay/generic/float[10]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10211, "sim/multiplay/generic/float[11]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10212, "sim/multiplay/generic/float[12]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10213, "sim/multiplay/generic/float[13]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10214, "sim/multiplay/generic/float[14]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10215, "sim/multiplay/generic/float[15]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10216, "sim/multiplay/generic/float[16]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10217, "sim/multiplay/generic/float[17]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10218, "sim/multiplay/generic/float[18]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
-	{ 10219, "sim/multiplay/generic/float[19]", simgear::props::FLOAT, TT_FLOAT,  2, NULL },
+	{ 10200, "sim/multiplay/generic/float[0]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10201, "sim/multiplay/generic/float[1]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10202, "sim/multiplay/generic/float[2]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10203, "sim/multiplay/generic/float[3]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10204, "sim/multiplay/generic/float[4]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10205, "sim/multiplay/generic/float[5]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10206, "sim/multiplay/generic/float[6]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10207, "sim/multiplay/generic/float[7]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10208, "sim/multiplay/generic/float[8]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10209, "sim/multiplay/generic/float[9]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10210, "sim/multiplay/generic/float[10]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10211, "sim/multiplay/generic/float[11]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10212, "sim/multiplay/generic/float[12]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10213, "sim/multiplay/generic/float[13]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10214, "sim/multiplay/generic/float[14]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10215, "sim/multiplay/generic/float[15]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10216, "sim/multiplay/generic/float[16]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10217, "sim/multiplay/generic/float[17]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10218, "sim/multiplay/generic/float[18]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
+	{ 10219, "sim/multiplay/generic/float[19]", simgear::props::FLOAT, TT_FLOAT,  V1_1_2_PROP_ID, NULL },
 
-	{ 10220, "sim/multiplay/generic/float[20]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10221, "sim/multiplay/generic/float[21]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10222, "sim/multiplay/generic/float[22]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10223, "sim/multiplay/generic/float[23]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10224, "sim/multiplay/generic/float[24]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10225, "sim/multiplay/generic/float[25]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10226, "sim/multiplay/generic/float[26]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10227, "sim/multiplay/generic/float[27]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10228, "sim/multiplay/generic/float[28]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10229, "sim/multiplay/generic/float[29]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10230, "sim/multiplay/generic/float[30]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10231, "sim/multiplay/generic/float[31]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10232, "sim/multiplay/generic/float[32]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10233, "sim/multiplay/generic/float[33]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10234, "sim/multiplay/generic/float[34]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10235, "sim/multiplay/generic/float[35]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10236, "sim/multiplay/generic/float[36]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10237, "sim/multiplay/generic/float[37]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10238, "sim/multiplay/generic/float[38]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
-	{ 10239, "sim/multiplay/generic/float[39]", simgear::props::FLOAT, TT_FLOAT ,  2, NULL },
+	{ 10220, "sim/multiplay/generic/float[20]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10221, "sim/multiplay/generic/float[21]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10222, "sim/multiplay/generic/float[22]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10223, "sim/multiplay/generic/float[23]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10224, "sim/multiplay/generic/float[24]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10225, "sim/multiplay/generic/float[25]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10226, "sim/multiplay/generic/float[26]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10227, "sim/multiplay/generic/float[27]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10228, "sim/multiplay/generic/float[28]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10229, "sim/multiplay/generic/float[29]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10230, "sim/multiplay/generic/float[30]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10231, "sim/multiplay/generic/float[31]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10232, "sim/multiplay/generic/float[32]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10233, "sim/multiplay/generic/float[33]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10234, "sim/multiplay/generic/float[34]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10235, "sim/multiplay/generic/float[35]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10236, "sim/multiplay/generic/float[36]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10237, "sim/multiplay/generic/float[37]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10238, "sim/multiplay/generic/float[38]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
+	{ 10239, "sim/multiplay/generic/float[39]", simgear::props::FLOAT, TT_FLOAT ,  V1_1_2_PROP_ID, NULL },
 
-	{ 10300, "sim/multiplay/generic/int[0]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10301, "sim/multiplay/generic/int[1]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10302, "sim/multiplay/generic/int[2]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10303, "sim/multiplay/generic/int[3]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10304, "sim/multiplay/generic/int[4]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10305, "sim/multiplay/generic/int[5]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10306, "sim/multiplay/generic/int[6]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10307, "sim/multiplay/generic/int[7]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10308, "sim/multiplay/generic/int[8]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10309, "sim/multiplay/generic/int[9]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10310, "sim/multiplay/generic/int[10]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10311, "sim/multiplay/generic/int[11]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10312, "sim/multiplay/generic/int[12]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10313, "sim/multiplay/generic/int[13]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10314, "sim/multiplay/generic/int[14]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10315, "sim/multiplay/generic/int[15]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10316, "sim/multiplay/generic/int[16]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10317, "sim/multiplay/generic/int[17]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10318, "sim/multiplay/generic/int[18]", simgear::props::INT, TT_INT,  2, NULL },
-	{ 10319, "sim/multiplay/generic/int[19]", simgear::props::INT, TT_INT,  2, NULL },
+	{ 10300, "sim/multiplay/generic/int[0]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10301, "sim/multiplay/generic/int[1]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10302, "sim/multiplay/generic/int[2]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10303, "sim/multiplay/generic/int[3]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10304, "sim/multiplay/generic/int[4]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10305, "sim/multiplay/generic/int[5]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10306, "sim/multiplay/generic/int[6]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10307, "sim/multiplay/generic/int[7]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10308, "sim/multiplay/generic/int[8]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10309, "sim/multiplay/generic/int[9]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10310, "sim/multiplay/generic/int[10]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10311, "sim/multiplay/generic/int[11]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10312, "sim/multiplay/generic/int[12]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10313, "sim/multiplay/generic/int[13]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10314, "sim/multiplay/generic/int[14]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10315, "sim/multiplay/generic/int[15]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10316, "sim/multiplay/generic/int[16]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10317, "sim/multiplay/generic/int[17]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10318, "sim/multiplay/generic/int[18]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
+	{ 10319, "sim/multiplay/generic/int[19]", simgear::props::INT, TT_INT,  V1_1_2_PROP_ID, NULL },
 
-	{ 10320, "sim/multiplay/generic/int[20]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10321, "sim/multiplay/generic/int[21]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10322, "sim/multiplay/generic/int[22]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10323, "sim/multiplay/generic/int[23]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10324, "sim/multiplay/generic/int[24]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10325, "sim/multiplay/generic/int[25]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10326, "sim/multiplay/generic/int[26]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10327, "sim/multiplay/generic/int[27]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10328, "sim/multiplay/generic/int[28]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10329, "sim/multiplay/generic/int[29]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10320, "sim/multiplay/generic/int[20]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10321, "sim/multiplay/generic/int[21]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10322, "sim/multiplay/generic/int[22]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10323, "sim/multiplay/generic/int[23]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10324, "sim/multiplay/generic/int[24]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10325, "sim/multiplay/generic/int[25]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10326, "sim/multiplay/generic/int[26]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10327, "sim/multiplay/generic/int[27]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10328, "sim/multiplay/generic/int[28]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10329, "sim/multiplay/generic/int[29]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10330, "sim/multiplay/generic/int[30]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10331, "sim/multiplay/generic/int[31]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10332, "sim/multiplay/generic/int[32]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10333, "sim/multiplay/generic/int[33]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10334, "sim/multiplay/generic/int[34]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10335, "sim/multiplay/generic/int[35]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10336, "sim/multiplay/generic/int[36]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10337, "sim/multiplay/generic/int[37]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10338, "sim/multiplay/generic/int[38]", simgear::props::INT, TT_INT ,  2, NULL },
-	{ 10339, "sim/multiplay/generic/int[39]", simgear::props::INT, TT_INT ,  2, NULL },
+	{ 10320, "sim/multiplay/generic/int[20]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10321, "sim/multiplay/generic/int[21]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10322, "sim/multiplay/generic/int[22]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10323, "sim/multiplay/generic/int[23]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10324, "sim/multiplay/generic/int[24]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10325, "sim/multiplay/generic/int[25]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10326, "sim/multiplay/generic/int[26]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10327, "sim/multiplay/generic/int[27]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10328, "sim/multiplay/generic/int[28]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10329, "sim/multiplay/generic/int[29]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10320, "sim/multiplay/generic/int[20]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10321, "sim/multiplay/generic/int[21]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10322, "sim/multiplay/generic/int[22]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10323, "sim/multiplay/generic/int[23]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10324, "sim/multiplay/generic/int[24]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10325, "sim/multiplay/generic/int[25]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10326, "sim/multiplay/generic/int[26]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10327, "sim/multiplay/generic/int[27]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10328, "sim/multiplay/generic/int[28]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10329, "sim/multiplay/generic/int[29]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10330, "sim/multiplay/generic/int[30]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10331, "sim/multiplay/generic/int[31]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10332, "sim/multiplay/generic/int[32]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10333, "sim/multiplay/generic/int[33]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10334, "sim/multiplay/generic/int[34]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10335, "sim/multiplay/generic/int[35]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10336, "sim/multiplay/generic/int[36]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10337, "sim/multiplay/generic/int[37]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10338, "sim/multiplay/generic/int[38]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
+	{ 10339, "sim/multiplay/generic/int[39]", simgear::props::INT, TT_INT ,  V1_1_2_PROP_ID, NULL },
 
 
-	{ 12100, "sim/multiplay/generic/string[20]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12101, "sim/multiplay/generic/string[21]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12102, "sim/multiplay/generic/string[22]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12103, "sim/multiplay/generic/string[23]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12104, "sim/multiplay/generic/string[24]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12105, "sim/multiplay/generic/string[25]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12106, "sim/multiplay/generic/string[26]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12107, "sim/multiplay/generic/string[27]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12108, "sim/multiplay/generic/string[28]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12109, "sim/multiplay/generic/string[29]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12110, "sim/multiplay/generic/string[20]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12111, "sim/multiplay/generic/string[31]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12112, "sim/multiplay/generic/string[32]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12113, "sim/multiplay/generic/string[33]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12114, "sim/multiplay/generic/string[34]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12115, "sim/multiplay/generic/string[35]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12116, "sim/multiplay/generic/string[36]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12117, "sim/multiplay/generic/string[37]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12118, "sim/multiplay/generic/string[38]", simgear::props::STRING, TT_STRING ,  2, NULL },
-	{ 12119, "sim/multiplay/generic/string[39]", simgear::props::STRING, TT_STRING ,  2, NULL },
+	/*{ 12100, "sim/multiplay/generic/string[20]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12101, "sim/multiplay/generic/string[21]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12102, "sim/multiplay/generic/string[22]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12103, "sim/multiplay/generic/string[23]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12104, "sim/multiplay/generic/string[24]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12105, "sim/multiplay/generic/string[25]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12106, "sim/multiplay/generic/string[26]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12107, "sim/multiplay/generic/string[27]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12108, "sim/multiplay/generic/string[28]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12109, "sim/multiplay/generic/string[29]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12110, "sim/multiplay/generic/string[20]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12111, "sim/multiplay/generic/string[31]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12112, "sim/multiplay/generic/string[32]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12113, "sim/multiplay/generic/string[33]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12114, "sim/multiplay/generic/string[34]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12115, "sim/multiplay/generic/string[35]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12116, "sim/multiplay/generic/string[36]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12117, "sim/multiplay/generic/string[37]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12118, "sim/multiplay/generic/string[38]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },
+	{ 12119, "sim/multiplay/generic/string[39]", simgear::props::STRING, TT_STRING ,  V1_1_2_PROP_ID, NULL },*/
 };
 const int MAX_PARTITIONS = 2;
 const int NEW_STRING_ENCODING_START = 12000; // anything below this uses the old string encoding scheme
@@ -464,9 +479,16 @@ public:
   {
     _multiplay->setPropertiesChanged();
   }
+  virtual void valueChanged(SGPropertyNode * node)
+  {
+	  if (node->getNameString() == "protocol-version") {
 
+		  _multiplay->setProtocolToUse(node->getIntValue());
+		  SG_LOG(SG_NETWORK, SG_INFO, "Switched to procotol version: " << _multiplay->getProtocolToUse());
+	  }
+  }
 private:
-  FGMultiplayMgr* _multiplay;
+	FGMultiplayMgr* _multiplay;
 };
 #ifndef HEXDUMP_COLS
 #define HEXDUMP_COLS 16
@@ -752,7 +774,8 @@ FGMultiplayMgr::init (void)
   mPropertiesChanged = true;
   mListener = new MPPropertyListener(this);
   globals->get_props()->addChangeListener(mListener, false);
-  
+  fgGetNode("/sim/multiplay/protocol-version", true)->addChangeListener(mListener, true);
+
   fgSetBool("/sim/multiplay/online", true);
   mInitialised = true;
 
@@ -983,12 +1006,12 @@ FGMultiplayMgr::SendMyPosition(const FGExternalMotionData& motionInfo)
 
 	  xdr_data_t* msgEnd = msgBuf.propsEnd();
 	  int previous_partitions_len = 0;
-	  for (int partition = 1; partition <= MAX_PARTITIONS; partition++)
+	  for (int partition = 1; partition <= mProtocolVersion; partition++)
 	  {
 		  std::vector<FGPropertyData*>::const_iterator it = motionInfo.properties.begin();
 		  while (it != motionInfo.properties.end()) {
 			  const struct IdPropertyList* propDef = mPropertyDefinition[(*it)->id];
-			  if (propDef->version == partition)
+			  if (propDef->version == partition || propDef->version > mProtocolVersion)
 			  {
 				  if (ptr + 2 >= msgEnd)
 				  {
diff --git a/src/MultiPlayer/multiplaymgr.hxx b/src/MultiPlayer/multiplaymgr.hxx
index 74c062245..acad23ac5 100644
--- a/src/MultiPlayer/multiplaymgr.hxx
+++ b/src/MultiPlayer/multiplaymgr.hxx
@@ -31,6 +31,8 @@
 
 #define MULTIPLAYTXMGR_HID "$Id$"
 
+const int MIN_MP_PROTOCOL_VERSION = 1;
+const int MAX_MP_PROTOCOL_VERSION = 2;
 
 #include <string>
 #include <vector>
@@ -70,7 +72,18 @@ private:
   {
     mPropertiesChanged = true;
   }
-  
+  int getProtocolToUse()
+  {
+	  return mProtocolVersion;
+  }
+  void setProtocolToUse(int protocolVersion)
+  {
+	  if (protocolVersion >= MIN_MP_PROTOCOL_VERSION && protocolVersion <= MAX_MP_PROTOCOL_VERSION)
+		  mProtocolVersion = protocolVersion;
+	  else
+		  mProtocolVersion = MIN_MP_PROTOCOL_VERSION;
+  }
+
   void findProperties();
   
   void Send();
@@ -105,6 +118,8 @@ private:
   PropertyDefinitionMap mPropertyDefinition;
 
   bool mPropertiesChanged;
+  int mProtocolVersion;
+
   MPPropertyListener* mListener;
   
   double mDt; // reciprocal of /sim/multiplay/tx-rate-hz